基于单片机的计时器设计

2022-03-24 09:22:58 | 浏览次数:

10.3969/j.issn.1671-489X.2014.12.031

摘要 介绍一种基于STC单片机的计时器设计方法。该系统以STC15F408AD单片机为主控器件,以AT24C64为存储器件,实现对要求严格限时的会议、答辩等场合的时间控制。该设计具有便携、成本低、数据记录存储可查询等特点,可以广泛应用于会议、辩论赛、学术报告或者考试、实验计时等场合。

关键字 STC单片机;IC总线;AT24C64串行存储器;计时器

中图分类号:TP273文献标识码:B

文章编号:1671-489X(2014)12-0031-04

Design of Timer Based on Micro Control Unit//JIANG Hong, ZHU Zhaoyou

Abstract This paper introduces a design method of timer based on STC MCU (Micro Control Unit). The system uses STC15F408AD MCU as the control device, AT24C64 as the storage device, to complete the control of time for the conferences having a strict limit on time and the defense. The design has the advantages of portability, low cost, records can be queried etc, which can be widely used in occasions such as examination, debate, academic report, the experimental timing and so on.

Key words STC MCU; I2C bus; AT24C64 serial memory; timer

1 引言

时间与人们的生活密切相关,对时间的测量具有重要意义。从古代滴水计时[1]、日晷计时[1]到现代的铯原子钟[2],都凝结了人们对时间准确计时的智慧与努力,也体现了人类文明的进步。随着现代科技的发展,简单易用且计时相对较为准确的计时工具越来越多,如秒表、电子手表和倒计时器[4-5]等。这些计时工具虽然实现了简单计时的功能,但很难满足人们日益提高的生活品质和专业性工作中稳定、快捷和易操作的要求。

本文设计制作了一种基于STC15F408AD单片机的可以进行定时、提示和记录的计时器,解决了传统计时产品需要反复设置时间,不能智能提前提示、操作繁琐等缺点。本设计可较为广泛地应用于考试、辩论赛、学术报告、实验计时等场合,为教学、课余活动等带来方便。

2 硬件设计

本文以STC15F408AD为核心设计由了微控制器模块、时钟模块、显示模块、提示模块、输入模块和存储模块等六部分组成的发言计时器(如图1所示)。该设计以专门化产品专业化设计为理念,根据实际需求优化功能设计,简化实际操作,达到功能与成本相统一。

微控制器模块目前常用的嵌入式微处理器有8051单片机、ARM、CPLD/FPGA和DSP等。在制作一个计时装置时,以单片机为控制核心更合适,相比于ARM、CPLD/FPGA和DSP等微处理器,51单片机线路更简单,价格更低廉。

STC15F408AD是STC公司生产的一种增强型单时钟/机器周期(1T)的单片机,是高速、高可靠、宽电压、低功耗、超强干扰的新一代8051单片机,其指令代码完全兼容传统8051指令代码,但速度比传统8051单片机快8~12倍[3]。STC15系列单片机采用STC-Y5超高速CPU内核,在相同的时钟频率下,速度又比STC早期1T系列单片机(如STC12系列、STC11系列、STC10系列)的速度快20%,能更快地响应系统请求;它支持ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成,给编程人员带来极大便利;它还有共两个普通定时器/计数器(T0、T2),三路CCP/PWM/PCA(可再实现三个定时器),故能够更好地满足应用程序的定时计时需求。因此,本设计选择以STC15F408AD型号的单片机为控制芯片。

时钟模块STC15F408AD的片内高精度R/C时钟模块在-20~65 ℃的温漂为±0.6%;高精度石英晶振在-20~70 ℃的频率稳定性为±2.5~±30 ppm(ppm为百万分之一)[6]。在本设计中,对定时的精准要求较高,因此选用12 MHz的外部时钟电路产生主时钟(Fosc)。

显示模块LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式。动态驱动是指在每个时间片中只点亮一个数码管,各数码管轮流点亮。只要扫描的速度足够快,利用人的视觉暂留现象及发光二极管的余辉效应,就能达到静态显示效果。动态显示的效果和静态显示是一样的,但动态显示能够节省大量的I/O端口,而且功耗更低,故本设计采用动态显示。

当8051单片机的端口总线负载达到或超过其最大负载能力时,必须接入总线驱动器。74LS245是常用的用来驱动LED或者其他设备的芯片,它是八路同相三态双向总线收发器,可双向传输数据。当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;DIR=“1”,信号由A向B传输,合理选着该端口信号,可以简化PCB布线。

显示部分使用4位LED数码管,前两位显示分钟数,后两位显示秒数。为了节省硬件成本,设计中采用一个74LS245配合单片机的四个I/O端口的方式,实现动态显示。

提示模块提示模块由一个5 V电磁式有源蜂鸣器、一个PNP型三极管和一个电阻组成。电路中电阻起限流保护作用,三极管起开关作用。当三极管基极为低电平时,三极管导通,蜂鸣器开始鸣叫;当三极管基极为高电平时,三极管截止,蜂鸣器停止鸣叫。

输入模块本设计采用按键进行输入,各按键一端与地相连,一端与单片机相连。当按键按下时,单片机相应端口被拉低,单片机检测到按键后,即进行相应处理。

存储模块本设计中一条时间记录的格式为“四位的编号+分钟数+秒数”,存储一条记录需要四个字节,存储最大10 000条记录需要40K字节的存储空间。AT24C64存储器是采用I2C总线协议[7]进行数据读写的串行器件,占用很少的资源和I/O端口,并且支持在线编程,进行数据实时的存取十分方便,其典型擦/写周期为100万次,数据保持有效时间可达100年之久,可工作在标准的100 KHz和快速的400 KHz模式,存储空间为64 K,能够满足本设计需求。因此,本设计中选用AT24C64存储芯片作为存储设备。

3 软件设计

系统软件设置了三种模式,分别实现定时、计时和查询功能。该系统的流程图如图2所示。

定时器设置在Keil C开发环境中,选择Intel 8052编译,头文件包含,即可完成对环境的配置;需要用到的新型单片机中新增的寄存器,需在头文件中或程序前增加相应声明。

STC15系列单片机是1T的8051单片机,为兼容传统8051,定时器0、定时器1和定时器2,可通过辅助寄存器AUXR进行设置,AUXR格式如图3所示。T0x12为定时器0速度控制位,T1x12为定时器1速度控制位,T2x12为定时器2速度控制位。当速度控制位为0时,定时器为传统8051速度,12分频;当速度控制位为1时,定时器速度是传统8051的12倍,不分频。

本设计中使用了定时器0的16位自动重装模式。此模式下,定时器T0的溢出速率M的计算公式为式(1),定时器T0的初值T的计算公式为式(2),式中Fosc为系统主时钟。

定时器T0的溢出速率:

(1)

定时器T0初值:

(2)

本设计中只使到定时器T0,其初始化代码如下:

... ...

#define T 0x3cb0

sfr AUXR=0x8E; //声明辅助寄存器AUXP

... ...

void init()

AUXR &=~(1<<7); //将定时器设为12分频模式

TMOD=0x00;//设置定时器T0为模式2(16位自动重装)

TL0=T;//给计时器赋初值

TH0=T>>8;

ET0=1; //使定时器0中断

EA=1; //使CPU中断

... ...

}

AT24C64读写AT24C64的写操作有写字节和写页两种方式,根据AT24C64的操作流程[7],写操作关键代码如下:

void at24c64_wr(void *dat, uint address, uint cont)

{

if (cont != 0) //写数据个数不为零

{

i2c_start();//启动I2C总线

i2c_sentbyte(0xa0); //发送写操作命令

i2c_sentbyte(address / 256); //送地址高8位

i2c_sentbyte(address % 256);//送地址高8位

while (cont--)

{

i2c_sentbyte( *(uchar*)dat );//发送数据

((uchar*)dat)++; //主机发送地址指针加1

address++; //地址同步加1

if (!(address & 0x001f) && (cont != 0))

//判断是否换页

{

i2c_stop();//停止I2C总线

delay_10ms();//延时等待24c64

内部擦写完

i2c_start();

i2c_sentbyte(0xa0); //执行写操作

i2c_sentbyte(address / 256); //发送

地址

i2c_sentbyte(address %256);

}

delay_10ms; //延时等待24c64内部擦写完

}

i2c_stop();

}

}

AT24C64的写操作有当前地址读、随机读、读串三种方式,读操作关键代码如下:

void AT24C64_rd(void *dat, uint address, uint cont)

{

if (cont != 0)

{

i2c_start();

i2c_sentbyte(0xa0);

i2c_sentbyte(address / 256); //送地址

i2c_sentbyte(address % 256);

i2c_start();

i2c_sentbyte(0xa1);//执行读操作

cont--; //读取字节数减1

while (cont--)

{

*(uchar*)dat = i2c_ack(1);//发送ACK信号,

连续读

((uchar*)dat)++;//主机接收存储单元加1

}

*(uchar*)dat = i2c_ack(0); //不发送ACK信号

i2c_stop(); //I2C停止

}

}

4 结语

本文设计了一种采用STC15F408AD作为控制核心、以AT24C64为存储器件的限时计时器,其与现有类似产品相比,在会议、学术报告、考试、实验计时等场合进行限时控制,具有很好的实用性,易于功能扩展,为教学和课余活动等提供了一种便捷的计时方案

参考文献

[1]刘仙洲.中国在计时器方面的发明[J].清华大学学报,

1957(2):57-70.

[2]常宏,张首刚,王心亮,等.基准原子钟的发展及国家授时中心光学原子钟的研制进展[J].中国科学:物理学 力学 天文学,2010(5):616-622.

[3]朱兆优.单片机原理与应用:基于STC系列增强型8051单片机[M].2版.北京:电子工业出版社,2012.

[4]刘艳丽.用Flash制作计时器[J].中国教育技术装备,

2005(8):40-41.

[5]张传维.“倒计时器”的制作[J].中国教育技术装备,

2008(14):55.

[6]许齐庆.晶体振荡器温频特性的改善[D].西安电子科技大学,2010.

[7]朱兆优.公交非接触IC卡读写器的应用设计[J].单片机与嵌入式系统应用,2001(10):66-70.

推荐访问: 计时器 单片机 设计