头像-305528

31ae57b916008ed8

个人成就

获得 0 次赞

帮助过0人

不到50行代码的51单片机的定时器0溢出速度有问题,大神求解

//晶振是11.0592Mhz #include <reg52.h>#define s8 signed char#define u8 unsigned char#define u16  unsigned intsbit D1 = P0^0;//位定义LED0u8 tmr0_value = 1000;//定时器0的初值void init_tmr0(void); int main(void){ init_tmr0();//初始化定时器0  while (1);  return 0;}void init_tmr0(void){ TMOD = 0x01;//设置tmr0为工作方式1 EA = 1;//开总中断 ET0 = 1;//开定时器0中断 TH1 = (65536 - tmr0_value) / 16;//得到高8位 TH0 = (65536 - tmr0_value) % 16;//得到低8位 TR0 = 1;//启动定时器0 return;}//注:定时器溢出后若没重装初值就重新从0开始计数(0—65535)//计数到65536就溢出!void tmr0(void) interrupt 1//定时器0中断{        TR0 = 0;//关闭定时器0 //重新给定时器0赋初值 TH1 = (65536 - tmr0_value) / 16; TH0 = (65536 - tmr0_value) % 16;        D1 = !D1;//D1的闪烁速度和tmr0_value的值不匹配     TR0 = 1;//启动定时器0     return;}        现象:人眼可以明显地看见D1的闪烁!        困惑:大家看红色代码tmr0_value = 1000,说明定时器0是大约1ms中断一次,对吧?那么即D1的亮灭状态是1ms变化一次,以这个速度人眼肯定不能看到灯的闪烁的,但我的灯的闪烁状态就很明显。这是为什么呢?大神解释,小弟很痛苦!!!