打印
[51单片机]

诡异的单片机变慢现象?

[复制链接]
2139|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这是我做的一个项目,开始运行正常,后来突然就程序不运行了,百思不得其解,后来把一个LED程序烧写进去测试,发现单片机变慢了。
使用STC11F02E,通过定时器中断翻转LED,程序如下:
#include"reg51.h"

#define uchar unsigned char
sbit FMQ =P3^5;
sbit LED = P3^7;
void timer0_init()
{
        TMOD=0x21;                  //定时器1工作方式2  定时器0 工作方式1   
        TH0=(65536-50000)/256;                //定时50ms                                                                         
        TL0=(65536-50000)%256;
        ET0=1;                                                //使能定时器0中断
        EA=1;                                                //开启总中断
        TR0=1;                                                //启动定时器0
}
void main()
{
        FMQ = 0;
        timer0_init();
        while(1)
        {
                ;
        }
}
void timer0() interrupt 1
{               
        uchar times;                                                                                      
        TH0=(65536-50000)/256;                                                                                         
        TL0=(65536-50000)%256;
        times++;
        if(times==20)         
        {
                LED = ~LED;
        }
}

程序运行的结果是LED近10秒才翻转一次,这个太奇怪了。

有经验的来看看!

相关帖子

沙发
电子无聊大神|  楼主 | 2014-5-8 20:14 | 只看该作者
晶振用示波器测试过确实是11.0592MHZ

使用特权

评论回复
板凳
autopccopy| | 2014-5-8 20:18 | 只看该作者
换另一片芯片试试,如果还是“慢”,则为程序问题!

使用特权

评论回复
地板
电子无聊大神|  楼主 | 2014-5-8 20:47 | 只看该作者
autopccopy 发表于 2014-5-8 20:18
换另一片芯片试试,如果还是“慢”,则为程序问题!

刚刚换了一片,发现更慢了,20秒左右翻转一次。。。
程序已经贴在上面了,很简单的程序应该不会出错。
迷惑啊,我单片机周围没有什么干扰的东西啊。未上电的24L01模块也会干扰吗

使用特权

评论回复
5
电子无聊大神|  楼主 | 2014-5-8 21:06 | 只看该作者
此贴已结,定时器中断里的times没有清零。。。
看到我的项目的错误是在其它地方了,真烦啊

使用特权

评论回复
6
lmx89| | 2014-5-8 22:34 | 只看该作者
一般的“诡异”都是自己疏漏造成的

使用特权

评论回复
7
ayb_ice| | 2014-5-9 07:56 | 只看该作者
void timer0() interrupt 1
{               
        uchar times;
        TR0 = 0;                                                                                      
        TH0=(65536-50000)/256;                                                                                          
        TL0=(65536-50000)%256;
        TR1 = 1;
        times++;
        if(times==20)         
        {
                LED = ~LED;
        }
}

使用特权

评论回复
8
叶伤| | 2014-5-9 09:56 | 只看该作者
经常会用这种方式去写,比如
if(!(TimeCount++))
{
    USER();
}
然后坐等它清零。。

忘记清零一般都是大意了,或者是把目光放逻辑结构上了,没注意。

使用特权

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

本版积分规则

个人签名:Android Developer !

12

主题

400

帖子

2

粉丝