80C51的中断系统 - 定时/计数器


本篇略长,请以目录为导航;这是我观看 郭天祥老师的单片机视频后的整体汇结;

中断的概念

CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
CPU暂停中断当前的工作,转去处理事件B(中断响应和中断服务);
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回);
这一过程称为—— 中断
中断处理示意图
引起CPU中断的根源,称为 中断源;中断源向CPU提出 中断请求,CPU暂时中断原来的事务A,转去处理事件B,对事件B处理完毕后,再回到原来被中断的地方(即 断点),称为中断返回。实现上述中断功能的部件称为 中断系统(中断机构)
中断示意图

中断系统的结构

80C51的中断系统有5个中断源(8052有6个),2个优先级,可实现二级中断嵌套。
中断系统

  1. 外部中断0(P3.2引脚)可由IT0选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0置1,向CPU申请中断
  2. 外部中断1(P3.3引脚)可由IT1选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1置1,向CPU申请中断
  3. TF0——片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
  4. TF1——片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
  5. RI或TI——串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。

中断请求标志

1、TCON的中断标志

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的中断标志位

SCON中断标志位
RI(SCON.0),串行口接收中断标志位。 当允许串行口接受数据时,每接收完一个串行帧,由 硬件置位RI。 注意: RI必须由软件清除
TI(SCON.1),串行口发送中断标志位。 当CPU将一个发送数据写入串行口发送缓存器时,就启动了发送进程。每发送完一个串行帧,由 硬件置位TI 。CPU响应中断时,不能自动清除TI,TI必须由软件清除。

80C51中断的控制

中断允许控制——IE

CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
蔽是由中断允许寄存器IE控制的。
IE各位
EXO(IE.0),外部中断0允许位;
ETO(IE.1),定时/计数器TO中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA(IE.7),CPU中断允许(总允许)位。

中断优先级控制——IP

80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的。
中断优先级寄存器IP
PXO(IP.0),外部中断0优先级设定位;
PTO(IP.1),定时/计数器TO优先级设定位;
PX1(IP.2),外部中断0优先级设定位;
PT1(IP.3),定时/计数器T1优先级设定位;
PS (IP.4),串行口优先级设定位;
PT2 (IP.5),定时/计数器T2优先级设定位。

需要注意: 80C52单片机有四个中断优先级,即可实现四级中断服务嵌套。每个中断源的中断优先级由中断优先级寄存器IP和IPH中的相应位的状态来规定的。
IPH
PXO (IPH.0),外部中断0优先级设定位;
PTO (IPH.1),定时/计数器TO优先级设定位;
PX1 (IPH.2),外部中断0优先级设定位;
PT1 (IPH.3),定时/计数器T1优先级设定位;
PS (IPH.4),串行口优先级设定位;
PT2 (IPH.5),定时/计数器T2优先级设定位。

中断优先级的原则

同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,排列如下:
中断优先级
80C51单片机的中断优先级有三条原则:
■CPU同时接收到几个中断时,首先响应优先级别最高的中断请求
■正在进行的中断过程不能被新的同级或低优先级的中断请求所中断
■正在进行的低优先级中断服务,能被高优先级中断请求所中断
为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器。其中一个置
1,表示正在响应高优先级的中断,它将阻断后来所有的中断请求;另一个置1,表示正在响应低优先级
中断,它将阻断后来所有的低优先级中断请求。

80C51的定时/计数器

实现定时功能,比较方便的办法是利用单片机内部的定时/计数器。当然也可以采用下面三
种方法:

  1. 软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。
  2. 采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。
  3. 采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。

一、定时/计数器的结构

定时器结构
定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制TO、T1的启动和停止及设置溢出标志

二、定时/计数器的工作原理

加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是TO或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TFO或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值
■设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t
■设置为计数器模式时,外部事件计数脉冲由TO或T1引脚输入到计数器。在每个机器周期的S5P2期间采样TO、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2us。

三、定时/计数器的控制

80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。

1、工作方式寄存器TMOD

工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于TO,高四位用于T1。其格式如下:
TMOD
GATE: 门控位。GATE=O时,只要用软件使TCON中的TRO或TR1为1,就可以启动定时/计数器工作; GATA=1时,要用软件使TRO或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。
C/T: 定时/计数模式选择位。C/T=0为定时模式;C/T=1为计数模式。
M1MO: 工作方式设置位。定时/计数器有四种工作方式,由M1MO进行设置。
工作方式设置表

2、控制寄存器TCON

TCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TCON
TF1(TCON.7): T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TR1(TCON.6): T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TFO (TCON.5): TO溢出中断请求标志位,其功能与TF1类同。
TRO (TCON.4) : TO运行控制位,其功能与TR1类同。

四、定时/计数器的工作方式

1、方式O

方式0为13位计数,由TLO的低5位(高3位未用)和THO的8位组成。TLO的低5位溢出时向THO进位,TH0溢出时,置位TCON中的TFO标志,向CPU发出中断请求。
方式0
定时器模式时有:N = t / Tcy
计数初值计算的公式为 : X=213 - N
定时器的初值还可以采用计数个数直接取补法获得。
计数模式时,计数脉冲是TO引脚上的外部脉冲

门控位GATE具有特殊的作用。当GATE=O时,经反相后使或门输出为1,此时仅由TRO控制与门的开启,与门输出1时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚信号和TRO共同控制。当TRO=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。

2、方式1

方式1的计数位数是16位,由TLO作为低8位、THO作为高8位,组成了16位加1计数器。
方式一计数个数与计数初值的关系为 : X=216 - N

3、方式2

方式2为自动重装初值的8位计数方式。
方式2
计数个数与计数初值的关系为: X=28 - N
工作方式2特别适合于用作较精确的脉冲信号发生器。

4、方式3

方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。
方式3
工作方式3将T0分成为两个独立的8位计数器TH0和TL0。

五、定时/计数器应用举例

以定时器0为例,核心代码如下:

void Timer0Init() //定时器0初始化函数
{
	TMOD|=0x01; // 选择为定时器0模式,工作方式1,仅用TR0方式打开启动
	TH0=(65536-1000)/256; // 给定时器赋初值,定时1ms 
	TL0=(65536-1000)%256; // TH0高八位 TL0低八位
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器0
}

void Time0() interrupt 1 //定时器0中断服务函数
{
	unsigned int x; //计数值
	TH0=(65536-1000)/256;//重新装载初值
	TL0=(65536-1000)%256;
	x++;
	if(x==1000)//1s
	{
		x=0;
		{
		//{定时器控制程序}
		}
	}
}

补充说明

中断响应的条件为:

1. 中断源有中断请求;
2. 此中断源的中断允许位为1
3. CPU开中断(EA=1);

以上三条必须同时满足时,CPU才有可能响应中断。

中断服务函数要与中断一一照应

外部中断0 —— interrupt 0
外部中断1 —— interrupt 2
定时/计数器0 —— interrupt 1
定时/计数器1 —— interrupt 3
串口中断 —— interrupt 4

  • 12
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeni成长小栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值