51单片机——定时器/计数器

简介

之前单片机学习中,实现延时的方式是软件延时,就是通过循环代码,让cpu数数一段时间,这段时间cpu只能处于数数状态,接收不到其他的指令

而C51单片机中,有专门的硬件电路来支持数数,这个硬件电路会对应有相应的寄存器,定时器和计数器都是依赖于这个硬件电路,但是二者计数的信号来源不同。

如果把该寄存器配置为定时器时,每经过一个机器周期,寄存器的值就加1,相当于通过内部震荡电路来计数,通过寄存器的值*机器周期的时间就可以得出定时器定时长度

如果把该寄存器配置为计数器时,每次来一个负跳变信号(从T0,P3^4或T1,P3^5引脚读入),寄存器的值就加1,相当于通过读取外部针脚信号来计数

标准C51有两个定时器/计数器:T0和T1,C52多一个T2

定时器如何定时

定时器的本质原理:每经过一个机器周期,计数+1。那么只要知道了机器周期的时间,那么定时的时间就等于计数*机器周期

晶振

晶体振荡器,又称为数字电路的"心脏",是各种电子产品里面必不可少的频率元器件,数字电路的所有工作是离不开时钟的,晶振的好坏还会影响系统的稳定性

比如这块C52开发板的时钟频率就是11.0592MHZ  

时钟周期

也称为振荡周期,是时钟频率的倒数,时钟周期是计算机中最基本,最小的时间单位,在一个时钟周期,CPU仅能完成一项最基本的工作,更小的时钟周期意味着更高的工作频率

机器周期

也称CPU周期,在计算机中,常把一个指令的执行过程划分为若干阶段(取地,译码,执行等等),每一个阶段完成一个基本操作,完成一个基本操作所需的时间称为机器周期,一般情况下,一个指令周期由若干个机器周期组成,一个机器周期由若干个时钟周期组成,51单片机中一个机器周期等于12或者6个时钟周期,传统模式是12个时钟周期,所以定时器+1一般经过1/11059200*12=1.085微秒

知道了这个时间,我们就可以通过设定寄存器存值的多少,来设计定时器定时的时长

定时器/计数器的相关寄存器

定时器控制寄存器TCON

地址88H,类似IO口寄存器,可按位寻址,进行定时器的控制

从高位到低位为TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0

TF位检测计数溢出,置1时表示溢出,置0时非溢出,溢出时,如果需要产生中断,此位作为中断请求位,cpu进入中断服务后,由硬件置0,不用中断时也可以软件手动置0;TR位控制计数运行置1时启动计数,置0时停止计数 

IE位为外部中断请求位,cpu进入中断服务时,由硬件置0;IT位为外部中断的触发方式,置0为电平触发,置1为负跳变触发

定时器模式寄存器TMOD

地址89H,不可按位寻址,用于选择定时器的工作模式和工作方式,即T0和T1的工作方式

高低4位都是GATE,C/T,M1,M0,高4位管控定时器1,低4位管控定时器0

M1和M0取值00,01,10,11分别对应4种模式

00:13位定时器,TL只用低5位,TH8位全用

01:16位定时器,TL,TH全用,优点是量程大,但是每次爆表需要手动给THTL赋初值

10:8位自动重载定时器,TL位来计时,溢出时,硬件自动将TH存放的值存入TL中,优点是效率高,爆表时硬件自动将TH的值存入到TL中继续计数

11:对于定时器1,停止计数,定时器无效

       对于定时器0,作为双8位定时器,TL0作为一个8位定时器通过TCON0控制,TH0也作为一个8位定时器通过TCON1控制

计数寄存器TL0,TH0,TL1,TH1

用于计数,并且有4种工作方式,由TMOD寄存器控制

如果只用高位或者低位只能数256下,高低为同时用能数65536下,即71ms,溢出时TCON对应TF位置1,可以供cpu查询,注意查询后及时清零

如何设定定时时间

16位模式定时10ms

因为寄存器数数只能从0开始数到65536,那么如果我们改变开始数的数就可以设定自定义定时时间,比如定时10ms,算出起始数为65536-10000/1.085=56320,转化为16进制为DC00,所以设定TL=0x00,TH=0xDC就可以设定定时10ms

​
void Delay10()		//10毫秒@11.0592MHz
{
	AUXR &= 0x7F;	//定时器时钟12T模式
    TMOD &= 0xF0;	//设置定时器模式
	TMOD |= 0x01;	//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0xDC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
}

​

按位操作

清0用&,置1用|

对于8位寄存器,如果想在指定位置上置1,其他位置不变,就可以将寄存器的相应位置或(|)上1,其他位置或(1)上0;如果想在指定位置上置0,其他位置不变,就可以将寄存器的相应位置与(&)上0,其他位置与(&)上1;

TMOD &= 0xF0;    //高4位&1111,不修改定时器1的配置,低4位&0000,将定时器0的控制位所有置0

TMOD |= 0x01;    //高4位|0000,不修改定时器1的配置,低4位|0001,将定时器0的控制位最低位置1,这样就将TMOD的低4位配置为0001,将定时器0配置为16位定时器,而高4位不改变

AUXR寄存器的作用

AUXR寄存器8位,

最高位和次高位分别控制定时器0和1是否12分频,置0,12分频,置1,不分频,默认置0,12分频

最低位用于选择波特率发生器是定时器1还是独立波特率发生器,置0为定时器1,置1为独立波特率发生器

最低位还用于决定是否ALE输出,置1禁止输出,置0运行输出,禁止ALE信号输出后,会降低系统的EMI输出(单片机时钟对外界的电磁辐射干扰),

案例

1、定时器控制闪灯

#include "reg52.h"

sbit ledblue =P3^7;
sbit ledyellow =P3^6;

void delay500(){
	int cnt=0;
	TMOD=0x01;
    TL0=0x00;
	TH0=0xDC;
	TR0=1;
	while(1){
	  if(TF0==1){
		 cnt++;
		 TF0=0;
	   TL0=0x00;
	   TH0=0xDC;
	 }
	 if(cnt==100)break;
	}
	TR0=0;
	
}

void main(){
	 ledblue=0;
	 delay500();
     while(1){
        ledblue=!ledblue;
		delay500();
	 }
}

                                                                                                                                                                                                                                                                                                                                         

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在MCS-51单片机中,定时器/计数器在工方式1下,被称为13位定时/计数器。它包含一个8位计数器一个5位可编程预分频器。 在工方式1下,定时器/计数器一个外部时钟源为输入进行计数。时钟信号的频率由TCLK的频率决定。每当定时器/计数器的计数值达到2^13(8192)时,它会发出一个中断请求(TIF)。该中断请求可以被单片机的中断系统响应,执行相应的中断服务程序。 在工方式1下,定时器/计数器可以用于测量外部信号的频率。当设置为计数模式时,它可以记录外部信号的脉冲数量。 为了开始定时器/计数器的计数,在TCON寄存器中的TR1位(T1的控制位)应被设置为1。如果TR1位设置为0,定时器/计数器将停止计数。 当定时器/计数器计数溢出时,它会将TCON寄存器中的TF1位(T1的溢出标志位)置位。该位在溢出时自动被硬件清零。可以通过检查该位的状态来判断定时器/计数器是否溢出。 通过设置定时器模式寄存器(TMOD)中的GATE1位,可以选择使定时器/计数器继续计数,即使没有外部时钟源输入。通过设置CT1位,可以在计数器模式和定时器模式之间切换。 总而言之,在MCS-51单片机中,工方式1下的定时器/计数器可用于计时、触发中断和测量外部信号的频率。根据需要,可以通过设置不同的控制位和寄存器来实现各种应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做台无人机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值