以下将以红外遥控解码为例讲一下C51外部中止(INT0)的编程亲自领会.
要对红外遥控信号解码那么就要运用C51外部中止,而且要设置成为负跳变沿触发方法.一般都会在主程序的开端外初始化中止(或将初始化中止程序写成函数,将这个函数放入主程序)如下:
void main(void)
{
………//其它程序
……….
}
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.