ds1302走时跳着走的问题

[复制链接]
3933|6
 楼主| 472666GAQ 发表于 2009-12-6 13:52 | 显示全部楼层 |阅读模式
ck, AD, IO, ADDR, DDR
uchar Clock_Read_Time(uchar ds_addr)
{
    uchar i,dat,ds_data;
clock_rst=1;
ds_addr|=0x01;
for(i=0;i<8;i++)
{
clock_io =ds_addr&0x01;
clock_sclk=1;
clock_sclk=0;
ds_addr>>=1;
}
clock_io =ds_addr;
clock_sclk=1;
clock_sclk=0;
clock_io =1;
    dat=clock_io ;  
dat<<=7;
ds_data>>=1;
    ds_data|=dat;
for(i=0;i<7;i++)
{
    clock_io =1;
            dat=clock_io ;
              dat<<=7;
    ds_data>>=1;
            ds_data|=dat;
   clock_sclk=1;
   clock_sclk=0;
}
clock_rst=0;
return ds_data ;
}我是现在的毛病就是ds1302的(包括分钟小时等)时间不是连续的走而是跳着走就是不连续的但是总体的时间还是准确的  我换了一个别人的就行  上面是我的读函数 已换上我的读函数就是跳着走 但是问题出在哪我就不知道了   我找了好几遍也没找到
ningling_21 发表于 2009-12-6 14:27 | 显示全部楼层
要看你调用两次读时间函数的时间间隔是多少,如果大于1秒,肯定是秒是跳着走的...
 楼主| 472666GAQ 发表于 2009-12-6 15:03 | 显示全部楼层
差不多不到1ms读一次    也是蹦着走 但是整体时间是对的
xwj 发表于 2009-12-6 15:40 | 显示全部楼层
那就是程序读错了呗,比如低位丢失
 楼主| 472666GAQ 发表于 2009-12-6 16:11 | 显示全部楼层
比如说  初始化  为13:12:00  然后应该一秒一秒的走 但是  他是直接过了3s  直接就是从13:12:00直接变成13:12:13了 就是不是连续的走   但是时间大体是对的
awmc_m 发表于 2009-12-6 17:02 | 显示全部楼层
这个函数能工作?
我记得i2c写地址是高位开始写的,
clock_io =ds_addr&0x01;
很明显是从低位写起,地址已经写的不对了,怎么可能读到对的数据?
clock_sclk=1;
clock_sclk=0;
clock_io =1;
    dat=clock_io ;  
dat<<=7;
ds_data>>=1;
    ds_data|=dat;
for(i=0;i<7;i++)
{
    clock_io =1;
            dat=c ;
              dat<<=7;
    ds_data>>=1;
            ds_data|=dat;
   clock_sclk=1;
   clock_sclk=0;
}
这一段读数据也是相当的乱,for8次也可以阿,非要for7次,把一次放在外面。
clock_io应该是bit型,而dat是uchar,直接相等也不好。
另外dat左移7位与ds_data右移一位的值相或,不如将他们直接或后左移1位。
还有i2c的clk没有加必要的延时,不知道你的系统时钟是多少。

还看见一个io:clock_rst,复位?每次读数都要复位?记得这个ic好像并没有复位脚。

先看一下别人的成功程序,然后把他的详细流程图画出来,感觉你的基础还比较差,需要多读读别人的程序。
ningling_21 发表于 2009-12-6 19:52 | 显示全部楼层
是不是LZ输入错了....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

285

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部