Mira yo te voy a dar la solución en C, que es como mejor lo entenderás, ya que la ecuación matemática se transporta literalmente a C.
Supón que quieres programar esta ecuación: R=(R+Bnegada)·Anegada
En C sería así: R=(R || !B) && !A
Como verás se trata de una ecuación realimentada, que pertenece al siguiente enunciado:
Un depósito de agua posee dos detectores de nivel, A (máximo) y B (mínimo). Está alimentado por una electrobomba, que ha de ponerse en marcha cuando el agua esté por debajo del nivel B y debe pararse cuando el agua alcance el nivel A. En esta posición si abrimos la llave de paso debe seguir parada hasta que de nuevo el agua esté por debajo de B.
La programación completa con PIC en C sería la siguiente:
// P1_4_2.C
#include <16f84a.h>
#use fast_io(A)
#use fast_io(B)
#byte port_b = 6
main()
{
short B,A,R;
port_b = 0;
set_tris_a(0x1F); //Entradas B y A en RA0 y RA1
set_tris_b(0x00); //Salida R, en RB0
while (1)
{
B = input(PIN_A0);
A = input(PIN_A1);
R = (R||!B)&&!A;
output_bit(PIN_B0,R);
}
}
Alguien quizá piense, ¡¡esto es un filón!!, si tienes la ecuación sí que lo es, el problema está en hallar la ecuación.
Para el caso sencillo que tú deseabas, de diseño mediante puertas combinacionales no hay ningún problema ya que la(s) ecuación(es) son relativamente fáciles de hallar a partir de la tabla de verdad, pero cuando entran en juego circuitos secuenciales la cosa se complica para hallar la ecuación.
Espero haberte dado la idea.
¿Quien hace la ecuación anterior en ensamblador?
Un saludo