第13课_实时时钟.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第13课_实时时钟

13 实时时钟-DS1302 实时时钟DS1302 对于一个完善的单片机系统,经常需要对时间进行操作。例如,记录当前采集数据的时间、显示当前时间、设定关机时间等等。为了能够对时间进行控制,通常需要在硬件电路中集成实时时钟芯片。实时时钟芯片一般均内置了可编程的实时日历时钟,用于设定以及保存时间。其采用备份电池供电,在系统断电时仍可以工作,因此时间值不会丢失。另外,实时时钟芯片一般内置闰年补偿系统,计时很准确。实时时钟芯片的这些优点,使得其广泛应用于需要时间显示的测控系统或者手持式设备中。 本章以美国DALLAS公司推出实时时钟芯片DS1302为例,介绍实时时钟芯片的功能、控制指令以及时间的操作,并给出了相应的操作子函数供读者调用。本章最后通过一个具体的实例,讲解了如何使用51系列单片机来操作实时时钟芯片DS1302。 1.实时时钟芯片DS1302概述 DS1302是美国DALLAS Semiconductor公司推出的一款实时时钟芯片。其以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到了广泛的应用。DS1302的主要特点如下: DS1302采用3线串行接口,占用引脚少。 DS1302内部集成了可编程日历时钟,用户可以根据需要设置。 DS1302内部集成了31个字节的静态RAM。 DS1302的日历时钟可自动进行闰年补偿。 DS1302支持双电源供电,可以使用外部主电源和备份电源。 DS1302芯片具有对备份电池进行涓流充电功能,可有效延长备份电池的使用寿命。 2.实时时钟芯片DS1302引脚 实时时钟芯片DS1302引脚结构,如图所示。其中各个引脚功能如下所示。 3.实时时钟硬件电路 4.实时时钟芯片DS1302日期操作 DS1302的日期操作主要用于对日期和时间相关的寄存器进行操作。实时时钟芯片DS1302与日期和时间有关的寄存器数据格式,如图所示。下面分别介绍各个寄存器含义: 5.实时时钟芯片DS1302的控制操作 DS1302的控制操作用于写保护和充电控制。与控制有关的DS1302寄存器格式,如图所示。下面分别介绍各个寄存器含义: 6. 实时时钟芯片DS1302的RAM操作 DS1302的RAM操作用于读写片内的RAM存储器。实时时钟芯片DS1302的RAM定义,如图所示。A4~A0用于表示片内RAM单元地址,地址范围为00H~1EH,地址1FH为RAM多字节命令。 7.实时时钟芯片DS1302数据传输方式 实时时钟芯片DS1302为从器件,只由外部微控制器来控制数据传输。每次传送时由外部控制器向DS1302写入一个命令字节开始,然后是数据字节。DS1302的数据传输则可以采用单字节方式,或者多字节突发方式进行。 void Write_Ds1302_Byte(unsigned char temp) )//写一个字节数据 { unsigned char i; for (i=0;i8;i++) { SCK=0; SDA=temp0x01; //数据准备,先传低位 temp=1; ////上升沿写 SCK=1; } } 向add地址写一个字节数据dat void Write_Ds1302( unsigned char address,unsigned char dat ) { RST=0; SCK=0; delayus(2); RST=1; //在高电平期间才可以读写数据 delayus(2); Write_Ds1302_Byte(address); //·写地址 Write_Ds1302_Byte(dat); //·数据 RST=0; } 从1302的地址add读出一个字节数据 unsigned char Read_Ds1302 ( unsigned char address ) { unsigned char i,temp=0x00; RST=0; delayus(2); SCK=0; delayus(2); RST=1; delayus(2); Write_Ds1302_Byte(address); //读数据之前先写地址 for (i=0;i8;i++) //读8次 { if(SDA) temp|=0x80; //先低位后高位, SCK=1; temp=1; //óòò?ò??? delayus(2); SCK=0; //下降沿读数据 } return (temp); //·μ

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档