I2C通信模塊c語言庫文件
//(主機(jī)接收函數(shù)將要調(diào)用)從設(shè)備發(fā)生的應(yīng)答信號(hào)
void I2C_Ack()
{
SDA=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
}
//非應(yīng)答信號(hào)產(chǎn)生函數(shù)
void I2C_NoAck()
{
SDA=1;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
}
//主機(jī)發(fā)送多字節(jié)函數(shù)
bit SendString(uint8 address,uint8 *s,uint8 num)
{
uint8 i;
I2C_Start();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
I2C_SendByte(address);
if(ACK==0)
return 0;
for(i=0;i
I2C_SendByte(*s);
if(ACK==0)
return 0;
DelayMs(10);//以等待設(shè)備寫入數(shù)據(jù)處理完成
s++;
}
I2C_Stop();
DelayUs(10);
return 1;
}
//主機(jī)接收多字節(jié)函數(shù)
bit ReceiveString(uint8 address,uint8 *s,uint8 num)
{
uint8 i;
I2C_Start();
I2C_SendByte(address);
if(ACK==0)
return 0;
I2C_Start();
I2C_SendByte(address+1);
if(!ACK)
return 0;
for(i=0;i
*s=I2C_ReceiveByte();
I2C_Ack();
DelayMs(10);
s++;
}
*s=I2C_ReceiveByte();
I2C_NoAck(); //給的非應(yīng)答信號(hào)
I2C_Stop(); //停止總線
return 1;
}
#endif
庫文件的調(diào)用例子:http://www.51hei.com/bbs/dpj-20623-1.html
評(píng)論