历史上的今天
返回首页

历史上的今天

今天是:2025年08月17日(星期日)

2018年08月17日 | 51单片机功能模块学习笔记 — 定时器

2018-08-17 来源:eefocus

一.定时器

1. 简介

C51中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器或者计数器使用。

确切的说,定时器和计数器区别是致使他们背后的计数存储器加1的信号不同。当配置为定时器使用时,每经过1个机器周期,计数存储器的值就加1。而当配置为计数器时,每来一个负跳变信号(信号从P3.4 或者P3.5引脚输入),就加1,以此达到计数的目的。

 

标准C51有2个定时器/计数器:T0和T1。他们的使用方法一致。C52相比C51多了一个T2。

 

2. 基础介绍

定时器的本质原理就是:每经过1个机器周期,计数存储器的值就加1。因此当使用定时器时,就必须掌握时钟周期和机器周期的关系。

(1)时钟周期

时钟周期 :晶振频率的倒数。如果使用的是11.0592M的晶振,那么就是 1 / (11.0592x10^6) 秒   

注:1MHz = 10^6Hz

(2)机器周期

机器周期 :标准51下,机器周期 =12倍的时钟周期。即:12 / (11.0592x10^6) 秒 。有的增强51单片机,1个机器周期等于4倍的时钟周期,还有的更短。

 

3.定时器的寄存器

(1)计数存储寄存器THx&TLx

定时器和计数器工作,都依赖于计数。计数则是由计数存储器THx和TLx这2个8位寄存器完成的。

 

对于计数器,每来一个负跳变信号(信号从P3.4 或者P3.5引脚输入),就加1,以此达到计数的目的。

 

对于定时器,每隔1个机器周期 加 1,假如(只是假如)一个机器周期为 1ms , 当加到1000次时,我们就认为经过了1s,这就是定时器定时依据。

 

Ø T0和T1都拥有一对8bit计数存储寄存器。他们的复位值都是0。

T0 对应:TH0 ,TL0

T1 对应 : TH1 , TL1

sfr TL0 = 0x8A; // TL中的L是LOW的意思,代表低位,同理H代表HIGH高位。2个8位组合起来就形成了一个16位的计数器。

sfr TL1 = 0x8B;

sfr TH0 = 0x8C;

sfr TH1 = 0x8D;

当计数器加满后,再加1,就溢出了,溢出后自动归0。且溢出时,溢出标识位TFx 就会自动变为1(T0的溢出标志位TF0,T1的溢出标志位TF1)。如果启用了对应的中断,单片机会调用中断处理函数。

 

Ø 若TH0 和 TL0 以 16位 模式工作,那它的计数范围为   [0 , 65535 ]  ,  也就是累加 65536次发生溢出。 每累加一次是  12 / (11.0592x10^6) 秒。

那么从 0 累加到溢出 历时  ≈ 0.071s = 71ms 。

 

为了避免误差,可以延时 10的整数倍ms,以便用倍数控制更长的延时时间。所以,我么要给 TH0 和  TL0赋一个初始值,使他们的溢出周期(TH0,TL0从初始值到溢出所用的时间)减少到 10ms。举个例子来说,如果我的延时周期为200ms,那么定时器的应该定时100ms,但是定时器最大的定时时间也只为71ms,所以我们可以先定时10ms,再循环10次,也就是10*10ms = 100ms;


(2)工作模式寄存器TMOD

通过TMOD来配置T0和T1的工作模式。


Ø C/T:计数器,定时器功能选择位。 1为计数器模式, 0 为定时器模式。


Ø M0和M1:


Ø GATE 选通门:

GATE=0时,只要TR=1,计数器就开始工作; GATE=1时,只有INT=TR= “1”时,计数器工作;一般情况下GATE为0。

 

(3)控制寄存器TCON


Ø TF1:定时器/计数器1的溢出标志位。

1表示计数存储器溢出,0表示计数存储器正常计数。

 清0方式:①通过代码修改TF1为0

           ②当通过中断机制来使用定时器/计数器1时,进入中断处理函数后自动归0

 

Ø TR1:定时器/计数器1的启动和停止位。1表示启动,0表示停止。

 

Ø IE1,IE0 外部中断INT1,INT0的请求标志:

 当单片机检测到INT引脚上有下降沿时,IE=1 申请中断.进入中断服务程序时,硬件 自动清除IE标志.

 

 

Ø IT1,IT0 外中断触发类型控制: 

    IT=1时,外中断信号的下降沿触发IE标志;

 

    IT=0时,外中断信号的低电平触发IE标志。


4.定时器的实验历程

 

(1)说明:实验通过定时器控制LED灯每隔100ms闪烁一次

 

Ø 具体实现代码


void Timer1_Init(void)

{

    TMOD |= 0x10  ;        //使用模式1

    TH0 = (65536 - 10000)/256;     //取高8位   

    TL0 = (65536 - 10000)%256;     //取低8位   共定时10ms

    TR1 = 1;          //打开定时器1开关

    EA = 1;           //打开中断总开关

    ET1 = 1;          //打开定时器中断1的开关

}

 

 

 

void Timer1_Isr(void) interrupt 3    //interrupt后面跟的数字是中断号,需要注意的是不同定时器对应不同的中断号

{

    static unsigned char i = 0;    

 

    TH0 = (65536 - 10000)/256;     //重载初值

    TL0 = (65536 - 10000)%256;

 

    i++;

    if(i == 11)      //100ms反转一次

    {

        i = 0;

        LED2 = !LED2;

    }

    


推荐阅读

史海拾趣

智烽维(CDA)公司的发展小趣事

随着市场需求的不断增长和公司业务的不断拓展,智烽维在2021年进行了工厂的扩建。扩建后的工厂不仅提升了产能和效率,也进一步提高了产品的质量和可靠性。此外,公司还加强了与上下游企业的合作和资源整合,形成了更加完善的产业链和供应链体系。这一举措不仅为公司的未来发展提供了强有力的支撑,也为公司在电子行业中的竞争地位奠定了坚实的基础。

Feller US公司的发展小趣事

随着全球汽车产业的不断发展,国际合作已成为企业拓展市场、提升竞争力的重要途径。菲斯克也深刻认识到了这一点,积极寻求与全球各地的汽车制造商和供应商建立合作关系。通过与国际巨头的合作,菲斯克不仅获得了先进的技术和管理经验,还成功进入了多个国际市场,实现了全球布局的目标。这一系列的国际合作不仅提升了公司的知名度和影响力,还为公司的长期发展提供了有力的支持。

Deltron / DEM Manufacturing公司的发展小趣事

Deltron Emcon,即现在的DEM Manufacturing,起源于四家英国制造企业的合并。这些企业分别是成立于1946年的Deltron Components,专业音频连接器和压铸盒制造商Roxburgh EMC(成立于1969年),EMC滤波器和组件的制造商Media Products(成立于1990年),以及广播跳线产品制造商BES Electronics(成立于1982年)。这些公司在各自的领域内都有着丰富的经验和卓越的技术,合并后,DEM Manufacturing凭借这些优势,在电子行业中迅速崭露头角。

Advanced Energy公司的发展小趣事

Advanced Energy公司成立于1981年,总部位于美国科罗拉多州的丹佛市。在成立之初,AE公司便专注于电源技术的研发与创新。当时,电子行业的电源技术正处于快速发展阶段,AE公司凭借其前瞻性的技术视野和扎实的研发实力,迅速在市场中崭露头角。公司不断推出具有创新性的电源产品,满足了当时电子行业对高效、稳定电源的需求,逐渐在行业内建立了良好的声誉。

安信可(Ai)公司的发展小趣事

在不断创新和突破的过程中,安信可不断推出具有创新性的产品。例如,公司推出的WiFi+BLE蓝牙二合一的Ai-WB1系列模组,凭借其高可靠度、高集成度、应用灵活、高性价比等特点,深受市场欢迎。这款产品不仅为智能设备提供了无线通信连接能力,还广泛应用于工业、商业、消费等各类市场,进一步拓展了安信可的应用领域。

Chemtronics公司的发展小趣事

自1958年成立以来,Chemtronics公司在电子维护和维修领域不断进取。最初,公司专注于生产一系列清洁剂产品,以其高效清洁能力获得了市场的认可。随着时间的推移,Chemtronics逐渐将产品线扩展至超纯溶剂、净化室级别擦拭棒和擦拭布等领域,进而又扩展到电子电气和电信工业的精密返工和维修工具。这一转变不仅体现了公司对市场需求的敏锐洞察,也彰显了其不断创新的精神。

问答坊 | AI 解惑

S3C2440 DATASHEET

三星S3C2440DATASHEET …

查看全部问答>

PCB中裸露铜皮的作用?

新手弱弱的问句。。…

查看全部问答>

EVC中调用WCE软键盘问题

我在 EVC工程里面 加入了 #include \"sipapi.h\" 文件,并在 “对象/模块库”中加了 coredll.lib 当我在 程序里调用 SipShowIM(SIPF_ON);来调用软键盘时,出现了错误! 请问下该怎么解决这个问题!!! …

查看全部问答>

packet sniffer怎么一直没有收到数据啊?那位说说

packet sniffer怎么一直没有收到数据啊?那位说说,都有什么设置啊!…

查看全部问答>

切实有效保护CMOS电路不受电源过压影响的方法

所有的IC工艺都存在相关的本征击穿电压,由此导致的最大电压应力将会施加于采用该工艺制造的任何器件。因此,所有IC制造商都会提供其器件产品的绝对最大额定值技术规格,一般是提供施加于器件任何引脚的最大电压。 器件过压指超过绝对最大额定值的 ...…

查看全部问答>

LPC1114的串口中断处理函数有点不懂

可以帮忙解释一下这段代码吗?官方例程里void UART_IRQHandler(void);的一段,就是IIR寄存器的IIR_RDR可以标识接收中断,IIR_RLS又细分出来一个LSR_RDR也是标识接收中断,后面接收的代码都是一样的。我就不清楚了,接收的时候程序到底是走到哪里呢 ...…

查看全部问答>

杂散电容,寄生电容,分布电容?

最近在处理一些工程问题时对电容的一些说法犯难了,哪位大侠能准确地解释一下杂散电容,寄生电容,分布电容这三者吗?…

查看全部问答>

G2553 launchpad 串口,偶尔才能收到

按照论坛上说的 把R, T 跳冒对调。  能偶尔收到数据 。  但是更重要的是!!!!我外接MAX232串口模块,能很稳定的收到数据。 求高手解答     我用的是官方代码。    如 给串口发“ a”  ...…

查看全部问答>

我的电子技术入门之路-初“湿”单片机

虽然本人上的是电子系,可是周边的师兄师姐都一起笑称,毕业了,还不会修电话(固定电话哦,不是手机),实在不敢承认自己是电子系毕业的。 上班以后,因为工作需要,开始接触单片机。说起来也算不上从零开始,读书的时候某年暑假在实验室接手了半 ...…

查看全部问答>

请求大侠帮忙 由于积分不多下不了一个急着用的东西 有人能帮我下载下吗 万分感谢

请求大侠帮忙  由于积分不多下不了一个急着用的东西  有人能帮我下载下吗  万分感谢…

查看全部问答>