// Define RAM array with 256 memory locations, each 8 bits wide
byte memory[256];
// Pins for address lines (binary representation of address)
const int addressPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
// Pins for data lines (8-bit data)
const int dataPins[] = {10, 11, 12, 13, 14, 15, 16, 17};
// Pins for read and write operations
const int readPin = 18;
const int writePin = 19;
void setup() {
// Initialize address pins as outputs for address visualization
for (int i = 0; i < 8; i++) {
pinMode(addressPins[i], OUTPUT);
}
// Initialize data pins as outputs for data visualization
for (int i = 0; i < 8; i++) {
pinMode(dataPins[i], OUTPUT);
}
// Initialize read and write pins as outputs
pinMode(readPin, OUTPUT);
pinMode(writePin, OUTPUT);
// Initialize Serial for debugging (if needed)
Serial.begin(9600);
}
void loop() {
// Example: Writing data to a specific memory location
int addressToWrite = 100;
byte dataToWrite = 0b10101010;
writeToMemory(addressToWrite, dataToWrite);
// Example: Reading data from a specific memory location
int addressToRead = 100;
byte dataRead = readFromMemory(addressToRead);
// Output the read data to Serial for debugging
Serial.print("Data at address ");
Serial.print(addressToRead);
Serial.print(" is: ");
Serial.println(dataRead, BIN);
// Visualize read and write operations
digitalWrite(readPin, HIGH);
delay(500); // Visualize read operation for 0.5 seconds
digitalWrite(readPin, LOW);
digitalWrite(writePin, HIGH);
delay(500); // Visualize write operation for 0.5 seconds
digitalWrite(writePin, LOW);
// Other loop code if necessary
}
// Function to write data to a specific memory location
void writeToMemory(int address, byte data) {
if (address >= 0 && address < 256) {
memory[address] = data;
// Visualize address and data lines during write operation
visualizeAddressLines(address);
visualizeDataLines(data);
}
}
// Function to read data from a specific memory location
byte readFromMemory(int address) {
if (address >= 0 && address < 256) {
byte data = memory[address];
// Visualize address and data lines during read operation
visualizeAddressLines(address);
visualizeDataLines(data);
return data;
}
return 0; // Return default value if address is out of range
}
// Function to visualize address lines based on address value
void visualizeAddressLines(int address) {
for (int i = 0; i < 8; i++) {
digitalWrite(addressPins[i], (address >> i) & 0x01);
}
}
// Function to visualize data lines based on data value
void visualizeDataLines(byte data) {
for (int i = 0; i < 8; i++) {
digitalWrite(dataPins[i], (data >> i) & 0x01);
}
}