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