打印
[技术讨论]

STC 单片机定时中断不稳定

[复制链接]
48|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
情场探花|  楼主 | 2025-5-9 22:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC8G1A,用 T0 工作模式为“不可屏蔽中断的16位自动重载模式”,按说这个模式的中断间隔最稳定了。
代码如下:
        TMOD = 0x03;   // 设定 T0的工作模式
        AUXR = 0;// 设定 T0 为12 分频
        g_Cnt10ms = 0;
        TL0 = 0;       
        TH0 = 0XDC;  
        TR0=1;   //启动T0
        ET0 = 1;    //允许T0 的中断
        EA = 1;    //允许总中断


中断服务程序如下:
void TM0_Isr() interrupt 1   
{
        if (g_Cnt10ms <= 10000UL)
                g_Cnt10ms++;        //stop timing when it has been longer than 100s
}


主程序中,每当 g_Cnt10ms 超过 1000 就做一次动作,并将 g_Cnt10ms 清零。
反复尝试后发现:大部分动作都是 10s 做一次,但每隔4、5次,就会有一次只等了 7、8s,有时甚至会连续两次只等 7、8s。
如果改成:每当 g_Cnt10ms 超过 1500 就做一次动作。那么刚才说的 10s 就变成 15s,7、8s就变成12s左右。因此能断定确实是 T0 中断自身不稳定。
整个程序很简单,没有其它代码。
也怀疑过是引脚受干扰,导致 T0 把干扰当成了计数信号,额外多触发了中断。但是,TMOD 里已经设定了 T0 是定时器,不是计数器。
求启发,谢谢!


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

461

主题

1232

帖子

6

粉丝