DS1302模块(时钟模块)原理(理解)(官方会给)

一、首先搞明白“数据存放地址”和“写入格式”

​​​​​​​​​​​​请添加图片描述
BCD码(8421码),前四位二进制数表示十进制数的十位,后四位二级制数表示十进制数的歌位

二、官方文档

在这里插入图片描述
解释:例如“秒”:读取地址 81h,写入地址 80h ;bit6,bit5,bit4,用三位二进制数表示“秒”的十位(“秒”的十位最多是5);bit3,bit2,bit1,bit0,用四位二级制数表示秒的个位。

三、CH和WP解释

在这里插入图片描述

四、底层代码解释

首先我们要怎么写,怎么写“一个字节”(8个bit)进去?

先看左代码块(其实左代码块是为右代码块服务的,往下看就知道了)

1.定义一个写的函数,然后他的入口参数是我们要写的数据在这里插入图片描述
2.然后看到unsigned char i ,定义了一个变量i让他循环八次,即把每一位都写进去
3.看到SCK=0,即把SCLK拉低
4.在看到SDA=temp&0x01,SDA就是IO输入,任何数"与(&)"1都是它本身,这样我们便把入口参数(即要输入的数据,它有八位)的第一位取出来给到了SDA
5.temp>>=1,即把temp右移一位,为下次做准备,下次便可把“要输入的数据”的第二位取出来给到了SDA
6.SCK=1,又把SCLK拉高,便把数据写入到芯片里了

再看右代码块

在这里插入图片描述
1.RST=0,先把RST拉低,nop()是“等待一会”
2.SCK=0,再把SCLK拉低,nop()是“等待一会”
3.RST=1,把RST拉高,准备输入了,nop()是“等待一会”
4.利用到左代码块(即左边定义的那个函数),写入地址
5.利用到左代码块(即左边定义的那个函数),写入数据
6.RST=0,最后再把RST拉低,即完成“地址”和“数”的写入了
在这里插入图片描述

同理,只读取也是一样

1.定义i循环八次,定义一个空的temp用于接收读取到的数值
2.按图中时序操作拉低
3.按图中时序操作拉低
4.按图中时序操作拉高,准备开始
5.首先前八位写入地址(图所示也是如此)
6.SCLK拉低时开始读,所以先让SCK=0
7.
8.if(SDA),即如果SDA为真,即SDA有数据,就让它“或”上0x80(1000 000)
(SDA是一位一位的)SDA有数据,即SDA为1,那么temp那一位就“或”上0x80,因为temp初始是第八位是1,而后会进行移位,那一位位假,即0,那时候就不或上1
最后就temp就把数读出来 了
temp一直都在变
最后就把temp的值返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值