在单片机中,能完成中断功能的部件称为中断系统。主程序在收到中断请求并响应中断请求后,会在某处暂停执行(断点),转而去处理紧急事件(中断源)。并且主程序在收到中断请求时,会执行完那句指令,再做出反应,因此断点是在一条完整指令后。
1.中断系统寄存器
TCON(中断请求标志位寄存器)
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
IT0:外部中断INT0触发方式控制位,下降沿触发为1,低电平触发为0
IE0:外部中断INT0请求标志位,产生中断请求标志,一般由硬件自动置1
IT1、IE1:同理IT0、IE0,只是对象变为INT1(外部中断1)
TR0:定时/计数器T0的启动位,为1时允许T0工作,为0时不允许T0工作。
TF0:定时/计数器T0的溢出中断标志位
TR1、TF1同理TR0、TF0
SCON(中断请求标志位寄存器)
(用于控制串行通信的方式选择、接收和发送,指示串口的状态)
IE(中断允许控制寄存器)
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
EA | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
EA:中断总允许位(相当于总开关)
(D5~D0相当于分开关)
ET2:T2中断允许位
ES:串行中断允许位
ET1: T1中断允许位
EX1: 外部中断1允许位
ET0: T0中断允许位
EX0: 外部中断0允许位
IP(中断优先控制寄存器)
IP用来设定各个中断源属于两级中断(51单片机中断优先级为二级)的哪一级(52为三级)
先依据几级中断优先级、再依据自然优先级来给中断优先级排顺序。
自然中断优先级:INT0 T0 INT1 T1 串行口 T2(52才有)
2.中断处理的过程
由中断源提出中断请求,再查找中断入口地址、判别中断优先级别,CPU执行完当前一条指令,再判别是否允许中断,若允许,则清除中断标志,保护现场,然后执行中断服务指令,程序结束后返回到断点现场,继续执行原程序。若不允许,则CPU执行下一条指令,再判别是否允许中断,然后如上。
保护现场:保存原主程序下一个将要执行的指令地址,将其送入堆栈。(执行完中断程序后,能正确返回断点处继续执行原来的程序)通过PUSH压栈指令将程序计数器、PSW、累加器A等寄存器的内容压入堆栈来实现。
3.汇编例子
用中断的方法控制LED灯的三个状态
ORG 0000H
AJMP MAIN
ORG 0013h
AJMP KEY
MAIN: LCALL CSH
MAIN1: LCALL LOOP
AJMP MAIN1
CSH: MOV R7,#0
SETB IT1
SETB EA
SETB EX1
RET
LOOP: CJNE R7,#0,LOOP1
MOV P2,#0FH
LOOP1: CJNE R7,#1,LOOP2
MOV P2,#0F0H
LOOP2: CJNE R7,#2,LEND
MOV P2,#33H
LEND: RET
KEY: INC R7
CJNE R7,#3,KEND
MOV R7,#0
KEND: RETI
END
中断控制数码管显示数加减
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP KEY1
ORG 0013H
AJMP KEY2
MAIN: LCALL CSH
MAIN1: LCALL BCD
LCALL SMG
AJMP MAIN1
CSH: MOV R7,#123
MOV TCON,#05H
MOV IE,#85H
RET
BCD: MOV 30H,#0
MOV A,R7
MOV B,#100
DIV AB
MOV 31H,A
MOV A,B
MOV B,#10
DIV AB
MOV 32H,A
MOV 33H,B
RET
SMG: MOV R6,#4
MOV R5,#0FEH
MOV R0,#30H
MOV DPTR,#TAB
LOOP: MOV P2,R5
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
MOV P2,#0FFH
MOV A,R5
RL A
MOV R5,A
INC R0
DJNZ R6,LOOP
RET
KEY1: INC R7
RETI
KEY2: DEC R7
RETI
DELAY: MOV R4,#15
DJNZ R4,$
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END