Você está na página 1de 2

SUMADOR/RESTADOR 4 BITS

void setup() {

//Sumando 1
pinMode(A, INPUT);
pinMode(B, INPUT);
pinMode(C, INPUT);
pinMode(D, INPUT);

//Sumando 2
pinMode(E, INPUT);
pinMode(F, INPUT);
pinMode(G, INPUT);
pinMode(H, INPUT);

//Resultado
pinMode(Carry, OUTPUT);
pinMode(I, OUTPUT);
pinMode(J, OUTPUT);
pinMode(K, OUTPUT);
pinMode(L, OUTPUT);

void loop() {

//Lee los valores de las entradas digitales


a = digitalRead(A);
b = digitalRead(B);
c = digitalRead(C);
d = digitalRead(D);
e = digitalRead(E);
f = digitalRead(F);
g = digitalRead(G);
h = digitalRead(H);

//Le asigna el valor al primer bit y al carry que genera


l = (!d && h) || (d && !h);
carry1 = d&&h;

//Le asigna el valor al segundo bit y al carry que genera


k = (c && g && carry1) || (c && !g && !carry1) || (!c && g && !carry1) ||
(!c && !g && carry1);
carry2 = (c && g && carry1) || (c && g && !carry1) || (c && !g && carry1)
|| (!c && g && carry1);

//Le asigna el valor al tercer bit y al carry que genera


j = (b && f && carry2) || (b && !f && !carry2) || (!b && f && !carry2) ||
(!b && !f && carry2);
carry3 = (b && f && carry2) || (b && f && !carry2) || (b && !f && carry2)
|| (!b && f && carry2);

//Le asigna el valor al cuarto bit y al carry que genera


i = (a && e && carry3) || (a && !e && !carry3) || (!a && e && !carry3) ||
(!a && !e && carry3);
carry4 = (a && e && carry3) || (a && e && !carry3) || (a && !e && carry3)
|| (!a && e && carry3);

//Enciende los leds correspondientes, segun el valor booleano de su


variable correspondiente

//Bit 1
if(l)
digitalWrite(L, HIGH);
else
digitalWrite(L,LOW);

//Bit 2
if(k)
digitalWrite(K, HIGH);
else
digitalWrite(K,LOW);

//Bit 3
if(j)
digitalWrite(J, HIGH);
else
digitalWrite(J,LOW);

//Bit 4
if(i)
digitalWrite(I, HIGH);
else
digitalWrite(I,LOW);

//Carry
if(carry4)
digitalWrite(Carry, HIGH);
else
digitalWrite(Carry,LOW);

//Delay para el loop de 100 ms


delay(100);
}

Você também pode gostar