外部中断
硬件控制
外部中断矢量
中断源名称 |
中断源地址RAM |
中断矢量ROM |
INT0 |
P3.2 (0B2H) |
0003H |
INT1 |
P3.3 (0B3H) |
0013H |
外部中断控制寄存器
地址 |
A8H |
AFH |
|
|
|
|
AAH |
|
A8H |
名称 |
IE |
EA |
|
|
|
|
EX1 |
|
EX0 |
地址 |
B8H |
|
|
|
|
|
BAH |
|
B8H |
名称 |
IP |
|
|
|
|
|
PX1 |
|
PX0 |
地址 |
88H |
|
|
|
|
8BH |
8AH |
89H |
88H |
名称 |
TCON |
|
|
|
|
IE1 |
IT1 |
IE0 |
IT0 |
外部中断控制位
位地址 |
名称 |
作用 |
AFH |
EA |
总中断允许位。EA=1,开中总中断。即允许cpu中断。 |
88H |
IT0 |
外部中断0触发方式选择位。IT0=1,电平触发,IT0=0,下降沿触发 |
8AH |
IT1 |
外部中断1触发方式选择位。IT1=1,电平触发,IT1=0,下降沿触发 |
89H |
IE0 |
外部中断0中断请求标志位。由中断源置1,在cpu处理中断后自动清零。 |
8BH |
IE1 |
外部中断1中断请求标志位。由中断源置1,在cpu处理中断后自动清零。 |
A8H |
EX0 |
外部中断0允许位。EX0=1,开中断,即允许cpu处理外部中断0 |
AAH |
EX1 |
外部中断1允许位。EX1=1,开中断,即允许cpu处理外部中断1 |
B8H |
PX0 |
外部中断0优先级选择位,PX0=1,高优先级。 |
BAH |
PX1 |
外部中断1优先级选择位,PX1=1,高优先级。 |
软件控制
外部中断0初始化方法
; 外部中断0初始化程序
; 低优先级电平触发方式
INT0initb: ;操作控制位
SETB EA
SETB EX0
RET
INT0init: ;操作字节
ORL IE, #81H
RET
; 低优先级电平触发方式单开
INT0inits: ;single open 单开
MOV IE, #81H
RET
; 高优先级电平触发方式
INT0initp: ;p 高优先级
;SETB EA
;SETB EX0
;SETB PX0
ORL IE, #81H
ORL IP, #01H
RET
; 高优先级电平触发方式单开
INT0initps: ;single open 单开
MOV IE, #81H
MOV IP, #01H
RET
; 低优先级下降沿触发方式
INT0initf: ; PLF 下降沿 failling edge
;SETB EA
;SETB EX0
;SETB IT0
ORL IE, #81H
ORL TCON, #01H
RET
; 低优先级下降沿触发方式单开
INT0initfs: ;single open 单开
MOV IE, #81H
MOV TCON, #01H
RET
; 高优先级下降沿触发方式
INT0initpf: ;p 高优先级
;SETB EA
;SETB EX0
;SETB PX0
;SETB IT0
ORL IE, #81H
ORL IP, #01H
ORL TCON, #01H
RET
; 高优先级下降沿触发方式单开
INT0initpfs: ;single open 单开
MOV IE, #81H
MOV IP, #01H
MOV TCON, #01H
RET
外部中断1初始化方法
; 外部中断1初始化程序
; 低优先级电平触发方式
INT1init:
;SETB EA
;SETB EX1
ORL IE, #84H
RET
; 低优先级电平触发方式单开
INT1inits: ;single open 单开
MOV IE, #84H
RET
; 高优先级电平触发方式
INT1initp: ;p 高优先级
;SETB EA
;SETB EX1
;SETB PX1
ORL IE, #84H
ORL IP, #04H
RET
; 高优先级电平触发方式单开
INT1initps: ;single open 单开
MOV IE, #84H
MOV IP, #04H
RET
; 低优先级下降沿触发方式
INT0initf: ; PLF 下降沿 failling edge
;SETB EA
;SETB EX1
;SETB IT1
ORL IE, #84H
ORL TCON, #04H
RET
; 低优先级下降沿触发方式单开
INT0initfs: ;single open 单开
MOV IE, #84H
MOV TCON, #04H
RET
; 高优先级下降沿触发方式
INT0initpf: ;p 高优先级
;SETB EA
;SETB EX1
;SETB PX1
;SETB IT1
ORL IE, #84H
ORL IP, #04H
ORL TCON, #04H
RET
; 高优先级下降沿触发方式单开
INT0initpfs: ;single open 单开
MOV IE, #84H
MOV IP, #04H
MOV TCON, #04H
RET
外部中断程序框架
;外部中断0入口地址
ORG 0003H
LJMP INT0PRO ;中断跳转使用LJMP
;外部中断1入口地址
ORG 0013H
LJMP INT1PRO ;中断跳转使用LJMP
;外部中断0程序
INT0PRO:
CLR EA ;保护现场
PUSH ACC
PUSH 02H ; 保护R2
PUSH PSW
;...
SETB EA
;... ;中断程序
CLR EA ;恢复现场
;...
POP PSW
POP 02H
POP ACC
SETB EA
RETI ;中断返回使用RETI
;外部中断0调用子程序
INT0PROs: ; subroutine 子程序
CLR EA ;保护现场
PUSH ACC
PUSH 02H ; 保护R2
PUSH PSW
;...
SETB EA
LCALL SRT0 ;调用子程序
CLR EA ;恢复现场
;...
POP PSW
POP 02H
POP ACC
SETB EA
RETI ;中断返回使用RETI
SRT0:
;外部中断1程序
INT1PRO:
CLR EA ;保护现场
PUSH ACC
PUSH 02H ; 保护R2
PUSH PSW
;...
SETB EA
;... ;中断程序
CLR EA ;恢复现场
;...
POP PSW
POP 02H
POP ACC
SETB EA
RETI ;中断返回使用RETI
;外部中断1调用子程序
INT1PROs: ; subroutine 子程序
CLR EA ;保护现场
PUSH ACC
PUSH 02H ; 保护R2
PUSH PSW
;...
SETB EA
LCALL SRT1 ;调用子程序
CLR EA ;恢复现场
;...
POP PSW
POP 02H
POP ACC
SETB EA
RETI ;中断返回使用RETI
SRT1:
示例
P3.2口脉冲输入计数
ORG 0000H
LCALL MAIN
;外部中断0入口地址
ORG 0003H
LJMP INT0PROs ;中断跳转使用LJMP
MAIN:
MOV R2, #0H ;R2 计数
LCALL INT0initf
MOV A, #14H ;用A和C演示保护、恢复现场
SETB C
SJMP $
; 初始化:低优先级下降沿触发方式
INT0initf: ; PLF 下降沿 failling edge
;SETB EA
;SETB EX0
;SETB IT0
ORL IE, #81H
ORL TCON, #01H
RET
;外部中断0
INT0PROs: ; subroutine 子程序
CLR EA ;保护现场
PUSH ACC
PUSH PSW
SETB EA
LCALL SRT0 ;调用中断子程序
CLR EA ;恢复现场
POP PSW
POP ACC
SETB EA
RETI
;中断程序
SRT0:
INC R2 ;R2计算脉冲数目
CLR C ;中断程序中修改A、C
MOV A, #0H
RET
END
如果觉得本文有用,万望看官慷慨解囊,不吝打赏,激励本编提供更加优质的内容
[点击进行打赏](https://www.cnblogs.com/52note/p/16507868.html)