tengo problemas con este código funciona perfectamente cuando o corro pero a la hora de asignar la rutina de retardo crea problema que a la hora de simularlo coerre y llega un punto en el que ya no avanza
********************************************************************
list p=16F887
#include <p16F887.inc>
__CONFIG _CONFIG1, _DEBUG_OFF &_LVP_OFF & _FCMEN_OFF &_IESO_OFF &_BOR_OFF &_CPD_OFF &_CP_OFF &_MCLRE_ON &_PWRTE_ON &_WDT_OFF &_INTOSCIO
__CONFIG _CONFIG2, _WRT_OFF &_BOR21V
;CONFIGURACION INICIAL
CBLOCK 0X20
CONTADOR1
CONTADOR2
TEMP1
TEMP2
ENDC
;CODIGO DE EL PROGRAMA ESTABLECIDO A PRIMER PRACTICA1
ORG 0x000
GOTO INICIO
ORG 0x005
INICIO
CALL CONFIG_INI
CLRF PORTD
MOVLW B'00000001'
MOVWF PORTD
REGRESO
VUELTA1
BSF STATUS,C
RLF PORTD
BTFSS PORTD,7
GOTO VUELTA1 ;
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA2
BCF STATUS,C
RLF PORTD
BTFSC PORTD,6
GOTO VUELTA2
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA3
BSF STATUS,C
RRF PORTD
BTFSS PORTD,1
GOTO VUELTA3
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA4
BCF STATUS,C
RRF PORTD
BTFSC PORTD,1
GOTO VUELTA4
CALL RETARDO
;CALL TEMPORIZADOR
GOTO REGRESO
;TEMPORIZADOR
; CLRF CONTADOR2
;CICLO1
; CLRF CONTADOR1
;CICLO2
; DECFSZ CONTADOR2
;GOTO CICLO2
;DECFSZ CONTADOR1
;GOTO CICLO1
RETARDO
MOVLW .250
MOVWF TEMP2
CICLO2 DECFSZ TEMP2,F
GOTO SALTO1
GOTO FINCICLO2
SALTO1
MOVLW .250
MOVWF TEMP1
CICLO1 NOP
DECFSZ TEMP1,F
GOTO CICLO1
GOTO CICLO2
FINCICLO2
RETURN
CONFIG_INI
BCF STATUS,RP0 ;PONE A CERO EL RP0 DEL STATUS
BCF STATUS,RP1 ;PONE A CERO EL RP1 DEL STATUS Y CON LA ANTERIOR LINEA Y SE SELECCIONA EL BANCO_0
CLRF PORTA ;LIMPIA EL PORTA
CLRF PORTB ;LIMPIA EL PROTB
CLRF PORTC ;LIMPIA EL PORTC
CLRF PORTD ;LIMPIA EL PROTD
CLRF PORTE ;LIMPIA EL PORTE
BSF STATUS,RP0 ;PONE A 1 EL BIT RP0 CON LO QUE AHORA SE SELECCIONA
MOVLW 0X07 ;CARGUE EL VALOR B'01110000' (0X70) EN EL REGISTRO W PARA CONFIGURAR
;A 8MHZ EN EL OSCCON EL CUAL ES PARA CONFIGURAR LA FRECUENCIA DEL OSCILADOR
;INTERNO DEL MICROCRONTROLADOR
MOVWF OSCCON ;CARGA LO QUE HAY EN W A OSCCON OSEA QUE PASA EL VALOR DE W HACIA OS
BSF STATUS,RP1 ;PONE A A1 EL BIT RP1 DEL STATUS PARA SELECCIONA EL BANCO3, POR QUE ES
;EN EL BANCO1 (B'01') Y SE NECESITA TRABAJAR AHORA EN EL BANCO3 (B'
MOVLW B'00000000'
MOVWF ANSEL ;CON ESTAS DOS ULTIMAS LINEAS DE LIMPIAR ANSEL CONFIGURA UNA PARTE DE
;Y SALIDAS DIGITALES
MOVLW B'00000000'
MOVWF ANSELH ;CON ESTAS DOS ULTIMAS LINEAS DE LIMPIAR ANSELH CONFIGURA LA OTRA
;ENTRADAS Y SALIDAS DIGITALES
BCF STATUS,RP1 ;PONE A CERO EL BIT RP1 DEL STATUS PARA SELECCIONA EL BANCO 1
MOVLW B'11111111' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTA COMO ENTRADAS
MOVWF TRISA
MOVLW B'11111111' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTB COMO ENTRADAS
MOVWF TRISB
MOVLW B'00000000' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTC COMO SALIDAS
MOVWF TRISC
MOVLW B'00000000' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTD COMO SALIDAS
MOVWF TRISD
BCF STATUS,RP0
RETURN
END
**********************************************************
********************************************************************
list p=16F887
#include <p16F887.inc>
__CONFIG _CONFIG1, _DEBUG_OFF &_LVP_OFF & _FCMEN_OFF &_IESO_OFF &_BOR_OFF &_CPD_OFF &_CP_OFF &_MCLRE_ON &_PWRTE_ON &_WDT_OFF &_INTOSCIO
__CONFIG _CONFIG2, _WRT_OFF &_BOR21V
;CONFIGURACION INICIAL
CBLOCK 0X20
CONTADOR1
CONTADOR2
TEMP1
TEMP2
ENDC
;CODIGO DE EL PROGRAMA ESTABLECIDO A PRIMER PRACTICA1
ORG 0x000
GOTO INICIO
ORG 0x005
INICIO
CALL CONFIG_INI
CLRF PORTD
MOVLW B'00000001'
MOVWF PORTD
REGRESO
VUELTA1
BSF STATUS,C
RLF PORTD
BTFSS PORTD,7
GOTO VUELTA1 ;
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA2
BCF STATUS,C
RLF PORTD
BTFSC PORTD,6
GOTO VUELTA2
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA3
BSF STATUS,C
RRF PORTD
BTFSS PORTD,1
GOTO VUELTA3
;CALL TEMPORIZADOR
CALL RETARDO
VUELTA4
BCF STATUS,C
RRF PORTD
BTFSC PORTD,1
GOTO VUELTA4
CALL RETARDO
;CALL TEMPORIZADOR
GOTO REGRESO
;TEMPORIZADOR
; CLRF CONTADOR2
;CICLO1
; CLRF CONTADOR1
;CICLO2
; DECFSZ CONTADOR2
;GOTO CICLO2
;DECFSZ CONTADOR1
;GOTO CICLO1
RETARDO
MOVLW .250
MOVWF TEMP2
CICLO2 DECFSZ TEMP2,F
GOTO SALTO1
GOTO FINCICLO2
SALTO1
MOVLW .250
MOVWF TEMP1
CICLO1 NOP
DECFSZ TEMP1,F
GOTO CICLO1
GOTO CICLO2
FINCICLO2
RETURN
CONFIG_INI
BCF STATUS,RP0 ;PONE A CERO EL RP0 DEL STATUS
BCF STATUS,RP1 ;PONE A CERO EL RP1 DEL STATUS Y CON LA ANTERIOR LINEA Y SE SELECCIONA EL BANCO_0
CLRF PORTA ;LIMPIA EL PORTA
CLRF PORTB ;LIMPIA EL PROTB
CLRF PORTC ;LIMPIA EL PORTC
CLRF PORTD ;LIMPIA EL PROTD
CLRF PORTE ;LIMPIA EL PORTE
BSF STATUS,RP0 ;PONE A 1 EL BIT RP0 CON LO QUE AHORA SE SELECCIONA
MOVLW 0X07 ;CARGUE EL VALOR B'01110000' (0X70) EN EL REGISTRO W PARA CONFIGURAR
;A 8MHZ EN EL OSCCON EL CUAL ES PARA CONFIGURAR LA FRECUENCIA DEL OSCILADOR
;INTERNO DEL MICROCRONTROLADOR
MOVWF OSCCON ;CARGA LO QUE HAY EN W A OSCCON OSEA QUE PASA EL VALOR DE W HACIA OS
BSF STATUS,RP1 ;PONE A A1 EL BIT RP1 DEL STATUS PARA SELECCIONA EL BANCO3, POR QUE ES
;EN EL BANCO1 (B'01') Y SE NECESITA TRABAJAR AHORA EN EL BANCO3 (B'
MOVLW B'00000000'
MOVWF ANSEL ;CON ESTAS DOS ULTIMAS LINEAS DE LIMPIAR ANSEL CONFIGURA UNA PARTE DE
;Y SALIDAS DIGITALES
MOVLW B'00000000'
MOVWF ANSELH ;CON ESTAS DOS ULTIMAS LINEAS DE LIMPIAR ANSELH CONFIGURA LA OTRA
;ENTRADAS Y SALIDAS DIGITALES
BCF STATUS,RP1 ;PONE A CERO EL BIT RP1 DEL STATUS PARA SELECCIONA EL BANCO 1
MOVLW B'11111111' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTA COMO ENTRADAS
MOVWF TRISA
MOVLW B'11111111' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTB COMO ENTRADAS
MOVWF TRISB
MOVLW B'00000000' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTC COMO SALIDAS
MOVWF TRISC
MOVLW B'00000000' ;CON ESTA LINEA Y LA SIGUIENTE CONFIGURA EL PORTD COMO SALIDAS
MOVWF TRISD
BCF STATUS,RP0
RETURN
END
**********************************************************