Desbordamiento de Pila en Proteus.

#1
Hola, tengo una duda con el desboradmiento de pila. Estuve haciendo un codigo en asm, y a la hora de simularlo en proteus, salta muchos mensajes de stack underflow, y esto se da en el return de la subrutina PulsadorLibre1. Para comprobar si era culpa de Proteus, utilice el simulador de MPLAB y lo mismo se queda colgado en return de las subrutinas. Espero me puedan ayudar. Les dejo el codigo

Código:
INICIO		bcf		STATUS,RP0		;Banco 0
			clrf	        PORTB			;Limpio salidas
			clrf	        PORTC			
			bsf		STATUS,RP0		;Cambio al banco 1
			clrf	        TRISB			;Puerta B como salida
			movlw	b\'00000110\'		;Puerta A digital
			movwf	ADCON1
			movlw	b\'11111111\'		;Puerta A entrada
			movwf	TRISA

		        btfss	PORTA,0			;Pulsante subir esta pulsado?
			bsf	PORTB,0			;Si
			btfss	PORTA,1			;Pulsante Bajar esta pulsado?
			BSF	PORTB,1		;Si
			call	PulsadorLibre1
			call	PulsadorLibre2
			goto	Inicio

PulsadorLibre1	btfss	PORTA,0		;Boton esta en 1
			call	PulsadorLibre1	;No
			return					;Si
	
PulsadorLibre2	btfss	PORTA,1		;Boton esta en 2
			call	PulsadorLibre2	;No
			return
                        end
 
Última edición:
#2
Eso pasa porque estás ejecutando una llamada a la rutina dentro de si misma.
Para eso debes usar un goto y no otro call.

Prueba de la siguiente forma, si es que es ésto lo que quieres hacer:
PHP:
inicio
    bsf        STATUS,RP0        ; Banco 1
    movlw    b'00000110'        ; Conversores AD = Off
    movwf    ADCON1
    movlw    b'11111100'        ; RB0 y RB1 como salidas
    movwf    TRISB
    bcf        STATUS,RP0        ; Banco 0
    clrf    PORTB            ; Bits de salida del puerto B en 0

programa
    btfss    PORTA,0            ; Comprobar si RA0 está en 0
    call    PulsadorLibre1    ; Si, ir a "PulsadorLibre1"
    btfss    PORTA,1            ; No, comprobar si RA1 está en 0
    call    PulsadorLibre2    ; Si, ir a "PulsadorLibre2"
    goto    programa        ; No, regresar la rutina principal.

PulsadorLibre1
    bsf        PORTB,0
    return

PulsadorLibre2
    bsf        PORTB,1
    return

    end
 
Última edición:

Temas similares