Entradas: A, B | Salidas: Acarreo (SemiSuma2) y Suma (SemiSuma1)
| Entradas | Salidas | ||
|---|---|---|---|
| A | B | SemiSuma2 (A·B) | SemiSuma1 (A⊕B) |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
Forma Canónica:
El sumador completo suma tres bits: A, B y el acarreo de entrada Cin (aquí usamos la entrada C del Arduino como Cin). Genera las salidas SumaComp1 (Suma) y SumaComp2 (Acarreo de salida Cout).
| Entradas | Salidas | |||
|---|---|---|---|---|
| A | B | C (Cin) | SumaComp2 (Cout) | SumaComp1 (S) |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
Forma Canónica:
Forma Simplificada (Puertas XOR / Karnaugh):
Entradas: A, B, C, D (Número 1: AB, Número 2: CD) | Salidas: Suma3 (C2), Suma2 (C1), Suma1 (C0)
| Entradas | Salidas | |||||
|---|---|---|---|---|---|---|
| A | B | C | D | Suma3 | Suma2 | Suma1 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 0 | 0 | 1 | 0 |
| 0 | 0 | 1 | 1 | 0 | 1 | 1 |
| 0 | 1 | 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 1 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Forma Canónica:
Funciones Simplificadas (Karnaugh):
const int leds[] = {13,12,11,10,9,8,7,6,5};
const int entradas[] = {28,26,24,22};
const int numeroLeds = sizeof(leds) / sizeof(leds[0]);
const int numeroEntradas = sizeof(entradas) / sizeof(entradas[0]);
bool A, B, C, D;
bool SemiSuma1, SemiSuma2;
bool SumaComp1, SumaComp2;
bool Suma1, Suma2, Suma3;
void setup()
{
Serial.begin(115200);
for(int i = 0; i < numeroLeds; i++){
pinMode(leds[i], OUTPUT);
}
for(int i = 0; i < numeroEntradas; i++){
pinMode(entradas[i], INPUT);
}
}
void loop()
{
A = digitalRead(entradas[0]); // Leo estado Pin 28
B = digitalRead(entradas[1]); // Leo estado Pin 26
C = digitalRead(entradas[2]); // Leo estado Pin 24 (Cin)
D = digitalRead(entradas[3]); // Leo estado Pin 22
// FUNCIONES:
// 1. SEMISUMADOR:
SemiSuma1 = !A*B + A*!B;
SemiSuma2 = A*B;
// 2. SUMADOR COMPLETO (A + B + Cin):
SumaComp1 = !A*!B*C + !A*B*!C + A*!B*!C + A*B*C; // Suma
SumaComp2 = !A*B*C + A*!B*C + A*B*!C + A*B*C; // Acarreo (Cout)
// Simplificado: SumaComp2 = A*B + A*C + B*C;
// 3. SUMA 2 CIFRAS (AB + CD):
Suma1 = !A*!B*!C*D + !A*!B*C*D + !A*B*!C*!D + !A*B*C*!D + A*!B*!C*D + A*!B*C*D + A*B*!C*!D + A*B*C*!D;
// Simplificado por Karnaugh: Suma1 = !B*D + B*!D;
Suma2 = !A*!B*C*!D + !A*!B*C*D + !A*B*!C*D + !A*B*C*!D + A*!B*!C*!D + A*!B*!C*D + A*B*!C*!D + A*B*C*D;
// Simplificado por Karnaugh: Suma2 = !A*!B*C + !A*C*!D + A*!B*!C + A*!C*!D + !A*B*!C*D + A*B*C*D;
Suma3 = !A*B*C*D + A*!B*C*!D + A*!B*C*D + A*B*!C*D + A*B*C*!D + A*B*C*D;
// Simplificado por Karnaugh: Suma3 = !B*C + B*!D + A*B*D;
// SALIDA DE LAS SUMAS EN LEDS
// Semisumador en leds[0] y leds[1]
digitalWrite(leds[0], SemiSuma2);
digitalWrite(leds[1], SemiSuma1);
// Sumador Completo en leds[2] y leds[3]
digitalWrite(leds[2], SumaComp2); // Acarreo
digitalWrite(leds[3], SumaComp1); // Suma
// Sumador 2 Cifras en los últimos 3 leds
digitalWrite(leds[numeroLeds-3], Suma3);
digitalWrite(leds[numeroLeds-2], Suma2);
digitalWrite(leds[numeroLeds-1], Suma1);
}