Autor Tema: Salto manual en macro  (Leído 1871 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ericksm

  • PIC10
  • *
  • Mensajes: 19
Salto manual en macro
« 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
« Última modificación: 06 de Abril de 2014, 01:42:43 por ericksm »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Salto manual en macro
« Respuesta #1 en: 06 de Abril de 2014, 03:09:34 »
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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado ericksm

  • PIC10
  • *
  • Mensajes: 19
Re: Salto manual en macro
« Respuesta #2 en: 07 de Abril de 2014, 01:43:21 »
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

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Salto manual en macro
« Respuesta #3 en: 07 de Abril de 2014, 12:07:37 »
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
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything