51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器/计数器。定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。定时器/计数器是根据机器内部的时钟或者是外部的脉冲信号对寄存器中的数据加1。有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理。CPU转而处理一些复杂的事情。同时可以实现精确定时作用。
定时器是单片机的重要功能模块之一。定时器常用作定时时钟,以实现定时检测,定时响应、定时控制,并且可以产生pwm,驱动步进电机等。
在了解定时器的基本消息后,我们来聊一下定时的原理以及怎么产生中断的。
一、原理
定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。(可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。)
二、结构
51定时/计数器的实质是16位加1的计数器,由两个寄存器THx(高8位)和TLx(低8位)组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。
1、TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下。
GATE:是门控制位,用于控制定时器的启动是否受外部中断源信号的影响。一般配置为0。
C/T :定时/计数模式选择位。C/T =0为定时模式;C/T =1为计数模式。
M1M0:工作方式设置位。定时/计数器有四种工作方式。
2、TCON
TCON的低4位用于控制外部中断,高4位用于控 制定时/计数器的启动和中断申请,其格式如下。
TFx(x0/1):中断溢出请求标志位,计时器计数溢出时由硬件置1,cpu响应后由硬件清零(也可又软件清零或置1),
TRx(x0/1):控制计数的开始与停止,置1开始计数,置0停止计数。
以上就是对51定时/计数器的原理即相关的寄存器的讲解。
接下来我将对我写的代码对大家进行讲解
定时的配置:
我用的定时器0进行定时,对于TH0与TL0的初值,大家可以与找相关的软件进行计算初值,以可以自己算,跟外部晶振和计数模式又关,感兴趣的小伙伴可以收一下,这里就不作过多的介绍。
在数码管显示的部分我用了c语言的指针,我将定时器返回的时分秒转化后放入了DisplayAdta[]数组中,我们知道c语言无法将数组直接作为参数进行传递,所以要将数组作位参数进行传递,就的将数组的首地址作为参数进行传递,然后在对地址进行移位,将每位数组的值传递。如果有小伙伴看不懂的,可以与看看c语言的指针,如果有小伙伴觉得我说的不对的,欢迎大家指出。
最后上代码(免费下载,记得点赞,有不懂的就评论)
代码连接:嵌入式: 分享在嵌入式邻域的知识 - Gitee.com
视频链接:基于51定时器+按键控制实现的秒表_哔哩哔哩_bilibili



