TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: BELINSKI22 en 22 de Octubre de 2014, 03:59:18
-
Hola! amigos les cuento que soy nuevo, tengo apenas 17 años y mi hermano me ha introducido en este fascinante tema, sin embargo buscando proyectos he tenido un problema seguido al momento de simular en proteus. Se repite una y otra vez "stack overflow executing call instruction"
A continuación yo necesito activar RA0 para que un led se active en RB6 con un parpadeo de 0.5 segundos y RA1 se active para que el led en RB7 se active con un retardo de 1 segundo.
les dejo lo que he logrado programar, sin problemas al compilar en mplab. (los retardos los he conseguido en un website que me ha generado los códigos)
INCLUDE <P16F84A.INC>
cblock
d1
d2
d3
endc
ORG 0X00
BSF STATUS,5
BSF TRISA,0 ;RAO ENTRADA
BSF TRISA,1 ;RA1 ENTRADA
BCF TRISB,6 ;RB6 SALIDA
BCF TRISB,7 ;RB7 SALIDA
BCF STATUS,5
PARTIDA
BTFSS PORTA,0 ; PREGUNTO SI LA ENTRADA RA0 ESTA EN UNO
GOTO PARTIDAI
GOTO PRENDE ; PRENDE EL LED
PARTIDAI
BTFSS PORTA,1 ; RA1 1?
GOTO PARTIDA
GOTO PRENDEI ; SI ENTONCES SE PRENDE
PRENDE;PARPADERO 0,5 SEG
BSF PORTB,6
CALL RETARDOI
BCF PORTB,6
CALL RETARDOI
GOTO PARTIDA
PRENDEI; 1 SEG
BSF PORTB,7
CALL RETARDOII
BCF PORTB,7
CALL RETARDOII
GOTO PARTIDAI
RETARDOI
;499994 cycles
movlw 0x03
movwf d1
movlw 0x18
movwf d2
movlw 0x02
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
;6 cycles
goto $+1
goto $+1
goto $+1
RETURN
RETARDOII
;999997 cycles
movlw 0x08
movwf d1
movlw 0x2F
movwf d2
movlw 0x03
movwf d3
Delayy_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delayy_0
;3 cycles
goto $+1
nop
RETURN
END
Bueno amigos, según mi lógica no puedo identificar el error, para que proteus rechace la programación, espero sus comentarios y que me puedan orientar en este grandioso mundo. Que esten bien Saludos!
-
Mira a ver si el fallo esta aqui:
cblock
d1
d2
d3
endc
Ponlo asi:
cblock 0X20
d1
d2
d3
endc
Porque si no creo que asume que d1 va en 0X00 y siguientes y estas escribiendo en registros propios del PIC.
-
Muchas gracias!!!...ahora en proteus funciona sin ningún problema ((:-))
-
Me alegro :-/ :-/
¿Te das cuenta de cual es el problema? lo digo para que no te pase mas veces.
-
Claro, es por donde yo di el comienzo en 0x00, d1 asume ese inicio y comienza a sobre escribir como me lo explicaron, era tan evidente, pero tan dificil de ver antes de tener la respuesta.