#include /* DDRx - The Port x Data Direction Register - read/write PORTx - The Port x Data Register - read/write PINx - The Port x Input Pins Register - read only */ #define SERIALBUFSIZE 11 //char serialBuffer[SERIALBUFSIZE]; //byte setBufPointer = 0; #define CS 10 #define OE 11 #define DEVVCC 12 #define REC_TYPE 0 unsigned long addrSize = 1024; void setup() { Serial.begin(115200); delay(1000); PORTD = 0xFF; PORTC = 0xFF; PORTB = 0xFF; // needed for switch from tristate to output low PORTA = 0xFF; DDRD = DDRD | 0b11111100; // switch all but serial pins to output DDRC = 0x00; // input DDRB = 0xFF; // output DDRA = 0xFF; // output Serial.println("GAL16V8 read v1.1"); Serial.println("B0, B1, B2, B3, B4, B5, B6, B7, A0, A1, C0, C1, C2, C3, C4, C5, C6, C7"); Serial.println("1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19"); Serial.println("IIN,IOUT,IA0,IA1,IA2,IA3,IA4,IA5,IA6,IA7,OACT,OC0R,OC1R,OC1W,OC2R,OC8FCS,ODBDR,O0"); Serial.println(); Serial.println("A1-A0,B7-B0 C0-C7"); delay(100); } void loop() { int addrPoint; byte data; char fmtStr[20]; for (addrPoint = 0; addrPoint < addrSize; addrPoint++) { printBinary(addrPoint, 10); setAddress(addrPoint); Serial.print(" "); printBinary(getData(), 7); Serial.println(); } while(1) {} // halt } void setAddress(int address) { byte highAddr; byte lowAddr; highAddr = address >> 8; lowAddr = address & 0xFF; PORTA = highAddr; PORTB = lowAddr; } byte getData(void) { return PINC; } void printBinary(int address, int base) { int bit; int bitCounter; address = address & 0xFFFF; for (bitCounter = base - 1; bitCounter >= 0; bitCounter--) { bit = (address & (1 << bitCounter)) ? 1 : 0; Serial.print(bit, DEC); } }