51单片机定时/计数器

定时计数器

什么是定时/计数器以及用处

51单片机有2个16位定时器/计数器:定时器0(T0为P3.4)和定时器1(T1为P3.5)
这里所说的16位是指定时/计数器内部分别有16位计数寄存器。

当工作再定时模式时,每经过一个机器周期,寄存器的值就会加1,当这个寄存器装满时就会溢出。我们可以计算工作再定时模式时最高单次定时时间为65535*1.085 us= 时间(单位us)
当工作再计数器模式时,T0(P3.4引脚),T1(P3.5引脚)每来一个脉冲,计数器加1.

定时器的作用:定时计数器可以用于精确事件定时(比延时函数精确),PWM脉宽调制,波形发生,信号时序测量等方面。在这里插入图片描述

使用定时/计数器的步骤

1.启动定时/计数器(通过TCON控制器)

在这里插入图片描述

2.设置定时/计数器工作模式(通过TMOD控制器)

在这里插入图片描述
在这里插入图片描述

  1. TH0、TH1为高八位,TL 0、TL 1为低八位
  2. M0=1 (不可以这么写)应写成例:TMOD = 0x01
  3. 复位值为0x00

3. 查询定时/计数器是否溢出(读TCON内TF位)

实践

使用定时计数器0的十六位模式

定时器0的初始化

void timer0Init()
{
    
    
	TR0 = 1;//启动定时器0
	TMOD = 0x01;//定时器模式1,16位定时模式
	TH0 = (65535-46082/256;
	TL0 =  (65535-46082)%256;//定时50ms
	
}
 

定时时间超过50 ms可在主函数写

unsigned char msec,sec;
if(TF0 == 1//判断是否溢出
{
    
    
	TF0 = 0;//软件清零溢出标志位
	TH0 = 0x4b;
	TL0 = 0xfd;//定时50ms
	msec++;//50ms到
	if(msec == 20)
	{
    
    
		msec = 0;
		sec++;//一秒时间到
	}
	
}

定时/计数器的计数模式

	TR0 = 1;//启动定时器0
	TMOD = 0x05;//定时器模式1,16位计数模式

猜你喜欢

转载自blog.csdn.net/m0_52802869/article/details/112756004