51单片机(二):单片机内部定时/计数器和中断系统

介绍单片机内部非常重要的两个资源——定时/ 计数器和中断系统。通过该讲,读者可以掌握定时器的工作原理和单片机的中断系统。

从而设计定时器计数程序和中断服务程序。

一、原理简介

首先让我们举闹钟为例,将它定时在一分钟后闹铃,这就需要秒针走一圈(60 次)。即一分钟时间转化为秒针走的次数,也就是计数的次数,计数到了60 次然后闹铃,而每一次计数的时间是1 秒。

单片机内部的定时/ 计数器跟闹钟类似,可以通过编程来设定要定时的时间、定时时间到了进行相应的操作。那么在单片机内部计数一次的时间是多少呢,51 单片机输入的时钟脉冲是由晶体振荡器的输出经12 分频后得到的,所以定时器也可看作是对计算机机器周期的计数器。因为每个机器周期包含12 个振荡周期,故每一个机器周期定时器加1,可以把输入的时钟脉冲看成机器周期信号。故其频率为晶振频率的1/12。如果晶振频率为12MHz,则定时器每接收一个输入脉冲的时间刚好为1μs。在本实验套件中采用的是11.0592M 的晶振,故每接收一个输入脉冲的时间约为1.085μs。实现精确定时在实际项目应用中非常重要,因为往往需要用到精确定时一段时间,然后定时时间到的时刻做相应的任务。

那如何编程实现定时时间呢?首先先简单介绍下本实验板上单片机(STC89C52)内的定时器资源。STC89C52 内有三个定时/ 计数器, 分别为T0、T1 和T2。其中T0、T1 工作方式一样,一并介绍。

T2 的工作方式稍有区别,这里不做介绍,实验套件光盘中有实际应用程序。同时,单片机中的定时器和计数器是复用的,计数器是记录外部脉冲的个数,而定时器则是由单片机内部时钟提供的一个非常稳定的计数源。本讲中,以T0、T1 作为定时器来进行实例介绍使用。

了解了单片机内的定时器资源后,接下来我们来对定时器寄存器进行详细介绍。TMOD(见表1)、TCON(见表3)与定时器T0、定时器T1 间通过内部总线及逻辑电路连接,TMOD 用于设置定时器的工作方式,TCON 用于控制定时器的启动、停止,标志定时器的溢出和中断情况。当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定的工作方式独立工作,不再占用CPU 的操作时间,只有在计数器计满溢出时才可能中断CPU 当前的操作。

表1 TMOD寄存器

表中各位(从左至右为从高位到低位)含义如下。

TMOD 的低4 位为定时器0 的方式字段,高4位为定时器1 的方式字段,它们的含义完全相同。

M1 和M0 :工作方式控制位,其定义如表2 所示( 其中i=0,1)。

表2 定时器工作方式控制位

:功能选择位。

15.jpg


值得注意的是TMOD 寄存器不能位寻址,只能用字节指令设置高4 位定义定时器1 上的工作方式或低4 位定义定时器0 的工作方式。而且在复位时,TMOD 所有位均置0。

表3 TCON寄存器

表中各位(从左至右为从高位到低位)含义如下。

(1) TFl :定时器1 溢出标志位。当定时器1 计满数产生溢出时,由硬件自动置TF1=1, 向CPU发出定时器1 的中断请求,在中断允许时响应。进入中断服务程序后,由硬件自动清0。在中断屏蔽时,TF1 可作查询测试用,此时只能由软件清0。

(2) TR1 :定时器1 运行控制位。由软件置1 或清0 来启动或关闭定时器1。

当GATE=l,且为高电平时,TRI 置1 启动定时器l ;当GATE=0 时,TR1 置1 即可启动定时器1。

(3) TF0 :定时器0 溢出标志位。其功能及操作情况同TF1。

(4) TR0 :定时器0 运行控制位。其功能及操作情况同TR1。

(5) IE1 :外部中断1() 请求标志位。

(6) IT1 :外部中断1 触发方式选择位。

(7) IE0 :外部中断0( ) 请求标志位。

(8) IT0 :外部中断0 触发方式选择位。

值得注意的是TCON 中的低4 位用于控制外部中断,与定时器/ 计数器无关,在以后的讲座中会提及。当系统复位时,TCON 的所有位也均清0。

在上文中提到定时器溢出和中断,什么是定时器溢出呢?我们可以这样理解:往一个盆中滴水,水滴持续落下,盆中的水持续变满,最终会有一滴水使得盆中的水满了(这相当于计数到最大值)。这个时候如果再有一滴水落下,这时水就会漫出来,这就是“溢出”。当然,水溢出是流到地上,而定时器溢出后将使得TF0 变为“1”。一旦TF0 由0 变成1,就会产生中断。中断就是由于某个事件的发生,CPU 暂停当前正在执行的程序,转而执行处理该事件的一个程序。该程序执行完成后,CPU 接着执行被暂停的程序的这样一个过程。这正如我们本来在做某事,有人过来请求帮忙,我们停下手中的活去帮忙,完事之后回来接着做原来的事情。根据中断引发的不同,或者CPU 响应中断的不同条件,也可以把中断划分为可屏蔽中断(也就是说我们可以拒绝帮别人忙,继续做自己的事情)和不可屏蔽中断(事情做累了,必须休息)两种。

了解了中断原理之后,我们来看中断允许控制寄存器IE(见表4)和中断优先寄存器IP(见表5)。

表4 IE寄存器

EA:中断允许总控制位。EA=0,禁止所有中断;EA=1,开放所有中断,但是否允许各中断源的中断请求,还要取决于各中断源的中断允许控制位的状态。这点要注意,初学者往往容易忘了开放所有中断,从而导致没法进入中断源。

ET2 :时器/ 计数器T2 的中断允许位。

ES :串行口的中断允许位。

ET1 :定时器/ 计数器T1 的中断允许位。

EX1 :外部中断1(INT1) 的中断允许位。

ET0 :定时器/ 计数器T0 的中断允许位。

EX0 :外部中断0(INT0) 的中断允许位。

以上7 个中断允许控制位为0 时,禁止中断,为1 时允许中断。

表5 IP寄存器

PT2 :定时器/ 计数器T1 中断优先级控制位。

PS :串行口中断优先级控制位。

PT1 :定时器/ 计数器T1 中断优先级控制位。

PX1 :外部中断1 优先级控制位。

PT0 :定时器/ 计数器T0 中断控制位。

PX0 :外部中断0 中断优先级控制位。

以上6 个中断优先级控制位分别为“0”时为低级中断,为“1”时为高级中断。如果几个同一优先级的中断源同时向CPU 申请中断,CPU 通过内部顺序查询逻辑电路,按自然优先级顺序确定该响应哪个中断请求。自然优先级由硬件形成,其优先级别从高到底为外部中断0、定时器/ 计数器T0、外部中断1、定时器/ 计数器T1、串行口中断、定时器/ 计数器T2。

至此,对定时器控制相关的重要寄存器都介绍完毕了,接下来通过编写程序来进行验证实践。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值