单片机I2C总线AT24C02读写、扩展keil工程多个实例及Proteus仿真

1.对I2C总线上挂接多个AT24C02的读写操作源代码如下:

//对I2C总线上的2个AT24C02(U2和U3)的读写

/*

I2C总线系统中器件地址包括固定部分和可编程部分。
可编程部分必须根据A0、A1和A2来设置。

可编程部分A0、A1和A2的编程并不是通过软件编程。
而是把A0、A1和A2三个引脚接不同的电压来确定数值。
接VCC表示1,接GND表示0,
所以最多可以接8个相同的芯片在同一个I2C总线上。

at24c02前四位固定
msb              LSB
1 0 1 0 A2 A1 A0 R/W

pcf8591前四位固定1001

最后一位是读写位,1为读,0为写


*/


/*
1、本例对I2C总线上关节两个AT24C02进行读写操作,想将数据0xaa写入第一个at24c02的指定地址,再将该数据读出后存入第二个AT24C02的指定地址,最后读出该数据并送P1口用8位LED显示验证

2、实现方法:
1)两个器件地址的确定
由于第一个AT24C02的3位地址位(A0A1A2)均接地(低电平),第二个AT24C02的三个地址位(A0A1A2)均接电源(高电平),因此第一个AT24C02的地址为000,第二个AT24C02的地址为111.在写命令时,指名要操作的器件地址,即可对不同的AT24C02进行操作
 */



//对I2C总线上挂接多个AT24C02的读写操作
#include <reg51.h>         //  包含51单片机寄存器定义的头文件 
#include <intrins.h>       //包含_nop_()函数定义的头文件 
#define OP_READ1 0xa1  // 器件1地址以及读取操作,0xa1即为1010 0001B 
#define OP_WRITE1 0xa0  // 器件1地址以及写入操作,0xa1即为1010 0000B 
#define OP_READ2 0xaf  // 器件2地址以及读取操作,0xa1即为1010 1111B 
#define OP_WRITE2 0xae  // 器件2地址以及写入操作,0xa1即为1010 1110B 
sbit SDA=P3^4;             //将串行数据总线SDA位定义在为P3.4引脚
sbit SCL=P3^3;             //将串行时钟总线SDA位定义在为P3.3引脚
/*****************************************************
函数功能:延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
***************************************************/
void delay1ms()
{
    unsigned char i,j;
    for(i=0; i<10; i++)
        for(j=0; j<33; j++)
            ;
}
/*****************************************************
函数功能:延时若干毫秒
入口参数:n
***************************************************/
void delaynms(unsigned char n)
{
    unsigned char i;
    for(i=0; i<n; i++)
        delay1ms();
}
/*************************************
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值