DS12887使用.doc

上传人:豆**** 文档编号:17405806 上传时间:2022-05-23 格式:DOC 页数:9 大小:147.50KB
返回 下载 相关 举报
DS12887使用.doc_第1页
第1页 / 共9页
DS12887使用.doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《DS12887使用.doc》由会员分享,可在线阅读,更多相关《DS12887使用.doc(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流DS12887使用.精品文档.DS12887为DALLAS公司生产的实时时钟芯片,除具有实时钟功能外,它还具有114字节的通用RAM。内藏锂电池,并与广泛应用的DS1287、MC146818B脚对脚兼容。本文从应用角度出发,概述了其功能特点、外部特性、内部结构及与微机芯片的接口应用。 关键词:更新周期; 非易失RAM; 各总线兼容; 定闹中断; 周期性中断1. DS12887的功能特点 DS12887是美国达拉斯半导体公司最新推出的时钟芯片,采用CMOS技术制成,把时钟芯片所需的晶振和外部锂电池相关电路集于芯片内部,同时它与目前 IBM AT

2、计算机常用的时钟芯片MC146818B和DS1287管脚兼容,可直接替换。采用DS12887芯片设计的时钟电路勿需任何外围电路并具有良好的微机接口。DS12887芯片具有微轼耗、外围接口简单、精度高、工作稳定可靠等优点,可广泛用于各种需要较高精度的实时时钟场合中。其主要功能如下: (1)内含一个锂电池,断电情况运行十年以上不丢失数据。 (2)计秒、分、时、天、星期、日、月、年,并有闰年补偿功能。 (3)二进制数码或BCD码表示时间、日历和定闹。 (4)12小时或24小时制,12小时时钟模式带有PWM和AM指导,有夏令时功能。 (5)MOTOROLA5和INATAEL总线时序选择。 (6)有12

3、8个RAM单元与软件音响器,其中14个作为字节时钟和控制寄存器,114字节为通用RAM,所有ARAM单元数据都具有掉电保护功能。 (7)可编程方波信号输出。 (8)中断信号输出(IRQ)和总线兼容,定闹中断、周期性中断、时钟更新周期结束中断可分别由软件屏蔽,也可分别进行测试。2. DS12887的原理及管脚说明 DS12887内部原理如图1所示,由振荡电路、分频电路、周期中断/方波选择电路、14字节时钟和控制单元、114字节用户非易失RAM、十进制/二进制计加器、总线接口电路、电源开关写保护单元和内部锂电池等部分组成。图2显示了DS12887管脚排列图。下面分别说明管脚功能: GND,VCC:

4、直流电源+5V电压。当5V电压在正常范围内时,数据可读写;当VCC低于4.25V,读写被禁止,计时功能仍继续;当VCC下降到3V以下时,RAM和计时器被切换到内部锂电池。 MOT(模式选择):MOT管脚接到VCC时,选择MOTOROLA时序,当接到GFND时,选择INTEL时序。 SQW(方波信号同):SQW管脚能从实时时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。 AD0AD7(双向地址/数据复用线):总线接口,可与MOTOROLA微机系列和INTEL微机系列接口。 AS(地址选通输入):用于实现信号分离,在AD/ALE的下降沿把地址锁入DS12

5、887。 DS(数据选通或读输入):DS/RD客脚有两种操作模式,取决于MOT管脚的电平,当使用MOTOROLA时序时,DS是一正脉冲,出现在总线周期的后段,称为数据选通;在读周期,DS指示DS12887驱动双向总的时刻,在写周期,DS的后沿使DS12887锁存写数据。选择INTEL时序时,DS称作(RD),RD与典型存贮器的允许信号(OE)的定义相同。 R/W(读/写输入):R/W管脚也有两种操作模式。选MOTOROLA时序时,R/W是一电平信号,指示当前周期是读或写周期,DSO为高电平时,R/W高电平指示读周期,R/W低电平指示写周期;选INTEL时序,R/W信号是一低电平信号,称为WR。

6、在此模式下,R/W管脚与通用RAM的写允许信号(WE)的含义相同。 CS(片选输入):在访问DS12887的总线周期内,片选信号必须保持为低。 IRQ(中断申请输入):低电平有效,可作微处理的中断输入。没有中断条件满足时,IRQ处于高阻态。IRQ线是漏极开路输入,要求外接上接电阻。 RESET(复位输出):当该脚保持低电平时间大于200ms,保证DS12887有效复位。3. DS12887的内部功能3.1 地址分配图 DS12887的地下分配图如图3所示,由114字节的用户RAM,10字节的存放实时时钟时间。日历和定闹RAM及用于控制和状态的4字节特殊寄存器组成,几乎所有的128个字节可直接读

7、写。 3.2 时间、日历和定闹单元 时间和日历信息通过读相应的内存字节来获取,时间、日历和定闹通过写相应的内存字节设置或初始化,其字节内容可以是十进制或BCD形式。时间可选择12小时制或24小时制,当选择12小时制时,小时字节搞位为逻辑“1”代表PM。时间、日历和定闹字节是双缓冲的,总是可访问的。每秒钟这10个字节走时1 秒,检查一次定闹条件,如在更新时,读时间和日历可能引起错误。三个字节的定闹字节有两种使用方法。第一种,当定闹时间写入相应时、分、秒定闹单元,在定允许闹位置高的条件下,定闹中断每天准时起动一次。第二种,在三个定闹字节中插入一个或多个不关心码。不关心码是任意从C到FF的16进制数

8、。当小时字节的不关心码位置位时,定闹为小时发生一次由于相线小时和分钟定闹字节置不关心位时,每分钟定闹一次;当三个字节都置不关心位时,每秒中断一次。3.3 非易失RAM 在DS12887中,114字节通用非易失RAM不专用于任何特殊功能,它们可被处理器程序用作非易失内存,。在更新周期也可访问。3.4 中断 RTC实时时钟加RAM向处理器提供三个独立的、自动的中断源。定闹中断的发生率可编程,从每秒一次到每天一次,周期性中断的发生率可从500ms到 122s选择。更新结束中断用于向程序指示一个更新周期完成。中断控制和状态位在寄存器B和C中,本文的其它部分将详细描述每个中断发生条件。3.5 晶振控制位

9、 DS12887出厂时,其内部晶振被关掉,以防止锂电池在芯片装入系统前被消耗。寄存器A的BIT4BIT6为010时打开晶振,分频链复位,BIT4BIT6的其它组合都是使晶振关闭。3.6 方波输出选择 如图1原理图所示,15级分步抽着中的13个可用于15选1选择器,选择分频器抽头的目的是在SQW管脚产生一个方波信号,其频率由寄存器A的 RS0RS3位设置。SQW频率选择与周期中断发生器共离15选1选择器,一旦频率选择好,通过用程序控制方波输出允许位SWQE来控制SQW管脚输出的开关。3.7 周期中断选择 周期中断可在IRQ脚产生500ms一次到每122s一次的中断,中断频率同样由寄存A确定,它的

10、控制位为寄存器B中的PIE位。3.8 更新周期 DS12887每秒执行一次更新周期还比较每一定闹字节与相应的时间字节,如果匹配枵三个字节都是不关心码,则产生一次定闹中断。 4. DS12887状态控制寄存器 DS12887有4个控制寄存器,它们在任何时间都可访问,即使更新周期也不例外。4.1 寄存器A BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0 UIP:更新周期正在进行位。当UIP为1,更新转换将很快发生,当UIP为0,更新转换至少在244s内不会发生。 DV0,DV1,DV2:用于开关晶振和复

11、位分频链。这些位的010唯一组合将打开晶振并允许RTC计时。 表1列了邮周期中断率和方波频率。 RS3,RS2,RS1,RS0:频率选择位,从15级频率器13个抽头中选一个,或禁止分频器输入,选择好的抽头用于产生方波(SQW管脚)输出和周期中断,用户可以: (1)用PIE位允许中断: (2)用SQWE位允许SQAW输出; (3)二者同时允许并用相同的频率; (4)都不允许4.2 寄存器B BIT7 BIT6 BIT5 BIT4 BIOT3 BIT2 BIT2 BIT1 SET PIE ALE0 VIE SQWE DM 24/12 DSE SET:SET为0,时间更新正常进行,每秒计数走时一次,

12、当SET位写入1,时间更新被禁止,程序可初始化时间和日历字节。 PIE:周期中断劲旅位,PIE为1,则允许以选定的频率拉低IRQ管脚,产和不足齿数民:PIE为0,则禁止中断。 AIE:定闹中断允许位,PIE为1,允许中断,否则禁止中断。 SQWE:方波允许位,置1选定频率方波从SQW脚输出;为0-时,SQW脚为低。 DM:数据模式位,DM为1青蛙为十进制数据,而0表明是BCD码的数据。 24/12:小时格式位,1表明24小时械,而0表明12小时械。 DSE:P夏令时允许位,当DSE置1时允许两个特殊的更新,在四月份的第一时期日、时间从1:59:59AM时改变为1:00:00AM,当DSE位为0

13、,这种特殊修正不发生。4.3 寄存器C BIT7 BIY6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 IRQF PF AF VF 0 0 0 0 IRQF:中断申请标志位。当下列表达式中一个或多个为真时,置1。 PF=PIE=1;AF=AIE=1; UF=UIE=1; 即:IRQF=PFPIE+AFAIE+UFUIE 只要IRQF为1,IRQ管脚输出低 ,程序读寄存器C以后或RESET管脚为低后,所有标志位清零。 AF:定闹中断标志位,只读,AF为1表明现在时间与定闹时间匹配。 VF:更新周期结束标志位。VF为1表明更新周期结束。 BIAT0BIT3:未用状态位,读出总为0,

14、不能写入。4.4 寄存器D BIT7 BIT6 BIT5 BIT4 BIOT3 BIT2 BIT1 BIT0 VRT 0 0 0 0 0 0 0 VRT:内部锂电池状态位,平时应总读出1,如出现0,表明内部锂电池耗 尽。 BIT0BIT6:未用状态位,读出总为0,不能写入。5. 硬件接口电路 DS12887时钟芯片和80C31单微机的接口电路如图4所示。模式选择脚MOT拉地,选择不NTEL时序,选择DS12887时钟芯片的地址总线及 AS端口和80C31单片微机的P0及ALE端直接相联;而DS、R/W读写控制线与单片机的RD、WAR控制线相连;DS12887的高位地址由 80C31半日片机的P

15、2.7端口来片选,则DS12887的高8位地址定为7FH,而其低8侠地址则由芯片内部各单元的地址来决定(00H3FH); DS12887的中断输出端IRQ和80C的外部INT0端相联,给单片机提供中断信号;DS12887的SQW端口可编程产生方波输出信号。 6. 接口软件 下面为DS12887时钟芯片和80C31单片机的接口软件,假定采用每天24小时制的非夏令时,时间数据格式为BCD码,初始化时间为1996年1月1 日9时00分00秒,1k方波输出。时钟芯片每一秒种向单片机申请中断一次,一方面让单片机修改一次时钟显示,另一方面也给单片微机系统提供时间基准。 (1)DS12887时钟芯片的初始化

16、写入程序 MOV DPTR,#7F0AH;寄存器A地址 MOV A,#70H:DV2DV0=111,分频复位 MOVX DPTR,AA INC DPTR:到寄存器B地址 MOV A,#8AH:停止更新,允许更新中断,选BCD码,24小时制 MOVX DPRT,A MOV QPL,#00H,秒单元地址 CLR A:00秒 MOVX DPTR,A MOV DPL,#02H;分单元地址 CLR A:00分 MOVX DPTR,A MOV DPL,#04H;时单元地址 MOV A,#09H;9时 MOVX DPTR,A MOV DPL#07H;日单元地址 MOV A,01H:1日 MOVXDPTR,A

17、INCDPTR:到月单元地址MOVA,01H;1月 MOVX DPTR,A IC DPTR:到年单元地址 MOV A,#96H;1996年 MOVX DPTR,A INC DPTR;到寄存器A地址 MOV A,#26H;DV2DV0=010 RS3RS0=0110 MOVX DPTR,A:选周期中断率为976.5625s,允许方波输出,频率1kHz INC DPTR:到寄存器B MOV A,#1AH;每秒更新一次,允许方波输出,24小时制 MOVX DPTR,A:时钟开始运行 (2)读取DS12887时钟日历数据程序 DS12887的日历时钟通常有中断和查询两种方法读出。但在读数据时,首先要判

18、断数据是否更新结束,只有在数据更新结束时数据读出才有效。 采用查询法读取数据: 查询寄存器A的UIP位,当UIP=0时,数据更新结束,可以读出。以下是采用查询方法,从秒至年单元的数据读出后存入80C31内部RAM的3035H单元中,该部分程序如下: MOV DPTR,#7F0AH;寄存器A地址 MOVX A,DPTR WAIT:JB ACC,7,WAIT:UIP=1则等待更新完毕 MOV DPL,00H;秒地址 MOV R0,#30H;取目标首地址 MOVX A,DPTR;取秒数据 MOV R0,A:送入80C31的内部RAM缓冲区 IC DPTR:移指针 IC R0 ;以下略 采用中断法读取

19、数据 当DS12887发出中断请示,单片微机可以响应中断而读取日历数据。对于更新结束中断,中断时更新结束,数据有效,可以直接读取日历数据;对于闹钟中断和周期中断也需查询寄存器A的UIP位,当UIP=0时,数据更新结束,再读出日历时钟,具体指令这里不再列出。DS12887时钟驱动程序文件名称:ds12c887.c适用范围:时钟芯片ds12c887的驱动程序#include /* 命令常量定义 */#define CMD_START_DS12C887 0x20 /* 开启时钟芯片 #define CMD_START_OSCILLATOR 0x70 /* 开启振荡器,处于抑制状态 */#define

20、 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码格式 */#define MASK_SETB_2412 0x02 /* 使用24小时模式 */#define MASK_CLR_2412 0xfd /* 使用12小时模式 */#define M

21、ASK_SETB_DSE 0x01 /* 使用夏令时 */#define MASK_CLR_DSE 0xfe /* 不使用夏令时 /* 寄存器地址通道定义 */xdata char chSecondsChannel _at_ 0xdf00;xdata char chMinutesChannel _at_ 0xdf02;xdata char chHoursChannel _at_ 0xdf04;xdata char chDofWChannel _at_ 0xdf06;xdata char chDateChannel _at_ 0xdf07;xdata char chMonthChannel _a

22、t_ 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 _at_ 0xdf0d;/* 函数声明部分 */void StartDs12c887(void);void CloseDs12c887(void);void InitDs12c887(void);unsigne

23、d 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(void);void SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char chHours);void SetDate(uns

24、igned char chDate,unsigned char chMonth,unsigned char chYear);函数功能:该函数用来启动时钟芯片工作应用范围:仅在时钟芯片首次使用时用到一次入口参数:出口参数:void StartDs12c887(void) chRegA = CMD_START_DS12C887;函数功能:该函数用来关闭时钟芯片应用范围:一般用不到入口参数:出口参数:void CloseDs12c887(void) chRegA = CMD_CLOSE_DS12C887;void InitDs12c887() StartDs12c887(); chRegB = ch

25、RegB | MASK_SETB_SET; /* 禁止刷新 */ chRegB = chRegB & MASK_CLR_DM | MASK_SETB_2412 & MASK_CLR_DSE; /* 使用BCD码格式、24小时模式、不使用夏令时 */ chCenturyChannel = 0x21; /* 设置为21世纪 */ chRegB = chRegB & MASK_CLR_SET; /* 使能刷新 */函数功能:该函数用来从时钟芯片读取秒字节应用范围:入口参数:出口参数:unsigned char GetSeconds(void) return(chSecondsChannel);函数功

26、能:该函数用来从时钟芯片读取分字节应用范围:入口参数:出口参数:unsigned char GetMinutes(void) return(chMinutesChannel);函数功能:该函数用来从时钟芯片读取小时字节应用范围:入口参数:出口参数:unsigned char GetHours(void) return(chHoursChannel);函数功能:该函数用来从时钟芯片读取日字节应用范围:入口参数:出口参数:unsigned char GetDate(void) return(chDateChannel);函数功能:该函数用来从时钟芯片读取月字节应用范围:入口参数:出口参数:unsi

27、gned char GetMonth(void) return(chMonthChannel);函数功能:该函数用来从时钟芯片读取年字节应用范围:入口参数:出口参数:unsigned char GetYear(void) return(chYearChannel);函数功能:该函数用来从时钟芯片读取世纪字节应用范围:入口参数:出口参数:unsigned char GetCentury(void) return(chCenturyChannel);函数功能:该函数用来设置时钟芯片的时间应用范围:入口参数:chSeconds、chMinutes、chHours是设定时间的压缩BCD码出口参数:vo

28、id SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char chHours) chRegB = chRegB | MASK_SETB_SET; /* 禁止刷新 */ chSecondsChannel = chSeconds; chMinutesChannel = chMinutes; chHoursChannel = chHours; chRegB = chRegB & MASK_CLR_SET; /* 使能刷新 */函数功能:该函数用来设置时钟芯片的日期应用范围:入口参数:chDate、chMonth、chYear是设定日期的压缩BCD码出口参数:void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear) chRegB = chRegB | MASK_SETB_SET; /* 禁止刷新 */ chDateChannel = chDate; chMonthChannel = chMonth; chYearChannel = chYear; chRegB = chRegB & MASK_CLR_SET; /* 使能刷新 */

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com