这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » STC单片机IAP15W4K58S4的定时器公式的理解

共4条 1/1 1 跳转至

STC单片机IAP15W4K58S4的定时器公式的理解

专家
2024-01-07 13:10:12   被打赏 50 分(兑奖)     打赏

我非常喜欢使用51系列单片机做一些程序开发,可能有人觉得都已经落伍的8位单片机,不值得用。对我来说,只要能快速开发出可用的应用就行,8位也好,32位也好,对于简单控制类应用而言,我觉得影响不大。51单片机中,我最喜欢用STC的。因此买了很多他家的51系列8位单片机。

这几天用来测试程序代码的时候,用了IAP15W4K58S4这款芯片。程序中使用TIME4的定时中断来产生计时时钟信号,按照手册中的说明:

图片1.png

如果主频使用1..0592MHz,那么在1T模式下,根据公式:

T4工作在1T模式(T4T3M.5/T4x12=1)时的输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2,设置定时参数为10240,那么得到的频率是:

11.0592 * 10^6/(65536-10240)/2=100Hz,也就是10ms的周期

主要测试代码如下:

// 工作频率为11.0592MHz
#define FOSC 11059200L
 
// 100Hz,10ms单位
#define Tfout        10240   // (65536-FOSC/200/2)   //1T
 
//========================================================================
// 函数: t4int
// 描述: Timer4中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2020-09-23
//========================================================================
void t4int(void) interrupt 20 {
    P45 = !P45;                     //将测试口取反,则闪烁频率=定时器产生的频率的一半
}
 
// 初始化定时器4,允许中断,10ms,100Hz方式
void initTimer4(void) {
    T4T3M |= 0x20;                  // 定时器4为1T模式
//  T4T3M &= ~0x20;                 // 定时器4为12T模式
 
    T4L = Tfout;                 // 初始化计时值
    T4H = Tfout >> 8;
    
    T4T3M |= 0x80;                  // 定时器4开始计时
    IE2 |= 0x40;                    // 开定时器4中断
    
    EA = 1;
}


按照这个参数,每隔10ms翻转P45的输出,那么P45的输出评率就是20ms,频率就是50Hz

我烧录时的参数设置如下:

图片2.png

选的是11.0592MHz烧录的,实测波形如下所示:

图片3.png

看没看出来,是不是有点对不上了。实测是P45的运行周期为10ms的脉冲。与预想不一致啊。

然后我有选择时钟频率为22.1184MHz来烧录,也就是主频加倍了。测出来的波形如下:

图片4.png

实际测量出来的周期为5mS。从简单的逻辑上讲,主频加倍了,定时周期减少一半,那不是很正常吗?没错,从这个逻辑讲,一点问题没有。但是,但是哈,我们别忘了,还是要用公式来验证,才是正常的方式。我们之前设置的定时初始化参数没变,还是10240,那么根据公式,

输出频率 = (SYSclk) / (65536-[RL_TH4, RL_TL4])/2

输出频率=22.1184 * 10^6 / (65536-10240)=200Hz,即定时周期为5mS。因此P45翻转的周期应该为10mS,和实际测量依旧是差了一倍。现在问题出在哪里呢?我觉得很可能是我理解错了,手册中说明的那个频率实际上指的就是定时周期时长乘以2以后的频率,这样的话,就能对得上了。因为定时器的工作模式是按照以下方式处理的。

1、在初始值的基础上,没一个工作频率的周期上累加一次

2、累加到寄存器溢出时,产生中断信号

因此,对于10240的初始值,65536-10240=55296,若工作频率为11.0592MHz(即时钟周期为1/11059200秒),则中断发生的周期为:

55296 * (1 / (11059200))=0.005秒,即5毫秒。这个是中断产生的周期,考虑到一个完整的脉冲信号需要翻转两次才能出现,所以要乘以2,才是完整脉冲的周期。这样的话,对11.0592MHz的工作频率,10240的初始值,产生的脉冲周期就是10mS,就是100Hz频率的信号,这样就对上了。

图片5.png

因此,在看手册的时候,不能想当然地去理解,一定要实践,才能得到正确的认知。





关键词: 菜鸟学单片机          IAP15W4K58S4     波特率    

院士
2024-01-07 16:22:00     打赏
2楼

51单片机这得啥家庭啊

现在的Cortex-M3功能就要丰富的多的


专家
2024-01-07 19:25:13     打赏
3楼

感谢分享


高工
2024-01-07 19:26:22     打赏
4楼

谢谢楼主的分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]