I2C总线上接两个AT24C02读写实例Word文件下载.docx

上传人:b****2 文档编号:15175717 上传时间:2022-10-28 格式:DOCX 页数:6 大小:144.80KB
下载 相关 举报
I2C总线上接两个AT24C02读写实例Word文件下载.docx_第1页
第1页 / 共6页
I2C总线上接两个AT24C02读写实例Word文件下载.docx_第2页
第2页 / 共6页
I2C总线上接两个AT24C02读写实例Word文件下载.docx_第3页
第3页 / 共6页
I2C总线上接两个AT24C02读写实例Word文件下载.docx_第4页
第4页 / 共6页
I2C总线上接两个AT24C02读写实例Word文件下载.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

I2C总线上接两个AT24C02读写实例Word文件下载.docx

《I2C总线上接两个AT24C02读写实例Word文件下载.docx》由会员分享,可在线阅读,更多相关《I2C总线上接两个AT24C02读写实例Word文件下载.docx(6页珍藏版)》请在冰豆网上搜索。

I2C总线上接两个AT24C02读写实例Word文件下载.docx

OP_READ1 

0xa1 

//器件1地址以及读取操作,0xa1即为10100001B

OP_WRITE10xa0 

//器件1地址以及写入操作,0xa1即为10100000B

OP_READ2 

0xaf 

//器件2地址以及读取操作,0xa1即为10101111B

OP_WRITE20xae 

//器件2地址以及写入操作,0xa1即为10101110B

sbitSDA=P3^4;

//将串行数据总线SDA位定义在为P3.4引脚

sbitSCL=P3^3;

//将串行时钟总线SDA位定义在为P3.3引脚

/*****************************************************

函数功能:

延时1ms

(3j+2)*i=(3×

33+2)×

10=1010(微秒),可以认为是1毫秒

***************************************************/

voiddelay1ms()

{

unsignedchari,j;

for(i=0;

i<

10;

i++)

for(j=0;

j<

33;

j++)

;

}

延时若干毫秒

入口参数:

n

voiddelaynms(unsignedcharn)

unsignedchari;

for(i=0;

n;

delay1ms();

/***************************************************

开始数据传送

voidstart()

//开始位

SDA=1;

//SDA初始化为高电平“1”

SCL=1;

//开始数据传送时,要求SCL为高电平“1”

_nop_();

//等待一个机器周期

SDA=0;

//SDA的下降沿被认为是开始信号

SCL=0;

//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)

结束数据传送

voidstop()

//停止位

//SDA初始化为低电平“0”

//结束数据传送时,要求SCL为高电平“1”

//SDA的上升沿被认为是结束信号 

从AT24Cxx读取数据

出口参数:

x

unsignedcharReadData()

//从AT24Cxx移入数据到MCU

unsignedchari;

unsignedcharx;

//储存从AT24Cxx中读出的数据

for(i=0;

i<

8;

i++)

//SCL置为高电平

x<

<

=1;

//将x中的各二进位向左移一位

x|=(unsignedchar)SDA;

//将SDA上的数据通过按位“或“运算存入x中

//在SCL的下降沿读出数据

return(x);

//将读取的数据返回

向AT24Cxx的当前地址写入数据

y(储存待写入的数据)

//在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0

bitWriteCurrent(unsignedchary)

bitack_bit;

//储存应答位

i++) 

//循环移入8个位

 

SDA=(bit)(y&

0x80);

//通过按位“与”运算将最高位数据送到S

//因为传送时高位在前,低位在后

//等待一个机器周期 

SCL=1;

//在SCL的上升沿将数据写入AT24Cxx 

//等待一个机器周期

_nop_();

//将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲

y<

=1;

//将y中的各二进位向左移一位

//发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,

//以让SDA线转由接收设备(AT24Cxx)控制

//根据上述规定,SCL应为高电平

ack_bit=SDA;

//接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节

//若送高电平,表示没有接收到,传送异常

return 

ack_bit;

//返回AT24Cxx应答位

向第一个AT24Cxx中的指定地址写入数据

add(储存指定的地址);

dat(储存待写入的数据)

voidWriteSet1(unsignedcharadd,unsignedchardat)

//在指定地址addr处写入数据WriteCurrent

start();

//开始数据传递

WriteCurrent(OP_WRITE1);

//选择要操作的第一个AT24Cxx芯片,并告知要对其写入数据

WriteCurrent(add);

//写入指定地址

WriteCurrent(dat);

//向当前地址(上面指定的地址)写入数据

stop();

//停止数据传递

delaynms(4);

//1个字节的写入周期为1ms,最好延时1ms以上

向第二个AT24Cxx中的指定地址写入数据

voidWriteSet2(unsignedcharadd,unsignedchardat)

WriteCurrent(OP_WRITE2);

//选择要操作的AT24Cxx芯片,并告知要对其写入数据

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1