TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: ericksm en 06 de Abril de 2014, 00:43:19
-
Buenas
Desarrolle una macro para el pic 16f84a
solo la utilizo para guardar variables, y luego la logica la implemente en un call dentro del macro
Puedo guardar todas las variables pero tambien quiero guardar etiquetas de librerias que añado al programa.
Por ejemplo, para emplearla en mi programa solo añado este codigo:
MI_MACRO 0x01 , 0x12 , delay_1s , 0x04
En la macro tengo:
MI_MACRO MACRO value1, value2, etiqueta, value3
aqui guardo todas las constantes facilmente
para la etiqueta consigo guardar la posicion de esta en otra variable de este modo:
movlw etiqueta
movwf MI_VARIABLE
y luego CALL MI_FUNCION (que esta en otra libreria)
en la libreria tengo:
LOGICA , ETC
movf MI_VARIABLE,0 ;guardo mi variable en W
movwf PLC ; guardo W en el registro PLC, aqui se realiza el salto
LOGICA ...
En la simulacion en MPLAB funciona muy bien, en proteus se pierden valores luego de realizar el salto manual, no estoy seguro pero creo que salta a cualquier lado.
En la parte practica funciona igual como funciona en proteus.
Agradesco cualquier ayuda que me puedan brindar, gracias
-
Hola,
estaría muy bueno que adjuntes al menos el archivo .lst que genera el MPASM. De esa manera se podría estudiar mejor el problema.
Igualmente, puede que el problema venga debido a que estás guardando sólo los 8 bits de menor peso de etiqueta, es decir que si por algún motivo la subrutina debe saltar más allá de la posición 0xFF de la Flash, el salto será erróneo porque te falta guardar la parte alta de etiqueta y cargarla acorde en el registro PCLATH antes de efectuar el salto.
Parecería que lo que estás intentando hacer es un puntero a una función en Assembler.
Saludos.
-
Gracias por la respuesta
De la posicion 0xAA salto a la posicion 0x71 por lo que no creo que aya problemas con el valor del PCLATH
Por otro lado viendo el archivo .lst tengo 108 reportes de Warnings
La mayoria con el siguiente mensaje:
Warning[203]: Found opcode in column 1. (movlw)
Warning[205]: Found directive in column 1. (INCLUDE)
etc
segun el archivo mismo, estoy saltando de la pagina 12 a la pagina 9
No entiendo muy bien eso de las paginas, en el programa cuando compilo y simulo ¿como sé en que pagina estoy? y ¿como afecta esto en el desarrollo del programa?
gracias de antemano
-
En el 16F84/A la paginación que se suele mencionar no es problema porque el ancho de la dirección para las instrucciones GOTO y CALL es de 11 bits, lo que implica que los problemas de paginación para dichos saltos ocurren cuando la memoria de programa excede 2^11 words = 2048 words = 2k.
De tener un problema, puede que sea como te dije porque el COMPUTED GOTO sí tiene la limitación cada trozos de 256 words, debido al tamaño del PCL de 8 bits. Si pusieses el código podríamos ayudarte mucho mejor. Hacerlo así es hablar en el aire.
Esas advertencias son porque no estás tabulando las líneas asm correctamente.
Saludos