在程序中,将中断0设置为下降沿触发:
org 0000h
ajmp start
org 0003h ; 外部中断地址入口
ljmp int_0 ; 转到真正的处理程序
org 30h
start: mov sp, #5fh ; 初始化堆栈
mov p0, #0ffh ; 灯全灭
mov p3, #0ffh ; P3口置高电平
setb IT0 ; 下降沿触发
setb EA ; 开总中断
setb EX0 ; 开外中断0
ljmp $ ; 原地踏步等待中断
int_0: ; 中断服务程序
cpl P0.0 ; 取反
reti
end
★ 其中原地踏步等待中断处在实际应用中可以是单片机的工作部分,当中断触发后,停下这部分工作进行中断处理,处理完后再继续原来的工作,这正是中断的功能。
编译下载到板子上验证,得到预计结果: 键按下时,P0.0口的LED亮灭交替(由于此板上键并非按上图的接法设计,故在实测时用导线连接P3.2口和地模拟上述键按下)。用Proteus仿真结果如下:
★ 对中断而言,下降沿触发和低电平触发两种方式是有所区别的(IT0=0是低电平触发,IT0=1是下降沿触发)。做一下这个实验会发现有如下两个现象:
<1> 将"setb IT0"改为"clr IT0",即改用低电平触发,按住按钮后LED一定是亮的;而用下降沿触发,按下按钮后LED可能是亮的,也可能是灭的。
<2> 用低电平触发,如果一直按着按钮不放,会发现LED的亮度会有所下降。
这两个现象说明了这样一个问题,低电平触发是可重复的。即如果外中断引脚上一直保持低电平,那么在产生一次中断返回之后,马上就会产生第二次中断,接着是第三次……如此一直到低电平消失为止;而下降沿触发没有这个问题,一次中断产生后,即使外部中断引脚上仍保持抵电平,也不会引起重复中断。实际应用中如采用低电平触发方式,外部电路要采用可以及时撤去该引脚上低电平的设计方式。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』