51单片机定时器用法之1秒定时程序设计
动画演示
在我们的DIY电子时钟里,需要用到单片机定时器来做秒的显示,说是显示,其实就是实现数码管上“:”点的闪烁。这里初步定义为每秒亮1次,亮0.5秒,灭0.5秒。实现显示秒的功能。这里也可以用DS1302的秒数据来做,但是实现起来麻烦,达到一样的效果,我们追求的是程序越简单越好,所以在此我们用单片机定时器来实现。
我们DIY时钟板子上的单片机为STC15W408AS,单片机自带IRC可调时钟和搞可靠复位,为了降低功耗(工作频率越低,功耗越小),本时钟采用12M的工作频率(烧写程序是在软件上选择),那当定时器工作在12T模式下时,一个机械周期就是1us。
接下来我们就该看看单片机的数据手册了。以下是今天我们需要关注的寄存器:
TCON位定义
TMOD寄存器位定义
T0工作方式设置
TCON为定时器T0和T1的控制寄存器,可以位寻址(直接操作位);TMOD是T0、T1工作方式控制寄存器,不可以位寻址(只能操作寄存器),高四位控制T1,低四位控制T0;定时器的工作方式由TOMD寄存器中的M1和M0选择,具体如上图。
本例中我们要用T0实现1秒的定时时间,这里我们用T0工作在方式0,也就是16位的自动重载方式(传统的51单片机只有8位的自动重载,需要做高精度的定时时最好用自动重载方式)。我们不需要外部中断来开启定时器,所以GATE位=0,T0工作在定时模式,CT=0,所以我们TMOD寄存器的值为0x00;在TCON寄存器里和T0相关的位有TF0和TR0;TF0=0:T0中断标志位,当定时器中断产生是,TF0自动置位,CPU相应中断后硬件自动清零;TR0=1:开启定时器,相当于定时器的开关。
除了这些寄存器外,定时器溢出后,也会产生中断,所以还需要去设置中断部分:
EA=1:,开启总中断,相当于中断总开关;ET0=1;开启定时器T0中断,相当于中断的子开关,只有中断的总开关和相应的子开关都开启后,CPU才能相应中断信号,具体请看中断部分数据手册。我们用的STC15W系列单片机属于增强型单片机,为了和传统51单片机兼容,还专门设有一个寄存器AUXR,此寄存器可设置T 0工作在1T还是12T模式,此处我们让T0工作在12T模式下,AUXR=0x00。最后就是定时器的初值寄存器了,我们需要定时的时间是500ms,16位的定时器再12M频率下最大定时时间为65535us,而我们需要的是500ms,明显达不到,那我们就需要做组合定时的方式,这里我们设定定时器的中断频率为10ms,那我们中断1次后在中断函数里将某个变量加1,当变量加到50的时候就是500ms,当变量加到100的时候就是1s了。这就是我们实现1s定时的思路。
具体实现程序如下:(因头条原因,代码图片无法加入,需要请移步关注微信公众号)
如上图中程序所示,定时器初始化时设置T0位16位自动重载模式,工作在12T模式,初值10ms,开启定时器,开启中断。这样定时器就工作了;在定时器中断函数里,每次进入中断后我们就给变量T_a自加1,当变量小于50的时候(小于500ms),让D=1(D即为我们电路中控制秒显示的那两个点,高电平有效),大于50小于100的时候D=0,关闭秒显示。这样一来就实现了秒显示在1秒内亮500ms,灭50ms了。上图中中断函数名后面的interrupt 1这是中断函数的入口地址,C语言中叫中断号(为小白说明,老司机略过),具体的个中断对应的入口地址对照表如下图(部分):
中断号对照表
单片机的顺计时倒计时定时控制器系统设计和制作过程介绍
一、单片机的定时控制器小制作简介
系统硬件的部分主要包含主控电路模块、LCD液晶显示模块、按键处理模块、时钟电路模块、报警模块的设计,软件编程主要采用C语言,虽然程序条数比较多,但是设计起来比较方便,可通过Keils软件进行调试。做此设计,必须熟悉Protel软件、proteus仿真软件和KEIL程序编写软件,因为要用Protel软件画出原理图和制作电路板。
单片机的定时控制器小制作 整体效果
二、单片机的定时控制器小制作功能简介
1、有一个主电源开关,按下主电源开关系统通电,按出主电源开关系统断电;有一个上电指示灯,系统通电指示灯亮起,系统断电指示灯熄灭。
2、系统有三个按键,按键1、按键2、按键3,开机默认时间为00:00;在时间为00:00(倒计时完后必须解除报警的前提),按键1按下,进入设置状态,在设置状态,按键2为分加一,按键3为秒加一,设置好之后,再按下按键1确认保存数据;
3、在暂停状态和未进入设置状态时,按下按键2,清除时间(时间变成00:00);在开机之后或设置好和清除时间之后,第一次按下按键
4、自动识别是顺计时或倒计时(时间>00:00,倒计时,等于00:00,顺计时),之后再按按键3,只切换开始和暂停;
5、液晶显示屏的第一行显示的是顺计时和倒计时的计时时间,左边为分的显示,右边为秒的显示;第二行左边显示开始/暂停的状态,中间显示顺计时还是倒计时暂停,右边显示的是设置状态;
6、顺计时开始时,计时时间以每秒加一递增,当计时时间大于99:59时,计时时间清零重新开始计时,计时不暂停;
7、倒计时开始时,计时时间以每秒加一递减,当计时时间等于00:00时,计时暂停,同时控制蜂鸣器报警60秒,中途可通过任意按键中断报警。
单片机的定时控制器小制作焊接图
三、单片机的定时控制器小制作结构框图
单片机设计的定时控制器系统结构框图
四、单片机的定时控制器小制作电路图
单片机的定时控制器小制作仿真图
单片机的定时控制器小制作PCB图
单片机的定时控制器小制作原理图
相关问答
单片机 秒表实验原理?利用单片机的定时器/计数器定时和记的原理,结合显示电路、LED数码管以及按键来设计计时器,具有00-99分钟计时及显示功能;具有开始、停止和复位功能,并由按键...
c语言中怎样设置 计时器 ?-ZOL问答以上方法只能用于秒级别的计时。2.如果想使用毫秒级别的计时可以使用2种方法。一种是使用linux的系统库
常规方法测量脉冲的频率,利用51单片机的两个定时器来测量,一个定时器0来定时,一个定时器1作为计数方式voidTimer0Init()//2毫秒@12.000MHz{...常规方法测...
EDA数字钟设计电路图显示时分秒日期星期能整点报...- 汇财吧...[回答]——多功能数字钟的设计学号:姓名:院系:自动化学院指导教师:时间:2010.5.9目录摘要……………………………………………………………3二、...使我...
如何在52 单片机 下做一个定时器控制下的秒表?刚学单片机的朋友都会从学习按键、定时器,显示(数码管)开始。这个问题刚好就要用到这几样。可以这样去设计:用两个I/O设为输入做按键扫描(记得接上拉电阻...刚...
单片机 在使用定时器时是用到了哪些引脚?一定是这些吗? - 懂得单片机使用定时器时,不用到任何引脚,因为定时器就好比一个时钟,它被安装在单片机内部,在接收到信号之后,就开始运行,一般使用定时器,通过编程的方案...
求51 单片机 定时时间与计数初值关系式的推导过程?不要去记什么公式,知道原理就行了。以16位方式计数为例,51单片机的计数方式是向上计数,16位计数器如果计数初值为0,则计数器从0计到65535,每计一个1微秒,...
单片机 中时间问题[最佳回答]C语言的执行时间,从来就没有计算公式。C程序的执行时间,和操作系统有很大的关系,和编译软件也有关,在单片机中,更和变量的存储类型有关(如单字节变...
单片机 中定时计数器的TH0和TL0的值如何计算?单片机在不同的工作方式下,计数器的位数不同,因而最大计数值也不同。现在设最大计数值为M,那么在各方式下的M值如下;方式0:M=2^13=8192方式1:M=2^16=6553...
用51 单片机 做电子钟,自动校时方面最简单的能用什么方法?[回答]数字电子钟的时间跟你晶振频率有密切关系,秒钟走慢原因是晶振频率太小;电子钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计...