单片机/MCUwilliam hill官网
直播中

我叫LY

8年用户 9经验值
擅长:可编程逻辑 嵌入式技术 处理器/DSP 控制/MCU EDA/IC设计
私信 关注
[问答]

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

用的是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;
}


回帖(3)

lee_st

2018-3-28 10:05:04

最佳答案

配置有问题的
举报

CHNlyt

2018-3-28 13:51:09
学习学习。。。
举报

jf_22084945

2022-3-25 14:56:28
我刚开始调试的时候也是这样,后来我找到了原因,要接漏级开路的口才行,用其他的口读到的数都是零
举报

更多回帖

发帖
×
20
完善资料,
赚取积分