TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Desert en 23 de Febrero de 2007, 20:48:42
-
Tengo otro problemilla y es que si pongo por ejemplo tres tablas o mas del tipo
addwf PCL,F
retlw 'D'
retlw 'E'
o de este otro tipo
Tabla_Mensajes: movwf PCL
Mens_2 equ $ ;
dt "DESARROLLO ",0x00
cuando empiezo a coger los datos para mandarlos al LCD no puedo mandar nada mas ke 4 de ellos xq se reinicia el PIC el solo, nose si es xq se sobreesccriben los datos de la tabla o algo, y si es asi, como se hace para grabarlo en otra direccion del PIC las tablas, el simbolo $ redirecciona a una variable vacia o aleatoria?, me parece ke las tablas se deben de guardar en la ROM y si superan los 256 bytes(max direccion 0xff) el programa no puede funcionar correctamente, alguan solucion?
-
Este tema Desert se ha comentado muchisimas veces en el foro.
Lo mas simple seria intentar ubicar la tabla al principio de la memoria FLASH del PIC.
La directiva para ubicar codigo a partir de una posicion de memoria especifica es: ORG
Ej:
org 0x100
Tabla addwf PCL,F
retlw 'D'
retlw 'E'
...
Para llamar a esa tabla, que no esta ubicada en las primeras 256 posiciones de la FLASH,podrias hacer asi:
pageselw Tabla
movwf PCLATH
incf Recorre,f
movf Recorre,W
call Tabla
...
-
el manejo de tablas implica un poco de paciencia, estimado Desert, en primer lugar debes ubicar tu tabla dentro de un rango de direccion de 255 lineas, es decir por ejemplo pondre unos errores clasicos:
direccion codigo
1FD tabla addwf pcl,f
1FE retlw 'f'
1FF retlw 'o'
200 retlw 'r'
201 retlw 'o'
observas donde esta la falla?, entonces para corregir esto deberias hacer asi:
direccion codigo
1FD (vacio)
1FE (vacio)
1FF (vacio)
org 200
200 tabla movlw 0x02
201 movwf pclath
202 addwf pcl,f
203 retlw 'f'
204 retlw 'o'
205 retlw 'r'
206 retlw 'o'
ahora recuerda q el pcl solo maneja FF (hecxadecimal) valores o posiciones, entonces para q llegue hasta el 200 (hexadecimal) el registrop encargado de direccionar la parte alta (es decir el 2) se llama pclath. y se carga como te pongo en el ejemplo.
exitos!!1 :-/
-
ok, gracias me pondre a probar pues aver si acierto
-
si no le das al clavo y ya te cansas de intentar pues posteas tu codigo pa ayudarte :-/
-
gracias a vosotros e conseguido poner muchas mas tablas pero llegan a un limite y entonces es donde tengo ke direccionar a otros lugares pero.. x mucho ke pruebe lo de org 0x100 o cualkiera de las libres ke vienen en los 4 bancos de registros no me funciona, uso el pic16f877 y uso esta manera de tablas.
Tabla_Mensajes2:
movwf PCL
Mens_5 equ $ ;
dt "INTRODUZCA PIN",0x00
Mens_6 equ $ ;
dt "[ ]",0x00
Mens_7 equ $ ;
dt "PIN CORRECTO",0x00
Mens_8 equ $ ;
dt "PIN ERRONEO",0x00
x supuesto e probao con el equ$ y sin el equ$ pero na
-
sube tu codigo amigo pues hay q depurarlo desde el mplab :mrgreen:, ponlo como archivo adjunto y zippealo pa q el codigo no se afecte. :-/
-
aqui te pongo un programa (reloj-calendario-termometro), el cual usa varios tipos de tablas y en distintas paginas, espero que te ayude, un saludo
www.jr.es.mw