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位计数模式
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值