您好,欢迎访问三七文档
14.3.1串行日历时钟芯片DS1302简介现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电(tricklecharge;maintenancecharge连续小电流充电,又称维护充电)能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。DS1302的引脚排列中有二个电源脚,其中VCC1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线。图中要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100μF就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。DS1302存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。DS1302内含一个实时时钟/日历和31个字节静态RAM,通过简单的串行接口与单片机进行通信,实时时钟./日历电路提供秒、分、时、日、日期、月、年信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM设置决定采用24小时或12小时式,DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需要用到3个口线:RES复位、I/O数据线、SCLK串行时钟;对时钟、RAM的读/写,可以采用单字节方式或多达31个字节的字符组方式。DS1302工作时,功耗很低,保持数据和时钟信息时功率小于1mW。DS1302广泛用于电话传真、便携式仪器及电池供电的仪器仪表等产品领域中。1.DS1302的主要性能指标(1)DS1302实时时钟具有计算2100年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年调整功能。(2)内部采用含有31个字节静态RAM,可提供用户访问。(3)采用串行数据传送方式,使得管脚数量最少,使用简单3线制接口。(4)工作电压范围宽:2.0~5.5V。(5)工作电流:2.0V时,小于300mA。(6)时钟或RAM数据的读写有两种传送方式:单字节传送和多字节传送方式。(7)采用8脚DIP封装或SOIC封装。(8)与TTL兼容,VCC=5V。(9)可选工业级温度范围:-40.C~+85℃。(10)具有涓流充电功能。(11)采用主电源和备份电源双电源供应。(12)备份电源可由电池或大容量电容实现。2.引脚功能DS1302的引脚如图14.13所示。其中:X1、X2:32.76KHZ晶振接入引脚。GND:地。RST:复位引脚,低电平有效。I/O:数据输入/输出引脚,具有三态功能。SCLK:串行时钟输入引脚。VCC1:工作电源引脚。VCC2:备用电源引脚。3.DS1302的寄存器及片内RAMDS1302有一个控制寄存器,12个日历、时钟寄存器和31个字节RAM。(1)控制寄存器控制寄存器用于存放DS1302的控制命令,DS1302的引脚回到高电其中:D7:固定为1,是控制命令标志。D6:RAM/位,片内RAM或日历、时钟寄存器选择位,当RAM/=1时,对片内RAM进行读写,当RAM/=0时,对日历、时钟寄存器进行读写。D5~D1:地址位,用于选择进行读写的日历、时钟寄存器或片内RAM。对日历时钟寄存器或片内RAM的选择见表14.4。D0:读写位,当RD/=1时,对日历、时钟寄存器或片内RAM进行读操作,当RD/=0时,对日历、时钟寄存器或片内RAM进行写操作。(2)日历、时钟寄存器DS1302共有12个寄存器,其中有7个与日历、时钟相关,存放的数据位是BCD码形式。日历时钟寄存器的格式见表14.5。说明:数据都以BCD码形式表示小时寄存器的D7位为12小时制/24小时制的选择位,当为1时选12小时制,当为0时,选24小时制。当12小时制时,D5位为1时为上午,D5位为0时为下午,D4为小时的十位;当24小时制时,D5\D4\位为小时的十位。秒寄存器中的CH位为时钟暂停位,当为1时,时钟暂停,为0时时钟开始启动。写保护寄存器中的WP为写保护位,当WP=1时,写保护。当WP=0时未写保护,当对日历、时钟寄存器或片内RAM进行写时WP应清零,对日历、时钟寄存器或片内RAM进行读时WP一般置为1。慢充电寄存器的TCS为控制慢充电的选择,当它为1010时才能使慢充电工作。DS为二极管选择位,DS为01选择一个二极管,DS为10选择两个二极管,DS为11或00充电器被禁止,与TCS无关。RS用于选择连接在VCC2与VCC1之间的电阻,RS为00,充电器被禁止,与TCS无关。电阻选择情况见表14.6,慢充电电路示意图见图14.14。(3)片内RAMDS1302片内有31个RAM单元,对片内RAM的操作有两种方式:单元字节方式和多元字节方式。当控制命令为0xc0~0xfd时,为单字节读写方式,命令字中的D5~D1用于选择对应的RAM单元,其中奇数为读操作,偶数为写操作。当控制命令字为0xfe~0xff时为多字节操作(表14-4中的RAM突发模式),多字节操作可一次把所有的RAM单元内容进行读写,0xfe为写操作,0xff为读操作。4.DS1302的输入输出、DS1302与单片机的接口(1)DS1302的输入输出过程DS1302通过引脚驱动输入输出过程,当置高电平启动输入输出过程,在SCLK时钟的控制下,首先把控制命令字写入DS1302的控制寄存器中,其次根据写入的控制命令字,一次读写内部寄存器或片内RAM单元的数据,对于日历、时钟寄存器、根据控制命令字,一次可以读写一个日历、时钟寄存器、也可以一次读写8个字节,对所有的日历、时钟寄存,写的控制命令为0XBE,读的控制命令字为0XBF;对于片内RAM单元,根据控制命令字,一次可读写一个字节,一次也可以读写31个字节,当数据读写完后,变为低电平结束输入输出过程。无论是命令还是数据,一个字节传送时都是低位在前。(2)DS1302与单片机的接口图14.15中在单电源与电池供电的系统中,VCC1提供低功率的备用电池,VCC2提供主电源,在没有主电源时能保证时间信息以及数据。(3)DS1302读写时序DS1302单字节读写时序见图14.16,多字节读写时序见图14.17。(4)DS1302读写参数DS1302读写参数对于驱动程序的正确编写有很重要的参考价值,如果程序执行不稳定,请仔细分析时序和读写参数,调整指令之间延时,协调硬件动作。读操作时序见图14.18,写操作时序见图14.19;参数见表14.7。(5)DS1302的驱动程序如下:在程序中用Nop()函数来延时,该函数在头文件intrins.h中定义,因此在程序中引用该文件。在主频12M时,每调用Nop()一次,大约延时1。#includereg51.h#includeintrins.h#deffineNop()–nop-()//定义指令#defineducharunsignedcharsbitT-CLK=p1^0;//DS1302时钟引脚sbitT-IO=p1^1;//DS1302数据线引脚sbitT-RST=p1^2;//DS1302复位线引脚sbitACC7=ACC^7;sbitACC0=ACC^0;//往DS1302写入1字节数据//------------------------------------------------------------------------------------------------------------------voidWriteB(ucharucDa){uchari;ACC=ucDa;T-RST=1;//开始读写操作Nop();for(i=8;i0;i--){T-IO=ACC0;//先写低位,后写高位Nop();CLK=1;//时钟上升沿,写入一位数据Nop();CLK=0;//时钟=0,准备下次写Nop();ACC=ACC1;//数据右移一位,要发送位送ACC0}}//从DS1302读1字节数据//------------------------------------------------------------------------------------------------------------------ucharReadB(void){uchari;T-RST=1;//开始读写操作Nop();for(i=8;i0;i--){ACC=ACC1;//结果右移一位,先读低位,后读高位ACC7=T-IO;//读一位,放累加器最高位Nop();CLK=1;//读有效Nop();CLK=0;//时钟=0,准备下次读Nop();}return(ACC);//返回读的结果}//单字节写,向DS1302某地址写入命令/数据,先写地址,后写命令/数据//------------------------------------------------------------------------------------------------------------------voidW1302(ucharucAddr,ucharucDa){T-RST=0;T-CLK=0;T-RST=1;//开始读写操作WriteB(ucAddr);//写地址WriteB(ucda);//写1字节数据T-CLK=1;Nop();T-RST=0;}//单字节读,读取DS1302某个地址的数据,先写地址,后读命令/数据//------------------------------------------------------------------------------------------------------------------ucharR1302(ucharucAddr){ucharucDa;T-RST=0;T-CLK=0;T-RST=1;Nop();WriteB(ucAddr);//写地址ucDa=ReadB();//读1字节命令/数据T-CLK=1;T-RST=0;return(ucDa);}//日历、时钟多字节写,先写地址,后写数据(时钟多字节方式)//pSecDa:指向时钟数据地址格式为:秒、分、时、日、月、星期、年、控制//-----------------------------------------------------------------------------------------
本文标题:ds1302简介
链接地址:https://www.777doc.com/doc-4281017 .html