打印
[51单片机]

求助大神们,定时器T0中断程序怎么不执行?

[复制链接]
1080|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
decy3323627|  楼主 | 2016-11-30 22:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code segcode[]={0xc0,0xf9,0xa4,0xb0,0x99,
                      0x92,0x82,0xf8,0x80,0x90};
uchar count;
uchar opcode=0;
void delay(uint num)
{
        uint i,j;
        for(i=0;i<num;i++)
                for(j=0;j<330;j++);
}
void main()
{
        TMOD=0x01;
        TH0=(65535-2000)/256;
        TL0=(65535-2000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {
                for(count=0;count<100;count++)
                {
                        delay(500);
                }
        }
       
}
void timer0() interrupt 1
{
        TH0=(65535-2000)/256;
        TL0=(65535-2000)%256;
        switch(opcode)
        {
                case 1:P1=0x01;
                       P3=segcode[count%10];
                           opcode=2;
                           break;
                case 2:P1=0x02;
                       P3=segcode[count/10];
                           opcode=1;
                           break;
        }       
}

相关帖子

沙发
上官梦舞| | 2016-12-1 08:47 | 只看该作者
一般我们进入中断要TR0=0; 出中断再开中断TR0=1;

使用特权

评论回复
板凳
上官梦舞| | 2016-12-1 08:48 | 只看该作者
这样来防止中断时间太短一直触发中断,不够处理中断中的程序。

使用特权

评论回复
地板
xyz549040622| | 2016-12-1 08:58 | 只看该作者
opcode=0;这是初始化的值,然后就一直没变的。
在中断中,你只case了opcode=1和=2的情况,这个根本不会执行到,所以就没反应了。

使用特权

评论回复
5
ningling_21| | 2016-12-1 10:24 | 只看该作者
楼上正解

使用特权

评论回复
6
chuangbao| | 2016-12-1 10:33 | 只看该作者
这程序,你想要干嘛?

使用特权

评论回复
7
baoren| | 2016-12-9 17:02 | 只看该作者
这个程序有什么用的?

使用特权

评论回复
8
2101419675| | 2016-12-11 11:03 | 只看该作者
可能是中断频繁触发!

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝