STC12系列单片机的1T模式和12T模式


总结

1T 模式 (不分频) —— 1个系统基本时钟,执行一个动作;
12T模式(12分频) —— 12个系统基本时钟,执行一个动作;

因此,12T模式和1T模式执行相同次数的动作,12T模式需要12倍的时间,
即,两个模式执行一个动作需要的时间不同,12T模式需要更多的时间,
即,1T模式的工作速度比12T模式的工作速度快。


STC12系列单片机的1T模式和12T模式

STC12系列单片机的定时器有两种计数速率
STC12系列单片机的定时器有两种计数速率:
一种是12T模式,每12个时钟加1,与传统8051单片机相同;
另一种是1T模式,每个时钟加1,速度是传统8051单片机的12倍。
(STC12C5A60S2.pdf~P246)

在这里插入图片描述
12T —— 8051定时器速度,12分频,输出频率=SYSclk / (65536 - T0) / 2
1T —— 8051定时器速度的12倍,不分频,输出频率=SYSclk / 12 / (65536 - T0) / 2

(T0 高八位为TH0,低八位为TL0)



基本原理

【时钟周期】时钟周期也称为振荡周期,是计算机中最基本的、最小的时间单位。
【机器周期】完成一个基本操作所需要的时间称为机器周期。

【12T】传统8051单片机是每12 个时间周期,产生1个机器周期,完成1个基本操作。
【1T】STC12单片机则有另一种模式是,1个时间周期,产生1个机器周期,完成一个基本操作。


以定时器为例

【定时器工作原理】定时器从初值开始计数加1,一直加到溢出,产生定时器中断。

【定时器配置】现在有一个使用24MHz晶振的单片机,使用定时器0的16位工作模式,产生1000Hz的频率,即1ms产生一次中断。

【 1T 】TH0 = 0xA2; TL0 = 0x40; 定时器从A240计数到FFFF产生中断。
【12T】TH0 = 0xF8; TL0 = 0x30; 定时器从F830计数到FFFF产生中断。

定时器1T模式计数FFFF - A240 = 23999次产生中断,定时器12T模式计数FFFF - F830 = 1999次(1999*12=23999)产生中断,所以实际上计数产生中断的时间是一样的。

所以,
当定时器产生中断的频率相同时,定时器的初值是不一样的,并且1T模式的初值比12T的初值要小,加到溢出的值要更多,但是两者溢出产生中断的时间是相等的。
当初值相同时,1T更快产生中断,12T需要12倍的时间才能产生中断。
在这里插入图片描述



参考:《STC12C5A60S2.pdf》
声明:[笔记整理] 内容整理自网络及官方数据手册,版权归原作者所有,若有侵权请联系删除。

<think>好的,用户想比较51单片机定时器12T模式1T模式下的执行速度。首先,我需要回忆这两种模式的基本原理。根据引用[1],STC12系列单片机1T模式是每个机器周期只由1时钟周期组成,而12T模式则每个机器周期包含12时钟周期。这意味着在相同的晶振频率下,1T模式的机器周期更短,执行速度更快。 接下来,定时器的计数速度。引用[4]提到,在1T模式下,定时器每个时钟周期计数一次,而12T模式下每12时钟周期计数一次。因此,1T模式定时器计数频率是晶振频率的1倍,而12T则是1/12。例如,当晶振是22.1184MHz时,1T模式下的定时器每秒计数22,118,400次,而12T模式下则为1,843,200次,相差12倍。 然后,定时时间的计算。用户提供的例子中,1T模式下定时1ms需要装入的初值为65536 - 22118 = 43418,而12T模式则需要更小的初值,因为每个计数的时间更长。这进一步说明1T模式定时器溢出更快,执行速度更快。 还要考虑对程序执行的影响。1T模式下指令执行速度也是12倍于12T,所以整体程序运行更快。但需注意,定时器配置时要根据模式调整初值,如引用[3]提到的保持TH0TL0一致进行比较。 最后,应用场景。高速应用适合1T模式,而兼容传统设计可能用12T。需要确认用户的具体场景,比如是否需要高速定时或旧代码兼容。同时,提醒用户注意不同模式下的功耗差异,以及可能的代码调整需求。</think>### 51单片机定时器12T模式1T模式执行速度对比 #### 1. **核心原理对比** - **12T模式**:每个机器周期包含$12$个时钟周期,定时器每$12$个时钟周期计数一次[^1][^3]。 - **1T模式**:每个机器周期仅包含$1$个时钟周期,定时器每个时钟周期计数一次[^1][^4]。 #### 2. **计数速度公式** 假设晶振频率为$f_{\text{osc}}$: - **12T模式**:定时器计数频率为$f_{\text{count}} = \frac{f_{\text{osc}}}{12}$ - **1T模式**:定时器计数频率为$f_{\text{count}} = f_{\text{osc}}$ 例如,晶振频率为$22.1184\ \text{MHz}$时: - 12T模式:$f_{\text{count}} = 1.8432\ \text{MHz}$ - 1T模式:$f_{\text{count}} = 22.1184\ \text{MHz}$ **速度差为12倍**[^4]。 #### 3. **定时时间对比** 定时器初值计算采用公式: $$ \text{初值} = 65536 - \frac{t \cdot f_{\text{osc}}}{N} $$ 其中$t$为定时时间,$N=12$(12T模式)或$N=1$(1T模式)。 **示例(定时$1\ \text{ms}$)**: - **12T模式**:初值$= 65536 - \frac{0.001 \cdot 22,118,400}{12} = 65536 - 1843 = 63693$ - **1T模式**:初值$= 65536 - \frac{0.001 \cdot 22,118,400}{1} = 43418$ 此时1T模式需要更小的初值,说明其计数速度更快。 #### 4. **对程序执行的影响** - **指令执行速度**:1T模式下指令执行速度是12T模式的$12$倍[^3]。 - **定时器溢出频率**:1T模式定时器溢出速度更快,适合需要高频中断的场景(如PWM生成)。 #### 5. **应用建议** - **高速场景**:1T模式(如实时信号处理) - **兼容性场景**:12T模式(如移植传统51代码) #### 6. **配置注意事项** - 需通过寄存器`AUXR`设置1T/12T模式[^3]。 - 不同模式下需重新计算定时器初值[^4]。 ```c // 1T模式配置示例(STC单片机) AUXR |= 0x80; // 设置定时器0为1T模式 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值