单片机定时器精准定时_单片机入门-C51语言采用定时器查询方法获取1秒精准定时…

  • Post author:
  • Post category:其他

原标题:单片机入门-C51语言采用定时器查询方法获取1秒精准定时

视频如下:

51系列单片机含有专用的 定时器/计数器,定时器/计数器是一个二进制的加1寄存器,当启动后就开始从所设

定的计数初始值开始加1计数,寄存器计满回零时能自动产生溢出中断请求。但定时与计数两种模式下的计数方

式却不相同,定时器模式时,每个机器周期寄存器增1,即寄存器对机器周期计数。

先总结一下定时器的用法:

定时器/计数器的运用总结:

1。计算计数初值:

计数值=定时的时间/机器周期

初值X=最大计数值M-计数值;

2.TMOD寄存器的设置:参考教材P69

GATE C/T M1 M0 GATE C/T M1 M0

3.TCON寄存器的设置:参考教材P69

主要关注TR1/TR0

4.打开中断(含定时器中断和总中断)或者查询TF0/TF1

5。编程

举例:请大家设计1个1秒定时的定时器,用定时器0工作在方式1

假设单片机的时钟是12MHZ=>机器周期=(1/1MHZ)=1us

分析:1s=20*50ms ,先用定时器定时50ms,然后再数20次

1。计数计数初值:计数值=50ms/1us=50000

初值X=65536-50000=15536=0X3CB0

2. TMOD设置:(定时器T0,T1没用到)

GATE C/T M1 M0 GATE C/T M1 M0

0 0 0 0 0 0 0 1 =》0x01

TMOD=0X01

3.TCON寄存器的设置:

TR0=1

4.打开中断(含定时器中断和总中断)或者查询TF0/TF1

5.编程

获取1秒精准定时代码如下:

#include

sbit P1_0=P1^0;

unsigned char count=0;

void main()

{

TMOD=0X01;//设置定时器0工作方式1

TH0=0X3C;

TL0=0XB0; //设置定时器的计数初值15536

TR0=1; //启动定时器0

while(1)

{

while(TF0)//判断溢出 ,是否计数到65536 ,才产生50ms的定时

{

TF0=0;

TH0=0X3C;

TL0=0XB0; //设置定时器的计数初值

count++;

if(count==20) //20*50ms=1000ms=1s

{

count=0;

P1_0=!P1_0; //对P1.0取反,输出高低电平,从而使LED闪烁

}

}

}

责任编辑:


版权声明:本文为weixin_39834149原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。