PRAGMAs
Los PRAGMAs son directivas para indicarle al compilador, como vamos a trabajar, con qué vamos a trabajar y de que manera vamos a trabajar.
Algún PRAGMA omitido, o mal definido; pueden dar numerosos errores y/o un comportamiento erróneo de nuestro pic. Cuando digo una mala definición, no hablo de un error de sintaxis, sino de habilitar algo, cuando en realidad deberíamos deshabilitarlo.
Especificación del PIC a usar (TARGET CHIP)ASMLIST P=16F877A ; Utilizaremos el PIC 16F877A
JALv2PRAGMA TARGET CHIP nombredelpic
Donde nombredelpic se debe reemplazar por el nombre del pic. Por ejemplo:
PRAGMA TARGET CHIP 16F877A -- Utilizaremos el PIC 16F877A
Por supuesto, que debemos reemplezar el nombre del PIC por el que vamos a utilizar. Hay otra manera de hacerlo:
CONST _target_chip = cexpr
CONST _target_chip = 18F4550
No debemos preocuparnos por especificar el tipo de PIC a utilizar porque el compilador no lo utiliza para hacer la compilación.
Especificación del reloj a usar (TARGET CLOCK)Se debe indicar en Hz la frecuencia del reloj, con que va a trabajar nuestro microcontrolador.
JALv2PRAGMA TARGET CLOCK cexpr
PRAGMA TARGET CLOCK 20_000_000 -- Utilizaremos una frecuencia de 20Mhz.
PRAGMA TARGET CLOCK 48_000_000 -- Utilizaremos una frecuencia de 48Mhz.
Como notarán, solo es necesario modificar el valor de la frecuencia, por el que vamos a utilizar.
Otra manera de especificarlo es:
CONST _target_clock = cexpr
CONST _target_clock = 48_000_000
Hay que prestar atención en aquellos PIC donde por medio de PLL, se cambian la frecuencia para obtener otra. Por ejemplo los Microcontroladores que tiene USB interno. Al USB se lo hace trabajar con 96Mhz, pero al PIC se lo puede hacer trabajar con 48Mhz aún teniendo un cristal de 20Mhz. En definitiva, hay que especificar 48Mhz y no 20Mhz.
La especificación de la frecuencia es necesaria especificarla, cuando se utilice la función _usec_delay(xx); o de las demoras que están en la librería delay.jal
Configuración del PIC (TARGET FUSES)Los microcontroladores, al ser diseñado para uso general, necesitan una configuración para realizar lo que nosotros queramos.
ASM__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC (etcétera).
JALv2PRAGMA TARGET FUSES [cexpr0] cexpr
cexpr0 sólo se utiliza cuando existen varias palabras config en cuyo caso 0 es la primera palabra de configuración, 1 el segundo, y así sucesivamente. Noten que empieza de 0.
Otra manera de hacerlo es la siguiente:
CONST _config = cexpr
CONST _config [cexpr0] = cexpr
Como verán, se debe reemplazar cexpr con el valor correspondiente.
Un concejo. Chequeen la configuración que aparecen en los ejemplos que viene con el programa. Están en la carpeta llamada sample.
Configuración del PIC (TARGET opt tags)PRAGMA TARGET opt tags
Esta es la opción más utilizada a la hora de realizar la configuración de nuestro PIC.
pragma target WDTPS P32K -- watch dog saler setting
pragma target WDT CONTROL -- no watchdog
pragma target CCP2MUX ENABLED -- CCP2 pin C1
pragma target PBADEN DIGITAL -- digital input port<0..4>
pragma target LPT1OSC LOW_POWER -- low power timer 1
pragma target MCLR EXTERNAL -- master reset on RE3(etcétera)
Para saber como configurarlo, además de chequear la ficha técnica (data sheet), podemos chequear el archivo donde están todos los nombres de los registros. Este archivo se incluye en nuestro programa para poder manejar dicho pic. Es el archivo cuyo nombre es igual al pic a utilizar. Al final de este archivo, se pueden ver todas las configuraciones del PIC. Por ejemplo 16F84A.jal; 16F877A.jal 18F4550.jal