中断系统结构及如何设置中断
51单片机中,i中断分高低两个优先级,高优先级的中断能打断低优先级的中断。
但同级中断是不能打断同级中断的!无论该中断函数有多长,在执行到一半这个中断又发生了,还是要等到该中断函数执行完毕,并再执行了一条主程序指令后才会再次进入该中断。
80C51中断系统的结构
80C51的中断系统有5个中断源(8052有 6个) ,2个优先级,可实现二级中断嵌套 。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317152428041-1837663077.png)
1、(P3.2)(外部中断0引脚)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
2、(P3.3)(外部中断1引脚)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
3、TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
4、TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
5、RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
中断请求标志
1、TCON的中断标志(定时器/计数器控制寄存器TCON)
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317153341280-1945494410.png)
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TR0(TCON.4),定时器0运行控制位,置1时定时器开始启动(看定时器0方式一逻辑结构有助理解)。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
51单片机的中断标志位,在产生该中断时置位,执行该中断程序后,由硬件自动清除。
RI、TI,这两个接受标志位,发送标志位是由硬件拉高,请求中断,而中断自己不会自动的处理,必须要软件清零!
2、SCON的中断标志(串行口控制寄存器)
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317154214146-1935898261.png)
RI(SCON.0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。
TI(SCON.1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。
3、中断允许寄存器IE
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317154902308-1048457372.png)
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
ET2(IE.5),定时/计数器T2中断允许位;
EA (IE.7), CPU中断允许(总允许)位。
4、中断优先级控制寄存器IP
80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的 。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317155410291-1167370533.png)
PX0(IP.0),外部中断0优先级设定位;
PT0(IP.1),定时/计数器T0优先级设定位;
PX1(IP.2),外部中断0优先级设定位;
PT1(IP.3),定时/计数器T1优先级设定位;
PS (IP.4),串行口优先级设定位;
PT2 (IP.5) ,定时/计数器T2优先级设定位。
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317173036028-1991991647.png)
设置52单片机的4个中断源,使他们的优顺
序为T1,INT1,INT0,T0.
IPH = 0X08;
PT1 = 1;
IP = 0X40;
PX1 = 1;
80C51单片机的中断优先级有三条原则:
- CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
- 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
- 正在进行的低优先级中断服务,能被高优先级中断请求所中断。
为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。
中断响应条件和时间:
中断响应条件
- 中断源有中断请求;
- 此中断源的中断允许位为1;
- CPU开中断(即EA=1)。
以上三条同时满足时,CPU才有可能响应中断。
80C51的定时/计数器
实现定时功能,比较方便的办法是利用单片机内部的定时/计数器。也可以采用下面三种方法:
- 软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。
- 采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。
- 采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。
定时/计数器的结构和工作原理
定时/计数器的结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317181006894-68183232.png)
定时/计数器的工作原理
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,
则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
- 设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。
- 设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2us。
定时/计数器的控制
80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
对照其中一个工作方式更好理解TMOD和TCON
一、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式
如下:
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317181915613-1407858034.png)
GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一个条件。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317182118446-1271112441.png)
M1/M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317182158578-131037941.png)
二、TCON的中断标志(定时器/计数器控制寄存器TCON)看前面的介绍
定时/计数器的工作方式
一、方式0
方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317182503403-1870957093.png)
定时器模式时有:N=t/ Tcy
计数初值计算的公式为:X=213 -N
定时器的初值还可以采用计数个数直接取补法获得。
计数模式时,计数脉冲是T0引脚上的外部脉冲。
门控位GATE具有特殊的作用。当GATE=0时,经反相后使或门输出为1,此时仅由TR0控制与门的开启,与门输出1时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。
二、方式1
方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317182550197-954489994.png)
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317202836513-472903339.png)
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317202924993-1711377796.png)
计数个数与计数初值的关系为:X=216—N
三、方式2
方式2为自动重装初值的8位计数方式。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317182726287-439097398.png)
计数个数与计数初值的关系为: X=28 -N
工作方式2特别适合于用作较精确的脉冲信号发生器。
四、方式3
方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。
![](https://img2020.cnblogs.com/i-beta/1959382/202003/1959382-20200317182808633-1192243054.png)
工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。
定时器/计数器的工作方式一和工作方式二常用
初始化程序应完成如下工作:
- 对TMOD赋值,以确定T0和T1的工作方式。
- 计算初值,并将其写入TH0、TL0或TH1、TL1。
- 中断方式时,则对IE赋值,开放中断。
- 使TR0或TR1置位,启动定时/计数器定时或计数。
定时/计数器应用举例
例 利用定时/计数器T1的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。
解:
1、计算计数初值X:由于晶振为12 MHz,所以机器周期Tcy为1 us。
所以:N=t/ Tcy =10000/1=10000
X=65536-10000=55536=D8F0H即应将D8H送入TH0中,F0H送入TL0中
2、求T1的方式控制字TMOD:
M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;
我们向往远方,却忽略了此刻的美丽