大家看看我这个DS1302 通信程序哪错了

2019-07-15 10:48发布

编译成功了,可是时间无法显示,我测试过了,其他模块没有问题,就是这个模块不知道哪错了。
void DS1302ByteWrite(unsigned char dat)
{
    unsigned char mask;

    for (mask=0x01; mask!=0; mask<<=1)  
    {
        if ((mask&dat) != 0)
            DS1302_IO = 1;
        else
            DS1302_IO = 0;
        DS1302_CK = 1;      
    }
    DS1302_IO = 1;         
}

unsigned char DS1302ByteRead()
{
    unsigned char mask;
    unsigned char dat = 0;

    for (mask=0x01; mask!=0; mask<<=1)  
    {
        if (DS1302_IO != 0)  
        {
            dat |= mask;
        }
        DS1302_CK = 1;      
        DS1302_CK = 0;      
    }
    return dat;              
}
void DS1302SingleWrite(uint8 reg,uint8 dat)
{
        DS1302_CE = 1;
        DS1302ByteWrite((reg<<1)|0x80);
        DS1302ByteWrite(dat);
        DS1302_CE = 0;
}
uint8 DS1302SingleRead(uint8 reg)
{
        uint8 dat;
        DS1302_CE = 1;
        DS1302ByteWrite((reg<<1)|0x81);
        dat = DS1302ByteRead();
        DS1302_CE = 0;
        return dat;
}
void DS1302BurstWrite(uint8 *dat)
{
        uint8 i;
        DS1302_CE = 1;
        DS1302ByteWrite(0xBE);
        for(i = 0;i < 8;i++)
                DS1302ByteWrite(dat);
        DS1302_CE = 0;
}
void DS1302BurstRead(uint8 *dat)
{
        uint8 i;
        DS1302_CE = 1;
        DS1302ByteWrite(0xBF);
        for(i = 0;i < 8;i++)
                dat = DS1302ByteRead();
        DS1302_CE = 0;
}

void InitDS1302()
{
        uint8 dat;
        struct stime code InintTime = {
                0x2017,0x05,0x14,0x11,0x11,0x00,0x07
        };
        
        DS1302_CE = 0;
        DS1302_CK = 0;
        dat = DS1302SingleRead(0);
        if((dat&0x80) == 0x80)
        {
                DS1302SingleWrite(7,0x00);
                SetRealTime(&InintTime);
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
zwq838413070
1楼-- · 2019-07-15 17:42
看下时序图
SSZL
2楼-- · 2019-07-15 17:57
zwq838413070 发表于 2017-5-15 23:26
看下时序图

时序图没有没有这个部分
搜狗截图20170515233708.png
人中狼
3楼-- · 2019-07-15 18:09
刚看了一下,后面修改的那部分最好还是不要,因为说不清起了什么左右,另外在void DS1302ByteWrite(unsigned char dat)里,只有 DS1302_CK = 1;  ,而没有 DS1302_CK = 0;  ,这样在向1302写数据时,时钟引脚没有任何变化,那么后来修改调通也不知道是否真的调通了
lzlrsddz
4楼-- · 2019-07-15 20:34
 精彩回答 2  元偷偷看……

一周热门 更多>