基于MCS-51系列单片机时间控制器软件的设计与实现

2012-03-29 08:51陈继军
电脑与电信 2012年12期
关键词:数码管子程序寄存器

陈继军

(江苏海事职业技术学院信息工程系,江苏 南京 211170)

1.引言

随着人们生活节奏的加快,对时间控制的要求越来越高,但市场上,此方面的产品精度不够或调时精度较低,本设计采用实时芯片DS1302来控制时间的显示,精确度可达秒级,同时,采用E22PROM 24C02来存储相应的数据,对应了一天中的每一分钟,可准确地对时间进行控制,在用户的要求下,可在任一时刻产生信号,以达到时间控制的目的。

2.软件设计的总体思路

根据系统的要求及对实际应用可行性的分析,由于系统中数码管的动态显示部分的特殊要求,本系统软件设计分两部分完成,第一部分为主程序,第二部分中断显示子程序。其具体完成的功能和说明如下:

主程序主要完成的功能为:起动时钟,读取DS1302里的内容,通过数据转化,使其能正确在数码管显示。根据时间生成地址读24C02里相应单元的内容,将读出的内容送端口。按照对应原则,将某一位数据取出,并将它送端口。中断子程序主要完成的功能为:定时产生中断,读取单片机里的某一空间,确定段选码、位选码的选定。用查表的方式,进行一定的数据转化,确定显示的段选码,并应用移位的方式,取出其相对应的位选码。

3.系统设计与实现

3.1 程序初始化部分

根据51系列单片机语言的设计原则,需要对主程序、中断子程序的入口地址进行设定,并对各寄存器、存储单元进行初始化操作。程序中,R0寄存器用于显示单元的跟踪,初始化时将其所指向的单元进行清零操作;R1寄存器用于中断子程序中段选码的选择;R2寄存器用于数码管显示部分位选码的确定;将用于读DS1302后存储读出数据的暂存空间进行清零;主程序还要对定时器的工作方式、初始值进行设置,使其定时产生中断。

3.2 数码管动态显示及中断显示部分

为增加系统设计的合理性,本系统中采用数码管动态显示技术和中断显示方式。程序中,首先对累加器、状态寄存器进行压栈操作,确保中断子程序的正常执行。随后对位选码进行选定,在对段选码的单元进行加1操作后,应判断单元是否到最后一位,如到最后一位,应给段选码、位选码进行初始化操作,如未到最后一位,则对位选码进行移位操作,最后CPU开中断,将累加器、状态寄存器进行出栈后返回主程序。

3.3 读写DS1302部分

读写DS1302部分应注意时序的关系,在每次读时、分、秒寄存器的内容时,必须先写入地址命令字,读写时分别调用单个字节读写子程序。在将时、分、秒寄存器里的数据读出后,由于数据格式的不一样,必须经过转化才得使数码管正常显示。定义三个单元作为从DS1302里秒、分、时寄存器读出的数据的暂存空间,然后再将其转化。定义六个单元作为转化后的数据暂存空间,此空间里的数据可由中断显示子程序经过查表操作后交由数码管直接显示。

3.4 操作E2PROM 24C02部分

从DS1302里读出的数据是BCD码格式,本系统中要将其作为地址关系的相应转化,为了方便与地址的转化,必须将BCD码格式转化成二进制形式。24C02是一个具有256字节单元的电可擦写存储器,本系统必须将一天中的每一分钟形成与24C02地址相对应的关系。一天共有1440分钟,而24C02共有2048个位,则需将时间按位存储,存储器的每一位代表一天中的一分钟,按照对应关系,可将24C02中每8个字节划分为一大段,每一大段中有64个比特位,可按位存储一小时中的60分,此时时间转化成对应24C02中的地址,转化方式为将时间中的小时位取出,乘以8即可得出24C02中每一大段的段首地址,再将时间中的分位取出,除以8可得到段内地址,此时,将段首地址加上段内地址即为真正的地址,分位除以8后得到的商即为段内字节中的对应分的位数。

4.结束语

目前,市场上的时间控制器大部分设置的任意性能不好,且精度不够。本系统可对一天中任一分钟进行设置,只需通过软件对E2RPOM 24C02写入数据,则系统会根据24C02里的数据,准确地将信号输出,达到用户所需的功能。同时,本系统硬件电路简单,软件易操作,精度较高,性价比较高,可广泛投入市场使用,具有一定的使用价值。

[1]张毅刚等.MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,1997.

[2]陈志辉.I2C总线在MCS51系列单片机数据采集系统中的实现[J].微计算机信息,2005.

[3]沈德金等.MCS-51系列单片机接口电路与应用程序实例[M].北京:北京航空航天大学出版社,1990.

[4]沈美明等.IBM-PC汇编语言程序设计[M].北京:清华大学出版社,2003.

猜你喜欢
数码管子程序寄存器
STM32和51单片机寄存器映射原理异同分析
微课教学设计之“数码管动态显示”
Lite寄存器模型的设计与实现
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索
西门子840D系统JOG模式下PLC调用并执行NC程序
简化编程与子程序嵌套的应用