说一下我的程序想实现的功能:单片机的定时器0工作在计数方式下,设置计数器的初值,使得但计数器的值达到5时产生一个计时器中断,终端服务子程序中,使P1口的灯闪烁。外部脉冲通过连接在T0的开关来实现。
#include
unsigned char count;
void main(void)
{
TMOD=0X05;
TH0=-5/256;//设置初始值 计数外部脉冲5次
TL0=-5%256;
EA=1;
ET0=1;
TR0=1;
P1=0;
while(1);
}
void Timer0(void) interrupt 1//计数5次脉冲后,进入中断函数
{ EA=0;
TH0=-5/256;//重新设置初始值 计数5次
TL0=-5%256;
P1=~P1;//计数5次脉冲后,将P1口的灯点亮
EA=1;
}
小弟是菜鸟,不知是何问题
Clear the timer interrupt flag in the ISR.
TH0=(unsigned int)-5/256;//设置初始值 计数外部脉冲5次
------
你的被截短了
这样的写法有点怪异,不如老老实实的写成这样
TH0 = (65536-5)/256;
用-5好像产生了诡异的事情,必须要转换成(unsigned int),转换成(int)都不行
-5/256,因为不够除,所以结果是0. 所以必须转换成(unsigned int)才行,我这样理解.
TH0=-5/256;//重新设置初始值 计数5次
TL0=-5%256;
这样的初值不行 都成0了