单片机定时器中断的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机定时器中断的问题相关的知识,希望对你有一定的参考价值。
voidT1_INT()interrupt
3
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
BEEP=-BEEP;
//根据高温还是低温警报设定不同延时间隔
if(L_LED==0)//L_LED一定是低温/高温显示,即L_LED==0是低温;==1是高温
//如果是低温时,看看t到没到150,如果没到直接返回
if(++t!=150)
return;
else
//L_LED==1,说明是高温,看看t到没到60,如果没到直接返回
if(++t!=60)
return;
\\低温时(L_LED==0),t==150说明是延时到了;或者高温时(L_LED==1),t==60说明延时到了。
t=0;//t清零
DelayMS(20);//延时
参考技术A 这个程序你要明白几个知识点
1、这个中断函数是每1毫秒(12M晶振下)执行一次。
2、return:执行return之后,整个函数返回了,return之后的代码不在执行。
看你的代码
beep=-beep;应该是个喇叭什么的吧,只要中断函数执行,喇叭就会响。
如果L_LED等于0的时候,t会自加到150,在没有达到150之前,都会运行return,所以,这段时间是不会运行t=0;DelayMS(20);的,所以这段时间里中断美毫秒执行一次,DEEP也就每毫秒取反,输出方波,驱动喇叭
同理
L_LED等于1的时候,也是一样的原理
当达到条件运行DelayMS(20);的时候,程序中断会再这里空耗20毫秒,这20毫秒时间里,DEEP没有输出方波,喇叭就不响了。
应该看懂了吧,好好想想,想不通再联系我 参考技术B if(++t!=150)
return;//t等于150否,不等于就结束中断函数
if(++t!=60)
return;//t
等于60否,不等于也跳出中断函数
假如你是12M晶振的
呵呵,其实就是低温报警延时150*1ms,高温报警60*1ms,报警声调是固定的嘛。
以上是关于单片机定时器中断的问题的主要内容,如果未能解决你的问题,请参考以下文章