I2C总线上接两个AT24C02读写实例Word文件下载.docx
- 文档编号:15175717
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:6
- 大小:144.80KB
I2C总线上接两个AT24C02读写实例Word文件下载.docx
《I2C总线上接两个AT24C02读写实例Word文件下载.docx》由会员分享,可在线阅读,更多相关《I2C总线上接两个AT24C02读写实例Word文件下载.docx(6页珍藏版)》请在冰豆网上搜索。
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芯片,并告知要对其写入数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- I2C 总线 两个 AT24C02 读写 实例