Para que un programa funcione correctamente en un PIC hay que
configurar algunos parmetros antes de elaborar el programa.
Estos parmetros los interpretar el compilador cuando generemos el archivo .HEX :
Indicar con qu tipo de PIC vamos a trabajar:
LIST
P=16F84A ;En nuestro caso vamos a trabajar con el PIC 16F84A
Para facilitar la escritura del programa, Microchip nos proporciona para cada tipo de microcontrolador una librera en la cual se definen las direcciones de algunos registros. Por ejemplo, cuando queramos referirnos en nuestro programa al puerto A, en lugar de escribir 0x05, que es la direccin que corresponde a dicho puerto, escribiremos PORTA, ya que en esta librera ya est definido que PORTA equivale a 0x05:
INCLUDE
<P16F84A.INC> ;Indicamos el nombre de la librera PIC 16F84A
* NOTA: Las libreras que incluyamos en nuestros programas, siempre deberemos referirnos a ellas en la parte ms inferior del cdigo, justo antes de la instruccin 'END', excepto esta librera, que lo haremos en la parte superior del programa.
Esta lnea es opcional pero es til aadirla siempre. Si no lo hacemos, podemos activar/desactivar estas opciones desde el software del programador:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
Qu significa cada una de las opciones? CP Bit de proteccin de cdigo WDT Watchdog PWRTE Temporizador Power-Up XT Tipo de oscilador externo (XT = Cristal de cuarzo)
Algo que tampoco es del todo necesario pero es de gran utilidad es indicar a partir de qu direccin empezarn los registros que se almacenarn en la memoria RAM. Segn vayamos aadiendo nombres de registros, stos irn incrementando automticamente su nmero de posicin en la memoria del PIC.
CBLOCK 0x0C Los registros empiezan a almacenarse en la posicin 0x0C (en el PIC 16F88 empieza en la posicin 0x20). Registro1 Primer registro (pos.0x0D en PIC16F84, pos.0x21 en PIC16F88) Registro2 Segundo registro (pos.0x0E en PIC16F84, pos.0x22 en PIC16F88) ... ENDC Fin de la directiva CBLOCK
Estas lneas s son muy importantes ya que con ellas le decimos al PIC dnde empieza nuestro programa. Puesto que la memoria del PIC est dividida en diferentes partes, debemos indicarle siempre que 'guardemos' algo en ella qu tipo de datos son. Por ejemplo, si queremos reservar una parte de la memoria para almacenar datos variables lo haremos indicndole la posicin 0x0C (como hemos hecho antes):
ORG 0 'ORG' = guarda los datos en la memoria de programa y '0' es la posicin de la memoria. goto Configuracion_E_S Saltamos donde empezar nuestro cdigo (ORG 5).
ORG 4 Vector de interrupcin (lo veremos ms adelante). goto Rutina_Servicio_Interrupcion
ORG 5 A partir de aqu escribimos nuestro programa como veris ms abajo... Configuracion_E_S
CONFIGURACIN DE ENTRADAS Y SALIDAS Lo haremos segn las necesidades que tengamos, ya que las lneas de E/S son configurables. Esto significa que una lnea puede ser tanto una entrada como una salida. Ser entrada si la programamos con un '1'. Ser una salida si la configuramos con un '0'.
ORG 5 ;Comienza el programa Configuracion_E_S bsf STATUS,5 movlw
b'00011111' ;PORTA Entradas movwf
PORTA movlw
b'00000000' ;PORTB Salidas movwf
PORTB bcf
STATUS,5
Entre el Puerto A y el Puerto B existen algunas diferencias fsicas, como corriente mxima que pueden soportar. Puedes consultar estos datos en esta seccin.
A continuacin vendr el cdigo de nuestro programa:
Programa ... [Cdigo]... ... ... ... ...
Y por ltimo indicaremos, como se ha mencionado anteriormente, todas las libreras que incluimos al programa, si hacemos uso de alguna y...IMPORTANTE!! Algo de lo que es muy fcil olvidarse y si no lo escribimos, el compilador nos dar error, la instruccin END: