Autor Tema: Presentacion y consulta  (Leído 3056 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado sharkkan

  • PIC10
  • *
  • Mensajes: 2
Presentacion y consulta
« en: 19 de Abril de 2010, 12:43:18 »
Muy buenos días, mi nombre es Daniel y son nuevo en este foro y en electrónica.

Estoy aprendiendo a programar PIC y para esto utilizo el MPLab y estoy probando sobre el p16f84a, mi consulta es sobre un error y no he encontrado la respuesta en otro foro de este sitio.

En MPLab, cuando realizo la simulación todo parece funcionar perfecto pero, cuando quiero probar en otro simulador (PIC simulator IDE) al ejecutar el código me da el siguiente error.

Hardware stack underflow

Aun no he construido ningún circuito físico para probar el micro ya que me faltan comprar algunas cosas y no se si aun como detectar errores en el.

Si fuera necesario ver el código (En asembler) lo pego debajo.

Un saludo y gracias por leer este post.

;---------------------------
; V.1.0
; Prueba de movimiento de LED por el puerto B (8 LED, max.)
; Dependiendo la combinación de pulsadores en el puerto A (5 Switch, max.)
;
; Daniel G. Samborski
;------ Encabezado --------------
   list   p=16f84   ; indico el controlador que voy a utilizar
   radix   hex
   include   p16f84a.inc
   
;----- Configuro los puertos -------------
   org   0x00
   goto   inicio
   org   0x05
   
inicio   bsf   STATUS,RP0
   movlw   0x00   ; 0000 0000 Todos los puertos como salida
   movwf   TRISB   ; Prepara el puerto B como salida.
   movlw   b'00011'   ; pone 00001 4 como salida y 1 como entrada
   movwf   TRISA   ; Prepara el PuertoA para recibir datos
         ; desde el bit 0 (El primero de los 5)
   bcf   STATUS,RP0
   btfsc   PORTA,0   ; Si el bit 0 de PORTA no es 0
   call   on_led   ; encenderá el led
   btfsc   PORTA,0   ; Si el bit 0 de PORTA no es 0
   goto   decide   ; Decidirá que hacer
   goto   off_led   ; Si el bit 0 de PORT a es 1, apaga el LED
   goto   inicio   ; Regresa a inicio
decide   ;---- Comienza a ver donde saltar ----------------------------------
   movf   PORTA,W   ; Se copia a F, el valor W de PORTA
   addwf   PCL,F   ; Se suma a PCL el valor de F
   nop      ; NOP quiere decir que no hará nada.
   nop      ; Esto se pone para que salte a estas líneas
   goto   der   ; Si el bit 1 de PORTA es 0, irá a la derecha
   goto   izq   ; Si el bit 1 de PORTA es 1, irá a la izquierda
   
;------ Apaga los LEDs ------------
off_led
   movlw   0x00   ; Deja en 0 todos los bit del Puerto B
   movwf   PORTB   ; asignándoselos...
   return
;------ Enciendo el LED 0 ------------
on_led
   bsf   PORTB,0   ; Enciende el primer LED
   return

;----- Comienza secuencia de barrido a la derecha----------
der
   btfsc   PORTA,1   ; Si el bit 1 de PORTA no es 0
   goto   izq   ; girar a la izquierda
   rrf   PORTB,1   ; sino, girar a la derecha
   btfss   PORTA,0   ; Si el bit 0 de PORTA no es 1
   goto   inicio   ; re iniciar las verificaciones
   btfss   PORTB,0   ; sino, si el bit 0 de PORTB no es 1
   goto   der   ; seguir el giro a la derecha
   bcf   PORTB,7   ; sino, limpiar el bit 7 de PORTB
   goto   der   ; y seguir el giro a la derecha
;----- Comienza secuencia de barrido a la izquierda----------
izq
   btfss   PORTA,0   ; Si el bit 0 de PORTA no es 1
   goto   inicio   ; re iniciar las verificaciones
   btfss   PORTA,1   ; Si el bit 1 de PORTA no es 1
   goto   der   ; comenzar a girar a la derecha
   rlf   PORTB,1   ; sino, girar a la izquierda
   btfss   PORTA,1   ; Si el bit 1 de PORTA no es 1
   goto   inicio   ; re iniciar las verificaciones
   btfss   PORTB,7   ; sino, si el bit 7 de PORTB no es 1
   goto   izq   ; seguir el giro a la izquierda
   bcf   PORTB,0   ; sino, limpiar el bit 0 de PORTB
   goto   izq   ; y seguir con el giro a la izquierda
;---------------------------------------------
   end
;-------------------------------------------


Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Presentacion y consulta
« Respuesta #1 en: 19 de Abril de 2010, 15:56:29 »
Hola sharkkan y bienvenido al foro, el stack underflow se produce cuando has tratado de recuperar mas valores de los que has cargado en la pila, en tu caso se debe a que tienes una linea que dice goto    off_led en off_led tu tienes un return , este return es el que produce el underflow del stack, ya que no fuiste a off_led usando call.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Presentacion y consulta
« Respuesta #2 en: 19 de Abril de 2010, 16:01:06 »
Para llamar off-led y utilizar el return debes de usar "call" en vez de goto
Todos los días se aprende algo nuevo.

Desconectado sharkkan

  • PIC10
  • *
  • Mensajes: 2
Re: Presentacion y consulta
« Respuesta #3 en: 19 de Abril de 2010, 22:31:30 »
Hola y gracias por responder.

En verdad fue un error bastante tonto, pero resulto bastante instructivo.

De nuevo, gracias por tomarse la molestia de responder.


 

anything