初学定时器

51单片机定时器详解

定时器

1.延时的方法:


其中_nop_();:一个 NOP 的时间是一个机器周期的时间。

2.定时器的介绍

A).时钟周期

时钟周期T是时序中最小的时间单位(即1/时钟源频率)。

B).定时器

a).定时的含义

从某一个初始值开始,经过确定的时间后溢出的过程。

b).溢出

假如一个16位(即两个字节)的定时器,最大值为65535,那么等加到65535后,再加1就为溢出,溢出后,这个值就直接变为0。

C).定时器的寄存器

a).定时器存储寄存器
名称描 述SFR地址复位值
TH0定时器0高字节0x8C0x00
TL0定时器0低字节0x8A0x00
TH1定时器1高字节0x8D0x00
TL1定时器1低字节0x8B0x00

注:SRF:特殊功能寄存器。

b).定时器控制寄存器TCON的位分配(地址0x88、可位寻址)
76543210
符号TF1TR1TF0TR0IE1IT1IE0IT0
复位值00000000

位描述——前四位
TF1:定时器1溢出标志。一旦定时器 1 发生溢出时硬件置 1。
TR1:定时器1运行控制位。软件置位(清零)来进行启动(停止)定时器。
TF0:定时器 0 溢出标志。
TR0:定时器0运行控制位。软件置位(清零)来进行启动(停止)定时器。一旦定时器 0 发生溢出时硬件置 1。
后四位:外部中断部分,与定时器无关。
区分:硬件置1或清0和软件置1或清0
硬件:指一旦符合条件,单片机将自动完成的动作。
软件:指我们必须用程序去完成这个动作。

c).TMOD—定时器模式寄存器的位分配(地址0x89、不可位寻址)
76543210
符号GATE(T1)C/T(T1)M1(T1)M0(T1)GATE(T0)C/T(T0)M1(T0)M0(T0)
复位值00000000

位描述
T1/T0:T1表示控制定时器1的位,T0表示控制定时器0的位。
GATE:该位被置为1时为门控位。仅当”INTx”脚为高并且”TRx”控制位被置 1 时使能定时器”x”,定时器开始计时,当该位被清 0 时,只要”TRx”位被置 1,定时器 x 就使能开始计时,不受到单片机引脚”INTx”外部信号的干扰,常用来测量外部信号脉冲宽度。
C/T:定时器或计数器选择位。该位被清零时用作定时器功能(内部系统时钟),被置 1 用作计数器功能。

d).TMOD——定时器模式寄存器M1/MO工作模式
M1M0工作模式描述
000兼容8048单片机的13位定时器、THn的8位和TLn的5位组成一个13位定时器
011THn和TLn组成一个16位的定时器
1028位自动重装模式,定时器溢出后THn重装到TLn中
113禁用定时器1、定时器0变成2个8位定时器

:一般我们都选择模式1和模式2。
模式 1:是 THn 和 TLn 组成了一个 16 位的定时器,计数范围是 0~65535,溢出后,只要不对 THn 和 TLn 重新赋值,则从 0 开始计数。
模式 2:是 8 位自动重装载模式,只有TLn做加1计数,计数范围0~255,THn的值并不发生变化,而是保持原值,TLn溢出后,TFn就直接置1了,并且THn原先的值直接赋给TLn,然后TLn重新赋值的这个数字开始计数。

D).模式1的电路示意图

这里写图片描述

注释(以定时器0位例)

a).OSC:时钟频率,又一个机器周期为12个时钟周期,故d为12。
b).从GATE往右,先后为非门、或门和与门电路。
c).TR0和下边或门电路的结果要进行与运算,TR0如果是0的话,与运算完了肯定为0,所以为了使定时器工作,TR0=1。
d).如果要与门结果为1,则或门的结果必须为1。在GATE=1的情况下,经过非门后变成0,如果要或门电路结果为1,则INT0(即引脚P3^2)必须为1,定时器才会工作。
e).GATE=0,经过非门后为1,那么不管INT0引脚是什么电平,经过或门电路后都是1,则定时器肯定工作。

3.定时器的应用

A).使用定时器的必要步骤

第一步:设置特殊功能寄存器 TMOD,定时器方式和定时器几的设置。
第二步:开总中断EA。
第三步:ET0位,打开定时器0中断。
第四步:设置TCON,通过TR0置 1 来启动定时器。
第五步:设置计数寄存器TH0和TL0的初值。
注:使用定时器一般就要使用中断,但中断和定时器不是一码事,定时器是单片机模块的一个资源,确确实实存在的一个模块,而中断时单片机的一种运行机制。

B).通过定时器来控制LED的闪烁

unsigned int t=0;
void main()
{
    TMOD=0x01;//选择模式1
    EA=1;//开总中断
    ET0=1;//开0中断
    TR0=1;//启动定时器0
    TH0=(65536-50000)/256;//赋初值,求膜
    TL0=(65536-50000)%256;//赋初值,求余
    while(1)
    {
        if(t==20)
        {
            t=0;
            P1=0x00;
        }
    }
}
void timer() interrupt 1
{
    TH0=(65536-50000)/256;//赋初值,求膜
    TL0=(65536-50000)%256;//赋初值,求余
    t++;
    P1=0xff;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值