APP下载

基于DS12C887时钟芯片的电子万年历设计

2018-06-11徐锦铜康晴茜

丝路视野 2018年31期
关键词:单片机

徐锦铜 康晴茜

【摘要】本文阐述了一种基于DS12C887时钟芯片的电子万年历软硬件设计方法,使用proteus软件设计和绘制了电子万年历的电路连接图,并通过1602液晶屏显示时钟信息,验证了电子万年历电路及其程序设计的正确性,并给出了部分C程序代码。

【关键词】DS12C887;时钟芯片;单片机

在需要时间信息的电路设计中,设计人员通常采用时钟芯片获取时间信息。目前,市场中的时钟芯片种类多样,比如DS12C887、PCF8485、SB2068、DS1302等。其中DS12C887具有价格低、功耗小、易操作等优点,本文选用DS12C887作为设计电子万年历的时钟芯片。

一、电路连接

电路原理图如图1所示,主要包括AT89C52单片机、DS12C887、1602液晶屏和3个独立按键等元器件,通过仿真,从图1中可以看到日历信息是2018年9月12日,星期三,17点16分3秒,说明本文设计的电子万年历软硬件设计正确,功能正常。

(一)DS12C887介绍及其与单片机的接口电路

DS12C887是DALLAS公司推出的涓流充电时钟芯片,可计时到2100年前的年、月、日、时、分、秒、星期七种日历时间信息并自带闰年补偿功能;自带晶体振荡器并内置锂电池,在没有外部电源的情况下可工作长达10年之久;有12小时制和24小时制两种计时模式。其中在12小时制模式中,用A.M.和RM.区分上午和下午;可选用夏令时模式;时间表示方法有两种:一种用二进制数表示,一种用BCD码表示;内部带有128字节RAM,其中11字节用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,113字节RAM供用户使用;数据/地址总线复用,具有MOTOROLA和INTEL两种总线时序,本文在设计时采用的是INTEL总线。

下面阐述DS12C887的电路连接问题:DS12C887一共有24个管脚,其中6个管脚为NC(悬空管脚,不连接),有效管脚为18个。第1脚MOT悬空不接,选择INTEL总线时序;4脚-11脚(AD0-AD7)为数据端,接至单片机P0口,和单片机做数据交互;12脚GND接地;13脚CS为片选端,接至单片机P2.3口,在INTEL总线时序中的DS和RW信号工作期间,CS必须保持低电平;14脚AS为地址选通输入端,在AS信号的下降沿,地址锁存待DS12C887中,无论CS信号是否有效,AS的下一个上升沿都将清除地址,地址选通信号必须先于每个读或写访问。15脚RW接至单片机P2.5口,在INTEL总线时序中,RW脚与普通RAM的写使能信号工作方式类似,在写数据时需要将RW脚电平拉低,写完之后数据在RW信号的上升沿锁存。17脚DS接至单片机P2.4口,在读周期中,DSl2C887于DS信号的后期(INTEL时序中DS为低、RW为高)将数据发送到总线上,读周期结束后,总线恢复到高状态,同时DS变高。18脚RESET为复位输入端,低电平时复位,本设计中将RESET端固定接高电平,意即让DSl2C887一直正常工作,不进行复位操作。19脚[RQ为中断请求输出端,可用作处理器的中断申请输入端子,实现诸如闹钟之类的功能,本设计不涉及闹钟,故IRQ脚悬空不接;23脚SQW为方波输出端,本设计不使用,悬空不接。24脚VCC为电源端,接+5V。

(二)独立按键接口电路

我们在设计电路时使用了3个独立按键,一端共同接地,另一端分别接至单片机的P3.0、P3.1、P3.2口。当按键被按下时,单片机对应的端口将出现低电平,单片机通过判断该低电平信号来获知相应按键被按下,本文通过按下这3个按键来手动设置时间。

(三)1602液晶屏接口电路

1602液晶屏接口一共有16个管脚,1脚接电源地,2脚为液晶内部驱动芯片电源端;3脚为液晶屏幕电源输入端,在实际使用时,该端口须经1个10K可调电阻接至5V电源端,当改变可调电阻大小时,3脚将获得不同的电压,从而起到调节屏幕对比度的作用,本设计采用仿真模拟器件,因此直接将3脚接高电平;4脚RS、5脚RW、6脚EN为液晶的三个控制端,其中RS为并行数据/指令選择端,接至单片机的P2.0口,当RS为低电平时,写入的是命令,当RS为高电平时,写入的是数据;RW为液晶读/写选择端,由于对液晶的操作通常是只读不写,将该脚直接拉高,意即对液晶只做写操作;EN为使能端,接至单片机的P2.1口,高电平有效;7脚—14脚(D0—D7)为液晶的数据端,接至单片机的P0口,与单片机做数据交互;15脚为液晶背光正极,接+5V;16脚为液晶背光负极,接地。

二、DS12C887内部寄存器分析

DSl2C887内部共有14个寄存器,地址编号为0-13。0号寄存器为SECONDS秒寄存器,用户要调节秒时,将要设定的秒数写入该寄存器中就可以实现调节秒的功能;将秒寄存器里的值读出并显示出来就是我们所看到时间里的秒数。2号分寄存器、4号时寄存器、6号星期寄存器、7号日期寄存器功能可以类比秒寄存器。10号A寄存器—13号D寄存器为控制寄存器,这4个寄存器各8bit,通过修改或读取这些寄存器,可以对DS12C887做不同的配置,以实现不同的功能需求。下面介绍本设计用到的A、B控制寄存器的功能和配置操作。

(1)A寄存器

UIP:时钟更新配置位,UP为1时,立即进行更新传输;UIP为0时,至少244us内不会进行更新传输。本设计将UP位设置为1,这样DS12C887在上电初始化后会立即更新时间。

DV2、DV1、DV0位:这3位组合配置后用来启动或关闭DSl2C887的内部晶体振荡器。本设计将这3位配置为010,意即打开内部晶体振荡器,允许RTC计时。另外,若是长期不使用DS12C887,为了使其锂电池节能,可以通过程序将这3位配置为010之外的其他值,比如000。

RS3、RS2、RS1、RS0:速率选择位,这4位组合赋予不同的值,可以使得SWQ管脚对外输出不同频率的方波或者使得内部产生相应周期的周期中断。比如赋值0001时,可使SWQ脚输出256Hz的方波,中断周期为3.90625ms。本设计没有使用这4位,故将这4位设置为0000,意即无中断周期,SWQ无方波输出。

(2)B寄存器

SET:当SET位设置为0时,芯片更新正常进行;当SET位设置为1时,芯片更新被禁止。本设计将SET位设置为0。

PIE:当PIE位设置为0时,禁止周期中断输出至IRQ;当PIE位设置为1时,允许周期中断输出至IRQ。本设计未使用周期中断功能,故将PIE位设置为0。

AIE:当AIE位设置为0时,禁止闹钟中断输出至IRQ;当AIE位设置为1时,允许闹钟中断输出至IRQ。本设计未使用闹钟中断功能,故将AIE位设置为0。

UIE:当UIE位设置为0时,禁止更新结束中断输出至IRQ;当UIE位设置为1时,允许更新结束中断输出至IRQ。本设计未使用更新结束中断功能,故将UIE位设置为0。

SQWE:SQW方波输出使能位,当SQWE位设置为0时,SQW脚输出低电平;当SQWE位设置为1时,SQW脚输出设定频率的方波。本设计未使用SQW方波输出,故将SQWE位设置为0。

DM:时钟信息格式选择位,当DM=0时,采用二进制表示时钟信息;当DM=1时,采用BCD码表示时钟信息。本设计将DM设置为1,采用BCD码表示时钟信息。

24/12:时制选择位,当这位为0时,12小时制;当这位为1时,24小时制;本设计将这位设置为1,采用24小时制。

DSE:夏令时使能位,本设计不采用夏令时,故将DSE位设置为0。

三、DS12C887读写操作时序分析

DS12C887有Motorola和INTEL两种读写操作时序,下面分析常用的INTEL时序。

(一)INTEL读时序

读操作是指单片机从DS12C887某个地址的寄存器里读出数据(时、分、秒数等),包括写地址和读数据两部分。首先将CS置低让DS12C887正常工作,然后将AS、DS、RW置高,此时将待读取的寄存器地址通过单片机P0口写入DS12C887,接着将AS拉低,这样就将待读取的寄存器地址锁存住了。接着读取数据,在读取数据之前先将DS拉低,此时就将待读取的数据通过单片机P0口读出来了。最后将AS、DS、CS都置高,以便为下一次读取新的数据做准备。

(二)INTEL写时序

写操作是指单片机向DS12C887某个地址的寄存器里写入数据(时、分、秒数等),因此包括写地址和写数据两部分。首先将CS置低让DS12C887正常工作,然后将AS、DS、RW置高,此时将待写入的寄存器地址通过单片机P0口写入DS12C887,接着将AS拉低,这样就将待操作的寄存器地址锁存住。接着写数据,在写数据之前先将RW拉低,此时就将待写入的数据通过单片机P0口写入DS12C887。地址和数据都写入至DS12C887之后,最后将AS、RW、CS都置高,以便为下一次写入新的数据和地址做准备。

四、程序编写

读操作和写操作是DS12C887最关键的两个操作,根据上文中对读写操作时序的分析,本文编写了完整的DS12C887读、写操作函数以及初始化时钟数值函数,如下文所述,并给出相应的程序注释。

(一)DS12C887读操作函数

uchar read(uchar add)∥读数据

{

uchar dat;∥定义dat保存读取的数据值

cs=0;∥片选有效

as=1;∥先将AS、DS、RW置高

ds=1;

rw=1;

P0=add;

as=0;∥此時地址写入了时钟芯片

ds=0;∥将DS拉低,为读取数据做准备

dat=P0;∥将读取的数据存入dat变量

ds=1;∥最后将DS、AS、CS置高,准备下次读数据

as=1;

cs=1;

return(dat):∥将读取的数据返回

}

(二)DSl2C887写操作函数

void write(uchar add,uchardat)∥写数据

{

cs=0;∥片选有效

as=1;∥先将AS、DS、RW置高

ds=1;

rw=1;

P0=add;

as=0;∥此时地址写入了时钟芯片

rw=0;∥将RW拉低,为写数据做准备

P0=dat;∥将数据dat通过P0口写入时钟芯片

rw=1;∥最后将RW、AS、CS置高,准备下次写数据

as=1;

cs=1;

}

五、结语

本文阐述了使用单片机和DS12C887设计电子万年历的方法,描述了DS12C887的特点、寄存器配置、读写操作时序,给出了完整的DS12C887读写操作程序代码,并做了较为详细的注释。另外,由于1602液晶显示操作和按键操作相对比较简单,所以本文未予阐述。通过电子万年历的软硬件设计和仿真,为以后在单片机设计领域开展更为深入地研究打下了基础。

猜你喜欢

单片机
基于单片机MCU的IPMI健康管理系统设计与实现
浅析51单片机的特点与应用
单片机在智能控制中的应用
C8051F020与80C51单片机的异同点
MCS—51单片机多串口通讯技术应用分析
一种单片机虚拟实验室的建立方法
点阵式液晶显示器lMl2864与51单片机的接口设计
单片机I/O口模拟串行通讯的C51实现方法
单片机调试方法的探讨
用PIC单片机制作的时间继电器