关于51单片机外部中断的触发方式
扫描二维码
随时随地手机看文章
51单片机有两个外部中断申请输入端:INT0 和 INT1。
51单片机的外部中断,分为低电平触发和下降沿触发。在单片机内部,分别由控制位 IT0 和 IT1 来控制。
复位时,IT0/1 都为 0,即默认为低电平触发。
一般来说,外设第一次向单片机申请外部中断时,单片机使用那种触发方式,并无什么差别。
但是,返回主程序后,如果外部申请信号仍然是低电平,就有区别了。
在采用低电平触发时,单片机执行了一条主程序的指令后,就会又重新进入中断程序。
而采用下降沿触发时,即使 INT0/1 引脚仍然是低电平,单片机也不会重新进入中断程序。
如果外设想要申请第二次中断,必须是先恢复高电平,重新再送来一次下降沿才行。
那么,为了避免仅仅来了一次申请,就产生多次中断的现象,还是应该采用下降沿触发中断的方式。
如果非要使用低电平触发呢,那必须在退出前,反复的检测中断输入端的电平。
只有当外设撤消了中断申请之后,再退出中断程序,这才能避免多次的重新中断。
到底应该采用那种触发方式,这个确实是应该根据外设的特点来选取。
但是在多数场合,采用下降沿触发方式,还是比较适用的。
即在复位后,应该先执行:
SETB IT0
SETB IT1
有人在百度知道,提出了一个问题,希望能显示出低电平触发和下降沿触发的区别。
题目的基本内容如下。
;单片机汇编程序题:要求一定是汇编
;AT89C51中P3.2接开关1,P3.3接开关2。
;当开关1, 2全都断开时运行主程序,P1口的8个LED从P1.0~P1.7逐个点亮并反复循环。
;当开关1闭合时进入中断服务程序P2口的8个LED闪烁6次。
;开关2起到对开关1触发方式进行选择的作用:
;第一次闭合开关2时开关1为下降沿触发且P0.0连接的LED点亮;
;第二次闭合开关2时开关1为低电平触发且P0.0连接的LED熄灭。
;求一个用汇编语言编写的完整程序。
根据上述题目要求,做而论道画出了PROTEUS仿真实验电路如下:
;下列程序,可以满足要求。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP X0_INT
ORG 0013H
LJMP X1_INT
;------------------------------------
MAIN:
SETB IT1
MOV SP, #60H
MOV IE, #85H
MOV A, #254
M_LOOP:
MOV P1, A
RL A
CALL DL_500MS
SJMP M_LOOP
;------------------------------------
X0_INT:
PUSH PSW
SETB RS1
MOV R4, #12
SH_6:
XRL P2, #255
CALL DL_500MS
DJNZ R4, SH_6
POP PSW
RETI
;------------------------------------
X1_INT:
CPL IT0
CPL P0.0
RETI
;-------------------------------延时子程序
DL_500MS:
MOV R5, #9 ;1T
DL1: MOV R6, #128 ;1T
DL2: MOV R7, #215 ;1T
NOP ;1T
DL3: DJNZ R7, DL3 ;2T 2 * 215 = 430 T
DJNZ R6, DL2 ;2T [1+1+430+2] * 128 = 55552 T
DJNZ R5, DL1 ;2T [1+55552+2] * 9 = 499995 T
RET ;2T 1 + 499995 + 2 = 499998 T
;------------------------------------
END
;===============================================