como apago RB0 cuando RB3 Encientada el el Pic16f84a ????

mi problema es el siguiente.

tengo 4 entradas con swich en cada una de RA0 - RA3
y 4 salidas con 4 diodos led en cada una de RB0 - RB3

lo que quiero es:

1- RA0 = 1 ENTOCES RB0= 1
2- RA1 = 1 ENTOCES RB1= 1
3- RA2 = 1 ENTOCES RB2= 1
4- RA3 = 1 ENTOCES RB3= 1 Y RB0 = 0
5- RA3 = 0 ENTOCES RB3= 0 Y RB0 = 0
6- RA2 = 0 ENTOCES RB3= 0 Y RB0 = 1

FORMA DESENDENTE:

en otro palabras cuando cierro sw0 encienda led0, sw1 enciende le1, sw2 endienda le2, sw3 encenda le3 y apague led0. ENTOCES cuando sw3 abra led3 apague y le0 continue apagado, sw2 abra led2 apage y led0 encienda.

y que se repita esta rutina sw2 endienda le2, sw3 encenda le3 y apague led0. ENTOCES cuando sw3 abra led3 apague y le0 continue apagado, sw2 abra led2 apage y led0 encienda.

anexo una imagen del circuito para ilustrarlo

http://www.uploadfilesystem.com//viewimage.php?file=/imagenes/10/12/04/W2C82426.jpg
 
Código:
;*********************************** Elemental_01.asm ***********************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Por el Puerto B se obtiene el dato de las cinco líneas del Puerto A, al que está conectado
; un array de interruptores, sumándole el valor de una constante, por ejemplo 74.
; Es decir: (PORTB)=(PORTA)+CONSTANTE

; ZONA DE DATOS *********************************************************************

LIST P=16F84A ; Procesador utilizado.
INCLUDE <P16F84A.INC> ; Definición de algunos operandos utilizados.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CONSTANTE EQU d'74' ; En sistema decimal se pone así.

; ZONA DE CÓDIGOS *******************************************************************

ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
clrf TRISB ; Las líneas del Puerto B configuradas como salidas.
movlw b'00011111' ; Las 5 líneas del Puerto A configuradas como entradas.
movwf TRISA
bcf STATUS,RP0 ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
movf PORTA,W ; Carga el registro de datos del Puerto A en (W).
addlw CONSTANTE ; (W) = (PORTA) + CONSTANTE.
movwf PORTB ; El contenido de W se deposita en el puerto de salida.
goto Principal ; Crea un bucle cerrado e infinito.

END ; Fin del programa.
 
Atrás
Arriba