⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 CHIPCON公司射频芯片CC1100驱动程序
💻 C
字号:
void i2cwait_ic()
{
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
void Start_I2c_IC()
{ P2OUT |=SDA;
  i2cwait_ic();
  P2OUT |=SCL;
  i2cwait_ic();
  P2OUT &=~SDA;
  i2cwait_ic();
  P2OUT &=~SCL;
  i2cwait_ic();
}
void Stop_I2c_IC()
{
  P2OUT &=~SDA;
  i2cwait_ic();
  P2OUT |=SCL;
  i2cwait_ic();
  P2OUT |=SDA;
  i2cwait_ic();
}
void  SendByte_IC(byte c)
{
 byte BitCnt;
 
 for(BitCnt=0;BitCnt<8;BitCnt++)
    {
     if((c<<BitCnt)&0x80)P2OUT |=SDA;
       else  P2OUT &=~SDA; 
     i2cwait_ic();
     P2OUT |=SCL;
     i2cwait_ic();
     P2OUT &=~SCL;
    }
    i2cwait_ic();
    P2OUT |=SDA;
    i2cwait_ic();
    P2OUT |=SCL;
    i2cwait_ic();
    if(P2IN&SDA) ack_ic=0;
       else ack_ic=1;
    P2OUT &=~SCL;
    i2cwait_ic();
}
byte  RcvByte_IC()
{
  byte retc;
  byte BitCnt;
  retc=0; 
  P2OUT |=SDA;
  
  PORTDIRBIT(1, 1, PIN);       /////
  P2DIR &= ~SDA;
  for(BitCnt=0;BitCnt<8;BitCnt++)
      {  i2cwait_ic();           
         P2OUT &=~SCL;
         i2cwait_ic();
         P2OUT |=SCL;
         i2cwait_ic();
         retc=retc<<1;
         if(P2IN&SDA)retc=retc+1;
         i2cwait_ic();
      }
  P2OUT &=~SCL;
  i2cwait_ic();
  //PORTDIRBIT(1, 1, POUT);         /////////////
  P2DIR |= SDA;
  return(retc);
}
void ack_ic_I2c(byte a)
{
  
  if(a==0)P2OUT &=~SDA;
        else P2OUT |=SDA;
    i2cwait_ic();
    P2OUT |=SCL;
    i2cwait_ic();
    P2OUT &=~SCL;
    i2cwait_ic();  
}
bit ISendStr_IC (byte sla,byte suba,byte *s,byte no)
{
   byte i;
   Stop_I2c_IC();
   Start_I2c_IC();
   SendByte_IC(sla);
     if(ack_ic==0)
	 {return(0);}
   SendByte_IC(suba);
     if(ack_ic==0) 
	 return(0);
   for(i=0;i<no;i++)
    {SendByte_IC(*s);
      if(ack_ic==0) 
	  return(0);
      s++;
    } 
 Stop_I2c_IC();
  return(1);
}
bit IRcvStr_IC (byte sla,byte suba,byte *s,byte no)
{
   byte i;
   Start_I2c_IC();
   SendByte_IC(sla);
     if(ack_ic==0)
	 return(0);
   SendByte_IC(suba);
     if(ack_ic==0)return(0);
   Start_I2c_IC();
   SendByte_IC(sla+1);
      if(ack_ic==0)return(0);

   for(i=0;i<no-1;i++)
    {   
     *s=RcvByte_IC();
      ack_ic_I2c(0);
     s++;
    } 
   *s=RcvByte_IC();
    ack_ic_I2c(1);
 Stop_I2c_IC();
  return(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -