lkc8210 发表于 2023-2-21 11:38 哦,谢谢! |
cwb2038 发表于 2023-2-21 11:17 这表是HT1381的寄存器表,但和DS1302的有99.999%相似,所以拿来示范 命令值只是16进制转2进制,如0x80=0B10000000 A4~A0对应命令值bit5~bit1 可以看得到A4,A3全是零,所以只看A2~A0就可以了 |
lkc8210 发表于 2023-2-20 23:34 谢谢解答!还想请教一下,你这命令值怎么转化过来的?DS1302寄存器不是有5位,A4~A0吗?你说的“Address:A2~A0”是指什么? |
wulin 发表于 2023-2-20 21:48 谢谢,有点明白了! ![]() |
cwb2038 发表于 2023-2-20 18:43 把命令值化作二进制就清楚了 ![]() |
cwb2038 发表于 2023-2-20 15:41 你看明白下列语句,前面的问题就解决了
|
zhuls 发表于 2023-2-20 15:41 这是各人编程习惯的差异,没有好差之分。 |
应该是这个寄存器的最低位必须写0,最高位必须是1,reg保存的是中间6位有效指令,刚好加起来是8位 |
cwb2038 发表于 2023-2-20 15:38 这个要看芯片的指令格式。 |
wulin 发表于 2023-2-20 15:11 学习了~~那定义写入地址,读时直接地址+1不就OK了?还整这么多弯弯, |
zhuls 发表于 2023-2-20 15:35 完整代码如下:
|
munuc_w 发表于 2023-2-20 14:51 谢谢!REG的值是多少?为什么要扔掉最高位呢? |
wulin 发表于 2023-2-20 15:11 谢谢,也就是说DS1302读和写的寄存器地址一共有16个(80h~8fh),逐个读出来吗?默认的初始地址不一定是0X80啊?也没有循环语句,为什么要这样写呢? |
没有完整代码不好说,据猜测应是1302的读写地址不一样,才这么做的,比如定义的秒的写地址为80,读是81,如果是这样,那代码是不行的,要(reg|0x01)才对,大小端搞错了。 |
读出地址:0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d 写入地址:0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c 变量reg如果等于0x00,左移一位还是0x00,0x00|0x80 等于0x80 变量reg如果等于0x01,左移一位是0x02,0x02|0x80 等于0x82 变量reg如果等于0x02,左移一位是0x04,0x04|0x80 等于0x84 ......以此类推。 |
左移一位是扔掉了REG的最高位,再或0X80是将移位后的REG的最高位置1,。 |