定时器的介绍
定时器 :51单片机的定时器属于单片机的内部资源,其电路的设计连接和运转均在单片机内部完成。根据单片机内部的时钟或者外部的脉冲信号对寄存器中的数据加1,定时器实质就是加1计数器 。因为又可以定时又可以计数,又称之为定时/计数器。
作用:在写程序时经常会用到延时代码,比如用循环来实现延时(即让CPU不断进行记数)。但CPU在记数(执行延时)的时候做不了其他的事情,且这种延时是不精确的。因此需要一个工具来帮助CPU进行记数,而这个工具便是定时器。
例如你想在十分钟后做某事,如果身边没有任何工具,你就要自己数600秒,而在你数数时无法分心做其他事。但如果身边有个闹钟,就能定一个10分钟的闹钟,而在这10分钟内你可以做别的事情。
需要注意的是定时器大部分使用情况要搭配中断系统。
与定时器相关的寄存器:TH1、TL1、TH0、TL0、TMOD、TCON。
与中断相关的寄存器:IE、IP。
定时与计数
定时功能 :通过内部或外接的晶振(即SYSclk),对内部寄存器中的值进行递增计数,当计数到预设值时,定时器会产生一个中断请求信号,通知CPU进行相应处理。(相当于闹钟响了提醒你该做事情了,即定时作用)
计数功能:主要通过外部引脚(T0 Pin/T1 Pin)来实现,只有当外部事件发生时才会产生一个脉冲信号,触发内部寄存器进行加1操作。(它不像定时功能一样以固定的频率递增计数)
定时器资源
以STC89C52为例,其定时器个数为3个(T0、T1、T2),T0、T1与传统的51单片机兼容,T2是此型号单片机增加的资源。
注意:定时器的资源和单片机的型号关联在一起,不同型号可能含有不同的定时器个数和操作方式。但一般来说,T0、T1的操作是所有51单片机共有的。
CPU时序
指令周期 :CPU每取出一条指令并执行这条指令,都要完成一系列的操作,这一系列操作所需要的时间称为指令周期。
机器周期(CPU周期) :在计算机中,为了便于管理,常把一条指令的执行过程 划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。
时钟周期 :时钟周期T 又称为振荡周期 ,由单片机片内振荡电路OSC产生,常定义为时钟脉冲频率 的倒数,是时序中最小的时间单位。例如,若某单片机时钟频率为1MHz,则它的时钟周期T应为1μs。
三种周期的关系:指令周期由若干(通常1~4)个机器周期组成,而机器周期又包含若干(通常为12)个时钟周期。
状态周期:每个状态周期为时钟周期的两倍。
例如:当外接晶振为12MHz时,51单片机相关周期的具体值为:振荡周期=1/12us;状态周期=1/6us;机器周期=1us;指令周期=1~4us;
定时器工作模式
对于STC89C52的T1和T0均有四种工作模式:
|-----|------------|
| 模式0 | 13位定时器/计数器 |
| 模式1 | 16位定时器/计时器 |
| 模式2 | 8位自动重装模式 |
| 模式3 | 两个8位计数器 |
其中模式1最为常用,故只介绍模式1。模式1的内部连接如下所示,可分为三个部分:
SYSclk :系统时钟,即晶振频率,通常为12MHz或11.0592MHz。
进位规则:模式1下,T0的定时器配置为16位定时/计数器,由TL0和TH0的8位(共16位)构成。当TL0的8位溢出时向TH0的8位进位 ,TH0技术溢出时,向TCON中的溢出标志为TF0进位(TF0由0变1)。
计数速率 :STC89C52系列的单片机的定时器有两种计数速率(分频):一种是12T模式 ,每12个时钟加1,与传统8051单片机相同;另一种是6T模式,每6个时钟加1,速度是传统8051单片机的两倍。
计数器由时钟提供提供脉冲信号,经过分频器(12分频或6分频),每来一次脉冲则计数器加1,当计数到达65535时下一个脉冲会溢出,触发中断(即告诉CPU闹钟响了该干事情了)。
工作方式寄存器TMOD
TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1,具体如下:
|----------|----|----|-----|------|----|----|-----|------|
| 位 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 字节地址:89H | M0 | M1 | C/T | GATE | M0 | M1 | C/T | GATE |
C/T为定时/计数选择位,寄存器TMOD中的一位,用来控制选择开关:当C/T为1时,连接T0 Pin,为计数器功能;当C/T为0时,连接SYSclk(系统时钟),为定时器功能。
GATE为门控位,当GATE为0时,经过非门为1,进入或门(因为或门为有1出1,因此此时可忽略INT0),再进入与门,当TR0为1时才能出1,这样contorl开关才能连通;当GATE为1时,INT0必须为1,TR0为1时开关才能连通。
M0/M1为四种工作模式设置位
|------|------|-----------|
| M0M1 | 工作模式 | 说明 |
| 0 0 | 模式0 | 13位定时/计数器 |
| 0 1 | 模式1 | 16位定时/计数器 |
| 1 0 | 模式2 | 8位自动重装 |
| 1 1 | 模式3 | 两个8位计数器 |
工作方式寄存器TCON
TCON的高四位用于定时/计数器的启动和中断申请;低四位用于外部中断。此处只介绍高四位。
|----------|---|---|---|---|-----|-----|-----|-----|
| 位 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 字节地址:88H | | | | | TR0 | TF0 | TR1 | TF1 |
TF1:T1溢出中断请求标志,T1计数溢出时由硬件自动使TF1=1。CPU响应中断后硬件自动使TF1=0。(TF1也可以由软件置1或0)
TR1:T1运行的控制位。当TR1=1时,T1开始工作;当TR1=0时,T1停止工作。TR1由软件控制,故软件可控制定时/计数器的启动与停止。
TF0、TR0:针对于T0,作用与上述的TF1、TR1一样。
中断系统
中断系统是为了使CPU具有对外界紧急事件的实时能力而设置的。
中断 :当CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完后再回到原来被中断的地方,继续原来的工作。实现这种功能的部件称为中断系统。
中断源:请示CPU中断的请求源称为中断源。中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断时,要进行优先级排序(优先处理最紧急的中断请求源)。CPU总是先响应优先级别高的中断请求。
中断嵌套 :当CPU正在处理一个中断源请求时,发生了另一个优先级高的中断源请求。CPU暂停对原来的中断源的服务程序,转而去处理优先级更高的中断请求源,处理完后再回到原低级中断服务程序,最后回到主程序。此过程为中断嵌套 。这样的中断系统为多级中断系统 ,没有中断嵌套的系统为单级中断系统。