请问情况确实是这样吗?
我的测试程序如下:
#include
#define _TH0_TL0_ (65536 - 50000)
#define HI (_TH0_TL0_ / 256) //给高8位赋值
#define LO (_TH0_TL0_ % 256) //给低8位赋值
void Timer0Init(void) //初始化定时器0程序
{
TMOD = 0x01; //设置模式1 定时器0 工作方式0
TH0 =HI; //给TH0,TL0赋初始值
TL0 =LO;
TR0 = 1; //启动定时器0
ET0 = 1; //定时器中断开
EA = 1; //总中断开
}
void main(void)//主函数
{
int i;
Timer0Init();//初始化定时器0
while(1)
{
for(i=0;i<65525;i++);//没什么,等待而已,加这句话方便调试
}
}
void Timer0(void) interrupt 1 using 2 //定时器0中断服务程序
{
static unsigned char count = 0; //定义静态变量count
TR0 = 0; //以下调整出栈入栈的时间误差
TL0 += (_TH0_TL0_ + 9) % 256;
TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
TR0 = 1;
count++;
//TF0=1;
if(count>=20)
{;
P0=~P0;//P0接8个LED
}
else while(1);//打算让中断服务程序停在这里,等待定时器再次
//计满溢出(保存现场)进入中断,count++,直至20次后LED灯取反...
}
回一楼的朋友,如果计数器不溢出,我的中断服务程序会停留在while(1)循环里面。LED灯不会变化(有足够的延时让人眼分辨得出)。