#include "all.h"
void IIC_Delay()
{
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void IIC_Init()
{
P2M0&=0x3f;
P2M1&=0x3f;
SDA_GPIO=1;
SCL_GPIO=1;
}
void IIC_Start()//IIC啟動信號
{
SDA_GPIO=1;
SCL_GPIO=1;
IIC_Delay();
SDA_GPIO=0;
IIC_Delay();
SCL_GPIO=0;
IIC_Delay();
}
void IIC_Stop()//IIC停止信號
{
SDA_GPIO=0;
SCL_GPIO=1;
IIC_Delay();
SDA_GPIO=1;
IIC_Delay();
}
void IIC_Write_Byte(u8 IIC_Byte)//向總線發(fā)送一個字節(jié)
{
u8 i;
SCL_GPIO=0;
SDA_GPIO=1;
for(i=0;i<8;i++)
{
SDA_GPIO=(bit)(IIC_Byte&0x80);
IIC_Byte<<=1;
SCL_GPIO=1;
IIC_Delay();
SCL_GPIO=0;
IIC_Delay();
}
}
u8 IIC_Read_Byte()
{
u8 i,Value;
SCL_GPIO=0;
SDA_GPIO=1;
for(i=0;i<8;i++)
{
Value=(Value<<1)|SDA_GPIO;
SCL_GPIO=1;
IIC_Delay();
SCL_GPIO=0;
IIC_Delay();
}
return Value;
}
u8 IIC_Read_Ack()//單片機檢測IIC從機發(fā)來的應(yīng)答信號
{
u8 ack=1,i=0;
SCL_GPIO=1;
IIC_Delay();
while((ack)&&(i<5))
{
ack=SDA_GPIO;
i++;
}
SCL_GPIO=0;
return ack;
}
void IIC_Write_Ack(bit ack)//單片機發(fā)送應(yīng)答給從機
{
SDA_GPIO=ack;
IIC_Delay();
SCL_GPIO=1;
IIC_Delay();
SCL_GPIO=0;
IIC_Delay();
SDA_GPIO=1;
IIC_Delay();
}
|