Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

19/08/2016 #1


Desbordamiento de Pila en Proteus.
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
19/08/2016 #2
Moderador

Avatar de D@rkbytes

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:
Código 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    
Siir a "PulsadorLibre1"
    
btfss    PORTA,1            Nocomprobar si RA1 está en 0
    call    PulsadorLibre2    
Siir a "PulsadorLibre2"
    
goto    programa        Noregresar la rutina principal.

PulsadorLibre1
    bsf        PORTB
,0
    
return

PulsadorLibre2
    bsf        PORTB
,1
    
return

    
end 
19/08/2016 #3


Muchisimas Gracias. Un error de mi parte poner call en vez de goto
Otra vez Gracias.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.