at89s52单片机c语言编程,定时中断就是不工作,下面附代码,实现在一个数码管显示0-9,间隔时间1s

#include<reg52.h> //52单片机头文件
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e} ;
uchar count;
uchar tt=0;
void main() //主函数
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-1000)/256; //高四位赋初值
TL0=(65536-1000)%256; //低四位赋初值
ET0=1;//开定时器0中断
EA=1;//开总中断
TR0=1;//启动定时器0
count = 0;
while(1);//等待中断产生
}
void timer0() interrupt 1
{
TH0=(65536-1000)/256; //高四位赋初值
TL0=(65536-1000)%256; //低四位赋初值
P2 = 0xff;
P0= ~table[count] ; //数码管输出
P2= 0x7f;
tt++;
if(tt==1000) //到一秒输出数加一
{
tt=0;
count++;
if (count == 10) // 就显示一位
count = 0;
}
}

你tt定义错了,uchar 最大只有255,计算不到1000的,所以一直处在等待状态,定义的时候把uchar tt=0;改成uint tt=0;就可以了
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-23
可以把硬件图贴出来么?我觉得软件没问题啊。你是怎么判断出定时器不工作的? P2口的值是控制数码管的总开关么?求硬件图,这样方便分析啊。
相似回答