Assembler, me paso de las 595 lineas y el pic no funciona

#1
Hola amigos, soy nuevo en el foro, espero que alguien pueda ayudarme con este misterio que me tiene un poco desanimado. Les cuento:

Estoy usando el pic 16F628A para controlar un lcd 16x1 por medio de 8 botones, hice el programa primero para un boton y funciona perfecto, repetí las rutinas y usando un segundo boton funciona de maravillas, pero al hacerlo para un tercer boton, me muestra 3 letras del mensaje y se reinicia el pic, despues de mucho pelear con el pic y el programa, me di cuenta que al ensamblarlo y pasarme de las 595 lineas me da problemas, quite algunas lineas de mas y logre mostrar 5 letras, no entiendo por que tengo ese limite de lineas para ensamblar.

Si alguien sabe de porque pasa esto le agradeceria mucho la ayuda.

adjunto el programa
 

Adjuntos

#2
Rene dijo:
Hola amigos, soy nuevo en el foro, espero que alguien pueda ayudarme con este misterio que me tiene un poco desanimado. Les cuento:

Estoy usando el pic 16F628A para controlar un lcd 16x1 por medio de 8 botones, hice el programa primero para un boton y funciona perfecto, repetí las rutinas y usando un segundo boton funciona de maravillas, pero al hacerlo para un tercer boton, me muestra 3 letras del mensaje y se reinicia el pic, despues de mucho pelear con el pic y el programa, me di cuenta que al ensamblarlo y pasarme de las 595 lineas me da problemas, quite algunas lineas de mas y logre mostrar 5 letras, no entiendo por que tengo ese limite de lineas para ensamblar.

Si alguien sabe de porque pasa esto le agradeceria mucho la ayuda.

adjunto el programa
Asumiendo que tu hardware esté bien y antes de tenerme que leer todo tu código te paso algún par de sugerencias.

1) Si se te reinicia el PIC, es probable que estés haciendo un 'return' cuando en realidad has llamado a la subrutina con un 'goto'.

Si el stack de calls se vacía , el Program Counter tomará el address 0x0000 con lo cual tu verás como que el pic se reinicia. En realidad no es que se reinicie sino que se va al address 0.


2) Como sabes eso de las 595 líneas? estas seguro? No tiene lógica.
Que compilador usas? version ? Entorno de programación? Lenguaje?
 
#3
podes tener problemas con saltos mayores a 256, algun goto a una etiqueta muy lejana, pero el compilador supongo que usas el MPLAB te lo tendria que informaciónrmar!!
 
#4
Bueno para esto pude ser varias cosas la mas probable es que tengas una vercion de mplab la cual no te permite programal el pic totalmente, la ota es que una tabla te alla quedado entre dos paginas de memoria ram asi que para esto usa un org para que te ubique en otra pagina ,
claro esta toca mirar cual es l error que te sale....
 
#5
Había una vez, un cuento que hablaba de paginación de memoria, y relataba las historias de Juan Registro y las peripecias de esté cuando sin darse cuenta, se pasaba de banco, con sus bloques de código.:D

Saludos
 
#6
pagesel (macro) también es muy útil en estos casos si usás el mpasm de microchip. Fijate en la ayuda que ahí esta más claro que cualquier cosa que yo pueda decir.
Saludos
 
#7
MaMu dijo:
Había una vez, un cuento que hablaba de paginación de memoria, y relataba las historias de Juan Registro y las peripecias de esté cuando sin darse cuenta, se pasaba de banco, con sus bloques de código.:D

Saludos
:LOL: , efectivamente por ahy van los tiros.
a colocado unas tablas por encima de la posicion 256.

Te sugiero que las tablas de datos las pongas al principio de tu programa, de forma que nunca llegen a la posicion 255.

Cuando las tablas supera esa posicion de memoria hay otra forma un poco mas compleja de utilizarlas.
 
#8
A mi me paso lo mismo, pero cambiando las tablas al principio del programa se soluciono muchas gracias pepechip y al resto, si alguien me puede explicar el tema de las paginas de la memoria se lo voy a agradecer, y tambien si puede alguien explicar por que lo de las tablas tambien, muchas gracias
 
#10
Saludos a todos
estoy trabajando con MPLAB y resulta que mi programa es demasiado largo ya ocupe la primera pagina de programa de las 4 que dispone el PIC.
mi programa esta codificado en ensamblador y utilizo muchas subrutinas y saltos algo parecido a programacion orientada a objetos.
aca surge el problema como constantemente llamo a subrutinas al ser largo mi programa entonces estaria llamando a subrutinas que se encuentran en otra pagina.
ya intente usando ORG 0x800 y a partir de ahi hice una subrutina luego la llame desde la pagina 0 y sucede que reinicia todo el programa y por lo tanto no puedo usar la subrutina que se encontraria en la pagina 1
gracias de antemano y espero sus respuestas
 

Temas similares

Arriba