#define OE 3 // PGM is also WE# according to data sheet #define PGM 2 // 18 pin address line #define Addr0 22 #define Addr18 40 // 8 pin data line #define Data0 44 #define Data7 51 void setCtrlPins() { pinMode(OE, OUTPUT); pinMode(PGM, OUTPUT); } void setAddrPinsOut() { for(int a = Addr0; a <= Addr18; a++) { pinMode(a, OUTPUT); digitalWrite(a, LOW); } } void setDataPinsOut() { for(int d = Data0; d <= Data7; d++) { pinMode(d, OUTPUT); digitalWrite(Data0 + d, LOW); } } void setDataPinsIn() { for(int d = Data0; d <= Data7; d++) { pinMode(Data0 + d, INPUT); } } void setByte(byte out) { for(int i = 0; i < 8; i++) { digitalWrite(Data0 + i, bitRead(out,i)); } } void setAddress(unsigned long addr) { for(int i = 0; i < 19; i++) { digitalWrite(Addr0 + i, bitRead(addr, i) ); } } byte readByte() { byte temp_in = 0; for(int i = 0; i < 8; i++) { if(digitalRead(Data0 + i)) { bitSet(temp_in, i); } } return temp_in; } byte readData(unsigned long address) { byte temp_read; setDataPinsIn(); digitalWrite(PGM, HIGH); digitalWrite(OE, HIGH); setAddress(address); digitalWrite(OE, LOW); delayMicroseconds(1); temp_read = readByte(); return temp_read; } void writeByte(byte data, unsigned long address) { setAddress(address); setByte(data); digitalWrite(OE, HIGH); digitalWrite(PGM, HIGH); delayMicroseconds(2); digitalWrite(PGM, LOW); delayMicroseconds(1); digitalWrite(PGM, HIGH); } void programData(byte data, unsigned long address) { setDataPinsOut(); writeByte(0xAA, 0x5555); writeByte(0x55, 0x2AAA); writeByte(0xA0, 0x5555); writeByte(data, address); delayMicroseconds(30); Serial.println(data, HEX); Serial.println(address, HEX); } void setup() { // Debug trigger pinMode(10, OUTPUT); digitalWrite(10, LOW); // put your setup code here, to run once: setCtrlPins(); setAddrPinsOut(); setDataPinsOut(); Serial.begin(9600); delay(2); Serial.println("Started Serial COM."); } void loop() { // put your main code here, to run repeatedly: programData(0x3F, 0x0000); byte data = readData(0x0000); // Serial.print("data: "); Serial.print("Data returned: "); Serial.println(data, HEX); // Serial.println("\n"); delay(1); }