关于51单片机的定时器的问题

chiwawa   2010-1-25 13:41 楼主
说一下我的程序想实现的功能:单片机的定时器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;
}

小弟是菜鸟,不知是何问题

回复评论 (6)

Clear the timer interrupt flag in the ISR.
点赞  2010-1-25 14:20
TH0=(unsigned int)-5/256;//设置初始值 计数外部脉冲5次

------
你的被截短了

这样的写法有点怪异,不如老老实实的写成这样
TH0 = (65536-5)/256;
点赞  2010-1-25 14:41
用-5好像产生了诡异的事情,必须要转换成(unsigned int),转换成(int)都不行
点赞  2010-1-25 14:43
-5/256,因为不够除,所以结果是0. 所以必须转换成(unsigned int)才行,我这样理解.
点赞  2010-1-25 14:52
  TH0=-5/256;//重新设置初始值 计数5次
  TL0=-5%256;

这样的初值不行  都成0了
点赞  2010-1-25 15:14
提示: 作者被禁止或删除 内容自动屏蔽
点赞  2010-1-25 19:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复