单片机汇编外部中断

外部中断

硬件控制

外部中断矢量

中断源名称 中断源地址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
posted @ 2020-11-20 12:47  流水自净  阅读(1258)  评论(0编辑  收藏  举报