单片机的中断分为内中断和外中断
MCS - 51单片机共有3类5个中断源,2个优先级,中断处理程序可实现两级嵌套。
5个中断源中,其中2个为外部中断请求\INT0和\INT1(由P3.2和P3.3输入),2个为片内定时器T0和T1的溢出中断请求TF0和F1,另一个为片内串行口中断请求TI或RI。
下面根据上面的结构进行分析:
(1)中断输入:
外部中断由\INT0和\INT1引脚输入
定时器/计数器中断是计数器溢出中断,而T0和T1引脚只是用于脉冲计数
串行口中断也是接受或发送完成一帧数据后中断的,而TXD和RXD引脚只是用于通信
(2)中断请求方式控制或请求状态,由TCON和SCON寄存器控制
TCON:定时器/计数器控制寄存器(默认为0)
TCON | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H |
其中IT0和IT1为外部中断0和1的请求方式控制位。0表示低电平触发中断,1表示负跳变触发中断
IE0、IE1、TF0和TF1为外部中断0、外部中断1、定时器/计数器溢出中断0和定时器/计数器溢出中断1的中断请求标志位,满足中断条件时硬件置位,当CPU响应中断,转去中断服务函数时由硬件清零,TF0和TF1也可软件查询后清零。
SCON:串行口控制寄存器(默认为0)
SCON | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
位地址 | 9FH | 9EH | 9DH | 9CH | 9BH | 9AH | 99H | 98H |
TI:串行口发送完成一帧数据中断标志位。当发送完一帧8位数据后,由硬件置位,CPU响应中断,转去中断服务函数时并不清除TI,需由用户在中断服务函数中清除。
RI:串行口接收完成一帧数据中断标志位。当接收完一帧8位数据后,由硬件置位,CPU响应中断,转去中断服务函数时并不清除RI,需由用户在中断服务函数中清除。
(3)中断允许寄存器IE(默认为0,表示全部禁止)
IE | EA | - | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
位地址 | AFH | AEH | ADH | ACH | ABH | AAH | A9H | A8H |
EA:中断总允许控制位。0禁止总中断,1开放总中断。
ES:串行口中断允许控制位。
ET1:定时器/计数器1中断允许控制位。
EX1:外部中断1中断允许控制位。
ET0:定时器/计数器0中断允许控制位。
EX0:外部中断0中断允许控制位。
(4)中断优先级寄存器IP(默认为0)
IP | - | - | - | PS | PT1 | PX1 | PT0 | PX0 |
位地址 | BFH | BEH | BDH | BCH | BBH | BAH | B9H | B8H |
PS:为串行口中断优先级,PS=1,表示为高优先级。
PT1:定时器/计数器1中断优先级。
PX1:外部中断1中断优先级。
PT0:定时器/计数器0中断优先级。
PX0:外部中断0中断优先级。
注意,除了这个可控制中断优先级,这些中断还有自然优先级:PX0 -- PT0 -- PX1 -- PT1 --PS (高 -- 低)
定义中断服务函数的一般形式:
函数类型 函数名 (形参) [interrupt n] [using n]
interrupt 后面的n为中断号,n的取值范围为0~31。编译器从8n+3处产生中断向量。
n | 中断源 | 中断向量8n+3 |
0 | 外部中断0 | 0003H |
1 | 定时器/计数器0 | 000BH |
2 | 外部中断1 | 0013H |
3 | 定时器/计数器1 | 001BH |
4 | 串行口 | 0023H |