一段定时显示程序
void Time0()interrupt 1
{
unsigned idata i =1;
TR0 = 0;
TH0 = 0xB8; //20ms定时
TL0 = 0x00;
i++;
if(i==500)//10s
{
timing = 1;
}
TR0 = 1;
}
void main()
{
timing=0;
delayms(50);
VFD_init();
VFD_string(LOADING);//显示字符串
delayms(50);
TMOD = 0x01;
TH0 = 0xB8;
TL0 = 0x00;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1)
{
if(timing == 1)
disp();//显示函数
}
}
请问哪里有问题,这个一直停在显示字符串,不会进到显示函数里面。
void Time0()interrupt 1
{
unsigned idata i =1; // 局部变量,每次进入ISR它会被初始化一次,变成1
TR0 = 0;
TH0 = 0xB8; //20ms定时
TL0 = 0x00;
i++;
if(i==500)//10s .....所以它永远到不了500(总是2)
{
timing = 1;
}
TR0 = 1;
}
并且,一旦从ISR返回,你的i就结束的生存期,它的存储可能会被分配给其它变量
对。首先是变量i的生存周期问题,可以把它声明成静态变量,即static unsigned idata i =1;
另外,timing 要声明成volatile