6.2 8051单片机的中断系统结构与控制寄存器
6.2.1 中断系统的结构
8051单片机中断系统的结构如图6-1所示。
图6-1 8051单片机中断系统的结构
1.中断系统的组成
8051单片机中断系统的主要组成部分如下:
1)5个中断源。分别为外部中断源、外部中断源、定时器/计数器中断源T0、定时器/计数器中断源T1和串行通信口中断源(TX和RX)。
2)中断源寄存器。
3)中断允许寄存器IE。
4)中断优先级控制寄存器IP。
2.中断系统的工作原理
单片机的中断系统默认是关闭的,如果要使用某个中断,需要通过编程的方法设置有关控制寄存器某些位的值将该中断打开,并为该中断编写相应的中断子程序。
以外部中断为例,如果需要使用该中断,应进行以下设置:
1)将定时器/计数器控制寄存器TCON的IT0位设为0(IT0=0),中断请求信号输入方式被设为低电平输入有效。
2)将中断允许寄存器IE的EA位设为1(EA=1),允许所有的中断(总中断允许)。
3)将中断允许寄存器IE的EX0位设为1(EX0=1),允许外部中断0。
工作过程:当单片机的端(P3.2引脚)输入一个低电平信号时,由于寄存器TCON的IT0=0,输入开关选择位置0,低电平信号被认为是INT0的中断请求信号,该信号将TCON的外部中断0的标志位IE0置1(IE0=1),IE0位的“1”先经过INT0允许开关(IE的EX0=1使INT0开关闭合),然后经过中断总开关(IE的EA=1使中断总开关闭合),再经过优先级开关(只使用一个中断时无须设置,寄存器IP的PX0位默认为0,开关选择位置0),进入硬件查询,选中外部中断0的入口地址(0003H)并将其送给CPU的程序计数器PC,CPU开始执行该处的中断子程序。
6.2.2 中断源寄存器
中断源寄存器包括定时器/计数器控制寄存器TCON和串行通信口控制寄存器SCON。
1.定时器/计数器控制寄存器TCON
TCON寄存器的功能主要是接收外部中断源( )和定时器/计数器(T0、T1)送来的中断请求信号。TCON的字节地址是88H,它有8位,每位均可直接访问(即可位寻址)。TCON的字节地址、各位的位地址和名称如图6-2所示。
图6-2 定时器/计数器控制寄存器TCON的字节地址、各位的位地址和名称
TCON寄存器各位的功能说明如下:
1)IE0位和IE1位,分别为外部中断0()和外部中断1()的中断请求标志位。当外部有中断请求信号输入单片机的引脚(即P3.2引脚)或引脚(即P3.3引脚)时,TCON的IE0和IE1位会被置“1”。
2)IT0位和IT1位,分别为外部中断0和外部中断1的输入方式控制位。当IT0=0时,外部中断0端输入低电平有效(即端输入低电平时才表示输入了中断请求信号);当IT0=1时,外部中断0端输入下降沿有效;当IT1=0时,外部中断1端输入低电平有效1,当IT1=1时,外部中断1端输入下降沿有效。
3)TF0位和TF1位,分别是定时器/计数器0和定时器/计数器1的中断请求标志。当定时器/计数器工作产生溢出时,会将TF0或TF1位置“1”,表示定时器/计数器有中断请求。
4)TR0位和TR1位,分别是定时器/计数器0和定时器/计数器1的启动/停止位。在编写程序时,若将TR0或TR1设为“1”,那么相应的定时器/计数器开始工作;若设置为“0”,定时器/计数器则会停止工作。
注意:如果将IT0位设为1,则把IE0设为下降沿置“1”,中断子程序执行完后,IE0位自动变为“0”(硬件置“0”);如果将IT0位设为0,则把IE0设置为低电平置“1”,中断子程序执行完后,IE0位仍是“1”,所以在退出中断子程序前,要将INT0端的低电平信号撤掉,再用指令将IE0置“0”(软件置“0”),若退出中断子程序后,IE0位仍为“1”,将会产生错误的再次中断。IT1、IE1位的情况与IT0、IE0位一样。在单片机复位时,TCON寄存器的各位均为“0”。
2.串行通信接口控制寄存器SCON
SCON寄存器的功能主要是接收串行通信口送到的中断请求信号。SCON的字节地址是98H,它有8位,每位均可直接访问(即可位寻址),SCON的字节地址、各位的位地址和名称如图6-3所示。
图6-3 SCON的字节地址、各位的位地址和名称
SCON寄存器的TI位和RI位与中断有关,其他位用作串行通信控制,将在后面说明。
1)TI位,串行通信接口发送中断标志位。在串行通信时,每发送完一帧数据,串行通信接口会将TI位置“1”,表明数据已发送完成,向CPU发送中断请求信号。
2)RI位,串行通信接口接收中断标志位。在串行通信时,每接收完一帧数据,串行通信接口会将RI位置“1”,表明数据已接收完成,向CPU发送中断请求信号。
注意:单片机执行中断子程序后,TI位和RI位不能自动变为“0”,需要在退出中断子程序时,用软件指令将它们清0。
6.2.3 中断允许寄存器
IE寄存器的功能用来控制各个中断请求信号能否通过。IE的字节地址是A8H,它有8位,每位均可直接访问(即可位寻址),IE的字节地址、各位的位地址和名称如图6-4所示。
图6-4 IE的字节地址、各位的位地址和名称
IE寄存器各位(有2位不可用)的功能说明如下:
1)EA位:总中断允许位。当EA=1时,总中断开关闭合;当EA=0时,总中断开关断开,所有的中断请求信号都不能接受。
2)ES位:串行通信接口中断允许位。当ES=1时,允许串行通信接口的中断请求信号通过;当ES=0时,禁止串行通信接口的中断请求信号通过。
3)ET1位:定时器/计数器1中断允许位。当ET1=1时,允许定时器/计数器1的中断请求信号通过;当ET1=0时,禁止定时器/计数器1的中断请求信号通过。
4)EX1位:外部中断1允许位。当EX1=1时,允许外部中断1的中断请求信号通过;当EX1=0时,禁止外部中断1的中断请求信号通过。
5)ET0位:定时器/计数器0中断允许位。当ET0=1时,允许定时器/计数器0的中断请求信号通过;当ET0=0时,禁止定时器/计数器0的中断请求信号通过。
6)EX0位:外部中断0允许位。当EX0=1时,允许外部中断0的中断请求信号通过;当EX0=0时,禁止外部中断0的中断请求信号通过。
6.2.4 中断优先级控制寄存器
IP寄存器的功能是设置每个中断的优先级。其字节地址是B8H,它有8位,每位均可进行位寻址,IP的字节地址、各位的位地址和名称如图6-5所示。
图6-5 IP的字节地址、各位的位地址和名称
IP寄存器各位(有3位不可用)的功能说明如下:
1)PS位:串行通信口优先级设定位。当PS=1时,串行通信接口为高优先级;当PS=0时,串行通信接口为低优先级。
2)PT1位:定时器/计数器1优先级设定位。当PT1=1时,定时器/计数器1为高优先级;当PT1=0时,定时器/计数器1为低优先级。
3)PX1位:外部中断1优先级设定位。当PX1=1时,外部中断1为高优先级;当PX1=0时,外部中断1为低优先级。
4)PT0位:定时器/计数器0优先级设定位。当PT0=1时,定时器/计数器0为高优先级;当PT0=0时,定时器/计数器0为低优先级。
5)PX0位:外部中断0优先级设定位。当PX0=1时,外部中断0为高优先级;当PX0=0时,外部中断0为低优先级。
通过设置IP寄存器相应位的值,可以改变5个中断源的优先顺序。若优先级一高一低的两个中断源同时发出请求,CPU会先响应优先级高的中断请求,再响应优先级低的中断请求;若5个中断源有多个高优先级或多个低优先级中断源同时发出请求,CPU会先按自然优先级顺序依次响应高优先级中断源,再按自然优先级顺序依次响应低优先级中断源。