Arduino与Proteus仿真实例-I2C总线多个M24C01设备数据储存仿真
I2C总线多个M24C01设备数据储存仿真
I2C 总线是一种非常流行且功能强大的总线,用于主机(或多个主机)与单个或多个从设备之间的通信。 下图说明了有多少不同的外设可以共享仅通过 2 条线连接到处理器的总线,这是 I2C 总线与其他接口相比可以提供的最大优势之一。

本次实例将实现4个M24C01串行(I2C)EEPROM设备连接到I2C总线上,进行单独控制数据存取。
在前面的文章中,对I2C以及M24C01设备驱动进行了详细介绍,请参考:
1、仿真电路原理图

开关SW2分别对四个M24C01设备进行选择,按键Read和Write分别对设备进行数据读写操作。
2、仿真代码实现
本次实例使用了如下开源库:
演示代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
| #include <Eeprom24C01\_02.h> #define EEPROM\_ADDRESS\_1 0x50 #define EEPROM\_ADDRESS\_2 0x51 #define EEPROM\_ADDRESS\_3 0x52 #define EEPROM\_ADDRESS\_4 0x53 int readPin = 2; int writePin = 3; int eepromSelectPin1 = 4; int eepromSelectPin2 = 5; int eepromSelectPin3 = 6; int eepromSelectPin4 = 7; int selectPin = -1; uint8\_t counts1 = 1; uint8\_t counts2 = 1; uint8\_t counts3 = 1; uint8\_t counts4 = 1; byte readState; byte writeState;
static Eeprom24C01_02 eeprom1(EEPROM_ADDRESS_1); static Eeprom24C01_02 eeprom2(EEPROM_ADDRESS_2); static Eeprom24C01_02 eeprom3(EEPROM_ADDRESS_3); static Eeprom24C01_02 eeprom4(EEPROM_ADDRESS_4);
void read\_interrupt(){ readState = 1; }
void write\_interrupt(){ writeState = 1; }
void setup(){ pinMode(readPin,INPUT); pinMode(writePin,INPUT); pinMode(eepromSelectPin1,INPUT); pinMode(eepromSelectPin2,INPUT); pinMode(eepromSelectPin3,INPUT); pinMode(eepromSelectPin4,INPUT); // 绑定中断 attachInterrupt(digitalPinToInterrupt(readPin),read_interrupt,RISING); attachInterrupt(digitalPinToInterrupt(writePin),write_interrupt,RISING); Serial.begin(9600);
// 设备初始化 eeprom1.initialize(); eeprom2.initialize(); eeprom3.initialize(); eeprom4.initialize(); Serial.println("\*\*\*\*EEPROM 24C01 \*\*\*\*"); }
void loop(){ // 第一个设备读写 if(digitalRead(eepromSelectPin1) == HIGH){ if(readState){ int value = eeprom1.readByte(0); Serial.print("read device 1:"); Serial.print(value); Serial.println(); readState = 0; } if(writeState){ Serial.print("write device 1:"); Serial.print(counts1); Serial.println(); eeprom1.writeByte(0, counts1); counts1++; writeState = 0; } }
// 第二个设备读写 if(digitalRead(eepromSelectPin2) == HIGH){ if(readState){ int value = eeprom2.readByte(0); Serial.print("read device 2:"); Serial.print(value); Serial.println(); readState = 0; } if(writeState){ Serial.print("write device 2:"); Serial.print(counts2); Serial.println(); eeprom2.writeByte(0, counts2); counts2++; writeState = 0; } }
// 第三个设备读写 if(digitalRead(eepromSelectPin3) == HIGH){ if(readState){ int value = eeprom3.readByte(0); Serial.print("read device 3:"); Serial.print(value); Serial.println(); readState = 0; } if(writeState){ Serial.print("write device 3:"); Serial.print(counts3); Serial.println(); eeprom3.writeByte(0, counts3); counts3++; writeState = 0; } }
// 第四个设备读写 if(digitalRead(eepromSelectPin4) == HIGH){ if(readState){ int value = eeprom4.readByte(0); Serial.print("read device 4:"); Serial.print(value); Serial.println(); readState = 0; } if(writeState){ Serial.print("write device 4:"); Serial.print(counts4); Serial.println(); eeprom4.writeByte(0, counts4); counts4++; writeState = 0; } } }
|
3、仿真结果

文章来源: https://iotsmart.blog.csdn.net/article/details/121048548
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!