您的位置 首页 硬件

51单片机I2C总线代码

I2C总线相关函数:voidI2Cstart()//开始标志{SDA=1;SCL=1;SDA=0;delay1ms(4);SCL=0;delay1ms(4);}voidI2Cstop()//结束标志{

I2C总线相关函数:

void I2Cstart()//开端标志{	SDA=1;SCL=1;SDA=0;delay1ms(4);SCL=0;delay1ms(4);}void I2Cstop()//完毕标志{SCL=0;delay1ms(4);SDA=0;delay1ms(4);SCL=1;delay1ms(4);SDA=1;delay1ms(4);}unsigned char I2Creadack(){unsigned char i,byte;byte=0;for(i=0;i<8;i++){SCL=0;SDA=1;delay1ms(4);byte<<=1;if(SDA==1){byte|=0x01;delay1ms(4);}}SCL=0;delay1ms(4);SDA=0;delay1ms(4);SCL=1;delay1ms(4);SCL=0;return byte;}void I2Csend(unsigned char byte)//I2C写数据的进程{unsigned char mask,i;for(i=0;i<8;i++){	SCL=0;if((mask&byte)==0){SDA=0;}else{SDA=1;}mask>>=1;delay1ms(4);SCL=1;//给满足时刻让数据读取delay1ms(4);}SCL=0;SDA=1;		//由于总线上有一个信号为低则低delay1ms(4);SCL=1;delay1ms(4);//等候应对位SCL=0;}unsigned char I2Cread(void){unsigned char i,byte;byte =0;for(i=0;i<8;i++){SCL=0;SDA=1;//读数据有必要拉高delay1ms(4);SCL=1;//数据安稳delay1ms(4);byte<<=1;if(SDA==1){byte|=0x01;}delay1ms(4);}SCL=0;delay1ms(4);SDA=0;//发送的应对位delay1ms(4);SCL=1;delay1ms(4);SCL=0;return byte;}unsigned char I2Cread_eeprom(unsigned char addr)//I2C读取数据{unsigned char datebyte,datebyte2;I2Cstart();I2Csend(0xa0);//写数据I2Csend(addr);I2Cstart();I2Csend(0xa1);//读数据datebyte2=I2Creadack();datebyte=I2Cread();I2Cstop();return datebyte;}void write_eeprom(unsigned char addr,unsigned char datebyte){I2Cstart();I2Csend(0xa0);I2Csend(addr);I2Csend(datebyte);I2Cstop();}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部