Hola, he decidido migrar al 16F628A y en el fututo al 16F876A. He hecho un programa más sencillo consta de cuatro leds conectados a RB4…RB7, se prenden de acuerdo con el pulsador enviado por la parte transmisora, y un quinto led que va a RB0 el cual prende tan pronto se inicia el PIC. Lo probé con el 16F84A y funciono, mientras con el 16F628A no, tan solo prende el quinto led (RB0), parece que no lee el puerto A. Hice los siguientes cambios: Fuses, reloj interno y deshabilitar los comparadores del puertoA.
;Este programa se utiliza para recibir la señal de un control remoto via RF
;para mover un carro => ADELANTE => ATRAS => DERECHA => IZQUIERDA Y PARAR
;**********************************************************
;** CONFIGURACION DEL DISPOSITIVO ***
;*********************************************************
LIST P=16F628A
INCLUDE <P16F628A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_ON
;**********************************************************
;** ASIGNAMOS LAS VARIABLES DE LOS REGISTROS DE RAM ***
;**********************************************************
cblock 0x21
PORTA_T
endc
;**********************************************************
;** ESCRITURA DEL PROGRAMA DEL PIC ***
;**********************************************************
Org 0x0000
GOTO INICIO
;**********************************************************
;** CONFIGURAMOS PUERTOS DEL PIC ***
;**********************************************************
INICIO
CLRF PORTA
MOVLW 0x7 ; Configuro Comparador Analogico
MOVWF CMCON ; V1in-=GND, V1in+=GND, C1out=Off| V2in-=GND, V2in+=GND, C2out=Off
BCF STATUS,RP1
BSF STATUS,RP0 ;SELECCIONAMOS EL BANCO 1
CLRF TRISB ;PORTB como salida
MOVLW B'00111111'
MOVWF TRISA ;PORTA como entrada
BCF STATUS,RP0 ;SELECCIONAMOS EL BANCO 0
CLRF PORTA ;PuertoA a cero
CLRF PORTB ;PuertoB a cero
CLRF PORTA_T
MOVLW b'00000001'
MOVWF PORTB
;**********************************************************
;** EMPEZAMOS CON EL PROGRAMA ***
;**********************************************************
LEER_RF
MOVF PORTA,W ;Si PORTA es diferente a PORTA_T hay cambio
XORWF PORTA_T,W ;Si PORTA es igual a PORTA_T no hay cambio
BTFSC STATUS,Z ;o es `posible un rebote
GOTO LEER_RF
MOVF PORTA,W
XORLW 0x15 ; b'00010101' d'021' ADELANTE
BTFSC STATUS,Z
CALL ADELANTE
MOVF PORTA,W
XORLW 0x1A ; b'00011010' d'026' ATRAS
BTFSC STATUS,Z
CALL ATRAS
MOVF PORTA,W
XORLW 0x19 ; b'00011001' d'025' IZQUIERDA
BTFSC STATUS,Z
CALL IZQUIERDA
MOVF PORTA,W
XORLW 0x16 ; b'00010110' d'022' DERECHA
BTFSC STATUS,Z
CALL DERECHA
MOVF PORTA,W
XORLW 0x13 ; b'00010011' d'019' PARAR
BTFSC STATUS,Z
CALL PARAR
GOTO LEER_RF
ADELANTE
MOVF PORTA,W
MOVWF PORTA_T
CALL RESSET
MOVLW b'10100000'
XORWF PORTB
RETURN
ATRAS
MOVF PORTA,W
MOVWF PORTA_T
CALL RESSET
MOVLW b'01010000'
XORWF PORTB
RETURN
DERECHA
MOVF PORTA,W
MOVWF PORTA_T
CALL RESSET
MOVLW b'01100000'
XORWF PORTB
RETURN
IZQUIERDA
MOVF PORTA,W
MOVWF PORTA_T
CALL RESSET
MOVLW b'10010000'
XORWF PORTB
RETURN
PARAR
MOVF PORTA,W
MOVWF PORTA_T
CALL RESSET
MOVLW b'00000000'
XORWF PORTB
RETURN
RESSET
CLRF PORTA ;Puerto A a cero
CLRF PORTB ;Puerto B a cero
RETURN
END