串行接口读位数据,保证先移位读入位数据,保证第1次读入第一位数,第8次读入第8位数据,这样第8位数据读完才不会发生再次移位。写函数容易理解不重点分析
作者:互联网
AD7734读函数
void readfromreg(bytenumber)
int bytenumber;
{
int j;
unsigned char temp1;
DIN=0;
CS=0;
temp1=0x00;
for(j=0;j<bytenumber;j++)
{
SCLOCK=0;
if(DOUT==0)
temp1=temp1<<1; //读位数据,保证先移位读入位数据,
else
{temp1=temp1<<1; //这样第8位数据读完才不会发生再次移位2020.3.7
temp1=temp1+0x01;} //巧妙2019.9.4
if(j==7||j==15||j==23)
{ printf("%02BX",temp1);
temp1=0x00;
}
SCLOCK=1;
}
CS=1;
}
DS1302读函数
uchar SPI_Read_Byte()
{
uchar i;
uchar temp = 0;
DS1302_DATA = 1;//输入模式 //此语句有无都可以读成功2020.2.29
// DS1302_CS = 1;
// DS1302_CLK = 1; //此A语句导致读字节失败,注释掉和BC配合才读自己成功2020.2.28
delayNus(4);
for(i = 0;i < 8;i++)
{
temp >>= 1; //读数据,移位在上面,如果在最后一行,可能导致多一次移位2020.3.7
// DS1302_CLK = 0; //此B语句导致读字节失败2020.2.28
delayNus(3);
if(DS1302_DATA == 1)
temp |= 0x80;
DS1302_CLK = 1;
delayNus(3);
DS1302_CLK = 0; //此C语句加到此行读字节才成功,也就是B句应改在此行,空闲状态低电平2020.2.28
}
return (temp);
}
标签:temp,CLK,DS1302,2020.2,temp1,读入,数据,移位 来源: https://blog.csdn.net/qq_25814297/article/details/104713232