关于I2C总线的一些问题

2019-07-16 04:56发布

最近一直在看DA/AD之类的问题,后来遇到了PCF8591这样的芯片,须要用I2C总线的一些知识。看到这样一段程序,有些地方不太明白,在此求助,望高手出手相助。程序如下:
               发送一个字节
------------------------------------------------*/
  void Send(unsigned char Data)
  {
   unsigned char BitCounter=8;
   unsigned char temp;
   do
     {
   temp=Data;
   Scl=0;
   _nop_();_nop_();_nop_();_nop_();_nop_();
   if((temp&0x80)==0x80)   ///我想此处应该是屏蔽低七位,然后根据最高位的值来决定数据总线上的值,可是为什么要这么做
                                             ///呢?
      Sda=1;
   else
      Sda=0;

   Scl=1;
   temp=Data<<1;
   Data=temp;
   BitCounter--;
    }
   while(BitCounter);
       Scl=0;
   }

/*------------------------------------------------
               读入一个字节并返回
------------------------------------------------*/
   unsigned char Read(void)
   {
    unsigned char temp=0;
    unsigned char temp1=0;
    unsigned char BitCounter=8;
    Sda=1;
    do
      {
    Scl=0;
          _nop_();_nop_();_nop_();_nop_();_nop_();
    Scl=1;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    if(Sda)                                     ////此处及以下程序做何解释,为何要这么做呢?
       temp=temp|0x01;
    else
       temp=temp&0xfe;
    if(BitCounter-1)
       {
     temp1=temp<<1;
     temp=temp1;
     }
     BitCounter--;
    }
  while(BitCounter);
  return(temp);
   }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。