51单片机IIC总线程序(测试通过)

sbit IIC_scl=P1^5;
sbit IIC_sda=P3^6;
void Delaynus(uint us)
{
 while(--us);
}
void Delaynms(uint ms)
{
 uint a,b;
 for(a=0;a<ms;a++)
  for(b=0;b<109;b++);
}
void IIC_Start()
{
 IIC_sda=1;
 Delaynus(2);
 IIC_scl=1;
 Delaynus(2);
 IIC_sda=0;
 Delaynus(2); 
}
void IIC_Stop()
{
 IIC_sda=0;
 Delaynus(2);
 IIC_scl=1;
 Delaynus(2);
 IIC_sda=1;
 Delaynus(2);
}
void IIC_Send_Byte(uchar byte)
{
 uchar temp=byte;
 uchar i;
 IIC_sda=1;
 Delaynus(2);
 IIC_scl=0;
 Delaynus(2);
 for(i=0;i<8;i++)
 {
  IIC_scl=0;
  Delaynus(2);
  IIC_sda=(bit)(temp&0x80);
  Delaynus(2);
  IIC_scl=1;
  Delaynus(2);
  temp<<=1;
 }
 IIC_scl=0;
 Delaynus(2);
 IIC_sda=1;
 Delaynus(2);
}
uchar IIC_Receive_Byte()
{
 uchar temp,i,byte=0;
 IIC_sda=1;
 Delaynus(2);
 IIC_scl=0;
 Delaynus(2);
 for(i=0;i<8;i++)
 {
  IIC_scl=1;
  Delaynus(2);
  if(IIC_sda==1)
  {
   temp=1;
  }
  else
  {
    temp=0;
  }
  byte=(byte<<1)|temp;
  IIC_scl=0;
 }
 Delaynus(2);
 return(byte);
 
}
void IIC_Ack()
{
 uchar counter=5;
 IIC_scl=1;
 Delaynus(2);
 while((IIC_sda==1)&&counter++);
 IIC_scl=0;
 Delaynus(2);
}

 

posted @ 2013-03-17 17:12  天涯海角路  阅读(404)  评论(0)    收藏  举报