教你玩单片机之定时器(附程序)
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,因为一些原因只能给小伙伴们截两张图片,不过有兴趣的小伙伴可以验证代码的正确性,都这样说啦,代码都是作者亲自验证过的(哈哈哈),行,接下来直接给小伙伴们上图
主函数部分:
定时器主要代码:
实验现象:
哈哈,今天的实验就分享到这里,也希望小伙伴们能够喜欢、点赞。
相关问答
单片机 用中断和定时怎么延时?以上函数被调用一次,就延时10ms,多次调用可以达到任意更大的时间要求。!但是,在延时时,就其它什么事也做不了了,就是干等啊!2.硬件延时利用定时器/...3.操...
单片机 常用的三种定时方法 - XgWOfNq2 的回答 - 懂得程序延时,定时中断,定时查询.
单片机 定时/计数器和中断到底有什么用?定时器用来计算时间,固定时间触发中断。计数器用来对引脚输入的信号下降沿进行计数。和中断相关,但不一定要开中断。可以单独用。定时器用来计算时间,固定...
单片机定时器 一直执行吗?单片机定时器如果配置了自动重载,那是一直执行的。单片机定时器的原理就是给单片机定时器模块的计数单元赋一个初值,使能定时器后,计数器值开始在初值的基础...
51 单片机 0.1ms 定时器 怎么设置?在51单片机中,要设置一个0.1毫秒的定时器,您可以按照以下步骤进行:1.确定定时器模式:选择合适的定时器模式。在51单片机中,常用的定时器模式是定时器/计数...
51 单片机 MCS-51,如果采用的晶振的频率为3MHz, 定时器 /计数器...[最佳回答]方式0:2^13/3M*12=0.032768s;方式1:2^16/3M*12=0.262144s;方式2:2^8/3M*12=0.001024s;方式0:2^13...
单片机 计算题急利用定时/计数器T0工作于方式0,1,2,3,产生1ms...[最佳回答]都是工作于工作方式10.5msORG0000HLJMPSTARTORG000BHLJMPTimer0InterruptSTART:MOVSP,#60HLCALLInitTimer0LOOP...
求一个51 单片机 定时闹钟 程序 。要C语言。能够调时间 - 懂得我来发一个C语言211351单片机时钟程序,希望5261能帮到你/*程序功能:4102带定时闹铃时钟*//*--P0=d...
单片机 如何用按钮实现计时器的暂停?单片机要实现按钮对计时器的暂停,可以用置位程序,然后输出到计时器暂停信号端,如果须复位的话,先复位置位程序,停止置位,恢复计时。单片机要实现按钮对计时器...
单片机 汇编语言的 定时器 如何定义和调用使用?TMOD定时器/计数器模式控制寄存器写入模式TH0,TL0写入初值一般为中断调用要使能计时器0时间中断,还要使能中断有效这样开中断,就可以了TMOD定时器/计数...