您的位置 首页 设计

I2C通讯模块c言语库文件

文件名i2ch***************************************************名称:I2C通信模块修改版编写:YuMin_Dong时间:20121117*****

文件名i2c.h

/***************************************************
称号:I2C通讯模块修改版
编写:YuMin_Dong
时刻: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通讯主机发送字节
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数据有用
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
byte<<=1;
_nop_();
_nop_();
}
SDA=1;//数据线浮高
_nop_();
_nop_();
SCL=1;//使读取的数据有用,判别是否应对或非应对
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if(SDA==1)
ACK=0;//收到非应对信号
else ACK=1;//收到应对信号
SCL=0;//钳总线
_nop_();
_nop_();
}

//I2C通讯主机接纳字节
uint8 I2C_ReceiveByte()
{
uint8 i;
uint8 byte;

for(i=0;i<8;i++)
{
SDA=1;//拉高预备接纳
_nop_();
SCL=1;
byte<<=1;
if(SDA==1)
byte|=0x01;
else byte&=0xfe;
SCL=0;
_nop_();
_nop_();
}
return byte;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/318248.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部