TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: bigwill45 en 18 de Febrero de 2008, 17:40:44
-
hola lista
me sucede lo siguiente
estoy trabajando con un 16f84a sobre proteus , comunicacion serie con max232 cuando mando a leer datos provenientes del computador el pic se queda esperando a que lleguen los datos
rs232_EsperaBitStart
btfsc rs232_in ; lee la entrada y espera que sea 0
goto rs232_EsperaBitStart
cdo simulo corre bien ,pero en el simulation log me aparece el siguiente mensaje
(PIC 16 Core) PC=0x0001 Stack overflow executing CAll instruccion
el mensaje no sale como error ,sino como alerta, lo que me preocupa es , si cdo se grabe el pic esto pudiera traer algun problema
Saludos
Willy
:(
-
el mensaje no puede ser mas claro, te esta diciendo que superastes la pila del pic, este tiene 8 niveles, en alguna parte debes estar llamando rutinas sucesivamente sin salir de esos call, entonces el pic generara un reset por desbordamiento de la pila. Deberias ver en que parte del programa esta sucediendo eso, ya que eso genera un funcionamiento erroneo del mismo.
-
muchas gracias por responder
lo sorprendente es que el proteus lo sigue simulando y el mensaje lo da como una alerta , no con icono de error.
tengo en el puerto b rb6 y rb7 con optoacopladores y en el puerto a ra3 y ra4 para la comunicacion con un max232
sucede que desde el computador pretendo enviar una señal ( un cero) pa activar rb6 y un (1) pa activar rb7 entonces tengo un call y con un btsf dejo al pic esperando el bit de star para leer el dato , no se si sera mejor esto o usar la interrupcion rb0 , claro de usarla, tendria que usar esa misma linea para el mx232?
me aclaran por favor ?
gracias
willy
-
muchas gracias por responder
lo sorprendente es que el proteus lo sigue simulando y el mensaje lo da como una alerta , no con icono de error.
No. No es sorprendente, porque no es un error!. Podés adrede overflodear el STACK para forzar un reset. A veces se hace de manera consciente. Especialmente en las familias de PICs viejas en las que no es posible realizar un reset mediante una instrucción específica destinada a ello.
tengo en el puerto b rb6 y rb7 con optoacopladores y en el puerto a ra3 y ra4 para la comunicacion con un max232
sucede que desde el computador pretendo enviar una señal ( un cero) pa activar rb6 y un (1) pa activar rb7 entonces tengo un call y con un btsf dejo al pic esperando el bit de star para leer el dato , no se si sera mejor esto o usar la interrupcion rb0 , claro de usarla, tendria que usar esa misma linea para el mx232?
me aclaran por favor ?
gracias
willy
¿En la mísma línea? :S
Aliméntanos. Danos código! y te podremos ayudar más fácilmente.
Saludos
-
ahi te mando el proyecto, esta en proteus.
lo que quiero lograr es que al mandar un valor x, activar rb6 y cdo se mando otro valor activar rb7
desde el pc al pic
salu2
willy
-
La instrucción END debe ir al final de todo el código. El MPASM no ensambla todo lo que haya después del END. He allí tu problema.
Saludos.
-
es decir, que como esta todo , lo probaste y listo ? solo el end?
de verdad ?
lo pruebo y ahora te comento
muchas gracias colega
salu2
willy
-
No. Pero ese era principalmente tu problema. Cuando pases el END debajo, va a ensamblar todo el codigo y vas a tener que arreglar un par de errores que tenìas.
Saludos ;)
-
sii ya estuve mirando algunas cosas que tenia, algunas variables mal escritas y demas
sigo trabajando y te cuento como quedo
muchisimas gracias
le cuento los resultados finales
-
yo por aca de nuevo, ya esta funcionando bien , adjunto el proyecto para que lo veas funcionado
tengo una duda a la entrada del max232 puse un virtual terminal y otro a la salida del max232 para ver que es lo que le esta llegando al pic, y bueno si en el v. terminal , pongo un 1 llega un f y cosas asi, por fis miralo y denme una opinion sobre que pudiera ser
salu2
willy
-
BrunoF, sabia de que el overflowear la pila producia un reset, pero tengo una duda tonta, este reset que se produce, es como hacer un reset con el MCLR, y todas las variables se ponen a 0,???, si es asi me caeria a pelos para una aplicacion que estoy haciendo y necesito hacer un reset por software
-
Jaja. Mirá, estoy 99% seguro de que no. Todo debería quedar tal cual estaba antes del over/underflow.
Saludos!
-
es decir que el PC apuntaria a la posicion 0 de la memoria de programa, es decir al inicio de todo, entonces la solucion seria que al comenzar mi programa haga clrf varibles, asi me aseguro de que comienzen con 0, estoy en lo correcto?
-
Sip. Hace un algoritmo que limpie toda la RAM. No es dificil utilizando el Indirect File Addressing.
Saludos
-
ok, muchas gracias. Pondre en practica lo que acabo de aprender :D
-
entonces, que me dicen de lo referente al virtual terminal ?
-
Pos yo no se usar el virtual terminal en proteus! asi que...