设计与开发

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

小编 2024-11-26 设计与开发 23 0

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

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

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

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

主函数部分:

定时器主要代码:

实验现象:

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

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

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++;

}

相关问答

定时器 单片机 中程序的运行过程 - 懂得

我觉得是这样的,单片机的定时器,它的计数过程是相当于电脑里面一个后台运行的东东一样。在计数时单片机同时在执行其他程序,计数周期就是单片机的一...

单片机 用中断和定时怎么延时?

以上函数被调用一次,就延时10ms,多次调用可以达到任意更大的时间要求。!但是,在延时时,就其它什么事也做不了了,就是干等啊!2.硬件延时利用定时器/...3.操...

单片机定时器 初始化什么意思?

单片机定时器初始化是多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。由此...

单片机 定时器 的四种工作方式都是什么?书上看不懂。能不能用容易理解的话解释一下?

第一种工作方式0,是2的13次方(13位)定时器或计数器,就是最大能数8192个数的模式,数一个数就是1个机器周期。工作方式1就是2的16次方(16位)定时器或计数器...

单片机 定时器 资源是什么计数器?

单片机的定时器资源是脉冲计数器51单片机外部脉冲计数原理:51单片机外部脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1。51单...

单片机定时器 和计时器怎么交替使用?

单片机定时器和计时器交替使用方法:设置工作模式(设置特殊功能寄存器TMOD)设置计数寄存器处置设置TCON,通过TR0置1使计时器开始计数判断TCON寄存器TF0位...

51 单片机定时器 一毫秒怎么写?

假设晶振为12MHz,不用中断时程序语句如下:TMOD=0x01;//定时器0工作方式1TH0=(65536-1000)/256;//装入初值TL0=(65536-1000)%256;TF...

单片机 ,当 定时器 /计数器工作方式于1下,晶振频率为6M,请计算最短定时时间和最长定时时间。各是多少?

定时器是通过计数溢出来计时的,工作方式1是16位计数方式。晶振频率为6M,那么计数器加1需要一个机器周期2us。机器周期=12/fosc,fosc为晶振频率。计数初值为1...

单片机定时器 中断程序怎么写?

在单片机中,定时器中断程序通常需要先初始化定时器的计数值和工作模式,然后编写中断服务程序。在中断服务程序中,需要清除中断标志位、处理需要执行的操作,最...

单片机 的振荡频率为6MHZ,设 定时器 工作在方式1需要定时1MS,...

[最佳回答]工作在方式1,定时时间为1000微秒晶振频率=6MHZ则定时时间T=(2的16次方-X)12/6MHZ=1000解出X=2的16次方-500工作在方式1,定时时间为1000微秒...

猜你喜欢