原标题:单片机入门-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闪烁
}
}
}
责任编辑: