找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6244|回复: 7
收起左侧

关于DS1302不能正常写入80+年的问题研究

[复制链接]
ID:70941 发表于 2014-12-23 01:39 | 显示全部楼层 |阅读模式
很早以前就遇到过这个问题,当时没有记,现有又遇到这个问题,果断要记下。特发在51hei论坛,以后遇到的朋友可以作为参考。
psb5695.jpg

下面是有问题的程序:
void Write_Ds1302_Byte(unsigned char temp1)
{
unsigned char i;
for(i=0;i<8;i++) //循环8次 写入数据
{
SCK=0;
SDA=temp1&0x01; //每次传输低字节
temp1>>=1; //右移一位
SCK=1;
}
}
Write_Ds1302_Byte(address); //写入“读”控制命令
for (i=0;i<8;i++) //循环8次 读取数据
{
if(SDA)
temp|=0x80; //每次传输低字节
SCK=0;
temp>>=1; //右移一位
SCK=1;
_nop_();
}

    这个程序写完地址后,SCL还是高电平就开始读数据,而显然这时DS1302还没有将数据准备好,数据是在那个下降沿后才会有触发的,那么第一个读到的数据就是无效的数据,依此类推,最高位的数据就会没有捕捉到了,然而这个程序又有一个致命的错误,就是这个程序的正确的思路应该是读取8次移位7次,那么这里却是移位了8次,最后直接导致最先被读到的无效位被移出去了,而真正有用的最高位没有被读到,这也就是为何这个程序也能够在年不超过80年的时候没有出现问题的原因了。因为80的BCD码的最高位是1,所以会出现问题,因为这个最高位就没有被读到。
这里说明几点DS1302这个芯片是上升沿写入数据,下降沿触发数据输出,

   还有一个就是这种对于从机先发送数据低位的接收,如果用这位移位的方式,进入for循环后一定是先移位再读数据的方法,这样第一次的移位就是无效的了,也就是能够做到读取8次但是只移位7次。因为第一次读到的最低位的数据只需要移动7次就可以移到最低位了。如果是写数据的方式则刚好是相反的,必须要先将低位数据写到数据线上,然后再移动,否则的话低位数据就会丢失了。

评分

参与人数 1黑币 +5 收起 理由
凌南之枫 + 5 绝世好帖!

查看全部评分

回复

使用道具 举报

ID:71748 发表于 2015-1-6 20:22 | 显示全部楼层
求解决办法啊。。。。。
回复

使用道具 举报

ID:92336 发表于 2015-10-13 14:09 | 显示全部楼层
本帖最后由 rebosun 于 2015-10-13 14:11 编辑

/****************************************************************************/
unsigned char Read_Ds1302 ( unsigned char address )
{
  unsigned char i,temp=0x00;
  RST=0;
_nop_();
  SCLK=0;
_nop_();
  RST=1;
_nop_();
  Write_Ds1302_Byte(address); //DS1302这个芯片是上升沿写入数据,下降沿触发数据输出,
  for (i=0;i<8;i++)   //循环8次 读取数据
  { SCLK=0;  //DS1302这个芯片是下降沿触发数据输出,
                temp>>=1;   //右移一位  
   if(SDA2)temp|=0x80;   //每次传输低字节
  SCLK=1;
}
  RST=0;
_nop_();  //以下为DS1302复位的稳定时间
  RST=0;
SCLK=0;
_nop_();
SCLK=1;
_nop_();
SDA2=0;
_nop_();
SDA2=1;
_nop_();
return (temp);   //返回
}
回复

使用道具 举报

ID:33544 发表于 2017-6-26 21:23 | 显示全部楼层
我也遇见了这个问题,只是都是小白无解
  
回复

使用道具 举报

ID:445798 发表于 2018-12-14 16:34 | 显示全部楼层
然而按楼主的法改了,还是不行。。。。
回复

使用道具 举报

ID:96218 发表于 2018-12-14 22:23 | 显示全部楼层
个人认为还是晶振的问题
回复

使用道具 举报

ID:7121 发表于 2018-12-23 12:43 | 显示全部楼层
还是好好看看 DS1302 的时序图吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表