Enclavamiento digital en salida de 16f88 (ensamblador)

Hola a todos compañeros.

Estoy diseñando un programa (en lenguaje ensamblador) para un pic16f88, que tenga en una salida PWM variable (variando un potenciómetro) y otras 6 salidas secuenciales.
Como entrada para el PWM tengo el RA0, y como entradas secuenciales tengo RA1 RA2 RA3 y RA4.

Al inicio todas las entradas menos la del PWM estan a nivel alto "1" y cuando alguna cambia a nivel bajo "0" cambia la salida, por ejemplo:

Cuando RA1 es 0, se activa unicamente RB1
Cuando RA2 es 0, se activa unicamente RB2
Cuando RA3 es 0, se activa unicamente RB3
Cuando RA4 es 0, se activa unicamente RB4
Cuando RA1 y RA2 son 0, se activa unicamente RB5
Cuando RA3 y RA4 son 0, se activa unicamente RB6

Hasta aquí todo funciona perfectamente.

Ahora quiero hacer que, cuando se active a la vez RA1 y RA2 quede en nivel alto "1" la salida RB5, hasta que se vuelvan activar a la vez esas dos entradas, entonces la salida RB5 se pondrá a nivel bajo "0" (ya que tal y como esta el programa, una vez que una de esas dos entradas se pone a "1", se pone a "0" la salida RB5) y mientras esa salida este a "1" o a "0" se pueda seguir con la secuencia anterior de 4 bits.

No se como hacer para que la salida quede activada y la secuencia siga funcionando al mismo tiempo. Me podeis echar una mano? aun soy principiante en microcontroladores:oops:

Os dejo aquí el programa para el MPLAB y el circuito en Proteus para simular.

Salu2
 

Adjuntos

  • PIC Mercedes RC.rar
    31.5 KB · Visitas: 9
Última edición:
Pues simplemente tiene que utlilizar lo que se llama una "bandera". Una bandera es una variable que puede ser de 1 solo bit o la variable entera de 8 bits. Digo 1 bit porque lo unico que haras será poner un "1" en la variable (lo cual representa un bit) cuando ingresas a la condición RA1 y RA2 iguales a 1. Pero el truco esta aqui, cuando se da la condición RA1 = 1 y RA2 = 1, lo que debes hacer es evaluar el valor que tiene la bandera, si esta en 0, pues entonces la pones en uno y pones en uno la salida RA5 y sigues con el programa, cuando se vuelve a dar la condición RA1 = 1 y RA2 = 1, vuelves a evaluar el valor de la vandera y si es uno la pones en cero y apagas la salida RA5. Otra forma mas directa, sin usar la bandera seria leer directamente el valor que posee en ese momento la salida RA5 y colocar el valor opuesto al que está.
 
Muchas gracias Juanma, tu respuesta me ha orientado bastante, auqnue todavia no he conseguido hacer lo propuesto, ya que soy muy nuevo en esto de la programcion, estoy leyendo sobre las interrupciones y probando.

SAlu2
 
Última edición:
Pues eso que te digo es algo muy basico. Las interrupciones es algo un poco mas avanzado, ademas utilizar un interrupcion para eso seria como andar en una ferrari a 10 por hora
 
Atrás
Arriba