最新DS12887使用Word格式文档下载.docx
- 文档编号:18533866
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:15
- 大小:156.74KB
最新DS12887使用Word格式文档下载.docx
《最新DS12887使用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《最新DS12887使用Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
SQW(方波信号同):
SQW管脚能从实时时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。
AD0~AD7(双向地址/数据复用线):
总线接口,可与MOTOROLA微机系列和INTEL微机系列接口。
AS(地址选通输入):
用于实现信号分离,在AD/ALE的下降沿把地址锁入DS12887。
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。
在此模式下,R/W管脚与通用RAM的写允许信号(WE)的含义相同。
CS(片选输入):
在访问DS12887的总线周期内,片选信号必须保持为低。
IRQ(中断申请输入):
低电平有效,可作微处理的中断输入。
没有中断条件满足时,IRQ处于高阻态。
IRQ线是漏极开路输入,要求外接上接电阻。
RESET(复位输出):
当该脚保持低电平时间大于200ms,保证DS12887有效复位。
3.DS12887的内部功能
3.1地址分配图
DS12887的地下分配图如图3所示,由114字节的用户RAM,10字节的存放实时时钟时间。
日历和定闹RAM及用于控制和状态的4字节特殊寄存器组成,几乎所有的128个字节可直接读写。
3.2时间、日历和定闹单元
时间和日历信息通过读相应的内存字节来获取,时间、日历和定闹通过写相应的内存字节设置或初始化,其字节内容可以是十进制或BCD形式。
时间可选择12小时制或24小时制,当选择12小时制时,小时字节搞位为逻辑“1”代表PM。
时间、日历和定闹字节是双缓冲的,总是可访问的。
每秒钟这10个字节走时1秒,检查一次定闹条件,如在更新时,读时间和日历可能引起错误。
三个字节的定闹字节有两种使用方法。
第一种,当定闹时间写入相应时、分、秒定闹单元,在定允许闹位置高的条件下,定闹中断每天准时起动一次。
第二种,在三个定闹字节中插入一个或多个不关心码。
不关心码是任意从C到FF的16进制数。
当小时字节的不关心码位置位时,定闹为小时发生一次由于相线小时和分钟定闹字节置不关心位时,每分钟定闹一次;
当三个字节都置不关心位时,每秒中断一次。
3.3非易失RAM
在DS12887中,114字节通用非易失RAM不专用于任何特殊功能,它们可被处理器程序用作非易失内存,。
在更新周期也可访问。
3.4中断
RTC实时时钟加RAM向处理器提供三个独立的、自动的中断源。
定闹中断的发生率可编程,从每秒一次到每天一次,周期性中断的发生率可从500ms到122µ
s选择。
更新结束中断用于向程序指示一个更新周期完成。
中断控制和状态位在寄存器B和C中,本文的其它部分将详细描述每个中断发生条件。
3.5晶振控制位
DS12887出厂时,其内部晶振被关掉,以防止锂电池在芯片装入系统前被消耗。
寄存器A的BIT4~BIT6为010时打开晶振,分频链复位,BIT4~BIT6的其它组合都是使晶振关闭。
3.6方波输出选择
如图1原理图所示,15级分步抽着中的13个可用于15选1选择器,选择分频器抽头的目的是在SQW管脚产生一个方波信号,其频率由寄存器A的RS0~RS3位设置。
SQW频率选择与周期中断发生器共离15选1选择器,一旦频率选择好,通过用程序控制方波输出允许位SWQE来控制SQW管脚输出的开关。
3.7周期中断选择
周期中断可在IRQ脚产生500ms一次到每122µ
s一次的中断,中断频率同样由寄存A确定,它的控制位为寄存器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,更新转换至少在244µ
s内不会发生。
DV0,DV1,DV2:
用于开关晶振和复位分频链。
这些位的010唯一组合将打开晶振并允许RTC计时。
表1列了邮周期中断率和方波频率。
RS3,RS2,RS1,RS0:
频率选择位,从15级频率器13个抽头中选一个,或禁止分频器输入,选择好的抽头用于产生方波(SQW管脚)输出和周期中断,用户可以:
(1)用PIE位允许中断:
(2)用SQWE位允许SQAW输出;
(3)二者同时允许并用相同的频率;
(4)都不允许
4.2寄存器B
BIOT3
SET
PIE
ALE0
VIE
SQWE
DM
24/12
DSE
SET:
SET为0,时间更新正常进行,每秒计数走时一次,当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,这种特殊修正不发生。
4.3寄存器C
BIY6
IRQF
PF
AF
VF
0
IRQF:
中断申请标志位。
当下列表达式中一个或多个为真时,置1。
PF=PIE=1;
AF=AIE=1;
UF=UIE=1;
即:
IRQF=PF·
PIE+AF·
AIE+UF·
UIE
只要IRQF为1,IRQ管脚输出低,程序读寄存器C以后或RESET管脚为低后,所有标志位清零。
AF:
定闹中断标志位,只读,AF为1表明现在时间与定闹时间匹配。
VF:
更新周期结束标志位。
VF为1表明更新周期结束。
BIAT0~BIT3:
未用状态位,读出总为0,不能写入。
4.4寄存器D
VRT
VRT:
内部锂电池状态位,平时应总读出1,如出现0,表明内部锂电池耗尽。
BIT0~BIT6:
5.硬件接口电路
DS12887时钟芯片和80C31单微机的接口电路如图4所示。
模式选择脚MOT拉地,选择不NTEL时序,选择DS12887时钟芯片的地址总线及AS端口和80C31单片微机的P0及ALE端直接相联;
而DS、R/W读写控制线与单片机的RD、WAR控制线相连;
DS12887的高位地址由80C31半日片机的P2.7端口来片选,则DS12887的高8位地址定为7FH,而其低8侠地址则由芯片内部各单元的地址来决定(00H~3FH);
DS12887的中断输出端IRQ和80C的外部INT0端相联,给单片机提供中断信号;
DS12887的SQW端口可编程产生方波输出信号。
6.接口软件
下面为DS12887时钟芯片和80C31单片机的接口软件,假定采用每天24小时制的非夏令时,时间数据格式为BCD码,初始化时间为1996年1月1日9时00分00秒,1k方波输出。
时钟芯片每一秒种向单片机申请中断一次,一方面让单片机修改一次时钟显示,另一方面也给单片微机系统提供时间基准。
(1)DS12887时钟芯片的初始化写入程序
MOVDPTR,#7F0AH;
寄存器A地址
MOV
A,#70H:
DV2~DV0=111,分频复位
MOVX
@DPTR,AA
INC
DPTR:
到寄存器B地址
A,#8AH:
停止更新,允许更新中断,选BCD码,24小时制
@DPRT,A
QPL,#00H,秒单元地址
CLR
A:
00秒
@DPTR,A
MOVDPL,#02H;
分单元地址
00分
MOVX@DPTR,A
MOVDPL,#04H;
时单元地址
A,#09H;
9时
DPL#07H;
日单元地址
A,@01H:
1日
MOVX @DPTR,A
INC DPTR:
到月单元地址
MOV A,#01H;
1月
IC
到年单元地址
A,#96H;
1996年
DPTR;
到寄存器A地址
A,#26H;
DV2~DV0=010
RS3~RS0=0110
@DPTR,A:
选周期中断率为976.5625µ
s,允许方波输出,频率1kHz
到寄存器B
A,#1AH;
每秒更新一次,允许方波输出,24小时制
时钟开始运行
(2)读取DS12887时钟日历数据程序
DS12887的日历时钟通常有中断和查询两种方法读出。
但在读数据时,首先要判断数据是否更新结束,只有在数据更新结束时数据读出才有效。
①采用查询法读取数据:
查询寄存器A的UIP位,当UIP=0时,数据更新结束,可以读出。
以下是采用查询方法,从秒至年单元的数据读出后存入80C31内部RAM的30~35H单元中,该部分程序如下:
DPTR,#7F0AH;
A,@DPTR
WAIT:
JB
ACC,7,WAIT:
UIP=1则等待更新完毕
DPL,@00H;
秒地址
R0,#30H;
取目标首地址
A,@DPTR;
取秒数据
@R0,A:
送入80C31的内部RAM缓冲区
移指针
R0
;
以下略
②采用中断法读取数据
当DS12887发出中断请示,单片微机可以响应中断而读取日历数据。
对于更新结束中断,中断时更新结束,数据有效,可以直接读取日历数据;
对于闹钟中断和周期中断也需查询寄存器A的UIP位,当UIP=0时,数据更新结束,再读出日历时钟,具体指令这里不再列出。
DS12887时钟驱动程序
/*************************************************************
文件名称:
ds12c887.c
适用范围:
时钟芯片ds12c887的驱动程序
*************************************************************/
#include<
absacc.h>
/*命令常量定义*/
#defineCMD_START_DS12C8870x20/*开启时钟芯片
*/
#defineCMD_START_OSCILLATOR0x70/*开启振荡器,
处于抑制状态*/
#defineCMD_CLOSE_DS12C8870x30/*关掉时钟芯片
/*所有的置位使用或操作,清除使用与操作*/
#defineMASK_SETB_SET0x80/*禁止刷新*/
#defineMASK_CLR_SET0x7f/*使能刷新*/
#defineMASK_SETB_DM0x04/*使用HEX格式
#defineMASK_CLR_DM0xfb/*使
用BCD码格式*/
#defineMASK_SETB_24120x02/*使
用24小时模式*/
#defineMASK_CLR_24120xfd/*使用12小时模
式*/
#defineMASK_SETB_DSE0x01/*使用夏令时*/
#defineMASK_CLR_DSE0xfe/*不使用夏令时
/*寄存器地址通道定义*/
xdatacharchSecondsChannel_at_0xdf00;
xdatacharchMinutesChannel_at_0xdf02;
xdatacharchHoursChannel_at_0xdf04;
xdatacharchDofWChannel_at_0xdf06;
xdatacharchDateChannel_at_0xdf07;
xdatacharchMonthChannel_at_0xdf08;
xdatacharchYearChannel_at_0xdf09;
xdatacharchCenturyChannel_at_0xdf32;
xdatacharchRegA_at_0xdf0a;
xdatacharchRegB_at_0xdf0b;
xdatacharchRegC_at_0xdf0c;
xdatacharchRegD_at_0xdf0d;
/*函数声明部分*/
voidStartDs12c887(void);
voidCloseDs12c887(void);
voidInitDs12c887(void);
unsignedcharGetSeconds(void);
unsignedcharGetMinutes(void);
unsignedcharGetHours(void);
unsignedcharGetDate(void);
unsignedcharGetMonth(void);
unsignedcharGetYear(void);
unsignedcharGetCentury(void);
voidSetTime(unsignedcharchSeconds,unsignedcharchMinutes,unsignedchar
chHours);
voidSetDate(unsignedcharchDate,unsignedcharchMonth,unsignedcharchYear);
函数功能:
该函数用来启动时钟芯片工作
应用范围:
仅在时钟芯片首次使用时用到一次
入口参数:
出口参数:
voidStartDs12c887(void)
{
chRegA=CMD_START_DS12C887;
}
该函数用来关闭时钟芯片
一般用不到
voidCloseDs12c887(void)
chRegA=CMD_CLOSE_DS12C887;
voidInitDs12c887()
StartDs12c887();
chRegB=chRegB|MASK_SETB_SET;
/*禁止刷新*/
chRegB=chRegB&
MASK_CLR_DM|MASK_SETB_2412\
&
MASK_CLR_DSE;
/*使用BCD码格式、24小时模式、不使用
夏令时*/
chCenturyChannel=0x21;
/*设
置为21世纪*/
MASK_CLR_SET;
/*使能刷新*/
该函数用来从时钟芯片读取秒字节
unsignedcharGetSeconds(void)
return(chSecondsChannel);
该函数用来从时钟芯片读取分字节
unsignedcharGetMinutes(void)
return(chMinutesChannel);
该函数用来从时钟芯片读取小时字节
unsignedcharGetHours(void)
return(chHoursChannel);
该函数用来从时钟芯片读取日字节
unsignedcharGetDate(void)
return(chDateChannel);
该函数用来从时钟芯片读取月字节
unsignedcharGetMonth(void)
return(chMonthChannel);
/*********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 DS12887 使用