单片机学习笔记(三)——定时器/计数器

计数器是对外来脉冲进行计数,51芯片有T0和T1两个外来脉冲输入端,分别接P3.4和P3.5两个引脚,当出现负跳变脉冲时,计数器加1;定时器也是通过计数器的计数来实现的,但此时的计数脉冲来自单片机内部,即每个机器周期产生一个计数脉冲,计数器加1。若采用12M晶振,则计数频率为1MHz,即每过1μs,计数器加1。
单片机的定时器/计数器有4种工作方式(方式0、方式1、方式2和方式3),其控制字在相应的特殊功能寄存器中,通过对它的特殊功能寄存器的编程,我们可以选择定时器/计数器两种工作模式和0~3四种工作方式。
一、控制寄存器介绍
首先介绍两个特殊功能寄存器TMOD和TCON,TMOD用于选择定时器/计数器的工作模式和工作方式,TCON用于控制T0、T1的启动和停止计数,也包含T0和T1的状态。
(一)TMOD(Timer Mode)
选择定时器/计数器的工作模式和工作方式,字节地址为89H,不能进行位寻址。

D7 D6 D5 D4 D3 D2 D1 D0
GATE C/T* M1 M0 GATE C/T* M1 M0

8位标志位分为两组,高4位控制T1,低4位控制T0。四个标志位含义如下:
(1)GATE:门控位。
GATE=0时,以运行控制位TRX(X=0,1)来启动定时器/计数器运行;
GATE=1时,以外部中断引脚INT0或INT1上的高电平来启动定时器计数器运行。
(2)M1、M0:工作方式选择位,4种编码对应4种工作方式如下:

M1 M0 工作方式
00 方式0,13位定时器/计数器
01 方式1,16位定时器计数器
10 方式2,8位的常数重新自动装载定时器/计数器
11 方式3,仅适用于T0,T0分为两个8位计数器,T1不计数

(3)C/T*:定时器/计数器模式选择位
C/T*=0,定时器模式
C/T*=1,计数器模式,计数器外部输入引脚T0(P3.4)或T1(P3.5)的负跳变脉冲计数。
(二)TCON(Timer Control)
定时器/计数器控制寄存器,字节地址88H,可位寻址,位地址为88H~8FH

TCON D7 D6 D5 D4 D3 D2 D1 D0
标志位 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H

低四位与中断有关,这里只介绍高四位
(1)TF1/TF0:计数溢出标志位,计数溢出时置“1”;使用查询方式时,此位作为状态位供CPU查询(查询有效后应及时清零);中断方式时,此位作为中断请求标志位,进入中断服务程序后硬件自动将其清零。
(2)TR1/TR0:计数运行控制位,值为“1”,定时器/计数器启动工作,为“0”停止工作。
二、四种工作方式的区分
方式0和方式1的区别在于计数器的位数不同,方式0为13位(THX+TLX低5位),方式1为16位(THX+TLX)。但是,方式0和方式1一旦计数溢出,则计数器将全部清零,这样如果需要循环计数就需要反复装入计数初值,不仅影响计数精度还导致编程麻烦,因此方式二就是针对这个问题设置的,在计数溢出时,不仅将溢出标志位TF置“1”,同时还将已经设定好的初值装入计数器(将THX中的8位数装入TLX)。
方式3只适用于定时器/计数器T0,目的是为了增加一个附加的定时器计数器。这时TL0和TH0被分为两个相互独立的8位计数器,其中TL0使用T0的状态位们;而TL0则被固定为一个8位定时器(不能做外部计数模式),它使用定时器T1的状态控制位TR1和TF1,同时占用T1的中断请求源TF1。因此,T0工作在方式3时T1运行的控制条件只有两个,一个是C/T*,用来选择定时器还是计数器模式;另一个是M1、M0选择T1运行的工作方式,M1M0=11 时,T1停止计数。
三、定时器/计数器对输入信号的要求
1.定时器:定时器模式计数信号是内部时钟脉冲,每个机器周期使计数器加1,因此定时器输入脉冲的周期与机器周期一样,为12倍的时钟周期。当采用12MHz晶振时,刚好每1μs计数一次。可以看出,定时的精度决定于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选择频率较高的晶体。
2.计数器:计数器的计数信号是来着相应外部输入引脚INT0和INT1的负跳变,在连续的两个周期采样,若第一采样为高电平 而第二次为低电平则表示发生了负跳变,计数器加1。由于确认一次负跳变需要两个机器周期,即24个震荡周期,因此外部输入的计数脉冲的最高频率为系统晶体震荡频率的1/24,如若采用6MHz晶振,则允许输入的脉冲频率为6MHz/24=250kHz。此外,为保证某一给定电平在变化前能被采样一次,则这一电平至少要保持一个机器周期。

你可能感兴趣的:(单片机原理及应用)