这段c程序可以通过编译,说明语法上没问题,但是在用keil做单步运行并观察有关变量时,发现:当程序进入mdelay函数后,每当delay到了936后(大约要运行十几分钟,我是用一样东西压在f11键上的),就会跳出mdelay函数,而且跳出后也不是跳到for下面的一句语句,而是跳出for循环体,跳到了程序的开始处,即unsigned char counter=0这一句,而且还发现这个现象:只要把中断屏蔽掉,delay就能一直减到0。请问这是为什么?
#include "reg51.h"
void timer0() interrupt 1
{ unsigned char tmp;
tmp++;
}
void mdelay(unsigned int delay) //延时程序
{ unsigned int i;
for(;delay>0;delay--)
{ for(i=0;i<124;i++)
{;}
}
}
void main()
{ unsigned char counter=0;
tmod=0x01;
th0=(65536-3000)/256;
tl0=(65536-3000)%256; //定时时间为3000个周期
tr0=1;
ea=1;
et0=1;
for(;;)
{ counter++;
mdelay(1000);
}
}