Bueno...
1) No sos el hombre con más fortuna del planeta*;
2) El error es ajeno a la paginación;
El error:
El PIN RB4 del PIC 16F648A puede ser configurado para funcionar como PGM. Está asociado a la función de Low Voltage Programming(LVP). Si esta función está activa, el pin RB4 se utiliza como ENTRADA(por eso no variaba su estado).
¿Solución?
Indicarle al programa grabador(ICPROG en tu caso) que NO vamos a usar la función LVP.
Te paso el programa asm para que lo ensambles y pruebes.
El mensaje 306 se suprime como cualquier otro, con la instruccion ERRORLEVEL -numero
LIST P=16F648a, F=INHX8M
include <P16F648a.inc>
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF & _BODEN_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT & _LVP_OFF
ERRORLEVEL -302 , -305 , -306
RADIX HEX
; *******************************************
; * DECLARACION DE VARIABLES *
; *******************************************
CBLOCK 0x20
AUXA, AUXB, AUXC
ENDC
; *******************************************
; * COMIENZO *
; *******************************************
ORG 0x00
GOTO INICIO
INICIO NOP
BANKSEL PORTA
CLRF PORTA
MOVLW 0x07
MOVWF CMCON
CLRF PORTB
BANKSEL TRISA
MOVLW 0xFF
MOVWF TRISA ;config. PORTA con *11111111*
MOVLW 0x00
MOVWF TRISB ;config. PORTB con *00000000*
MOVLW 0x07
MOVWF OPTION_REG
BANKSEL PORTA
CLRF AUXA
CLRF AUXB
CLRF AUXC
; *************************************
; * INICIA RUTINA *
; *************************************
MAIN NOP
BSF PORTB , 04
PAGESEL DEL2M
CALL DEL2M
BCF PORTB , 04
PAGESEL DEL1M
CALL DEL1M
GOTO MAIN
; *******************************************
; * DEMORA 100 ms *
; *******************************************
DEL1M MOVLW 0x04 ;d'4'
MOVWF AUXC
DE10M MOVLW 0x0A ;d'10'
MOVWF AUXB
DE20M MOVLW 0xFA ;d'250'
MOVWF AUXA
DE22M NOP ;aprox. = (10 * 1us) * 250 = 2,5 ms
GOTO $+1
GOTO $+1
GOTO $+1
DECFSZ AUXA , F ;son 2 ciclos en DECFSZ
GOTO DE22M
DECFSZ AUXB , F
GOTO DE20M ;hasta aca demora = 2,5 ms * 10= 25 ms
DECFSZ AUXC , F
GOTO DE10M
RETURN ;total demora 25 ms * 4 = 100 ms
ORG 0x900
; *******************************************
; * DEMORA 100 ms *
; *******************************************
DEL2M MOVLW 0x04 ;d'4'
MOVWF AUXC
DE12M MOVLW 0x0A ;d'10'
MOVWF AUXB
DE222M MOVLW 0xFA ;d'250'
MOVWF AUXA
DE222 NOP ;aprox. = (10 * 1us) * 250 = 2,5 ms
GOTO $+1
GOTO $+1
GOTO $+1
DECFSZ AUXA , F ;son 2 ciclos en DECFSZ
GOTO DE222
DECFSZ AUXB , F
GOTO DE222M ;hasta aca demora = 2,5 ms * 10= 25 ms
DECFSZ AUXC , F
GOTO DE12M
RETURN ;total demora 25 ms * 4 = 100 ms
; ******************************************
; * FIN *
; ******************************************
END
*) Si hubieses elegido cualquier otro pin I/O el programa te hubiese funcionado(siempre y cuando el WDT estuviese deshabilitado).
Saludos y a desarrollar la paciencia!