void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
void setRegOne(uint8_t value) {
// close all registers
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
// Shift and extract bit to get bits
int d0 = value & 0b00000001;
int d1 = (value >> 1) & 0b00000001;
int d2 = (value >> 2) & 0b00000001;
int d3 = (value >> 3) & 0b00000001;
int d4 = (value >> 4) & 0b00000001;
int d5 = (value >> 5) & 0b00000001;
int d6 = (value >> 6) & 0b00000001;
int d7 = (value >> 7) & 0b00000001;
delay(10);
// Set pin values
digitalWrite(2,d0);
digitalWrite(3,d1);
digitalWrite(4,d2);
digitalWrite(5,d3);
digitalWrite(6,d4);
digitalWrite(7,d5);
digitalWrite(8,d6);
digitalWrite(9,d7);
delay(10);
// instruction: open register 1 to accept data
digitalWrite(11, HIGH);
delay(10);
// close register 1
digitalWrite(11, LOW);
delay(10);
// set pins back to LOW
for (int pinNum = 2; pinNum < 10; pinNum++) {
digitalWrite(pinNum, LOW);
}
delay(10);
}
// note: will mess up registers 3 and 4
void copyToRegTwo() {
// close all registers
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(10);
// Instruction: copy from reg 1 to reg 2
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(10);
// close all registers
digitalWrite(11, LOW);
digitalWrite(10, LOW);
delay(10);
}
void readToReg4() {
// close all registers
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(10);
// Instruction: read from reg 3 to reg 4
digitalWrite(10, HIGH);
delay(10);
// close all registers
digitalWrite(10, LOW);
delay(10);
}
uint8_t readFromReg4() {
// close all registers
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(10);
// Read from reg 4
uint8_t q0 = digitalRead(A0);
uint8_t q1 = (digitalRead(A1) << 1);
uint8_t q2 = (digitalRead(A2) << 2);
uint8_t q3 = (digitalRead(A3) << 3);
uint8_t q4 = (digitalRead(A4) << 4);
uint8_t q5 = (digitalRead(A5) << 5);
uint8_t q6 = (digitalRead(A6) << 6);
uint8_t q7 = (digitalRead(A7) << 7);
delay(10);
return (q0 + q1 + q2 + q3 + q4 + q5 + q6 + q7);
}
uint8_t add(uint8_t num2, uint8_t num1) {
setRegOne(num2);
copyToRegTwo();
setRegOne(num1);
// instruction: add reg 1 to reg 2
digitalWrite(10, LOW);
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
// Delay for register 3 to read
delay(2);
// close registers
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(2);
// read to register 4
readToReg4();
return readFromReg4();
}