今天想尝试使用串口通信来控制舵机旋转的时候,由于同时用到了定时器T0和T1(用来设定波特率)。程序有点问题,运行不畅,所以现在想通过写篇文章重新来梳理对51单片机这两个定时器的理解。
STC89C51系列单片机有两个定时器:定时器T0、定时器T1
一、首先了解到51单片机的常用晶振是12MHz的,内部一般是12分频的,也就是12T。所以每计数一次需要1us的时间
二、定时器的工作模式有四种,模式0,1,2的工作模式对T0 、T1都是相同的,但是模式3只有T0才有:
模式0:13位计时器,有TL0的低5位和TH0的全8位构成一个13位的计时器。13位计时器计数溢出后会自动清零,同时把中断标记TF0置1。如果需要重新使用,需要重新去更新时间常数,并定时器的的中断标志位置0.
模式1: 16位计时器,和模式0几乎完全相同,但是因为是16位(TL0有8位 、TH0有8位),所以计时范围大大增加(0~65535),一共是2的16次方。
模式2: 8位自动重载模式。TL0计时结束后,单片机会自动把TH0的重载到TL0中,不需要像前两种模式那样手动重载。
模式3:只有计时器T0才有模式3,计时器T1是没有模式3的。模式3的主要方式是把定时器T0的TL0和TH0分开看作是两个独立的8位定时器。两个定时器需要手动重载
三、定时器的控制寄存器
8051单片机有两个8位的特殊功能寄存器来控制定时器的工作状态;分别是TMOD、TCON
1、工作模式控制寄存器TMOD
这个是一个8位的寄存器,0-3位控制的是定时器T0; 4-7位控制的是定时器T1。
GATE是门控位,用来设定P3^2或P3^3的电压对定时器的计数是够影响的。GATE=0时,表示计数器计数与否与两端口电压状态无关;GATA=1时,计数器是否计数要参考引脚的状态,即P3.2为高时T0才计数,P3.3为高时T1才计数。一般都是设置为0的。
C/T位:计数/计时的选择位。C/T = 0时,定时模式; C/T = 1时,计数模式。
M1M0两位决定了定时器的工作模式:
2、工作状态控制寄存器TCON