第18章实时时钟芯片应用.ppt

上传人:啊飒飒 文档编号:11876808 上传时间:2021-10-09 格式:PPT 页数:31 大小:434KB
返回 下载 相关 举报
第18章实时时钟芯片应用.ppt_第1页
第1页 / 共31页
第18章实时时钟芯片应用.ppt_第2页
第2页 / 共31页
第18章实时时钟芯片应用.ppt_第3页
第3页 / 共31页
第18章实时时钟芯片应用.ppt_第4页
第4页 / 共31页
第18章实时时钟芯片应用.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《第18章实时时钟芯片应用.ppt》由会员分享,可在线阅读,更多相关《第18章实时时钟芯片应用.ppt(31页珍藏版)》请在三一文库上搜索。

1、第18章 实时时钟芯片应用,对于一个完善的单片机系统,经常需要对时间进行操作。例如,记录当前采集数据的时间、显示当前时间、设定关机时间等等。为了能够对时间进行控制,通常需要在硬件电路中集成实时时钟芯片。实时时钟芯片一般均内置了可编程的实时日历时钟,用于设定以及保存时间。其采用备份电池供电,在系统断电时仍可以工作,因此时间值不会丢失。另外,实时时钟芯片一般内置闰年补偿系统,计时很准确。实时时钟芯片的这些优点,使得其广泛应用于需要时间显示的测控系统或者手持式设备中。 本章以美国DALLAS公司推出实时时钟芯片DS1302为例,介绍实时时钟芯片的功能、控制指令以及时间的操作,并给出了相应的操作子函数

2、供读者调用。本章最后通过一个具体的实例,讲解了如何使用51系列单片机来操作实时时钟芯片DS1302。,18.1 实时时钟芯片DS1302概述,DS1302是美国DALLAS Semiconductor公司推出的一款实时时钟芯片。其以计时准确、接口简单、使用方便、工作电压范围宽和低功耗等优点,得到了广泛的应用。DS1302的主要特点如下: DS1302采用3线串行接口,占用引脚少。 DS1302内部集成了可编程日历时钟,用户可以根据需要设置。 DS1302内部集成了31个字节的静态RAM。 DS1302的日历时钟可自动进行闰年补偿。 DS1302支持双电源供电,可以使用外部主电源和备份电源。 D

3、S1302芯片具有对备份电池进行涓流充电功能,可有效长备份电池的使用寿命。,18.1.1 实时时钟芯片DS1302概述,实时时钟芯片DS1302引脚结构,如图所示。其中各个引脚功能如下所示。,DS1302的引脚排列,18.1.2 实时时钟芯片DS1302日期操作,DS1302的日期操作主要用于对日期和时间相关的寄存器进行操作。实时时钟芯片DS1302与日期和时间有关的寄存器数据格式,如图所示。下面分别介绍各个寄存器含义:,DS1302的日期数据格式,18.1.3 实时时钟芯片DS1302的控制操作,DS1302的控制操作用于写保护和充电控制。与控制有关的DS1302寄存器格式,如图所示。下面分

4、别介绍各个寄存器含义:,DS1302的控制数据格式,18.1.4 实时时钟芯片DS1302的RAM操作,DS1302的RAM操作用于读写片内的RAM存储器。实时时钟芯片DS1302的RAM定义,如图所示。A4A0用于表示片内RAM单元地址,地址范围为00H1EH,地址1FH为RAM多字节命令。,DS1302的RAM定义,18.1.5 实时时钟芯片DS1302数据传输方式,实时时钟芯片DS1302为从器件,只由外部微控制器来控制数据传输。每次传送时由外部控制器向DS1302写入一个命令字节开始,然后是数据字节。DS1302的数据传输则可以采用单字节方式,或者多字节突发方式进行。,多字节数据传输时

5、序,单字节数据传输时序,18.2 DS1302的控制子函数,DS1302通过RST、SCLK和I/O引脚和外部控制器进行通信。在程序中,需要首先声明接口引脚,示例如下: sbit SCLK = P13;/声明接口引脚 sbit I_O = P14; sbit RSTB = P15; 下面,给出在C51语言中,对实时时钟芯片DS1302进行操作的各个子函数,供读者使用。,18.2.1 复位子函数,复位子函数用于对实时时钟芯片DS1302进行硬件复位操作。在程序中,通过RSTB引脚赋值来进行复位操作。复位子函数程序代码示例如下: void ResetDS1302() /复位子函数 SCLK = 0

6、; RSTB = 0;/复位 RSTB = 1; ,18.2.2 字节读取子函数,字节读取子函数用于读取实时时钟芯片DS1302的内部数据。在程序中,构造SCLK引脚时钟,通过IO引脚逐位读取DS1302返回的字节数据。字节读取子函数程序代码示例如下: uchar ReadByteDS1302()/字节读取子函数 uchar i; uchar RByte; uchar TempByte; RByte = 0 x00;/初始化 I_O = 1; for(i=0; i 1; RByte |= TempByte; return RByte;/返回结果 ,18.2.3 字节写入子函数,字节写入子函数用

7、于向实时时钟芯片DS1302写入寄存器地址或者数据。在程序中,构造SCLK引脚时钟,并通过I/O引脚逐位写入8位的字节数据。字节写入子函数程序代码示例如下: void WriteByteDS1302(uchar W_Byte) /字节写入子函数 uchar i; for(i = 0; i 1;/移位 ,18.2.4 年设置子函数,年设置子函数用于向实时时钟芯片DS1302的年寄存器写入年数据。在程序中,首先输入年数据,然后按照单字节数据传输方式写入年数据。年设置子函数程序代码示例如下: void SetYear() /年设置子函数 ucharyear; printf(nPlease Enter

8、 the year (0-99): );/输入年 scanf(%bx, /复位DS1302 ,18.2.5 月设置子函数,月设置子函数用于向实时时钟芯片DS1302的月寄存器写入年数据。在程序中,首先输入月数据,然后按照单字节数据传输方式写入月数据。月设置子函数程序代码示例如下: void SetMonth() /月设置子函数 ucharmonth; printf(n Please Enter the month (1-12): );/输入月 scanf(%bx, /复位DS1302 ,18.2.6 日设置子函数,日设置子函数用于向实时时钟芯片DS1302的日寄存器写入日数据。在程序中,首先输

9、入日数据,然后按照单字节数据传输方式写入日数据。日设置子函数程序代码示例如下: void SetDate() /日设置子函数 uchardate; printf(n Please Enter the date (1-31): );/输入日 scanf(%bx, /复位DS1302 ,18.2.7 星期设置子函数,星期设置子函数用于向实时时钟芯片DS1302的星期寄存器写入星期数据。在程序中,首先输入星期数据,然后按照单字节数据传输方式写入星期数据。星期设置子函数程序代码示例如下: void SetDay() /星期设置子函数 ucharday; printf(n Please Enter th

10、e day (1-7): );/输入星期 scanf(%bx, /复位DS1302 ,18.2.8 小时设置子函数,小时设置子函数用于向实时时钟芯片DS1302的小时寄存器写入小时数据。在程序中,首先输入小时数据,然后按照单字节数据传输方式写入小时数据。小时设置子函数程序代码示例如下: void SetHour() /小时设置子函数 ucharhour; printf(n Please Enter the hour (1-24): );/输入小时 scanf(%bx, /复位DS1302 ,18.2.9 分钟设置子函数,分钟设置子函数用于向实时时钟芯片DS1302的分钟寄存器写入分钟数据。在程

11、序中,首先输入分钟数据,然后按照单字节数据传输方式写入分钟数据。分钟设置子函数程序代码示例如下: void SetMinute () /分钟设置子函数 ucharminute; printf(n Please Enter the minute (0-59): );/输入分钟 scanf(%bx, /复位DS1302 ,18.2.10 秒设置子函数,秒设置子函数用于向实时时钟芯片DS1302的秒寄存器写入秒数据。在程序中,首先输入秒数据,然后按照单字节数据传输方式写入秒数据。秒设置子函数程序代码示例如下: void SetSecond () /秒设置子函数 ucharsecond; printf

12、(n Please Enter the second (0-59): );/输入秒 scanf(%bx, /复位DS1302 ,18.2.11 写保护子函数,写保护子函数用于禁止修改实时时钟芯片DS1302内部寄存器的数据。在程序中,按照单字节数据传输方式向写保护控制寄存器写入0 x80。写保护子函数程序代码示例如下: void DisableWrite () /写保护子函数 ResetDS1302();/复位DS1302 WriteByteDS1302(0 x8e);/写保护控制寄存器 WriteByteDS1302(0 x80);/禁止写入 ResetDS1302();/复位DS1302

13、,18.2.12 写允许子函数,写允许子函数用于允许修改实时时钟芯片DS1302内部寄存器的数据。在程序中,按照单字节数据传输方式向写保护控制寄存器写入0 x00。写允许子函数程序代码示例如下: void EnableWrite () /写允许子函数 ResetDS1302();/复位DS1302 WriteByteDS1302(0 x8e);/写保护控制寄存器 WriteByteDS1302(0);/允许写入 ResetDS1302();/复位DS1302 ,18.2.13 充电控制子函数,充电控制子函数用于允许实时时钟芯片DS1302对备份电池进行充电操作。在程序中,按照单字节数据传输方式

14、向涓流充电寄存器写入0 xab。充电控制子函数程序代码示例如下: void Charge () /充电控制子函数 ResetDS1302();/复位DS1302 WriteByteDS1302(0 x90);/涓流充电寄存器 WriteByteDS1302(0 xab);/允许充电 ResetDS1302();/复位DS1302 ,18.2.14 初始化子函数,初始化子函数用于对实时时钟芯片DS1302的时钟寄存器进行初始化操作。在程序中,分别输入需要设置的年、月、星期、日、小时、分钟和秒的数值,然后调用写允许子函数允许对寄存器操作,调用充电控制子函数允许涓流充电,最后以多字节突发方式写入多个

15、时钟数据。,18.2.15 RAM字节写入子函数,RAM字节写入子函数用于对实时时钟芯片DS1302的片内RAM执行写操作。在程序中,首先获取RAM地址以及需要写入的数据,然后分别调用字节写入子函数来执行写寄存器地址和写数据操作。RAM字节写入子函数程序代码示例如下: void WriteRamByte() / RAM字节写入子函数 uchar Address; uchar Data; printf(nWrite RAM Function:); printf(nWrite Ram ADDRESS (HEX):); scanf(%bx, /复位DS1302 ,18.2.16 时钟显示子函数,时钟

16、显示子函数用于读取并显示实时时钟芯片DS1302内部时钟寄存器中的数据。在程序中,首先复位DS1302,然后采用多字节突发方式读取时钟寄存器中的数据,然后每秒显示一次结果。,18.2.17 多字节突发方式读取RAM子函数,多字节突发方式读取RAM子函数用于读取实时时钟芯片DS1302内部RAM的数据。在程序中,首先以多字节突发方式来读取DS1302的片内RAM,并将数据保存在数组中,接着将各个数据输出显示。,18.2.18 多字节突发方式写入RAM子函数,多字节突发方式写入RAM子函数用于对实时时钟芯片DS1302的片内RAM执行写操作。在程序中,首先获取RAM数据,然后采用多字节突发方式来写

17、入RAM数据。多字节突发方式写入RAM子函数程序代码示例如下: void BurstWriteRAM() /多字节突发方式写入RAM子函数 uchar Data31; uchari; for(i=0;i31;i+) printf(nWrite Ram DATA (HEX):); scanf(%bx, /复位DS1302 ,18.3 C51读写实时时钟芯片实例,在单片机应用系统中,经常需要对时间和日期进行操作。这里以51系列单片机和实时时钟芯片DS1302为例,介绍实时时钟芯片的读写。其中,用到了前面介绍的DS1302控制子函数。,18.3.1 电路图,整个系统的电路原理图,如图所示。,电路图,

18、18.3.2 程序设计,这里采用C51语言,在Keil Vison3集成开发环境中编写程序,来实现对DS1302的控制。本例的程序功能是首先初始化DS1302,然后通过输入不同的字符来分别执行初始化、时钟操作和RAM操作。分别介绍如下: 输入字符s或者S,设置日期和时间操作。此时可以再次输入字符来设置年、月、日、星期、时、分和秒信息。 输入字符i或者I,进入初始化操作。此时可以详细设置时间和日期等。 输入字符r或者R,进入RAM操作。此时可以选择单字节写RAM(输入字符b或者B)、多字节写RAM(输入字符w或者W)或者多字节读RAM(输入字符r或者R)。 输入字符d或者D,显示当前日期和时间。 输入字符e或者E,退出程序。,18.3.3 仿真分析,当完成程序设计和编译后,可以在Keil Vison3集成开发环境中对程序进行仿真,以确保程序的正确性。具体操作步骤如下:,读取RAM数据,18.4 小结,本章详细介绍了实时时钟芯片DS1302的日期操作、控制操作和RAM操作,并介绍了DS1302的命令字节以及两种数据传输方式:单字节传输方式和多字节突发传输方式。接着,本章给出了C51语言下DS1302的详细控制子函数。最后通过一个具体的实例,讲解了如何使用8051单片机来实现对DS1302的控制。实时时钟芯片常用于需要时间设定和显示的场合,在单片机应用系统中很常见。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1