打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单片机I2C通讯代码详解

单片机I2C通讯代码详解

I2C协议标准代码

1. 起始信号&停止信号

起始信号:当 SCL 线是高电平时 SDA 线从高电平向低电平切换。

停止信号:当 SCL 线是高电平时 SDA 线由低电平向高电平切换。

2. 起始信号代码

void I2cstart() //起始信号

{

SDA=1;

Delay8us();

SCL=1;

Delay8us();

SDA=0;

Delay8us();

SCL=0;

Delay8us();

}

3. 停止信号代码

void I2cstop() //停止信号

{

SDA=0;

Delay8us();

SCL=1;

Delay8us();

SDA=1;

Delay8us();

}

4.发送一个字节

unsigned char I2cSendByte(unsigned char dat) //CPU向设备发送一个字节

{

unsigned char a=0,b=0;

for(a=0;a<>

{

SDA=dat>>7;

dat=dat<>

Delay8us();

SCL=1;

Delay8us();

SCL=0;

Delay8us();

}

SDA=1;

Delay8us();

SCL=1;

while(SDA) //等待设备应答

{

b++;

if(b>200)

{

SCL=0;

Delay8us();

return 0; //设备无应答,返回0,并跳出此程序

}

}

SCL=0;

Delay8us();

return 1; //设备有应答,返回1,并跳出此程序

}

5.读取一个字节

unsigned char I2cReadByte() //CPU向设备读取一个字节

{

unsigned char a=0,dat=0;

SDA=1;

Delay8us();

for(a=0;a<>

{

SCL=1;

Delay8us();

dat<>

dat|=SDA;

Delay8us();

SCL=0;

Delay8us();

}

return dat; //返回dat,并跳出此程序

}

6. 向24C02地址addr,写数据dat

void At24c02Write(unsigned char addr,unsigned char dat) //向24C02地址addr,写数据dat

{

I2cstart(); //启动

I2cSendByte(0xa0); //发送24C02设备地址

I2cSendByte(addr); //发送24C02寄存器地址

I2cSendByte(dat); //发送数据

I2cstop(); //停止

}

7. 读取24C02寄存器addr中的数据

unsigned char At24c02Read(unsigned char addr) //读取24C02寄存器addr中的数据

{

unsigned char num;

I2cstart(); //开始

I2cSendByte(0xa0); //发送24C02设备地址-写

I2cSendByte(addr); //发送24C02寄存器地址

I2cstart(); //改变传输方式,重新开始

I2cSendByte(0xa1); //发送24C02设备地址-读

num=I2cReadByte(); //接收数据并保存至num

I2cstop(); //停止

return num; //返回读取值num

}

8.I2C写数据八个步骤

第一步,发送一个起始信号。

第二步,发送7bit从机地址,即24C02的地址。此处需要注意,发送数据时,无法发送7bit数据,此处发送了7bit地址+1bit读写选择位,即发送7bit+r/w。最低位为1表示读,为0表示写。

第三步,产生一个ACK应答信号,此应答信号为从机器件产生的应答。

第四步,发送寄存器地址,8bit数据。

第五步,产生一个ACK应答信号,此应答信号为从机器件产生的应答。

第六步,发送一个数据,8bit数据。

第七步,产生一个ACK应答信号,此应答信号为从机器件产生的应答信号。

第八步,发送一个停止信号。

9. I2C读数据十一个步骤

第一步,发送一个起始信号。

第二步,发送7bit从机地址,即24C02的地址。此处需要注意,发送数据时,无法发送7bit数据,此处发送了7bit地址+1bit读写选择位,即发送7bit+r/w。最低位为1表示读,为0表示写。

第三步,产生一个ACK应答信号,此应答信号为从机器件产生的应答。

第四步,发送寄存器地址。

第五步,产生一个ACK应答信号,此应答信号为从机器件产生的应答。

第六步,再次发送一个起始信号。

第七步,发送7bit从机地址,即24C02的地址。此处需要注意,发送数据时,无法发送7bit数据,此处发送了7bit地址+1bit读写选择位,即发送7bit+r/w。最低位为1表示读,为0表示写。

第八步,产生一个ACK应答信号,此应答信号为从机器件产生的应答。

第九步,读取一个字节(8bit)的数据。

第十步,产生一个ACK应答信号,此应答信号为CPU产生。

第十一步,产生一个停止信号。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
I2C总线协议(AT24c02)程序
ADXL345程序。 (amoBBS 阿莫电子论坛)
51单片机”光控窗帘“简易版c(带视频)
PIC单片机之I2C总线
MSP430F149模拟IIC读写24C02程序
EX85 将数据"0X0F"写入AT24C02再读出送P1口显示
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服