外部中斷
硬件控制
外部中斷矢量
中斷源名稱 |
中斷源地址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