×
单片机 > 单片机程序设计 > 详情

认识C51外部中断(INT0)

发布时间:2020-06-05 发布时间:
|
以下将以红外遥控解码为例讲一下C51外部中断(INT0)的编程亲身体会.

要对红外遥控信号解码那么就要使用C51外部中断,并且要设置成为负跳变沿触发方式.一般都会在主程序的开始外初始化中断(或将初始化中断程序写成函数,将这个函数放入主程序)如下:

void main(void)
{

  IT0=1;//负跳变触发
  EX0=1;//开外部中断0
  EA=1;//开总中断

 .........//其它程序

 ..........
}

void INT0() interrupt 0

{

 .......//红外信号解码程序

}

根据需要打开外部中断(EX0=1):

 以上程序在开始处便打开了外部中断.从理论上是完全正确的!但在现实情况中要看具体情况来打开外部中断!如果刚进入程序要处理其它事情暂时不能处理红外信号,那么EX0=1就不能写在主程序的开始处.而要写在适当的位置.否则开机有红外信号就会马上进入红外信号解码程序.

关闭外部中断(EX0=0):

 一但有中断信号,单片机将很快对中断产生响应进入中断程序.中断程序也就是红外信号解码程序.在中断程序中一定不要忘记关闭中断EX0=0!在按下遥控器的某个按键后,遥控器将一组一组的向外发送数据.即便是以最快的速度按下并放开按键,那么遥控已经发送出多组数据.单片机将多次解码,主程序如果比较庞大解码出来的数据还没有来的急使用就被下一个数据覆盖!关闭外部中断后,能有效的避免干扰和分清当前一组数据是否接收解码完毕!进入中断程序就将外部中断关闭,一组数据解码结束并经主程序采用后在开启外部中断.这才是一个完整的过程!这一个完整的过程是在没有干扰的情况下可正常完成.现实中干扰无时不在,一但无法正常解码出数据那么主程序也不采用,那么外部中断将不在打开.也就不在接受红外信号.这时在红外解码程序的最后加一判断,如果出错就在解码程序最后打开外部中断为下一次接受红外信号做好准备.

 

根据需要清空IE0(IE0=0):

 关闭中断后遥控器并没有停止发送信号,关闭中断后的红外信号将继续使IE0置位.IE0的状态根本不受EX0的控制.单片机执行了IT1=1语句,只要外部中断有负跳变沿IE0就会置位.如果我们只处理EX0=1(即中断开启后的信号)以后的信号.那么在红外信号解码程序退出前要对IE0清零.如果不清零,只要打开外部中断将会再次进入中断.这一次进入中断轻则是浪费时间,重则可能就会出错(进入中断后红外线解码采用查询法时表现的很明显).所以在EX0=1前面要加上一句IE0=0.




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
关于89C52单片机11.0592M晶振产生115200波特率的方法