目录

简介

定时器配置流程

1.配置定时器工作方式寄存器TMOD

2.配置中断寄存器TCON

3.定时时间计算公式

4.配置中断允许寄存器IE

5.总体演示


简介

定时器/计数器本质都是对脉冲信号进行计数,区别在于作为定时器时的脉冲信号来自于晶振12分频,而作为计数器时的脉冲信号来自于定时器外部映射引脚(P3.4和P3.5)的脉冲信号

51单片机定时器计数方式为向上计数

定时器配置流程

1.配置定时器工作方式寄存器TMOD

TMOD负责决定是定时还是计数,决定定时器/计数器的工作方式

C/T = 0,为定时器模式

C/T = 1,为计数器模式

方式0、1计数溢出后需要写代码手动重装

方式2由硬件自动重装:计数溢出不再由THx产生,转而由TLx产生,THx用于存储计数初值,并在计数溢出时将初值赋与TLx

2.配置中断寄存器TCON

定时器可以普通计数,也可以计数到设定值申请中断

查询计数溢出标志位TFx后要手动将其清0

3.定时时间计算公式

以工作方式1,计数容量16,分为高8位低8位为例

定时时间 = ( 2^16 - x ) * 12 / 晶振频率

1Mhz = 1us,当晶振单位是Mhz时定时时间的单位则是us

定时时间人为设定,因此只需计算从哪里开始计数即可,即计算x,再将x分别赋给TH和TL即可

简便赋值方式

TH = (65535 - x) / 256
TL = (65535 - x) % 256

4.配置中断允许寄存器IE

5.总体演示

void main()
{
    TMOD = 0x01;   //使用T0,工作方式1,定时器
    TH0 = 0xff;     
    TL0 = 0x00;
    TR0 = 1;       //启动T0

    EA = 1;        //开启总中断通道
    ET0 = 1;       //开启T0中断通道

    while(1)
    {

    }
}

void Function() interrupt 2
{
    TH0 = 0xff;    //重新装载计时器初值
    TL0 = 0x00;
    ...
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐