Decodificador BCD con PIC16f84A

Que tal amigos y compañeros de 'Foros De Electrónica'

Estoy haciendo el programa de un PIC16f84A para hacer la conversión de 'Binario a Decimal' en el MPLAB (adjunto el diagrama) y en seguida mi programación. Explico al final.

;*********************************** Practica_7.asm ***********************************
;
;Decodificador.
;
;ZONA DE DATOS*************************************************************************

__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC ;Configuracion del grabador
List P=16F84A ;Procesador
INCLUDE <P16F84A.INC> ;Definicion de los operandos utilizados.

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

ORG 0 ;Origen en la direccion 0 de memoria de programa

Inicio
bsf STATUS,RP0 ;Pone a 1 el bit del STATUS. Acceso a Banco 1.
clrf TRISB ;Las lineas del puerto B se configuran como salidas.
movlw b'11111111' ;(Sin comentarios)
movwf TRISA ;Lineas del puerto A como entradas.
bcf STATUS,RP0 ;Pone a 0 el bit de STATUS. Acceso al Banco 0.

Principal
btfsc PORTA,b'11111111'
goto NUM0
btfsc PORTA,b'11111110'
goto NUM1
btfsc PORTA,b'11111101'
goto NUM2
btfsc PORTA,b'11111100'
goto NUM3
btfsc PORTA,b'11111011'
goto NUM4
btfsc PORTA,b'11111010'
goto NUM5
btfsc PORTA,b'11111001'
goto NUM6
btfsc PORTA,b'11111000'
goto NUM7
btfsc PORTA,b'11110111'
goto NUM8
btfsc PORTA,b'11110110'
goto NUM9

NUM0
clrw ;Limpia el registro W.
movlw b'00111111' ;Adhiere el alfanumero "0" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM1
clrw ;Limpia el registro W.
movlw b'00000110' ;Adhiere el alfanumero "1" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM2
clrw ;Limpia el registro W.
movlw b'01011011' ;Adhiere el alfanumero "2" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM3
clrw ;Limpia el registro W.
movlw b'01001111' ;Adhiere el alfanumero "3" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM4
clrw ;Limpia el registro W.
movlw b'01100110' ;Adhiere el alfanumero "4" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM5
clrw ;Limpia el registro W.
movlw b'01101101' ;Adhiere el alfanumero "5" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM6
clrw ;Limpia el registro W.
movlw b'01111101' ;Adhiere el alfanumero "6" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM7
clrw ;Limpia el registro W.
movlw b'01000111' ;Adhiere el alfanumero "7" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM8
clrw ;Limpia el registro W.
movlw b'11111111' ;Adhiere el alfanumero "8" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.
NUM9
clrw ;Limpia el registro W.
movlw b'01100111' ;Adhiere el alfanumero "9" al registro W.
movwf PORTB ;Mueve el dato del registro W al puerto B, salida.
goto Principal ;Bucle.

END ;Fin del programa.


En la etiqueta 'Principal' lo que hace es que meto en el dip-sw los bits... asi se los pongo:

Dip-SW Display
11111 = 0
11110 = 1
11100 = 2
11000 = 3
10000 = 4
00000 = 5

Pueden darse cuenta que no los marca como código 'binario' si no que secuencial ese es mi error, alguien podra decirme mi error o como hacer que las entradas del Puerto A 'PORTA' distinga el código binario.
Gracias.
 

Adjuntos

  • ISIS.png
    ISIS.png
    74 KB · Visitas: 68
Atrás
Arriba