实验参考: 《单片机轻松入门》(周坚)
实验板: FB51A。(查看)
方法: 通过按键模拟外部中断的产生信号,用P0.0口接的LED作为中断响应。
实验现象:键按下时,P0.0口的LED亮灭交替。
电路如下:
在程序中,将中断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的亮度会有所下降。
这两个现象说明了这样一个问题,低电平触发是可重复的。即如果外中断引脚上一直保持低电平,那么在产生一次中断返回之后,马上就会产生第二次中断,接着是第三次……如此一直到低电平消失为止;而下降沿触发没有这个问题,一次中断产生后,即使外部中断引脚上仍保持抵电平,也不会引起重复中断。实际应用中如采用低电平触发方式,外部电路要采用可以及时撤去该引脚上低电平的设计方式。
评论