【求助帖】DS1302读出数据始终为零

2019-07-15 08:46发布

用的是msp430fr5739这块板子,ds1302的读出来一直是零,代码如下,求大神协助:
//向DS1302的指定地址写一个字节数据
//addr:要写的寄存器的地址
//dat:要写的一个字节的数据
void DS1302_Write(uint8_t addr,uint8_t dat)
{
  uint8_t i,c;
  DS1302_RST_Clr();
  DS1302_CLK_Clr();
  DS1302_RST_Set();
  DS1302_DAT_Write();
  for(i=0;i<8;i++)                      //写地址
  {

    c=(addr&0x01);
    if(c==1)
      DS1302_DAT_Set();
    else
      DS1302_DAT_Clr();
    _NOP();
    _NOP();
    _NOP();
    DS1302_CLK_Clr();
    _NOP();
    _NOP();
    _NOP();
    addr>>=1;
    DS1302_CLK_Set();
  }
    for(i=0;i<8;i++)                    //写数据
  {
    if((dat&0x01)==1)
      DS1302_DAT_Set();
    else
      DS1302_DAT_Clr();
    _NOP();
    _NOP();
    _NOP();
     DS1302_CLK_Clr();
    _NOP();
    _NOP();
    _NOP();
    dat>>=1;
    DS1302_CLK_Set();
  }
  DS1302_RST_Clr();
  DS1302_CLK_Clr();
}

//从DS1302的某个地址中读取一个字节
//addr:需要从DS1302中读取的地址
uint8_t DS1302_Read(uint8_t addr)
{
  uint8_t i,data=0;
  DS1302_RST_Clr();
  DS1302_CLK_Clr();
  DS1302_RST_Set();
  DS1302_DAT_Write();
  for(i=0;i<8;i++)                      //写地址
  {
    if((addr&0x01)==1)
      DS1302_DAT_Set();
    else
      DS1302_DAT_Clr();
        _NOP();
    _NOP();
    _NOP();
    DS1302_CLK_Clr();
     _NOP();
    _NOP();
    _NOP();
    addr>>=1;
    DS1302_CLK_Set();

  }
  DS1302_DAT_Read();
  for(i=0;i<8;i++)                      //读取数据
  {
    DS1302_CLK_Set();
    data>>=1;
     _NOP();
    _NOP();
    _NOP();
    DS1302_CLK_Clr();
    if(P2IN&BIT1==1)
      data|=0x10;
    else
      data&=0x7F;
  }
  DS1302_CLK_Clr();
  DS1302_RST_Clr();
  return data;
}


0条回答

一周热门 更多>