51单片机 —— 计时器
TMOD : 8位寄存器,不能位寻址,低四位控制定时器T0,高四位控制T1。每四位寄存器中,低两位定义定时器的工作方式(方式一与方式二),第三位是功能选择位(定义计时器为定时或计数),第四位为门控位,决定INTx引脚输入电平的影响,也可理解为是否引入外部控制定时器的启停动作。
========================================================================
| ||
TMOD | D7 D6 D5 D4|| D3 D2 D1 D0
| ||
对应 | GATE C/T M1 M0|| GATE C/T M1 M0
| ||
从属 | 定时器1 || 定时器0
| ||
========================================================================
GATE -> 门控制
GATE = 1 : 当且仅当TRx=1,INTx=1,计数启动,否则停止
INT0为高电平TR0置位 -> INT0 = 1,TR0 = 1,启动定时器0
INT1为高电平TR1置位 -> INT1 = 1,TR1 = 1,启动定时器1
GATE = 0 : 定时器不受INTx影响
TR0 = 1,启动定时器T0
TR1 = 1,启动定时器T1
C/T -> 功能选择位
C/T=0 : 定时功能:加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;
C/T=1 : 计数功能:加1计数器对来自输入引脚T0(P3^4)与T1(P3^5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;
M1、M0 -> 方式选择功能
51定时器 T0有4种工作方式:方式0,1,2,3
T1有3种工作方式:方式0,1,2
0 0 方式0:13位定时器/计数器
0 1 方式1:16位定时器/计数器
1 0 方式2:自动重载8位定时/计数器
1 1 方式3:T0分为2个8位独立计数器
令M为计数器最大值
方式0:M = 2^13 = 8192
方式1:M = 2^16 = 65536
方式2:M = 2^8 = 256
方式3:定时器0分成两个8位计数器,两个M均为256
//CPU开中断
EA = 1;
//确定工作方式
TMOD = 0x00; //T0为方式0,16位装载初值
//预制初值
TH0 = (65536-num)/256; // 65536为2^12(12MHz),num为延时时间(单位1微秒),256为2^8(8位寄存器)
TL0 = (65536-num)/256; // 必写,写在TH0后,取余符号(暂定)
//软件启动
TR0 = 1; // 如果TMOD设定为中断引脚启动则需加上中断引脚启动电平