DS12C887电子芯片的应用本科设计说明_第1页
DS12C887电子芯片的应用本科设计说明_第2页
DS12C887电子芯片的应用本科设计说明_第3页
DS12C887电子芯片的应用本科设计说明_第4页
DS12C887电子芯片的应用本科设计说明_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、职业技术学院毕业设计设计主题DS12C887时钟的应用其他技能和工程系 DS12C887时钟芯片的应用电子日历广泛应用于家庭居室、学校、车站、广场,给人们的生活、学习、工作带来了极大的便利。针对以往电子万年历断电后需要重新调整时间和日期,计时误差较大的现象。在该系统中,采用实时时钟芯片(DS12C887)作为定时器件。这个芯片自带晶振,有效保证了计时的准确性。此外,一些芯片自带锂电池,在断电时可以不断更新时间信息。关键词万年历时钟芯片DS12C887DS12C887简介(一)设备特性DS12C887实时时钟芯片功能丰富,可用于代替IBM PC上时钟和日历芯片DS12887,同时,其引脚与MC1

2、46818B和DS12887同相。兼容。因为DS12C887可以自动生成世纪、年、月、日、时、分、秒等时间信息,及其所属部门增加了世纪寄存器,用硬件电路解决。“千年”问题;DS12C887自带锂电池,当外部电源关闭时,其时间信息仍可保持在10。年;对于一天的时间记录,有12个小时。和24小时工作制。在12小时模式下在中,用AM和PM来区分上午和下午;时间表。也有两种方法,一种是用二进制数表示,一种是用二进制数表示。物种用BCD码表示;DS12C887有128字节的RAM,其中11字节RAM用于存储时间信息,4字节RAM用于存储DS12C887的控制信息,称为控制寄存器,113字节通用RAM供用

3、户使用。此外,用户可以对DS12C887进行编程,实现各种方波输出,并通过软件屏蔽其三路中断。(2)引脚功能DS12C887的引脚排列如图1所示,各引脚功能描述如下:VCC GND:DC电源,VCC接+5V输入,GND接地。当VCC输入为+5V时,用户可以访问DS12C887 RAM中的数据并对其进行读写。当VCC的输入小于+4.25V时,禁止用户读写RAM,此时用户无法正确获取芯片的时间信息;当VCC的输入小于+3V时,DS12C887会自动将电源切换到该部的锂电池,从而保证该部的电路能够正常工作。(1)MOT:模式选择脚。DS12C887有两种工作模式,即摩托罗拉模式和英特尔模式。当MOT

4、连接到VCC时,选择摩托罗拉模式,当MOT连接到GND时,选择英特尔模式。本文主要讨论英特尔模式。(23)SQW:方波输出引脚。当电源电压VCC大于4.25V时,SQW引脚可以输出方波。此时,用户可以对控制寄存器进行编程,以获得13种方波信号。Ad0 Ad7:复用地址数据总线,采用时分复用。在总线周期的前半部分,地址信息出现在Ad0 Ad7上,可以用来选通DS12C887的RAM,数据信息出现在总线周期的后半部分。(14)AS:地址选通输入引脚。读写时,AS的上升沿锁存AD0 AD7至DS12C887上出现的地址信息,下一个下降沿清除AD0 AD7上的地址信息。不管有效与否,DS12C887都

5、会执行这个操作。(17)DS/RD:数据选择或读取输入引脚。该引脚有两种工作模式。当MOT连接到VCC时,选择摩托罗拉工作模式。在这种工作模式下,每个总线周期后半部分的DS处于高电平,称为数据选通。在读取操作中,DS的上升沿使DS12C887向总线AD0AD7发送部分数据,以供外部读取。在写操作时,DS的下降沿会锁存DS12C887中总线AD0AD7上的数据;当MOT连接到GND时,将选择英特尔工作模式。在这种模式下,此引脚是读使能输入引脚,即Read Enable。(15)读/写:读/写输入。此引脚也有两种工作模式。当MOT连接到VCC时,R/W以摩托罗拉模式工作。此时,该引脚的功能是区分是

6、执行读操作还是写操作。当读/写处于高电平时,它是读操作,当读/写处于低电平时,它是写操作。当MOT连接到GND时,此引脚在英特尔模式下工作。此时,应将其用作写使能输入,即写使能。(13):片选输入,低电平有效。(19):中断请求输入,低电平有效。此引脚有效不会影响DS12C887的时钟、日历和RAM,只会影响器件的控制寄存器。在典型应用中,RESET可以直接连接到VCC,这样可以保证DS12C887的控制寄存器在掉电时不受影响。在DS12C887中,11字节的RAM用于存储时间信息,4字节的RAM用于存储控制信息。具体地址和值如表1所示。(3)应用在各种设备、家用电器、仪器仪表和工业控制系统中

7、,可以方便地使用DS12C887组成时间采集单元,从而实现各种时间的采集。图2是由8031单片机和DS12C887组成的时间采集电路图,其中DS12C887的基址为7F00H,用C51语言编写了相应的程序(以Intel工作模式为例)。由8031单片机和DS12C887组成的时间采集电路的初始化程序如下:x byte0 x7f 00+0 x0B= 0 x 82;x byte0 x7f 00+0 x0A= 0 xa 0;x byte0 x7f 00+0 x0A= 0 x 20;x byte0 x7f 00+0 x0B= 0 x 02;/*禁止所有中断,24小时制,BCD码模式*/以下时间采集程序:

8、无符号字符数据t-century;无符号字符数据t年无符号字符数据t-month;无符号字符数据t-date;无符号字符数据t-week;无符号字符数据t小时;无符号字符数据t分钟;无符号字符数据t秒;if(XBYTE7F00+0 x0A&0 x80)!=0)t-century = XBYTE0 x7f 00+0 x 32;/*读世纪*/t-year = x byte0 x7f 00+0 x 09;/*阅读年份*/t-month = x byte0 x7f 00+0 x 08;/*读书月*/t-date = x byte0 x7f 00+0 x 07;/*阅读日期*/t-week = x by

9、te0 x7f 00+0 x 06;/*读取星期几*/t-hour = x byte0 x7f 00+0 x 04;/*阅读时间*/t-minute = x byteds 12887+0 x 02;/*阅读时间*/t-second = x byte0 x7f 00+0 x 00;/*读取秒数DS12C887时钟芯片在电子万年历设计中的应用(1)概述电子日历广泛应用于家庭居室、学校、车站、广场,给人们的生活、学习、工作带来了极大的便利。针对以往电子万年历断电后需要重新调整时间和日期,计时误差较大的现象。在本系统设计中,采用实时时钟芯片(DS12C887A)作为计时器件,自带晶振,有效保证了计时的

10、准确性,自带锂电池可以在掉电的情况下持续更新时间信息。本设计采用AT89S52作为主控制器,为了提高电路的实用性,增加了测温电路、报时和闹钟功能。系统的工作原理是:主控制器每隔一段时间(不到一秒钟)读取时钟芯片部分寄存器的值,并将读取的日历和时间信息实时显示在LED数字显示器上。同时,主控制器不断扫描按键电路和测温电路。当一个键被按下时,它识别键值并调整相应的时间或日历值,然后写入时钟芯片。温度数据测量电路(DS1280)获得的温度值送到显示电路进行显示。(2)系统硬件设计2.1电源电路为了降低电路成本,本系统的供电电路具有简单、可靠、价格低廉的特点,其中变压器变压,三端集成稳压(L7805)

11、电路产生5V。2.2主控制器主控制器是ATMEL公司生产的最新系列单片机AT89S52。这台单片机拥有MCS-51系列单片机的全部。此外,该部门还拥有8KB的系统内可编程闪存!低功耗空闲和省电模式大大降低了电路的功耗。此外,还有门狗电路,为电路的可靠运行提供了更大的保障。2.3数码管显示电路显示电路采用LED数码管,亮度高,寿命长,价格低。整个显示电路由LED数码管、显示驱动电路和解码电路组成。由于该系统显示容量大,总共需要16个数码管。八位数字显示年、月和日,四位数字显示时间,两位数字显示星期,两位数字显示温度。为了节省控制器的资源,在控制器和显示器之间增加了解码电路,使得原本需要16条控制

12、线的电路只需要4条控制线,大大节省了系统资源。解码器由两个3-8解码器组成。2.4按键和温度测量电路为了使电路更简单,这个系统的按键电路只有四个键,分别是set,+和one,用来调整日历和时钟。为了提高电路的实用性,系统增加了温度显示功能。系统的测温电路采用DallaS公司的DS1280。该装置具有价格低廉、电路简单、测量准确等优点。2.5音频信号产生和驱动电路该电路的作用是接收控制电路发送的整点时间和定时信号,根据系统设置产生不同频率的音频信号,经驱动电路放大后驱动扬声器发声,从而实现整点时间和闹钟的功能。(3)系统的软件设计该系统程序由主程序、中断服务函数和几个子程序组成。主函数主要完成所

13、有子函数和中断函数的初始化。定时中断功能主要完成时钟芯片的定时扫描和键盘扫描。时钟芯片的读写功能主要是读出时间和日历信息,将需要修改的具体数值写入时钟芯片部分。相关的程序流程图如下:(4)主要源代码如下:#itic1ude #itic1ude # defitie int enab1e EA = 1# defitie Urlsigned char uchar# defitie UrlSigned int Uint/* * * * * *函数声明* * * * * * * *VOid读取rtc(void):空总线初始化(无效):Void显示(void):/*显示功能*/无效di Sca1endar

14、(uchar位 嘘无效存款t(uchar钻头护罩 VOid int初始化(VOid):VOid timerO初始化(VOid):/*/静态整数数据年份=O:静态uchar数据月=O:静态uchar数据日=O:静态uchar数据weekday=O:静态uchar数据小时= 0:静态uchar数据miflUte=O:静态uchar数据计数器=O:静态uchar数据a寄存器= 0静态uchar数据b寄存器= 0#defitie添加数据P1sbit cS= P3 7:sbit as= P3 6:sbit r71-P3 5;Sbit ds= P3 4:sbit add 138= P2 4:Sbit a

15、138= P2 7:sbit b 138= P2 6:Sbit c 138= P2 5:sbit set= P2 3:sbit up= P2 2:sbit down= P2 1:sbit 1edour= P2 0:sbit DO= P3 0:#缺陷显示数据PO#定义一个寄存器OxOa#defitie B寄存器OxOb#def i tie CENTURY REG 0 x32#def i tie年度REG Ox09#赤字月规则Ox08#缺陷日REG OxO7#默认工作日REG Ox06#defi tie小时注册Ox04#定义分钟规则Ox02#def i并列第二REG OxO0静态uchar数据寄存

16、器添加Stat ic uchar Set c1ock = O:静态位b数据值设置=1:静态位bdata f Set=O:静态位bdata f Set corl=O:星形iC uchar上行时钟=O:静态位b数据值up=1:静态位bdata f_ up=O:静态位bdata f _ upcon = O;静态uchar down _ clock = O;静态位bdata。值下降=1:静态位bdata f_down=O:静态位bdata f _ down _ con = O;uchar代码tab _dis11=OxcO,Oxf9,Oxa4,OxbO,0 x99,0 x92、0 x82、Oxf8、Ox

17、80、Ox90、oxff):/*消隐信号*/void main(void)/主函数uchar数据判定_集= 0相隔_年,相隔_世纪;int _ enable/打开总中断定时器0 _ initialize 0:/定时器0已初始化int _ initialize0/外部中断初始化while(1)设置if(f _ con = = 1)/设置键处理f _set _con=O:REG I STER _ ADD+:i f(寄存器_ADD6)REG I STER _ ADD=O:)if(f _ up _ con = = 1)/向上键处理f _ up _ con = O;write _ timing(B _寄

18、存器,Ox8f):开关(寄存器添加)案例0:break:案例1:年份+:i f(年份 9999)year=O:apart_year=(年份%l0):写时间(除年份之外的年份):write_timing(CENTURY_REG,apart_century):休息:案例2:月+:i f(月 12)月= l;write_timing(MONTH_REG,MONTH);打破;案例3: day+:如果(日 31)日= 1:write_timing(日注册,日):休息:案例4:小时+:如果(小时 23)小时= 0:write_timing(HOUR_REG,小时):休息:案例5:分钟+:如果(分钟 59)

19、分钟= 0:写计时(分钟记录,分钟)休息:案例六:工作日+;如果(工作日 7)工作日=1:write_timing(WEEKDAY_REG,WEEKDAY)休息:)Write_timing(B_REGISTER,OxOf);开关(寄存器添加)案例0:break:一年一年:i f (yearO) year=9999:apart _ century =(10年):apart _ year =(year % lO);write_timing(YEAR_REG,apart_year)writer _ timing(CENTURY _ REG,apart_century)休息:2:一个月一个月:如果(m

20、onth1)month=l2:write_timing(MONTH_REG,MONTH);打破;案例三:一天一天:如果(day1)day=31:write_timing(日注册,日):休息:案例四:一小时一个小时:如果(小时=255)小时=23:write_timing(HOUR_REG,小时):休息:5分钟一个接一个:如果(分钟=255)分钟=59:写计时(分钟记录,分钟)休息:案例6:工作日一个接一个:if(weekday 1)weekday = 7;write_timing(WEEKDAY_REG,WEEKDAY);打破;write _ timing(B _寄存器,OxOf):displ

21、ay():/调用显示函数void Read _ RTC(void)/读取时钟芯片函数uchar verdict_uiP,世纪,薪酬月,薪酬日,薪酬小时,薪酬分钟,补偿工作日:公司年度利息:做Verdict_uip=read_timing(OxOa):verdict_uip=1:century=read_timing(世纪_寄存器):comp _ YEAR = lO * century+read _ timing(YEAR _ REG)comp _ MONTH = read _ timing(MONTH _ REG):comp_day=read_timing(DAY_REG):comp _ WE

22、EKDAY = read _ timing(WEEKDAY _ REG):comp_hour=read_timing(HOUR_REG):comp _ MINUTE = read _ timing(MINUTE _ REG):if (comp_year-year!=0)年=公司年:月份;if (comp_ monthmonth!=0)月=工作日:if (comp_day-day!=0)日=补休日;if (comp_weekday!= 0)week = comp _ weekday;if(comp_hour-hour!=0)小时= comp _ hourif(comp_minute-minute

23、!=0)分钟= comp _ minute/木木定时器0中断功能木木/void timerO(void)中断1使用1TRO = O;THO=Oxfd:TLO = 0 x 00:TRO=1:计数器+:如果(计数器=l50)阅读 rtc 0:计数器=O:标签本次毕业设计是对我大学三年所学知识的一次考核和总结,考查了我的基础知识和专业知识的一种综合应用能力。几个月来,在自己的努力和倪老师的悉心指导下,我以严谨、开拓、创新的精神完成了这次毕业设计。在这次毕业设计中,我学会了将书本上的知识运用到实践中,并在实践中加深了对所学知识的理解。我真正明白了理论可以指导实践,实践可以加深我对理论的理解。虽然在这次

24、毕业设计中遇到了很多问题,但是在自己的努力和老师的悉心帮助下,都一一解决了。在解决问题的同时,也提高了自己分析问题的能力,获得了很多宝贵的经验,学到了书本上没有的东西。在这里,我想感受一下倪老师对我的悉心指导和老师们对我的帮助。在设计过程中,通过查阅大量相关资料,与同学交流和自学,咨询老师,学到了很多知识,经历了很多艰辛,但收获同样很大。在整个设计中,我学到了很多东西,也培养了我独立工作的能力,树立了我对自己工作能力的信心。相信会对我以后的学习、工作、生活产生非常重要的影响。而且还大大提高了我的动手能力,让我充分体会到了创作过程中探索的艰难和成功的喜悦。虽然这个设计也不是很好,但是我在设计过程

25、中学到的东西是这次毕业设计最大的收获和财富,让我受益终身。参考1.首义。单片机应用技术。电子科技大学。2007年8月2.白了。51单片机典型系统开发实例。电子工业附录时钟ds12c887的驱动器#include命令常量定义*/打开时钟芯片*/打开振荡器,在禁止状态*/关闭时钟芯片。*/全部设置使用或操作,清除使用和操作*/禁止刷新*/启用刷新*/使用十六进制格式。*/制造使用BCD码格式*/来使用24小时模式*/使用12小时模式键入*/使用夏令时*/不使用夏令时*/寄存器地址通道定义*/函数声明部分*/Function函数:该函数用于启动时钟芯片。应用:仅在第一次使用时钟芯片时使用一次。参赛参

26、数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数周长:一般不用。参赛参数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

27、* * * * * * * * * * */使用BCD码格式,24小时模式,不使用夏令时*/设置为21世纪*/启用刷新*/Function函数:该函数用于从时钟芯片读取第二个字节。适用范围:参赛参数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数适用范围:参赛参数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

28、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数适用范围:参赛参数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数适用范围:参赛参数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

29、 * * * * * * * * * * * * * * * *函数适用范围:参赛参数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数适用范围:参赛参数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

30、 * *函数适用范围:参赛参数:导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *函数适用范围:输入参数:chSeconds、chMinutes和chHours是设置时间的压缩BCD码。导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

31、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */Function函数:该函数用于设置时钟芯片的日期。适用范围:参数:chDate、chMonth、chYear为设定日期的压缩BCD码。导出参数:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

32、* * * * * * * * *chDateChannel = chDatechMonthChannel = chMonthchYearChannel = chYearchRegB = chRegB & MASK _ CLR _ SET/*void SetDate(无符号字符chDate,无符号字符chMonth,无符号字符chYear)chr egb = chr egb | MASK _ SETB _ SET;/*/*chSecondsChannel = chSecondschMinutesChannel = chMinuteschHoursChannel = chHourschRegB

33、= chRegB & MASK _ CLR _ SET/*void SetTime(无符号字符秒,无符号字符分,无符号字符小时)chr egb = chr egb | MASK _ SETB _ SET;/*无符号字符获取世纪(void)return(chcenturyschannel);/*无符号字符GetYear(void)return(chYearChannel);/*无符号字符GetMonth(void)return(chmonth channel);/*无符号字符获取日期(void)return(chdate channel);/*无符号字符获取小时数(void)return(chH

34、oursChannel);/*无符号字符获取分钟数(void)return(chMinutesChannel);/*无符号字符GetSeconds(void)return(chSecondsChannel);/*/*chRegB = chRegB & MASK _ CLR _ SET/*chCenturyChannel = 0 x21/*chr egb = chr egb & MASK _ CLR _ DM | MASK _ SETB _ 2412 & MASK _ CLR _ DSE/*无效关闭12c887(无效)chRegA = CMD _ CLOSE _ DS12C887void Ini

35、tDs12c887()startds 12 c 887();chr egb = chr egb | MASK _ SETB _ SET;/*void StartDs12c887(void)chRegA = CMD _ START _ DS12C887/*void startds 12c 887(void);void closed s 12c 887(void);void initds 12 c 887(void);无符号字符get seconds(void);无符号字符get minutes(void);无符号char get hours(void);无符号字符GetDate(void);无符

36、号字符GetMonth(void);无符号字符GetYear(void);无符号字符get century(void);void SetTime(无符号字符秒,无符号字符分,无符号字符chHours);void SetDate(无符号char chDate,无符号char chMonth,无符号char chYear);/*xdata char chSecondsChannel _ at _ 0 x df 00;xdata char chMinutesChannel _ at _ 0 x df 02;xdata char chHoursChannel _ at _ 0 x df 04;xdata char chDofWChannel _ at _ 0 x df 06;xdata char ch date channel _ at _ 0 x df 07;xdata c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论