




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、福州职业技术学院毕业设计设计题目DS12C887时钟芯片的应用系 别技术工程系年级专业 09 应用电子技术(闽台) 学 号姓 名 指导教师 倪榕生职 称 讲 师2012年3月30日目录内容摘要 2关键词 2一、DS12C887简介 2(一)器件特性2(二)引脚功能2(三)应用 5二、DS12C887寸钟芯片在设计中的应用 7(一)概述 7(二)系统硬件的设计 7(三)系统的软件设计 8(四)主要源程序代码如下 9结语 16参考文献 17附录 18DS12C887寸钟芯片的应用内容摘要电子万年历在家庭居室、学校 、车站和广场使用越来越广泛 ,给人们的生活 、学习、工作带来 极大的方便。针对 以往
2、 的电子万年历断 电后需重新调整时间与 日期,且计时误差大的现象 。本系统设计采 用实时钟芯片(DS12C887)作为计时器件 ,该芯片 内部 自带晶体振荡器 ,这样就有效的保证 了计时的精确 性,并且内部 自带锂 电池使得在断情况能继续更新时间信息。关键词万年历 时钟芯片DS12C887一 DS12C887 简介(一)器件特性DS12C887实时时钟芯片功能丰富,可以用来 直接代替IBM PC上的时钟日历芯片 DS12887, 同时,它的管脚也和 MC146818B DS12887相 兼容。由于DS12C887能够自动产生世纪、 年、月、日、时、分、秒等时间信息,其内部 又增加了世纪寄存器,
3、从而利用硬件电路解决 子“千年”问题;DS12C887中自带有锂电 池, 外部掉电时,其内部时间信息还能够保 持10 年之久;对于一天内的时间记录,有 12小时DS12C887SETDsLLE2叵叵5 &D DA ANDGtsDS12C887 24-pin图I DS12C887的引脚排列制和24小时制两种模式。在12小时制模式 中,用AM和PM区分上午和下午;时间的表 示方法也有两种,一种用二进制数 表示,一 种是用BCD码表示;DS12C887中带有128字节RAM,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,称为控制寄存器,113字节通用RAM使用
4、户使 用;此外用户还 可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。(二)引脚功能DS12C887的引脚排列如图1所示,各管脚的功能说明如下:GND VCC直流电源,其中VCC接+5V输入,GND接地,当VCC输入为+5V时,用 户可以访问 DS12C887内RAM中的数据,并可对其进行读、写操作;当 VCC的输入小于+4.25V时,禁止用 户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信 息;当VCC的输入小于 +3V时,DS12C887会自动将电源发换到内部自带的锂电池上,以保证内部的电路能够正常工(1) MOT模式选择脚,DS12
5、C887有两种工作模式,即 Motorola 模式和In tel 模式,当MOT 接 VCC 时,选用的工作模式是 Motorola 模式,当 MOT 接 GND 时,选用的是 Intel 模式。本 文主要讨论 Intel 模式。(23) SQW方波输出脚,当供电电压 VCC大于4.25V时,SQW脚可进行方波输出,此时用 户 可以通过对控制寄存器编程来得到13种方波信号的输出。ADLAD7:复用地址数据总线,该总线采用时分复用技术,在总线周期的前半部分,出现在ADOAD7上的是地址信息,可用以选通DS12C887内的RAM总线周期的后半部分出 现在AD0AD7上的数据信息。(14) AS:地
6、址选通输入脚,在进行读写操作时, AS的上升沿将ADOAD7上出现的地址信 息 锁存到 DS12C887 上,而下一个下降沿清除 AD0AD7 上的地址信息,不论是否有效, DS12C887 都将执行该操作。(17) DS/RD数据选 择或读输入脚,该引脚有两种工作模式,当MOT接VCC时,选用 Motorola 工作模式,在这种工作模式中,每个总线周期的后一部分的 DS 为高电平,被称为数 据选通。在读操作中, DS 的上升沿使 DS12C887 将内部数据送往总线 AD0AD7 上,以供外 部 读取。在写操作中, DS 的下降沿将使总线 AD0AD7 上的数据锁存在 DS12C887 中;
7、当 MOT 接 GND时,选用In tel 工作模式,在该模式中,该引脚是读允许输入脚,即Read En able。(15) R/W:读/写输入端,该管脚也有 2种工 作模式,当MOT接VCC时,R/W工作在 Motorola 模式。此时,该引脚的作用是区分进行的是读操作还是写操作,当 R/W 为高电平时 为 读操作, R/W 为低电平时为写操作;当 MOT 接 GND 时,该脚工作在 Intel 模式,此时该作 为 写允许输入,即 Write Enable 。(13) CS:片选输入,低电平有效。(19) I RQ:中断请求输入,低电平有效,该脚有效对 DS12C887内的时钟、日历和 RA
8、M中的 内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,RESET可以直接接VCC,这样可以保证 DS12C887 在掉电时,其内部控制寄存器不受影响。在 DS12C887 内有 11 字节 RAM 用来存储时间信息, 4 字节用来存储控制信息,其具体垢 地址 及取值如表 1 所列。(三) 应用在各种设备、家电、仪器、工业控制系统中,可以很容易地用DS12C887来组成时间获取 单元,以实现各种时间的获取。图 2是用8031单片机和DS12C887构成的时间获取电路图, 其 中DS12C887的基地址为7F00H,相应的程序采用C51语言编写(以Intel 工作模式为例)。由80
9、31单片机和DS12C887构 成的时间获取电路的初始化程序如 下:XBYTE0x7F00+0x0B=0x82;XBYTE0x7F00+0x0A=0xA0;XBYTE0x7F00+0x0A=0x20;XBYTE0x7F00+0x0B=0x02;/*所有的中断禁止,24小时制,BCD码模式*/以下均获取时间程序:un sig ned char data t-ce ntury;un sig ned char data t-yearun sig ned char data t-m on th;2o 1 2 3 4 rj b 7 012 3 4 rj 6 7 0 Au o- Q flv Av Au.
10、nV Az 1 2- T4 1* 7* F p p p p p p p p F p p p p p pD Dp NX X / ERTLEraARD-irIRyiPlS-dADC ADI ADJ ADS 諏 ADS 删 AD?AS K R/i BNCT1RJffCDS12C8B7P28VDD22一 UlOkD12K0 2由8031单片机和DS12C887构成的时间获取电路un sig ned char data t-date;un sig ned char data t-week;un sig ned char data t-hour;un sig ned char data t-minu te
11、;un sig ned char data t-sec ond;if(XBYTE7F00+0x0A &0x80)!=0)t-century=XBYTE0x7F00+0x32;/* 读取世纪 */t-year=XBYTE0x7F00+0x09;/* 读取年份 */ t-month=XBYTEOx7F00+0x08;/* 读取月份 */t-date=XBYTEOx7F00+0x07;/* 读取日期 */ t-week=XBYTEOx7F00+0x06;/* 读取星期几 */t-hour=XBYTEOx7F00+0x04;/* 读取小时 */ t-minute=XBYTEDS12887+0x02;/
12、* 读取分钟 */ t-second=XBYTEOx7F00+0x00;/* 读取秒二DS12C887时钟芯片在设计电子万年历中的应用(一)概述电子万年历在家庭居室、学校、车站和广场使用越来越广泛,给人们的生活、学习、工作带来极大的方便。针对以往 的电子万年历断 电后需重新调整时间与日期,且计时误差 大的现象。本系统设计采用实时钟芯片(DS12C887A作为计时器件,该芯片内部自带晶体振荡器,这样就有效的保 证了计时的精确性,并且内部 自带锂电池使得在断情况能继续更新时间信 息。本设计采用AT89S52作为主控制器,为了提高电路的实用性加入温度测量 电路、报时和闹钟功能。实啊种芯片A+_N1系
13、统的绍构&工作原理单片机 检制器 AT89S52系统 的工作原理是:主控制器每隔一段 时间(小于一秒钟)读一次时钟芯片 的内部寄存器的值,将读出的日历、时间信息实时的显示在LED数码显示器上。同时,主控制器不断的扫描按键电路和温度测量电路,当有键按下时,识别出按键的值并调整相应的时间或日历的值再写入时钟芯片内部。温度数据由 测量电路(DS1280)获得的温度值送入显示 电路显示。(二)系统硬件的设计2. 1电源电路为了减少电路成本,本系统 电源 电路 由变压器变 压、三端集成稳压(L7805)电路产生5V,具有简单、 可靠、价格低廉等特点。2. 2主控制器主控制器采用ATME公司的最新系列单片
14、机产品AT89S52。该单片机除了 拥有MCS- 51系列单片机的所有;优点外,内部还具有8KB的在系统可编程 FLASH存储器,!低功耗的空闲和掉电模式,极大的降低 了电路的功耗。 另 外,还具有一个看 门狗电路,为电路的可靠工作提供 了更大的保证。23 数码管显示电路显示电路采用具有 高亮度、使用寿命长、价格低 廉等特 点的 LED 数码 管。整个显示 电路由LED数码管和 显示驱动 电路和译码 电路构成。由于本 系统 中显示 的 内容较 多,共需要 16 个数码管,分别用八位显示年 、 月、日,四位显示时间,二位 显示星期,二位显示温 度 。为了节省控制器的 资源,在控制器和 显示器之间
15、 加入一个译码 电路使本来需要 16 根控制线的 电路变成 只需 四根控制线 ,极大的节省了系统资源 。该译码器 由两个 3 8 译码器构成。24 按键与温度测量电路本系统为了使 电路更简单,按键 电路只设计了个按键,分别是设 置、+、一三个键用来调整 日历以及时钟。 本系统为 了提高 电路的实 用 性,增加 了一个温度显示功能。该系统的温度测量电路采用 DallaS 公司的 DS1280该器件由于其具有价格低廉电路简单、测量精确等优点。25 音频信号产生及驱动电路本电路的功能是接收控制 电路发送来 的整点报 时及定时信号,根据系统 设定产生不同频率的音频信号, 由驱动 电路加以放大驱动扬声器
16、发 出声音, 从而实现整点报时及闹钟的功能。(三)系统的软件设计本系统程序 由主程序、中断服务函数和 多个子 函数构成。主 函数主要 完成各子函数和 中断函数的初始化 。定时中断函数主要完成时钟 芯片的定时 扫描 及键盘扫描。时钟芯片的读 写函数主要是将 时间、 日历信息读 出来, 并把要修 改的具体值写入时钟芯片 内部。相关程序流程图如下:定fHJfi中慝臓务柑序(四) 主要源程序代码如下:#itic1ude #itic1ude #defitie int enab1e EA=1 #defitie Urlsigned char uchar#defitie UrlSigned int Uint
17、*函数声明 *VOid read rtc(void)VOid businitialize(VOid)void di splay(VOid) void di S ca1endar(uchar bit sh void dis t d t(uchar bit shiel: *显示函数 */VOid int initialize(VOid) : VOid timerO initialize(VOid) * Static int data year=O:Static uchar data month=O : Static uchar data day=O : Static uchar data week
18、day=O Static uchar data hour=O : Static uchar data miflUte=OStatic uchar data counter=OStatic uchar data a regiSter=OStatic uchar data b regiSter=O#defitie add data P1 sbit cS= P3 7 : sbit as= P3 6 : sbit r 71- P3 5;Sbit ds= P3 4 : sbit add 138= P2 4 : Sbit a 138= P2 7 : sbit b 138= P2 6 : Sbit c 13
19、8= P2 5 : sbit set= P2 3 : sbit up= P2 2 : sbit down= P2 1 : sbit 1edour= P2 0 : sbit DO= P3 0 : #defitie diSP1ay data PO #defitie A REGISTER OxOa #defitie B REGISTER OxOb #def i tie CENTURY REG 0x32 #def i tie YEAR REG Ox09 #defitie MONTH REG Ox08 #defitie DAY REG OxO7 #defitie WEEKDAY REG Ox06 #de
20、fi tie HOUR REG Ox04 #defitie MINUTE REG Ox02 #def i tie SECOND REG OxO0Static uchar data REGISTER ADDStat ic uchar Set c1ock=O : Static bit bdata va1ue set=1:Static bit bdata f Set=O:Static bit bdata f Set corl=O:star iC uchar up clock=O : Static bit bdata va1ue up=1:static bit bdata f _ up=O : sta
21、tic bit bdata f _upcon=O;static uchar down _clock=O ; static bit bdata value_down=1 : static bit bdata f _down=O : static bit bdata f _down_con=O ; uchar code tab _dis11=OxcO , Oxf9, Oxa4, OxbO,0x99, 0x92,0x82,Oxf8,Ox80,Ox90,Oxff) :*消隐信号 * void main(void) 主函数uchar data verdict _set=Oapart_year ,apar
22、t _century ;int _enable开总中断timerO _initialize 0:定时器 0 初始化int _initialize0外部中断初始化whi1e(1)setif (f _con=1) set 键处理set _con=OREG I STER _ ADD+: i f (REGISTER_ADD6)REG I STER _ ADD=O:)if (f_up_con=1) up 键处理f _up _con=O ;write _timing(B _REGISTER , Ox8f) :switch (REGISTER ADD)case 0 : break :case 1 : yea
23、r+ :i f (year9999)year=O : apart_year=(year l0) : write_timing(YEAR_ REG apart_year) : write_timing(CENTURY_REG,apart_century) break :case 2 : month+:i f (month12)month=l ; write_timing(MONTH_REG,month) ; break ;case 3 : day+ :if (day31)day=l : write_timing(DAY_REG ,day) : break :case 4 : hour+ :i f
24、 (hour23) hour=O : write_timing(HOUR_REG,hour) : break :case 5 : minute+ :if (minute59)minute=O : write_timing(MINUTE_REG , minute) break :case 6 : weekday+;if (weekday7)weekday=1 : write_timing(WEEKDAY_REG,weekday) break :)Write_timing(B_REGISTER,OxOf); switch (REGISTER ADD)case 0 : break :case 1 :
25、 year 一一:i f (yearO) year=9999 : apart_century=(year10) : apart_year=(year lO) ; write_timing(YEAR_REG ,apart_year) writ _timing(CENTURY_REG, apart_century) break :case 2 : month 一一:if (month1)month=l2 : write_timing(MONTH_REG,month) ; break ;case 3 : day 一一:if (day1)day=31 : write_timing(DAY_ REG ,
26、day) : break :case 4 : hour 一一: if (hour=255)hour=23 write_timing(HOUR_REG,hour) : break : case 5 : minute 一一: if (minute=255)minute=59 : write_timing(MINUTE_REG , minute) break :case 6 : weekday 一一:if (weekday1)weekday=7 ; write_timing(WEEKDAY_REG,weekday); break ; Write_timing(B_REGISTER,OxOf):dis
27、play() :调用显示函数void read_rtc(void) 读时钟芯片函数 uchar verdict_uiP , century , comp_month,comp_day, comp_hour, comp_minute, comp_weekda:y int comp_year : doVerdict_uip=read_timing(OxOa) : verdict_uip=1 : century=read_timing(CENTURY_REG): comp_year=lO*century+read_timing(YEAR_REG)comp_month=read_timing(MONT
28、H_REG:) comp_day=read_timing(DAY_REG): comp_weekday=read_timing(WEEKDAY_RE:G) comp_hour=read_timing(HOUR_REG:) comp_minute=read_timing(MINUTE_REG): if (comp_year-year!=0)year=comp_year : month;if (comp_ month month!=0)month=comp_day: if (comp_day-day!=0)day=comp_day;if (comp_weekday!=0)weekday=comp_
29、weekday;if(comp_hour-hour!=0)hour=comp_hour; if(comp_minute-minute!=0)minute=comp_minute; 木木木定时器 0 中断函数木木木void timerO(void) interrupt 1 USing 1TRO=O;THO=Oxfd:TLO=OxO:0TRO=1:Counter+ :if (counter=l50)read rtc 0 :counter=O :结语这次的毕业设计是对我大学三年里所学知识的考核和总结,考察了我对所 学基础知识和专业知识的一种综合应用能力,在这几个月里通过我自己的努力 以及倪榕生老师的
30、悉心指导,本着严谨求实,开拓创新的精神完成了这次毕业 设计。在这次毕业设计中让我学会了把书本上的知识应用到了实际中来,在实践 中加深了对所学知识理解,真正的理解了理论可以指导实践,实践可以加深对 理论的理解这句话。虽然在这毕业设计中有遇到过不少的问题,但是在我自己 的努力之下,在老师的悉心帮助之下都一一的解决了,在解决问题的同时也提 高了自己分析问题的能力,增加了不少宝贵的经验,学习到了书本上没有的东 西。在此要感谢倪榕生老师对我悉心的指导,感谢老师们给我的帮助。在设 计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教 等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同
31、样巨大。在整 个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作 能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高 了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。 虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次毕业设计 的最大收获和财富,使我终身受益。参考文献1、刘守义 .单片机应用技术 .西安电子科技大学出版社 .2007.82、白延敏 . 51 单片机典型系统开发实例 .电子工业出版社 .2009.1附录时钟芯片 ds12c887 的驱动程序#include/* 命令常量定义 */#define CMD_START_
32、DS12C887 0x20 /* 开启时钟芯片*/#define CMD_START_OSCILLATOR 0x70 /* 开启振荡器, 处于抑制状态 */#define CMD_CLOSE_DS12C887 0x30 /* 关掉时钟芯片*/* 所有的置位使用或操作,清除使用与操作 */#define MASK_SETB_SET 0x80 /* 禁止刷新 */#define MASK_CLR_SET 0x7f /* 使能刷新 */#define MASK_SETB_DM 0x04 /* 使用 HEX 格式*/#define MASK_CLR_DM 0xfb /* 使用 BCD 码格式 */#d
33、efine MASK_SETB_2412 0x02 /* 使用 24 小时模式 */#define MASK_CLR_2412 0xfd /* 使用 12 小时模式 */#define MASK_SETB_DSE 0x01 /* 使用夏令时 */#define MASK_CLR_DSE 0xfe /* 不使用夏令时*/* 寄存器地址通道定义 */xdata char chSecondsChannel _at_ 0xdf00; xdata char chMinutesChannel _at_ 0xdf02; xdata char chHoursChannel _at_ 0xdf04; xdata
34、 char chDofWChannel _at_ 0xdf06; xdata char chDateChannel _at_ 0xdf07; xdata char chMonthChannel _at_ 0xdf08; xdata char chYearChannel _at_ 0xdf09; xdata char chCenturyChannel _at_ 0xdf32; xdata char chRegA _at_ 0xdf0a;xdata char chRegB _at_ 0xdf0b; xdata char chRegC _at_ 0xdf0c;xdata char chRegD _a
35、t_ 0xdf0d;/* 函数声明部分 */void StartDs12c887(void);void CloseDs12c887(void);void InitDs12c887(void);unsigned char GetSeconds(void);unsigned char GetMinutes(void);unsigned char GetHours(void);unsigned char GetDate(void);unsigned char GetMonth(void);unsigned char GetYear(void);unsigned char GetCentury(voi
36、d);void SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char chHours);void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear); /* 函数功能:该函数用来启动时钟芯片工作 应用范围:仅在时钟芯片首次使用时用到一次入口参数: 出口参数:*/void StartDs12c887(void)chRegA = CMD_START_DS12C887;/* 函数功能:该函数用来关闭时钟芯片 应用范围:一般
37、用不到入口参数: 出口参数:*/void CloseDs12c887(void)chRegA = CMD_CLOSE_DS12C887;void InitDs12c887()StartDs12c887();chRegB = chRegB | MASK_SETB_SET; /* 禁止刷新 */ chRegB = chRegB & MASK_CLR_DM | MASK_SETB_2412 & MASK_CLR_DSE;/* 使用 BCD 码格式、 24 小时模式、不使用夏令时 */chCenturyChannel = 0x21; /* 设置为 21 世纪 */ chRegB = chRegB &
38、MASK_CLR_SET; /*使能刷新 */* 函数功能:该函数用来从时钟芯片读取秒字节应用范围:入口参数:出口参数:*/ unsigned char GetSeconds(void)return(chSecondsChannel);/* 函数功能:该函数用来从时钟芯片读取分字节应用范围:入口参数:出口参数:*/ unsigned char GetMinutes(void)return(chMinutesChannel);/* 函数功能:该函数用来从时钟芯片读取小时字节 应用范围:入口参数: 出口参数: */ unsigned char GetHours(void) return(chHou
39、rsChannel);/* 函数功能:该函数用来从时钟芯片读取日字节 应用范围:入口参数: 出口参数:unsigned char GetDate(void) return(chDateChannel);/* 函数功能:该函数用来从时钟芯片读取月字节 应用范围:入口参数:出口参数:*/ unsigned char GetMonth(void) return(chMonthChannel);/* 函数功能:该函数用来从时钟芯片读取年字节 应用范围:入口参数: 出口参数: */ unsigned char GetYear(void) return(chYearChannel);/* 函数功能:该函数用来从时钟芯片读取世纪字节 应用范围:入口参数: 出口参数: */ unsigned char GetCentury(void) return(chCenturyChannel);/* 函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《收玉米》(教案)2024-2025学年数学一年级下册
- 2025年股权投资协议业绩对赌
- 2025年收购公司合同模板
- 三年级上册数学教案-第3单元 长方形和正方形 1 长方形和正方形 第1课时(苏教版)
- 2025年美发店合伙经营合同
- 2025年公司销售员合同模板
- (高清版)DB45∕T 560-2021 甘蔗中耕施肥培土机作业质量
- Unit 2 An Accident Lesson 2 Let's practice(教学设计)-2024-2025学年北师大版(三起)英语六年级上册
- 统编版四年级上册语文第五单元习作 《生活万花筒》公开课一等奖创新教学设计
- 期中重难点检测卷(试题)-小学数学三年级上册人教版(含解析)
- 绵阳市三台县乡镇地图矢量可编辑课件行政区划边界高清(四川省)
- 争做“四有好老师”-当好“四个引路人”
- 术语翻译与本地化
- 2024年全国高考甲卷语文真题试卷含答案
- AQ/T 1089-2020 煤矿加固煤岩体用高分子材料(正式版)
- 幼儿园故事绘本《卖火柴的小女孩儿》课件
- DB32-T 4752-2024 一体化污水处理设备通.用技术要求
- 妊娠期高血压疾病试题
- 医院多重耐药菌感染管理规范
- 《公平竞争审查条例》微课
- 《肺部疾病 案例分析-原发性肺癌》课件
评论
0/150
提交评论