此推文为学习笔记,如果错误麻烦大佬指出更正。
51定时/计数器简介
51单片机有2个16位定时器/计数器:定时器0(T0为P3.4)和定时器1(T1为P3.5)
这里所说的16位是指定时/计数器内部分别有16位的计数寄存器。分别为低8位寄存器和高8位寄存器。
定时器模式
当工作在定时模式时,每经过一个机器周期内部的16位计数寄存器的值就会加1,当这个寄存器装满时溢出。
我们可以算出工作在定时模式时最高单次定时时间为
65535*1.085us=时间(单位us)
定时器作用:可以用于精确事件定时,PWM脉宽调制,波形发生,信号时序测量的方面。
计数器模式
当工作在计数器模式时,T0(P3.4引脚),T1(P3.5引脚)。每来一个脉冲,计数寄存器加1。
使用51定时/计数器步骤
1.启动定时/计数器(通过TCON控制器)
2.设置定时/计数器工作模式(通过TMOD控制器)
3.查询定时/计数器是否溢出(读TCON内TF位)
51定时/计数器控制寄存器
每一位寄存器的详细功能请查阅芯片使用手册,这里是“stc8952”
TL是开始计时的最低位,TH是截止计时的最高位。通过调节这两个寄存器的值可以设置脉冲波大小和占空比等功能。一个方波完成后就清零。
Timer Control控制器(TCON)
“可位寻址”: 访问存储器、寄存器或输入/输出端口时,可指定其中一个位。
例如要指定P0输入/输出口中的bit 1,则指定为P0.1即可。
例子:可位寻址的IE中有八位EA - ET2 ES ET1 EX1 ET0 EX0可以直接用ET2=1来操作;
下面使用定时器1来讲解
Timer Flag
TF1(T1溢出标志位):当定时/计数器T1溢出时由硬件置“1”TF1,向CPU发出
中断请求,一直保持到CPU响应时,才由硬件清“0”(TF1也可以由程序查询清“0”)
Timer Run
TR1(定时器T1运行控制位):该位由软件置“1”或清零。TR1= 1就允许T1开始计
数,TR1=0时禁止T1计数。
TF0(T0溢出标志位)TR0(定时器T0运行控制位),配置方法与T1相同。
IE1、IT1、IE0、IT0与定时/计数器无关,是控制外部中断的。
Timer Mode
位 | 符号 | 功能 |
TMOD.7 | GATE | 控制T1,置“1”时只有在P3.3脚(INT1)为高及TR1置“1”时才可以启动T1,置“0”时TR1为“1”就允许T1启动。 |
TMOD.6 | C/T | 置“1”时T1做计数器,置“0”时T1做定时器。 |
TMOD.5 | M1 | M1 = 0,M0 = 0时 工作模式0。 M1 = 0,M0 = 1,工作模式1,此时由TH1、TL1寄存器组成16位计数器,TH1为16位的高8位,TL1为16位的低8位,当这个16位计数器加满时,T1溢出。TF1被硬件置“1”。 |
TMOD.4 | M0 |
TMOD3~0位设置T0定时器的,和T1设置相同(除工作模式3)