I2C通信模塊c語言庫文件
/***************************************************
名稱:I2C通信模塊修改版
編寫:YuMin_Dong
時(shí)間:2012.11.17
***************************************************/
#ifndef _I2C_H_
#define _I2C_H_
sbit SDA=P1^0;
sbit SCL=P1^1;
uint8 ACK;
//開啟I2C總線
void I2C_Start()
{
SDA=1;
//_nop_();
//_nop_();
//_nop_();
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;//鉗主總線
_nop_();
_nop_();
}
//停止I2C總線
void I2C_Stop()
{
SDA=0;
//_nop_();
//_nop_();
//_nop_();
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
//I2C通信主機(jī)發(fā)送字節(jié)
void I2C_SendByte(uint8 byte)
{
uint8 i;
for(i=0;i<8;i++)
{
if(byte&0x80)
SDA=1;
else SDA=0;
_nop_();
SCL=1;//使SDA數(shù)據(jù)有效
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
byte<<=1;
_nop_();
_nop_();
}
SDA=1;//數(shù)據(jù)線浮高
_nop_();
_nop_();
SCL=1;//使讀取的數(shù)據(jù)有效,判斷是否應(yīng)答或非應(yīng)答
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if(SDA==1)
ACK=0;//收到非應(yīng)答信號
else ACK=1;//收到應(yīng)答信號
SCL=0;//鉗總線
_nop_();
_nop_();
}
//I2C通信主機(jī)接收字節(jié)
uint8 I2C_ReceiveByte()
{
uint8 i;
uint8 byte;
for(i=0;i<8;i++)
{
SDA=1;//拉高準(zhǔn)備接收
_nop_();
SCL=1;
byte<<=1;
if(SDA==1)
byte|=0x01;
else byte&=0xfe;
SCL=0;
_nop_();
_nop_();
}
return byte;
}
評論