單片機匯編外部中斷


外部中斷

硬件控制

外部中斷矢量

中斷源名稱 中斷源地址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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM