在8051单片机中有两个定时器/计数器,分别是定时器/计数器0和定时器/计数器1。
T/C0: 定时器/计数器0
T/C1: 定时器/计数器1
T0: 定时器0
T1: 定时器1
C0: 计数器0
C1: 计数器1
如果是对内部振荡源12分频的脉冲信号进行计数,对每个机器周期计数,它是定时器(T0和T1)。
如果是对单片机引脚T0(P3.4)或者T1(P3.5)输入的外部脉冲信号进行计数,则它是计数器(C0、C1)。
定时/计数器(T/C)的结构图:
定时/计数器的结构:
1、由两个加1计数寄存器(由高8位和低8位两个寄存器组成,共计16位,每个寄存器是16位),分别对应T/C0和T/C1。
2、TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能。
3、TCON是控制寄存器,控制T0和T1的启动和停止及设置溢出标志。
加1计数寄存器输入的计数脉冲有两个来源:
1、一个是由系统的时钟振荡器输出脉冲经12分频后送来;
2、一个是由单片机引脚T0(P3.4)或T1(P3.5)输入的外部脉冲源。
每来一个脉冲,计数器加1, 当加到全1的时候,再输入一个脉冲使得计数器回零。
且计数器的溢出使TCON中的TF0或者TF1置1, 向CPU发出中断请求(定时器/计数器中断允许时)。
如果定时器/计数器工作于定时模式,则表示定时已到。
如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值是加1计数器的计数值。
控制寄存器TCON:
TCON的低4位用于控制外部中断。TCON的高4位用于控制定时器/计数器的启动和中断请求,其格式如下:
reg51.h文件:
CPU响应中断,这个时候会去执行某个中断服务函数程序。
工作方式寄存器:
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低4位用于T/C0, 高4位用于T/C1。
格式如下:
GATE的工程应用是用来测量脉冲的宽度。
从高电平的时候开始计数,看高电平花了多少时间,从而计算出脉冲的宽度。
正常情况下GATE置0即可。
M1M0:工作方式设置位,定时/计数器有四种工作方式,有M1和M0进行设置。
方式1: 常用的16位定时/计数器。
方式2: 主要用在串口波特率发生器。
方式0和方式3:几乎不用。
方式1:(定时器0模式)
方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。
是对每个机器周期进行计数,计数器满了之后,会溢出,然后TF0置1,产生中断请求,CPU响应中断请求。
16位定时器0装初值的计算公式:
假设要计算的个数是n:
TH0=(65536-n)/256 商
TL0=(65536 - n)%256 求余
8051的基本时序周期:
振荡周期:为单片机提供振荡源的周期(是指振荡源的两个相邻同方向峰值之间的时间。)
机器周期:1个机器周期等于12个振荡周期。
若:fosc=12M,则8051的各周期参数如下:
振荡周期=1/12 us
机器周期=1us
单片机使用的晶振是12M,那么每个机器周期是1us。
加1计数寄存器是每1个机器周期加1,也就是相当于每间隔1us加1个数。
65536-50000=15536
也就是从15536开始计数,计数50000次,也就是50000*1us,得到50ms。