ds1302读取数据时,时常读取到0xff

qingshou123456 2012-09-10 10:39:58
我做的ds1302用1602显示时遇到了一样的问题,我到现在也不知道是怎么回事!我发现只要前一次读出的是偶数,后面就只能读出0xff即显示“??”但是当奇数的时候就可以正常的读取出来!秒位是每个一秒变化!接着循环回去读年的时候,年就每隔一秒在正常和“??”间闪烁一次!只要加一句io=0;显示器上面就不会出现“??”,我想就是怎么也想不明白,时序没问题!读出的奇数和偶数会影响到下一次读取!但是加了那句就正常了,在说偶数和奇数的区别就是最后以为是不一样的!前面就是随机的,这要怎么影响下一次读取呢?还求大虾帮忙啊!!!!
uchar read(uchar add)
{
uchar temp,t;
ce=1;
sclk=0;
ce=0;
temp=add;
for(t=0;t<8;t++)
{
if((temp&0x01)==1)
dio=1;
else
dio=0;
sclk=1;
sclk=0;
temp>>=1;
}
temp=0;
for(t=0;t<8;t++)
{
if(dio==1)
temp|=(0x01<<t);
sclk=1;
sclk=0;
}
ce=1;
dio=0;//问题就在这里加上了就没事了!! return temp;
}
...全文
1668 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
W_4982 2012-10-13
  • 打赏
  • 举报
回复
我遇到的不是这个问题,我在读数时发现正确数据是理论数据的后七位(7~1)作为(6~0),低位丢弃,高位不管。不然就会每次跳动两次,也就是秒1,3,5,7跑。没搞懂怎么回事。。。
qingshou123456 2012-09-11
  • 打赏
  • 举报
回复
其实我后来在网上看到一个叫浪子的博客说显示异常可能是读取太快!也可能是传输线过长!然后我怀疑是传输线过长!然后加了个上拉电阻!也能解决显示异常问题!郁闷了啊
woshi_ziyu 2012-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

dio=0;//问题就在这里加上了就没事了!!

这个问题也卡过我几天,而且这个变位在数据手册里是没有说明的。

最后我只能解释成:数字线拉低,告诉器件,释放总线。。。
[/Quote]
++
lbing7 2012-09-10
  • 打赏
  • 举报
回复
dio=0;//问题就在这里加上了就没事了!!

这个问题也卡过我几天,而且这个变位在数据手册里是没有说明的。

最后我只能解释成:数字线拉低,告诉器件,释放总线。。。

27,522

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧