首页 🥳 笔记

本文最后更新于 2021 年 02 月 08 日,已超过 178 天没更新!内容可能已失效,请自行测试 ~

🟥振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期),振荡周期又称时钟周期。

🟧状态周期:2个振荡周期为一个状态周期,用S表示。

🟨机器周期:1个机器周期含6个状态周期,12个振荡周期。

🟩指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。

定时值存储寄存器[存储定时器的计数值]

标准的51单片机内部有T0和T1两个定时器。

TH0/TL0用于T0,TH1/TH1用于T1

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

TCON-定时器控制寄存器的位分配(地址0x88、可位寻址)

76543210
符号TF1TR1TF0TR0IE1IT1IE0IT0
复位值00000000

TCON-定时器控制寄存器的位描述

符号描述
7TF1定时器1溢出标志。一旦定时器1发生溢出时硬件置1。清零有两种方式:软件清零或者进入定时器中断时硬件清零
6TR1定时器1运行控制位。软件置位/清零来进行启动/停止定时器
5TF0定时器0溢出标志。一旦定时器0发生溢出时硬件置1。清零有两种方式:软件清零或者进入定时器中断时硬件清零
4TR0定时器0运行控制位。软件置位/清零来进行启动/停止定时器
3IE1外部中断部分,与定时器无关
2IT1外部中断部分,与定时器无关
1IE0外部中断部分,与定时器无关
0IT0外部中断部分,与定时器无关

TMOD-定时器模式寄存器的位分配(地址0x89、不可位寻址)

76543210
符号GATE(T1)C/T(T1)M1(T1)M0(T1)GATE(T0)C/T(T0)M1(T0)M0(T0)
复位值00000000

TMOD-定时器模式寄存器的位描述

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

TMOD-定时器模式寄存器M1/M0工作模式

M1M0工作模式描述
000兼容8048单片机的13位定时器,THn的8位和TLn的5位组成一个13位定时器
011THnTLn组成一个16位的定时器
1028位自动重装模式,定时器溢出后THn重装到TLn
113禁用定时器1,定时器0变成两个8位定时器

⭕使用定时器的时候,需要以下几个步骤:
第一步:设置特殊功能寄存器TMOD,配置好工作模式
第二步:设置计数寄存器TH0TL0的初值
第三步:设置TCON,通过TR0置1来让定时器开始计数
第四步:判断TCON寄存器的TF0位,监测定时器溢出情况
计算如何用定时器定时:
例如晶振是11.0592MHz,那时钟周期就是1/11059200,机器周期是12/11059200,假如要定时20ms,也就是0.02秒,要经过x个机器周期得到0.02秒,则计算公式为:x*12/11059200=0.02,解得x=18432。
16位定时器的溢出值为65536(因65535再加1才是溢出),于是先给TH0TL0一个初始值,让它们经过18432个机器周期后刚好达到65536,也就是溢出,溢出后可以通过检测TF0的值可知,就刚好是0.02秒。那么初值y=65536-18432=47104,转成16进制便是0xB800,也就是TH0=0xB8,TL0=0x00。

/*单个led灯闪烁,延时一秒*/
#include "reg52.h"
typedef unsigned char u8;

sbit led=P0^0;
void main()
{
    u8 cnt = 0;           //定义一个计数变量,记录T0溢出次数
    TMOD = 0x01;             //设置T0为模式1
    TH0 = 0xB8;                //为T0赋初值 0xB800
    TL0 = 0x00;
    TR0 = 1;              //启动T0
    while(1)
    {
        if(TF0 == 1)       //判断T0是否溢出
        {
            TF0 = 0;            //T0溢出后,清0中断标志
            TH0 = 0xB8;        //并重新赋初值
            TL0 = 0x00;        
            cnt++;      //计数值自加1
            if(cnt >= 50)  //判断T0溢出是否达到50次
            {
                cnt = 0;            //达到50次后计数值清0
                led = ~led;
            }
        }
    }
}
/*定时器0实现流水灯左右移动*/
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;

unsigned char water_led1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char water_led2[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

void timer()
{
    TMOD = 0x01;
    TH0 = 0xB8;
    TL0 = 0x00;
    TR0 = 1;
}

void main()
{
    u8 i = 0;
    u8 cnt = 0;
    timer();
    while(1)
    {
        if(TF0 == 1)
        {
            TF0 = 0;
            TH0 = 0xB8;
            TL0 = 0x00;
            cnt++;
            if(cnt >= 50)
            {
                cnt = 0;
                if(i < 8)
                    P1 = water_led1[j];   //正向流动
                if(i >= 8)
                    P1 = water_led2[j-8]; //反向流动        
                i++;
                if(i == 16)
                    i = 0;
            }
        }
    }
}
    
/*静态数码管,每隔一秒显示一个数字*/
#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;
unsigned char smg[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void timer()
{
    TMOD = 0x01;
    TH0 = 0xB8;
    TL0 = 0x00;
    TR0 = 1;
}

void main()
{
    u8 i = 0;
    u8 cnt = 0;
    timer();
    while(1)
    {
        if(TF0 == 1)
        {
            TF0 = 0;
            TH0 = 0xB8;
            TL0 = 0x00;
            cnt++;
            if(cnt >= 50)
            {
                cnt = 0;
                P0 = smg[i];
                i++;
                if(i >= 16)
                {
                    i = 0;
                }
            }
        }
    }
}



文章评论

    hnf3 访客ChromeWindows
    1天 前   回复

    快递单号提供商、物流稳定 一单一用,不降权www.uudanhaowang.com

    ad2 访客ChromeWindows
    11天 前   回复

    7号礼品网全网最低礼品代发1元/单,提供全国礼品代发,ab单代发,空单。http://www.7lp.cn

    sb3 访客ChromeWindows
    28天 前   回复

    快递代发,礼品代发,快递单号购买大全www.kuaidi5u.com