80C51的中断系统
一、中断的概念
CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务)。
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。
引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:
分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率;
实时响应:CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;
可靠性高:CPU具有处理设备故障及掉电突发性事件能力,从而使系统可靠性提高。
二、80C51中断系统结构
80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现耳机中断嵌套。
1、(P3.2):可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
2、(P3.3):可由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的中断标志
IT0(TCON.0):外部中断0触发方式控制位。
当IT0=0时,为低电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1):外部中断0中断请求标志位。
IT1(TCON.2):外部中断1触发方式控制位。
IE1(TCON.3):外部中断1中断请求标志位。
TF0(TCON.5):定时/计数器T0溢出中断请求标志位。
TF1(TCON.7):定时/计数器T1溢出中断请求标志位。
2、SCON的中断标志(串行口)
RI(SCON.0):串行口接收中断标志位。当允许串行口接收数据时,每接受完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。
TI(SCON.1):串行口发送中断标志位。当CPU将一个发送数据接入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自顶清除TI,TI必须由软件清除。
四、中断的控制
1.中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
EX0(IE.0):外部中断0允许位;
ET0(IE.1):定时/计数器T0中断允许位;
EX1(IE.2):外部中断0允许位;
ET1(IE.3):定时/计数器T1中断允许位;
ES (IE.4):串行口中断允许位;
EA (IE.7):CPU中断允许(总允许位)。
2.中断优先级控制
80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。
而8052单片机有四个中断优先级,即可实现四级中断服务嵌套。每个中断源的中断优先级由中断优先级寄存器IP和IPH中的相应位的状态来规定的。
PX0(IPH.0) :外部中断0优先级设定位;
PT0(IPH.1):定时/计数器T0优先级设定位;
PX1(IPH.2):外部中断0优先级设定位;
PT1(IPH.3):定时/计数器T1优先级设定位;
PS (IPH.4):串口优先级设定位;
PT2(IPH.5):定时/计数器T2优先级设定位。
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队由中断系统硬件确定的自然优先级形成,其排列如图所示:
80C51单片机的中断优先级由三条原则:
①、CPU同时接受到几个中断时,优先响应优先级最高的中断请求。
②、正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
③、正在进行的低优先级中断服务,能被高优先级中断请求所中断。
为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。
3、中断响应的条件
①、中断源有中断请求;
②、此中断源的中断允许为位1;
③、CPU开中断(即EA=1)。
以外部中断0为例:
主程序中需要的代码:
EA=1;//打开总中断开关EX0=1;//开外部中断0IT0=0/1;//设置外部中断的触发方式 中断服务函数:
//void 函数名()interrupt(中断服务子程序) 0(优先级)void int0 () interrupt 0 { do anything that you want}
五、80C51的定时/计数器
1、定时/计数器
利用单片机内部的定时/计数器实现定时功能。以下还有三种方法:
①、软件定时:软件定时占用硬件资源,但占用了CPU时间,降低了CPU的利用率。
②、采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。
③、采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。
2、定时/计数器的结构和工作原理
结构:定时器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和内容;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
工作原理:加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来,一个是TO或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器全为1时,再输入一个脉冲就使计数器回零,计数器的溢出使TCON中的TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到,如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即技术频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。
例:假设计数50个数,那么定时时间为:
(定时时间(μs)=计数数X1/(晶振频率)X12)。
16位寄存器能够计数的最大时间为65536μs。
设置为计数模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期有采样到一低电平时,计数器加1,更新的计数值在下一机器周期得S3P1期间装入计数器。由于检测一个从1到0下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2μs。
3、定时/计数器的控制
80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
3.1、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
GATE:门控位。GATA=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚也为高电平时,才能启动定时/计数器工作。
C/
:定时/计数模式选择位。C/
=0时为定时模式;C/
=1时为计数模式。
M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
3.2、控制寄存器TCON
TCON的低4位用于控制外部中断。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0.T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清零,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清零。所以,软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
4、定时/计数器的工作方式
1、方式0
方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。
定时模式有:N=t/Tcy。
计数初值计算公式为:
定时器的初值还可以采用计数个数直接去补法获得。
计数模式时,计数脉冲式T0引脚上的外部脉冲。
门控位GATE具有特殊的作用。当GATE=0时,经反向后使或门输出为1,此时仅由TR0控制与门的开启,与门输出1时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开始由外中断引脚信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。
2、方式1
方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。
计数个数与计数初值的关系为:
例:初始化程序应完成如下工作:
①、对TMOD赋值,以确定T0和T1的工作方式。
②、计算初值,并将其写入TH0、TL0或TH1、TL1。
③、中断方式时,开总中断EA=1,并对IE赋值,开放其中断。
④、使TR0或TR1置位,启动定时/计数器定时或计数。
以16位寄存器计时50ms为例:
在主程序中写入
TMOD=0x01; //设置定时器0为工作方式1: 16位定时器 T1为0x10 两者一起为0x11 TH0=(65556-50000)/256; //把模放在定时器0计数器寄存器的高八位 TL0=(65556-50000)%256; //把余放在定时器0计数器寄存器的低八位 EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 在中断服务函数中写入
void exter0() interrupt 1 //中断函数,1代表优先级1 50ms{ TH0=(65556-50000)/256; //把模放在定时器0计数器寄存器的高八位 TL0=(65556-50000)%256; //把模放在定时器0计数器寄存器的低八位 }
80C51的中断系统
一、中断的概念
CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理(中断发生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务)。
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。
引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
随着计算机技术的应用,人们发现中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:
分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率;
实时响应:CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;
可靠性高:CPU具有处理设备故障及掉电突发性事件能力,从而使系统可靠性提高。
二、80C51中断系统结构
80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现耳机中断嵌套。
1、(P3.2):可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
2、(P3.3):可由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的中断标志
IT0(TCON.0):外部中断0触发方式控制位。
当IT0=0时,为低电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1):外部中断0中断请求标志位。
IT1(TCON.2):外部中断1触发方式控制位。
IE1(TCON.3):外部中断1中断请求标志位。
TF0(TCON.5):定时/计数器T0溢出中断请求标志位。
TF1(TCON.7):定时/计数器T1溢出中断请求标志位。
2、SCON的中断标志(串行口)
RI(SCON.0):串行口接收中断标志位。当允许串行口接收数据时,每接受完一个串行帧,由硬件置位RI。注意,RI必须由软件清除。
TI(SCON.1):串行口发送中断标志位。当CPU将一个发送数据接入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自顶清除TI,TI必须由软件清除。
四、中断的控制
1.中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
EX0(IE.0):外部中断0允许位;
ET0(IE.1):定时/计数器T0中断允许位;
EX1(IE.2):外部中断0允许位;
ET1(IE.3):定时/计数器T1中断允许位;
ES (IE.4):串行口中断允许位;
EA (IE.7):CPU中断允许(总允许位)。
2.中断优先级控制
80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。
而8052单片机有四个中断优先级,即可实现四级中断服务嵌套。每个中断源的中断优先级由中断优先级寄存器IP和IPH中的相应位的状态来规定的。
PX0(IPH.0) :外部中断0优先级设定位;
PT0(IPH.1):定时/计数器T0优先级设定位;
PX1(IPH.2):外部中断0优先级设定位;
PT1(IPH.3):定时/计数器T1优先级设定位;
PS (IPH.4):串口优先级设定位;
PT2(IPH.5):定时/计数器T2优先级设定位。
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队由中断系统硬件确定的自然优先级形成,其排列如图所示:
80C51单片机的中断优先级由三条原则:
①、CPU同时接受到几个中断时,优先响应优先级最高的中断请求。
②、正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
③、正在进行的低优先级中断服务,能被高优先级中断请求所中断。
为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级中断,它将阻断后来所有的低优先级中断请求。
3、中断响应的条件
①、中断源有中断请求;
②、此中断源的中断允许为位1;
③、CPU开中断(即EA=1)。
以外部中断0为例:
主程序中需要的代码:
EA=1;//打开总中断开关EX0=1;//开外部中断0IT0=0/1;//设置外部中断的触发方式 中断服务函数:
//void 函数名()interrupt(中断服务子程序) 0(优先级)void int0 () interrupt 0 { do anything that you want}
五、80C51的定时/计数器
1、定时/计数器
利用单片机内部的定时/计数器实现定时功能。以下还有三种方法:
①、软件定时:软件定时占用硬件资源,但占用了CPU时间,降低了CPU的利用率。
②、采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。
③、采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。
2、定时/计数器的结构和工作原理
结构:定时器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和内容;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
工作原理:加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来,一个是TO或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器全为1时,再输入一个脉冲就使计数器回零,计数器的溢出使TCON中的TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到,如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即技术频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。
例:假设计数50个数,那么定时时间为:
(定时时间(μs)=计数数X1/(晶振频率)X12)。
16位寄存器能够计数的最大时间为65536μs。
设置为计数模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期有采样到一低电平时,计数器加1,更新的计数值在下一机器周期得S3P1期间装入计数器。由于检测一个从1到0下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2μs。
3、定时/计数器的控制
80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。
3.1、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
GATE:门控位。GATA=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚也为高电平时,才能启动定时/计数器工作。
C/
:定时/计数模式选择位。C/
=0时为定时模式;C/
=1时为计数模式。
M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
3.2、控制寄存器TCON
TCON的低4位用于控制外部中断。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0.T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清零,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清零。所以,软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
4、定时/计数器的工作方式
1、方式0
方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。
定时模式有:N=t/Tcy。
计数初值计算公式为:
定时器的初值还可以采用计数个数直接去补法获得。
计数模式时,计数脉冲式T0引脚上的外部脉冲。
门控位GATE具有特殊的作用。当GATE=0时,经反向后使或门输出为1,此时仅由TR0控制与门的开启,与门输出1时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开始由外中断引脚信号和TR0共同控制。当TR0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。
2、方式1
方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。
计数个数与计数初值的关系为:
例:初始化程序应完成如下工作:
①、对TMOD赋值,以确定T0和T1的工作方式。
②、计算初值,并将其写入TH0、TL0或TH1、TL1。
③、中断方式时,开总中断EA=1,并对IE赋值,开放其中断。
④、使TR0或TR1置位,启动定时/计数器定时或计数。
以16位寄存器计时50ms为例:
在主程序中写入
TMOD=0x01; //设置定时器0为工作方式1: 16位定时器 T1为0x10 两者一起为0x11 TH0=(65556-50000)/256; //把模放在定时器0计数器寄存器的高八位 TL0=(65556-50000)%256; //把余放在定时器0计数器寄存器的低八位 EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 在中断服务函数中写入
void exter0() interrupt 1 //中断函数,1代表优先级1 50ms{ TH0=(65556-50000)/256; //把模放在定时器0计数器寄存器的高八位 TL0=(65556-50000)%256; //把模放在定时器0计数器寄存器的低八位 }
举报