__CONFIG h'3F50'
No es recomendable que definas la configuración asi. Será dificil para ti darte cuenta de la configuración utilizada y difícil para nosotros también poder comprenderla.
En cambio, utilizá por ejemplo:
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
Que es lo mísmo pero más legible.
reg1 EQU 2CH ;variables que usaremos pongo
reg2 EQU 2DH ; desde 2C porque en 1C no lo admite
; supongo que es porque esta usada.
Mira en el datasheet el mapa de memoria del microcontrolador a utilizar. Fijate que está dividido en dos zonas: SFR GPR. Todos los registros que quieras utilizar para realizar calculos en tu programa deben estar en una direccion GPR válida.
La primer direccion GPR válida para este uC es la 20H.
BCF STATUS,RP1 ;selecciona banco1
BSF STATUS,RP0 ;selecciona banco 0
ENTRE AMBAS configuran al PIC en el banco1.
El BCF STATUS,RP1 NO ASEGURA QUE EL PIC ESTE EN EL BANCO 1. SIMPLEMENTE ASEGURA QUE NO ESTE NI EN EL BANCO 2 NI 3(no estan implementados en este modelo de PIC)
Ahora si seteamos el banco 1 con la BSF STATUS,RP0
MOVLW 0X1F ;valor usado para inicializar
;direccion de datos
MOVWF TRISA ;Pone RA<4:0> como entradas
;TRISA<5> siempre leera como 1
;TRISA<7:6> depende del modo de oscilador
;------- Empieza programa -----
INICIO
BSF PORTB,0 ; pone a 1 RB0
CALL pausa ;
BCF PORTB,0 ; pone a 0 RB0
CALL pausa ;
GOTO INICIO ; va a inicio
Te faltó configurar el PUERTOB como salidas/entradas y volver al banco 0 del PIC. Estabas en el banco1 y no volves al banco0
Simulalo en el MPLAB y en la ventana watch agrega el registro TRISB. vas a ver que el BSF PORTB,0 ; pone a 1 RB0 pone a 1 el bit de TRISB y el BCF PORTB,0 ; pone a 0 RB0 lo pone a cero.
Estas trabajando en el banco incorrecto. Lo unico que esta haciendo el programa es configurar como entrada y salida constantemente el pin0 del PUERTOB.
Acá va el programa corregido:
List P=PIC16F628
#include <p16f628.inc> ;inclusion de fichero de etiquetas
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT
errorlevel -302 ; Eliminar banco atencion
reg1 EQU 2CH ;variables que usaremos pongo
reg2 EQU 2DH ; desde 2C porque en 1C no lo admite
; supongo que es porque esta usada.
ORG 0x00 ; Empezamos a escribir el programa
CLRF PORTA ;inicializa porta para configurar
;salida datos latches
MOVLW 0X07 ;apaga los comparadores y
MOVWF CMCON ;habilita pines para funciones i/o
BCF STATUS,RP1
BSF STATUS,RP0 ;selecciona banco1
MOVLW 0X1F ;valor usado para inicializar
;direccion de datos
MOVWF TRISA ;Pone RA<4:0> como entradas
;TRISA<5> siempre leera como 1
;TRISA<7:6> depende del modo de oscilador
CLRF TRISB ;PORTB todo como salida
BCF STATUS,RP0 ;banco0
;------- Empieza programa -----
INICIO
BSF PORTB,0 ; pone a 1 RB0
CALL pausa ;
BCF PORTB,0 ; pone a 0 RB0
CALL pausa ;
GOTO INICIO ; va a inicio
pausa
MOVLW 010H ;Carga W con el valor 10H (16 en decimal)
MOVWF reg1 ;Mueve el contenido del W a reg1
ak1 MOVLW 0FFH ;carga el acumulador con el valor FFH
MOVWF reg2 ;mueve el contenido del W a reg2
ak DECFSZ reg2,F ;decrementa reg2, guarda el resultado en f,
;y si es cero salta la siguiente instrucción
GOTO ak ;va a decrementar mientras reg2 no sea cero.
DECFSZ reg1,F ;decrementa reg1 cada vez que reg2 llega a cero
GOTO ak1 ;mientras reg1 no llegue a cero recarga reg2
RETURN ;retorna al programa principal
END ;FIN
Saludos.