单片机的中断系统

时间:2022-05-19 16:32:38

单片机的中断分为内中断和外中断

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
如: void timer0(void) interrupt 1 {};