各位大神新年好,TH0,TL0初始化是一定要放在while(1)里面吗?我在网上查一般是放while外面的,我写的也是放外面,但是出错了,如果放while(1)里面就是正确的,请问为什么?调试的时候发现TH0.TL0好像不会重置一样,就是if (b==50)下面的那段,如果放在中断函数里就是正确的,放主函数里是错的,假如把TH0.TL0初值改大了,比如1000,就是对的,请问一下是为什么?是因为什么错过了检测b==50的时间吗?
单片机源程序如下:
#include<reg52.h>
char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
int bai,shi,ge,b=0,temp=0;
sbit S1=P3^5;
void main()
{
TMOD=0x01;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
bai=temp/100;
shi=temp/10%10;
ge=temp%10;
P2=0xfe;
P0=table[bai]&0x7f;
P0=0xff;
P2=0xfd;
P0=table[shi];
P0=0xff;
P2=0xfb;
P0=table[ge];
P0=0xff;
if(b==50)
{
temp++;
b=0;
}
if(temp==999)
temp=0;
}
}
void Timer0() interrupt 1
{
TH0=(65536-200)/256;
TL0=(65536-200)%256;
b++;
}
|