ds1302读取函数问题!求高手解答!
时间:10-02
整理:3721RD
点击:
我的ds1302出现了读取时显示‘?’的问题!也是只要加一句io=0;显示器上面就不会出现“?”,我到现在也不知道问题是在哪里!但是我现只要前一次读出的是偶数,后面就只能读出0xff即显示“?”但是当奇数的时候就可以正常的读取出来!秒位是每个一秒变化!接着循环回去读年的时候,年就每隔一秒在正常和“?”间闪烁一次!我想就是怎么也想不明白,时序没问题!读出的奇数和偶数会影响到下一次读取!但是加了那句就正常了,在说偶数和奇数的区别就是最后以为是不一样的!前面就是随机的,这要怎么影响下一次读取呢?还求大虾帮忙啊!
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;
}
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;
}
当是偶数的时候dio就默认为是等于0,但是是奇数的时候最后默认是1,所以你是否需要进行强制dio为0或者1
什么!当是偶数的时候dio就默认为是等于0,但是是奇数的时候最后默认是1,怎么会这样!我是在读出偶数以后将dio强制致0才行,致1就不可以,按照你的说法也矛盾啊
而且在循环的读的时候,dio是根据他输出的变化而变化,只要致1,就好了啊
谢谢啦!我找到答案啦
小编你好,我也正学习这个芯片, 一起交流下..感觉是不是小编你io的配置方式没有正确呢,什么单片机,支持双向么,会不会是 DIO 单片机的主动使能 影响到了结果呢, 就好像你程序中,发送最后一位后,DIO 可以为1 或者0,会不会是这个地方还需要添加一句消除影响的 语句呢?望赐教。
好好看看实例程序,慢慢改错
小编能把找到的答案公布一下么?
每次读取字节之前先左移一次 可能是你读奇数的时候最后一位是1dio口保持着高电平影响到正确的数据读取了