定型的板子,板载的时钟芯片肯定不会有什么没上拉之类的问题。 从现象上看,是读取时钟数据不正常。 可以用试验板所配的原代码跑一下,正常后再根据自己需要修改。 还有个恶心的问题,就是当备用电池没电、芯片是仿的没仿好的情况下,必须先写时钟数据然后读取才能正常,换句话说如果你不先写个逻辑正确的数据就不会出正常的结果(一般会走时但乱走,也有不走的)。 另:记得有些这种板上时钟有个跳线(比如图中黄色的那个切换板载模块用的),如果不按要求做就相当于没接上时钟模块 ![]() |
如果是普中的板子,有可能是P3.4或者P3.5或者P3.6没有上拉电阻 你看一下原理图,认真看一下 |
天赋异禀 发表于 2021-12-5 23:04 你DS1302 的读写代码写得非常“妖异”,很抱歉,我看不明白。 建议是,你直接用串口,依次 发送 0x81 0x83 0x91 这些,让单片机 传送到 DS1302 后回传给串口,有助于你分析。 然后, 利用串口 发送比如 0x80 0x00, 让单片机转发给DS1302让DS1302跑起来后, 再用 0x81 读一下看看效果,是否会数据变化,通过这些综合判断一下,是啥问题,或者下载一个中规中矩的DS1302的代码,尝试一下读写看看。 |
188610329 发表于 2021-12-5 22:58 那就是读的程序有问题了,但是0x81是存储秒的地址呀,就算读取 错误也不应该返回一个原地址呀 |
天赋异禀 发表于 2021-12-5 22:31 我刚又用串口工具测试了一下,下面的程序当我给出P3_5=1,串口接收到的数据是01 01 01 00 00 00这样一直循环,但如果是P3_0接口就没有问题,这是硬件出问题了吗?还是设置的问题? [code]#include <REGX52.H> |
天赋异禀 发表于 2021-12-5 22:31 你读秒的时候, 往 DS1302 发出去的就是 0x81 吧? 所以你最后读出来 0x81, 说明,你压根没完成读取,读的,就是你发的, |
188610329 发表于 2021-12-5 22:04 刚用串口测试了一下,读出来数据是81,在秒的位置读出来的一直是81,因为DS1302输出的是BCD码,所以转换一下,其实是129,刚好对应上LCD显示的29 |
你太依赖显示屏了, 你先用串口,把从DS1302中读取出来的值原封不动的发出来, 串口助手 直接原封不动的 HEX接收, HEX显示,看看到底是什么值,然后分析是什么问题, 你这29都是转码以后的值了,要从源头分析。 几个参考值,秒为默认上电后是 0x80, 写保护位默认上电后是 0x00, 充电设置位,默认上电后是 0x5C, 别急着写数据,先读数据,看看对不对了,再验证其他的。 |