串行接口读位数据,保证先移位读入位数据,保证第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);
}

上一篇:STC15F2K60S2单片机入门:头文件包含


下一篇:蓝桥杯单片机训练[4]---DS1302时钟芯片