新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > I2C通信模塊c語(yǔ)言庫(kù)文件

I2C通信模塊c語(yǔ)言庫(kù)文件

作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
文件名i2c.h


/***************************************************
名稱:I2C通信模塊修改版
編寫:YuMin_Dong
時(shí)間:2012.11.17
***************************************************/
#ifndef _I2C_H_
#define _I2C_H_
sbit SDA=P1^0;
sbit SCL=P1^1;
uint8 ACK;

本文引用地址:http://m.butianyuan.cn/article/201611/323826.htm


//開啟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)答信號(hào)
else ACK=1;//收到應(yīng)答信號(hào)
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;
}


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


技術(shù)專區(qū)

關(guān)閉