
ATmega16单片机定时器停止不了
这个问题纠结我好长时间。前段时间想用ATmega16单片机的定时器1做个99秒倒计时的装置。发现时间到0后定时器关闭不了。用的8MHz晶振,数码管显示。编译器是iccav...
这个问题纠结我好长时间。前段时间想用ATmega16单片机的定时器1做个99秒倒计时的装置。发现时间到0后定时器关闭不了。用的8MHz晶振,数码管显示。编译器是iccavr v6.31a,程序中定义char time=99;来计时。定时器初始化函数如下:void T1_init(){ TCCR1B=0X04; TCNT1H=0X85; TCNT1L=0XED; TIMSK |= BIT(2); SREG |= BIT(7);}定时器的中断服务程序如下:#pragma interrupt_handler T1:9void T1(){ TCNT1H=0X85; TCNT1L=0XED; time--; if (time <= 0) TIMSK &= ~BIT(2);}这样发现时间到0后,定时器没能停止,不过继续显示的是乱码。如果把中断服务程序里判断时间是否为零的语句改成if (time ==0)定时器就可以正常停止。这是为啥啊?哪位大师指点一下小弟?
展开
2个回答
展开全部
atmega的单片机没有运行控制位,停止不了,不像51,可以给一个TR0=0就可以停止了!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询