由T0 T1、工作方式寄存器TMOD、控制寄存器TCON 构成
作为计数器使用:计数时钟来源于外部信号引脚
作为定时器使用:计数时钟来源于内部时钟信号(晶振)
T0和T1:
T0计数器 | TH0(高八位) |
TL0(低八位) | |
T1计数器 | TH1(高八位) |
TL1(低八位) |
8位计数器:0~256(计数范围)
16位计数器:0~65535(计数范围)
TMOD(工作方式寄存器)
功能:
1、选择定时计数器的4种工作方式
2、选择定时/计数功能
3、决定启动方式
TMOD设置方式 (字节寻址)
1、 GATE(门控制位):
T0 | GATE=1(软硬件共同启动) | TR0=1,INT0=1定时器启动 |
GATE=0(软件启动) | TR0=1,启动定时器不受INT0控制 | |
T1 | GATE=1(软硬件共同启动) | TR1=1,INT0=1共同启动定时器 |
GATE=0(软件启动) | TR1=1,启动定时器不受INT1控制 |
2、C/T:计数/定时功能选择
C/T | 1 | 计数 |
0 | 定时 |
3、M1、M0工作方式选择
功能 | 工作方式 | M1 | M0 |
13位计数器 | 方式0 | 0 | 0 |
16位计数器 | 方式1 | 0 | 1 |
8位计数器,初值自动重装 | 方式2 | 1 | 0 |
T0分成两个8位计数器,T1停止使用 | 方式3 | 1 | 1 |
TCON(控制寄存器)(可以位寻址)
功能:
1、启动控制
2、计满溢出控制
查询溢出标志方法:
while(!TF1);//TF1由0变1,定时时间到
TF1=0;//查询方式下,必须软件清零
定时/计数器程序编写步骤:
工作方式 | 工作方式0 | 工作方式1 | 工作方式2 |
计数位数 | 13位 | 16位 | 8位 |
计数寄存器 | THi高8位,TLi低5位 | THi高8位,TLi低8位 | TLi |
最大计数值M | 8192 | 65536 | 256 |
初值计算公式 | X(初值)=M-T(定时时间)/T(机器周期) | ||
初值设置 | THi=X/32;TLi=X%32; | THi=X/256;TLi=X%256; | TH/Li=X; |
特点 | 初值X不可自动重载,溢出后重新设置 | 初值X不可自动重载,溢出后重新设置 | X可以自动重装 |
///led以50ms闪烁/
#include<reg51.h>
void timer50ms()
{
TMOD = 0x10;//设置工作方式
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;//设置初值
TR1 = 1;//启动定时器
while(!TF1);//查询方式查询溢出标志位
TF1 = 0;//溢出标志清零
}
void main()
{
while(1)
{
P2 = ~P2;
timer50ms();
}
}
标签:定时器,方式,初值,计数,计数器,定时
From: https://blog.csdn.net/2201_75867091/article/details/143061882