Problemas con simulacion de pic

Hola que tal? Tengo un problema con una simulacion en Proteus. El circuito funciona, pero despues de uno segundos se "clava" y me da el siguiente problema: [PIC16 CORE] PC=0x001B. Stack underflow executing RETURN instruction.
Aca les dejo el programa: (El retardo es de 1seg)

;************************Mi Primer Programa*****************
;El Micro lee los datos del Puerto A y los refleja en el Puerto B
;mediante los LEDs
;***********************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
PROCESSOR 16F84A ;Definimos el micro que vamos a usar
#INCLUDE <P16F84A.INC> ;Se incluye el archivo de definiciones
CBLOCK 0x0C
PDel0
PDel1
PDel2
ENDC
ORG 0X00 ;Establece el origen del programa
;Configuracion de puertos
bsf STATUS, RP0 ;Accedo al banco 1 de la memoria
movlw .31 ;Le doy un valor al registro W para despues moverlo a otro
movwf TRISA ;Configura el Puerto A como entrada
clrf TRISB ;Pongo este registro a 0 para configurarlo como salida
bcf STATUS, RP0 ;Salgo del banco 1
;Programa principal
Inicio
movf PORTA,W ;Mueve el contenido del puerto A a W
movwf PORTB ;Mueve el contenido de W al puerto B
call DEMORA
movlw b'00010101'
subwf PORTA,W
movwf PORTB

DEMORA movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
goto Inicio
END ;Fin del codigo
 
Hola, el problema puede estar en que cuando llamas a la subrutina DEMORA con Call DEMORA, cuando retorna lo hace a la instruccion siguiente ( movlw b'00010101'), el programa sigue y se encuentra con la instruccion return, y no sabe a donde volver porque nadie la llamo.
Se entiende?
 
holaa tu problema esta en al final de la subrutina pusiste goto inicio , cuando debe de retornar en donde la llamo , quita el goto inicio que pusiste antes de END ; fin del codigo
y prueba ok

saludos ¡
 
Atrás
Arriba