ds1302功能说明

ds1302功能说明31. DS1302实时时钟(STC89c52)一、硬件及连接三大块:电源部分(主、副电源)、晶振部分、通信部分。二、通信方式通信方式与SPI相似:三线串行通信,通过CE/RST引脚来使能数据的传输。低位在前,高位后。时钟上升沿发送,下降沿接收。先发送控制字再发送(接收)数据。1.控制字各位说明。

31. DS1302实时时钟(STC89c52)   一、硬件及连接   
ds1302功能说明
ds1302功能说明
ds1302功能说明   三大块:电源部分(主、副电源)、晶振部分、通信部分。   二、通信方式   通信方式与SPI相似:三线串行通信,通过CE/RST引脚来使能数据的传输。低位在前,高位后。时钟上升沿发送,下降沿接收。先发送控制字再发送(接收)数据。   1.控制字各位说明。
ds1302功能说明   位7:必须是逻辑1,如果它为0,则不能把数据写入到DS1302中   位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据   位5~位1 (A4~A0) : 指示操作单的地址   位0: 如为0,表示要进行写操作,为1表示进行读操作。
ds1302功能说明   读数据:   读数据时在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据读出的数据是从最低位到最高位。   写数据:   控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入也是从最低位 (0位) 开始。   2.内部有时钟和RAM两类寄存器可供操作,一般只用时钟就行,下面是时钟操作表格
ds1302功能说明   这张表是DS1302内部的7个与时间、日期有关的寄存器图和一个写保护寄存器,我们要做的就是将初始设置的时间、日期数据写入这几个寄存器,然后再不断地读取这几个寄存器来实时时间和日期。这几个寄存器的说明如下:   秒寄存器 (81h、80h) 的位7定义为时钟暂停标志 (CH) 。当初始上电时该位置为1,时钟振荡器停止,DS1302处于低功耗状态,只有将秒寄存器的该位置改写为0时,时钟才能开始运行。   小时寄存器(85h、84h) 的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是 ,当为1时,表示PM。在24小时模式时,位5是第二个10小时位   控制寄存器(8Fh、8Eh) 的位7是写保护位(W),其它7位均置为0。在对任何的时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作。   3.时钟寄存器中是按BCD码存储数据的,使用时要进行转换。   BCD码(Binary-Coded Decimal) ,简称BCD。BCD码用4位二进制数来表示1位十进制数中的0~9这10个数码   非压缩的BCD码用8位二进制数表示一个十进制数位其中低4位是BCD码,高4位是0。例如,十进制数78表示0000 0111 0000 1000成压缩的BCD码为压缩的BCD码:   压缩的BCD码用4位二进制数表示一个十进制数位,整个十进制数用一串BCD码来表示。例如,十进制数59表示成压缩的BCD码为0101 1001   例:0001 0011表示13,1000 0101表示85,0001 1010不合法   在十六进制中的体现:0x13表示13,0x85表示85,0x1A不合法   BCD码转十进制:DEC=BCD/16*10+BCD%16;(2位BCD)   十进制转BCD码:BCD=DEC/10*16+DEC%10;(2位BCD)   三、使用及代码实现   首先要通过8EH命令字把WP写成0,将写保护去掉。   通过命令字80H、82H、84H、86H、88H、8AH、8CH进行初值的写入。   然后就可以同时也通过秒寄存器将位7的CH值改成0,这样DS1302就开始走时运了。   通过命令字8EH再写为80H,防止误改写寄存器的值。   通过命令字80H一8CH不断读取相应寄存器的值,将它们格式化后显示到1602LCD液晶上   DS1320模块代码   下面是main中的代码   四、自己遇到的问题和解决   读出的数据是乱的,没有什么规律。后来发现问题如下:   我为了节省代码,把读一个字节和写一个字节分别写成一个函数,然后在把两个拼起来组成手册中的读和写(手册中的写是连续两个写字节,而读是一个写加上一个读),结果老是不行。   问题出在了时序上,手册中的读(写+读)总共15脉冲,写的最后是半个与读的首半个组成一个脉冲。手册中的写(写+写)这个简单,每个8个脉冲,总共16个。   因此无法抽取出单独的写和单独的读,因为手册中的读中的写字节是7.5个脉冲,而写中写字节是8个脉冲,读也一样,无法抽取出独立的函数。   学习他人的视频说在读完后要把IO置0,我试了试不置0也没影响,大家再试试。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/83800.html

(0)
上一篇 2024年 7月 27日 下午11:18
下一篇 2024年 7月 27日 下午11:21

相关推荐

关注微信