DS1302时钟芯片不能读取数据

2019-07-16 02:24发布

本帖最后由 hegspring 于 2013-2-25 11:04 编辑

用Keil单步运行程序时,往DS1302里写数据正常,但是读数据时IO口一直保持高电平不变,主要代码如下:



求助!!!  在线等……QQ:137223811



#include "reg51.h"
#include "intrins.h"

sbit rst=P2^5;
sbit sck=P2^6;
sbit io=P2^7;
sbit acc7=ACC^7;

typedef unsigned char   uchar;
typedef unsigned int    uint;

void write_ds1302_byte(uchar dat)
{
        uchar i;        
        for(i=8;i>0;i--)
        {
                sck=0;               
                io=dat&0x01;
                dat=dat>>1;
                sck=1;
        }
}
/*写多字节到DS1302*/
void write_ds1302(uchar add,uchar dat)
{
        rst=0;
        _nop_();
        sck=0;_nop_();
        rst=1;_nop_();
        write_ds1302_byte(add);
        write_ds1302_byte(dat);
        rst=0;_nop_();
        io=1;
        sck=1;
        
}
/*读DS1302的1Byte*/
uchar read_ds1302(uchar add)
{
        uchar i;
        rst=0;
        _nop_();
        sck=0;
        _nop_();
        rst=1;
        _nop_();
        write_ds1302_byte(add);
        
        for(i=0;i<8;i++)
        {
                                
                sck=1;
                sck=0;
               
               
               
                acc7=io;
                ACC>>=1;
        }
        rst=0;
        _nop_();
        sck=0;
        _nop_();
        sck=1;
        io=1;
        ACC=(ACC/16*10)+ACC%16;
        return ACC;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。