DS1302关于数据读取的问题

2019-07-15 09:04发布

#include <reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int  uint;
sbit IO=P3^4;         
sbit CE=P3^5;               
sbit CL=P3^6;               
uchar timedata[7];

void WriteByte(uchar dat)               
{
        uchar i;
        for(i=0;i<8;i++)
        {
                CL=0;
                IO=dat&0x01;
                _nop_();
                CL=1;
                dat>>=1;
        }
}

void SingleWrite(uchar addr,uchar dat)               
{
        CE=1;
        WriteByte((addr<<1)|0x80);
        _nop_();
        WriteByte(dat);
        CE=0;
        CL=0;
}

uchar ReadByte()               
{
        uchar i,dat=0;
        CE=1;
        for(i=0;i<8;i++)
        {
                dat>>=1;
                if(IO==1)
                        dat|=0x80;
                _nop_();
                CL=1;
                _nop_();
                CL=0;
                _nop_();
        }
        
        CE=0;
        return dat;
}

uchar SingleRead(uchar addr)               
{
        uchar dat;
        CE=1;
        WriteByte((addr<<1)|0x81);
        _nop_();
        dat=ReadByte();
        CE=0;
        return dat;
}

void InitTime()
{
        uchar code time[]={0x50,0x59,0x12,0x27,
                              0x12,0x03,0x17};               
                                                                        
        uchar i;
        SingleWrite(7,0x00);
        for(i=0;i<7;i++)
        {
                SingleWrite(i,time);
        }
        SingleWrite(7,0x80);
}

void ReadTime()               
{
        uchar i;
        CE=1;
        for(i=0;i<7;i++)
                timedata=SingleRead(i);
        CE=0;
}

void Ds1302Init()               
{                                       
        uchar temp;               
        CE=1;
        temp=SingleRead(0);
        if(temp&0x80)
                InitTime();
        CE=0;
}
请大家帮忙看看我的代码读取数据有问题吗?为什么显示的不正确,找了好几天也没找到哪里的问题!
谢谢了

0条回答

一周热门 更多>