产品选型

单片机 定时器 模式 教你玩单片机之定时器(附程序)

小编 2024-10-08 产品选型 23 0

教你玩单片机之定时器(附程序)

80c51的定时器

80c51单片机内有两个可编程的定时/计数器T0、T1。它们是一个16位计数器,分别由一个高8位和一个低8位的寄存器组成的。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

定时/计数器的工作原理

定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。

工作方式寄存器TMOD

GATE:门控制

0时:仅有运行控制位TRx来控制定时/计数器的开启

1时:由TRx和外部中断脉冲计数(用于计算外部中断负跳变 的次数)

C/T:计数器模式和定时器模式选择

0时:选择定时器模式

1时:选择为计数器模式

M1和M0:选择定时/计数器的工作方式

定时器/计数器控制寄存器TCON

IT0和IT1是设置外部中断的触发方式

当其为0时,为低电平触发方式

当其为1时,为负跳变触发方式

IE0和IE1是外部中断标志位

TF0和TF1是定时器的中断标志

TR1和TR0是打开相应的定时器

其他的是定时/计数器的控制

定时/计数器的工作方式

方式1

方式1为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。

方式2

方式2的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。

方式3

方式3为自动重装初值的8位计数方式。

方式4

方式4只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。

定时器操作步骤:

选择工作方式(设置M1,M0)

选择控制方式(设置GATE)

选择定时器还是计数器模式(设置C/T)

给定时/计数器赋初值(设置THx和TLx)

开启定时器中断(设置ET0或ET1)

开启总中断(设置EA)

打开计数器(设置TR1或TR0)

定时器小程序

void TimerConfiguration()

{

TMOD = 0x01; //定时器0选择工作方式1

TH0 = 0x3C; //设置初始值

TL0 = 0xB0;

EA = 1; //打开总中断

ET0 = 1; //打开定时器0中断

TR0 = 1; //启动定时器0

}

单片机之定时器LED程序

实验效果 :LED每隔500ms左移一次

void main(void)

{

Time=0;

GPIO_LED=0XFE;

TimerConfiguration();

while(1)

{

if(Time==10)

{

GPIO_LED=_crol_(GPIO_LED,1);

Time=0;

}

}

}

void TimerConfiguration()

{

TMOD = 0x01; //选择工作方式1

TH0 = 0x3C; //设置初始值,定时50MS

TL0 = 0xB0;

EA = 1; //打开总中断

ET0 = 1; //打开定时器0中断

TR0 = 1; //启动定时器0

}

void Timer0() interrupt 1

{

TH0 = 0x3C; //设置初始值

TL0 = 0xB0;

Time++;

}

《51单片机基础》:定时器

咱们今天就聊一聊那些年单片机关于定时器与中断方面的事儿,其实定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是说当每来一个脉冲,计数器就会自动加1,如果当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出就会发出中断请求。

再讲讲中断吧,有不少单片机初学者对中断有些懵,不知道它的用法,讲个生活例子就是比如你在家里看电视,突然门铃响啦此时你的第一选择就是去开门,打断你做原来事情让你优先去做开门这件事,这就是所谓中断。

当你这件事情结束之后,你又可以继续去看电视。关于单片机中断优先级的问题,小伙伴一定要勤于动手,勤于动脑的查找资料。所以接下来写一个关于定时器与中断的实验,将数码管上电之后8位都显示6,然后定个时间就两秒后全显示2,因为一些原因只能给小伙伴们截两张图片,不过有兴趣的小伙伴可以验证代码的正确性,都这样说啦,代码都是作者亲自验证过的(哈哈哈),行,接下来直接给小伙伴们上图

主函数部分:

定时器主要代码:

实验现象:

哈哈,今天的实验就分享到这里,也希望小伙伴们能够喜欢、点赞。

相关问答

单片机 定时的时间怎么改变?

定时器实质是计数器。当计数脉冲周期一定时,就有定时功能。雅帆用水桶给你打个比方吧!一、向上计定时数器举例当一个255毫升的烧杯,提前放入155毫升水后,...

利用51 单片机定时器 编写一个C语言程序,实现一个发光二极管定时亮、灭,要求亮一秒、灭一秒交替闪烁不?

初始值为0,只只要启动定时器,定时器就开始工作,当计数溢出后,TF被置1,此时在程序中查询TF的状态,做相应的程序处理。一般建议用中断来做,查询方式会占用c...

单片机定时器 工作原理?

1、实质是计数器,脉冲每一次下降沿,计数寄存器数值将加1。2、计数的脉冲如果来源于单片机内部的晶振,由于其周期极为准确,这时称为定时器。3、计数的脉冲如...

单片机 如何把 定时器 延时写成delay延时那样在主程序里随便调用?

你可以在调用函数时启动定时器,并通过中断服务函数判断中断次数是否达到,达到的话就置一个标志位,然后主函数中while判断,不过这太浪费系统资源了,有什么用...

8051 单片机定时器 计算器的门控信号G ATE设置为1时。定时器如何启动?

设8051单片机定时器0的门控信号GATE设置为1,定时器0如何启动?1、设置TR0=1,但这时候是不启动的,因为还需要一个条件。2、给INT0引脚输入高电平,这时候才启...

51 单片机 T0 定时器 4种方式的定时时长分别是多少 - 懂得

51单片机最大硬件定时时间,就是定时器能定时的时间,最长时间=65536*TcTc=fosc/12,fosc是单片机的晶振频率。以频率=12M为例吧,Tc=1us最大定时时间=6...

模式 0,1,2,3,对应的 定时器 0,1,求大神帮忙 啊 - 153*...

那得看你用什么单片机,51单片机的话有两定时器T0和T1;TMOD是一个八位的寄存器,分别对应两个定时器的一些状态,如工作方式、启动方式的设置,设置TMOD...

51 单片机 有几个 定时器 有什么区别?

51系列单片机的早期型号只一个定时器,随后改进成52型号,内部集成了两个定时器,这两个定时器在使用上没有区别。目前,以stc为代表的51单片机有五个定时器t0~t...

定时器 单片机 的哪个地方?

定时器通常在单片机的外设部分,例如在通用定时器/计数器模块或专用定时器模块中。它可以用于产生精确的时间间隔或者周期性的信号。定时器由内部的时钟源和预...

写出mcs-51系列 单片机 定时器 的功能?

MCS-51系列单片机中的定时器具有多种功能。它们可以用作计时器,用于测量时间间隔。定时器还可以用作计数器,用于计数外部事件的发生次数。此外,定时器还可以产...

猜你喜欢