Está en la página 1de 12

INTRODUCCION: Existen 2 compaas especializadas en el desarrollo de compiladores C para PICS y que son actualmente las ms conocidas: la primera es HITECH

y la segunda CCS. Debido a que la mayora de los usuarios interesados en la programacin en C para PICS usan algn compilador de alguna de ambas empresas, este tema y los siguientes habrn de enfocarse en los dos compiladores. En este tema, se aprender a programar el manejo de 3 dispositivos: los leds, los microswitches y el relevador. El programa que utilizaremos como ejemplo est especficamente orientado al PIC16F88 y concretamente al hardware del sistema EB88. Sin embargo, hacer modificaciones en los programas para adaptarse a cualquier otro microcontrolador o a cualquier otra asignacin de puertos y seales es sumamente sencillo, una vez que se ha comprendido el procedimiento. El programa que usaremos como ejemplo realiza la siguiente funcin: si el microswitch RA1=0, se realiza una cuenta binaria en los leds del puerto B. Si RA1=1, entonces enciende y apaga el relevador con un perodo de 1 segundo. Se utiliza un microcontrolador con la frecuencia del cristal a 4 Mhz. Los diagramas electrnicos y asignacin de puertos y seales puede consultarlos aqu.

CREAR UN PROYECTO EN MPLAB v8.50, USANDO EL COMPILADOR HITECH PRO v9.70 Si usted instala la versin 8.50 de MPLAB, el compilador de HITECH se instala automticamente (por default) en su versin LITE en la direccin: C:\Archivos de programa\HI-TECH Software\PICC\9.70 -Genere una carpeta con el nombre "LEDS" y almacene all los siguientes archivos: HITECHLEDSTINY.c, y key33.h -Siga el procedimiento detallado en este archivo: CREAR UN

PROYECTO DENTRO DE MPLAB.PDF EXPLICACION DEL PROGRAMA: En las directivas del preprocesador, se incluye el archivo header <htc.h>. Este archivo contiene las equivalencias entre los nombres de los puertos, registros y bits con su direccin fsica en el microcontrolador 16F88. A pesar de que no se escribe el nmero del microcontrolador, el compilador reconoce que se trata del 16F88 porque se le indic cuando se cre el proyecto desde el MPLAB y busca su driver en el path en donde se instal el compilador. El archivo "key33.h" se incluye porque permite utilizar la funcin de retraso "DelayMs( )". Los registros SPEN, ANSEN, CMCON, CVRCON, TRISA y TRISB deben inicializarse dentro del programa principal tal y como se muestra, para que los leds, los microswitches y el relevador funcionen adecuadamente. Para activar desactivar el relevador, usamos RA0=0; y RA0=1; como se muestra en el listado de abajo. Los nombres de variables de los 4 microswitches son: RA1, RA2, RA3, RA4. #include <htc.h> //ARCHIVO HEADER DEL MICROCONTROLADOR 16F88 #include "key33.h" //CONTIENE LA FUNCION DelayMs( ). main(void){ //AQUI EMPIEZA EL PROGRAMA PRINCIPAL SPEN=0 //DESHABILITA UART CMCON=7; //DESHABILITA COMPARADORES ANALOGICOS CVRCON=0; //DESHABILITA VOLTAJE DE REFERENCIA ANSEN=0 //DESHABILITA CONVERTIDORES A/D TRISA=0X1E; //RA0 SE INICIALIZA COMO SALIDA, RA1...RA3 COMO ENTRADAS TRISB=0x00; //TODOS LOS BITS DEL PUERTO B SE INICIALIZA COMO SALIDAS. PORTB=0; //SE APAGAN TODOS LOS LEDS RA0=0; //SE DESACTIVA EL RELEVADOR while(1) //AQUI INICIA EL LOOP DEL PROGRAMA {PORTB++; //INCREMENTA EN 1 EL VALOR DEL PUERTO B

dado: if (RA1==1) //SI RA1=1, EJECUTA LO DEFINIDO ENTRE LOS CORCHETES DE ABAJO {RA0=1; //AQUI INICIA EL SUBPROGRAMA RA0=1 ENCIENDE EL RELEVADOR DelayMs(200); //LLAMA A FUNCION RETRASO RA0=0; //RA0=0, APAGA EL RELEVADOR DelayMs(200); //FUNCION RETRASO 250 MS. goto dado;} //AQUI SALTA A LA ETIQUETA "dado" HACIENDO UN LOOP else //SI RA1=0 ENTONCES SALTA A ESTA LINEA {DelayMs(20); //RETRASO DE 20 MILISEGUNDOS PARA CUENTA BINARIA DE LEDS continue;}} //REGRESA A LOOP EN LA LINEA DESPUES DE LA DECLARACION "WHILE(1)" } //ESTE CORCHETE DEFINE EL FINAL DEL PROGRAMA PRINCIPAL

Aqu puede encontrar ejemplos simples de programacin en C para los sistemas EDUPIC 16F84 y EVOLUPIC 16F628.

CREAR UN PROYECTO EN MPLAB v8.50, USANDO EL COMPILADOR CCS: La empresa CCS ofrece la versin PRO que incluye las familias 10/12/16/18 por $150.00 dlares, en versin integrada con el MPLAB. La direccin default en donde se instala el programa y sus carpetas auxiliares es: C:\Archivos de programa\PICC -Genere una carpeta con el nombre "LEDS" y almacene all los siguientes

archivos: CCSLEDSTINY.c y 16F88.h - El archivo "16F88.h" contiene la informacin sobre los nombres de los puertos y registros especiales y de los bits. (Ej: PORTB, TRISB, RB0, RA0, etc.) y sus direcciones en memoria de datos, de tal forma que es posible asignarles un valor en forma directa, como se muestra en el ejemplo abajo. A este archivo se le hicieron adiciones para hacerlo compatible con el de HITECH. Es necesario incluirlo en la carpeta del proyecto. - Configure el proyecto en MPLAB de una manera similar a la indicada ms arriba para el caso del compilador de HITECH. En la opcin "Active Toolsuite" elija el compilador de CCS. EXPLICACION DEL PROGRAMA: A diferencia del compilador de HITECH, es necesario usar la directiva #include "16F88.h". Este archivo debe almacenarse en la misma carpeta junto con el programa fuente CCSLEDSTINY.c La directiva "use delay" permite usar la funcion delay_ms( ). El programa principal es casi idntico al usado para el compilador de HITECH. El nombre de la funcin de delay que en este caso es delay_ms( ). No es necesario en CCS inicializar los registros SPEN, CVRCON, CMCON, ANSEN. #if defined(__PCM__) #include "16F88.h" MICROCONTROLADOR #use delay(clock=4000000) delay_ms( ) #rom 0X0000={0X018A,0X2803} FIRMWARE TINY PARA 16F88 #build(reset=0x0003) //ARCHIVO HEADER DEL //DIRECTIVA PARA FUNCION //DATOS REQUERIDOS POR

main(void){ //AQUI EMPIEZA EL PROGRAMA PRINCIPAL TRISA=0X1E; //ESTA PARTE ES IDENTICA A LA USADA PARA EL COMPILADOR TRISB=0; //DE HITECH. PORTB=0; //TODOS LOS LEDS SE APAGAN RA0=0; //SE DESACTIVA EL RELEVADOR while(1)

{PORTB++; dado:if(RA1==1) {RA0=1; delay_ms(1000); RA0=0; delay_ms(1000); goto dado;} else {delay_ms(20); continue;}}
}

//FUNCION DE RETRASO.

//ESTE CORCHETE DEFINE EL FINAL DEL PROGRAMA PRINCIPAL

PARA EL 16F84 Y 16F628, SI USA EL SOFTWARE WINPIC, DESPUES DE COMPILAR EL PROGRAMA CON LA OPCION "BUILD ALL", EL ARCHIVO .HEX GENERADO POR EL COMPILADOR CCS LLEVA EN SU LINEA FINAL EL TEXTO ";PIC16F628". SI SE USA EL PROGRAMA WINPIC PARA PROGRAMAR SU SISTEMA, ES NECESARIO BORRAR ESTE TEXTO USANDO EL EDITOR DE NOTEPAD PARA EVITAR QUE MARQUE UN ERROR AL INTENTAR LEER ESTE ARCHIVO.

:02400E00693F08 :00000001FF ;PIC16F628A (SI SE USA WINPIC, ESTA ULTIMA LINEA DEBE BORRARSE DEL ARCHIVO .HEX)

tema 3: manejo del LCD


Descripcin: en el TEMA 2, se dieron las bases para programar en C dispositivos como LEDS, microswitches y relevadores. En esta seccin, se proporcionan las funciones necesarias para manejar un display LCD de 16 x 1, para el microcontrolador 16F88, utilizando los compiladores de HITECH y CCS. Contamos con dos libreras universales que incluyen todas las funciones para el manejo del LCD, teclado y retrasos (delay). Para HITECH, use key34.h, para CCS, use key3.h Todas las funciones estn basadas en el diagrama electrnico y la asignacin de seales proporcionados en este vnculo y coincide con el conector del sistema EB88 de 8 pines. Si el programador necesita modificar la asignacin de seales en el 16F88, puede hacerlo cambiando los datos en las funciones.

MANEJO DEL CURSOR EN EL LCD: Es importante recordar que el LCD 16 x 1 est organizado electrnicamente en 2 secciones de 8 caracteres cada una. El rengln 0 est formado por las primeras 8 celdas y el rengln 1 por las siguientes 8. Para identificar una celda, usamos el siguiente formato: (0,3) significa rengln 0, celda 3; (1,7) rengln 1, celda 7, etc. Si deseamos escribir en las 16 celdas del LCD, usamos la funcin GotoXY( ), para el compilador HiTech cursorXY( ) para el compilador CCS para posicionar el cursor en el rengln deseado, antes de enviar los caracteres. Las funciones que se proporcionan para cada compilador son las siguientes:

FUNCION InitIO( ) ClearScreen( ) GotoXY(1,5) PrintString("ANSI C")

PrintString(wob)

PutChar('*') PutChar(53); PutChar(x);

DESCRIPCION Enva los comandos para inicializar el LCD. El cursor se posiciona en (0,0). Pone las 16 celdas del LCD en blanco. Posiciona el cursor en el rengln 1, celda 5 Escribe el texto entrecomillado, iniciando en la celda en donde se encuentre posicionado el cursor. Mximo 8 caracteres. La funcin acepta como parmetro de entrada un string, en este ejemplo de nombre "wob". Escribe en el LCD el contenido del string. Mximo 8 caracteres. Vea el programa de prueba 3 Escribe el caracter indicado en la posicin en donde se encuentre el cursor. Observe que deben usarse diresis y no comillas. se enva el cdigo ASCII del nmero 5, cuyo valor decimal es 53 se enva al LCD, en un solo caracter, el valor de la

DelayMs(100)

variable x, que debe ser un cdigo ASCII. Realiza un retraso de 100 milisegundos. El valor mximo es 30,000.

PROGRAMA DE PRUEBA 1 -En una nueva carpeta guarde los siguientes archivos: HITECHLCD3TINY.c y key33.h El programa escribe un texto de 16 caracteres en el LCD. -Siga el procedimiento detallado en este vnculo: CREAR UN PROYECTO DENTRO DE MPLAB.PDF -Abra el proyecto creado y compile con la opcin "build all". Pruebe el archivo .hex en el sistema EVOLUPIC Bootloader 16F88. Microswitches en posicin "OFF". PROGRAMA DE PRUEBA 2 -Guarde en la carpeta los siguientes archivos: HITECHLCD5TINY.c y key33.h -El programa utiliza la funcin PrintString( ), con un string como parmetro de entrada. Muestra en el LCD el valor de una variable entera con signo, la cual es previamente convertida a un string por medio de la funcin sprintf( ). PROGRAMA DE PRUEBA 3 SCROLLING CIRCULAR EN EL LCD: este programa define un arreglo con formato de strings de 16 caracteres en memoria RAM, lo muestra en el LCD 16 x 1 y realiza un scrolling (corrimiento) circular hacia la derecha. Se utiliza el archivo header universal key34.h el cual realiza las funciones del LCD ms rpidamente que el key33.h. Los archivos que debe usted almacenar en su carpeta son: HITECHSCROLLING16TINY.h y KEY34.h Pruebe el programa en EVOLUPIC Bootloader 16F88, insertando el mdulo LCD. Microswitches en posicin "OFF".

DESCRIPCION Enva los comandos para inicializar el LCD. initLCD( ) El cursor va a la posicin (0,0). clearLCD( ) Pone las 16 celdas del LCD en blanco. cursorXY(1,5) Posiciona el cursor en el rengln 1, celda 5 En este ejemplo, "wib" es un arreglo con formato de string. La funcin escribe el stringLCD(wib) string en el LCD. Mximo 8 caracteres. Programa de prueba CCSLCD4.c Escribe el caracter indicado entre diresis en PutLCD('*') la posicin en donde se encuentre el cursor. se enva el cdigo ASCII del nmero 5, cuyo PutLCD(53); valor decimal es 53 se enva al LCD, en un solo caracter, el valor PutLCD(x); de la variable x, que debe ser un cdigo ASCII. Funciona como la funcin stringLCD( ), pero sin necesidad de inicializar un arreglo. Enva PutLCD("1234") un caracter tras otro. Ver el programa de prueba 2. Retraso de 100 milisegundos. Argumento delay_ms(100) mximo 1000 milisegundos. Es una funcin suplementaria para el manejo de strings. Almacena en memoria el texto entrecomillado en un arreglo de strcpy(letrero,"AMIGOS") nombre "letrero". El arreglo tiene formato de "string". Esta funcin est integrada al compilador CCS, en la librera string.h

FUNCION

PROGRAMA DE PRUEBA 1: -Genere una carpeta con el nombre "LCD" y almacene all los siguientes

archivos: CCSLCD3TINY.c, key3.h, 16F88.h El programa escribe un texto de 16 caracteres en el LCD. -Siga el procedimiento detallado en este vnculo: CREAR UN PROYECTO DENTRO DE MPLAB.PDF -Abra el proyecto en MPLAB y compile con la opcin "build all". El archivo .hex resultante, crguelo con el programa TINY al sistema EVOLUPIC Bootloader 16F88, conectado a un LCD 16 x 1. -No olvide posicionar todos los microswitches en la posicin "OFF" de tal manera que no interfieran con las seales de control del LCD. PROGRAMA DE PRUEBA 2: -Genere una carpeta con el nombre "LCD" y almacene all los siguientes archivos: CCSLCDSCROLLINGTINY.c, key3.h, 16F88.h El programa escribe un texto de 16 caracteres en el LCD, realizando un corrimiento circular hacia la derecha. -Siga el procedimiento detallado en este vnculo: CREAR UN PROYECTO DENTRO DE MPLAB.PDF -Abra el proyecto en MPLAB y compile con la opcin "build all". El archivo .hex resultante, crguelo con el programa TINY al sistema EB88, conectado a un LCD 16 x 1. -No olvide posicionar todos los microswitches en la posicin "OFF" de tal manera que no interfieran con las seales de control del LCD.

NOTA CON RESPECTO AL USO DE LA FUNCION PutLCD( ): putLCD('*') despliega en el LCD el caracter entre los smbolos de diresis, en este caso el asterisco. Sin embargo, tambin es posible usar en el compilador de CCS la misma funcin para enviar un string: putLCD("123"); putLCD('1'); //EN CCS, ES SIMILAR A ESCRIBIR:

putLCD('2'); putLCD('3'); Esta caracterstica no existe en el compilador de HiTech, el cual usa la funcin PrintString( ) para realizar la misma tarea.

ENCABEZADO EN EL PROGRAMA PRINCIPAL: #if defined(__PCM__) #include "16F628A.h" #include "display.h" #fuses XT,NOWDT,NOPROTECT,NOLVP //define el compilador para microcontroladores "Medium Range" //define el archivo header del microcontrolador empleado. //librera del programa //define la palabra de configuracin en el 16F628A.

ENCABEZADO EN EL ARCHIVO HEADER display.h: #include <string.h> #use delay(clock=4000000) #define eight 0x38 #define clear 0x01 #define home 0x03 #define cursor 0x0f char letrero[10]; int d; void puco(void); //librera estndar necesaria para el manejo de "strings" //directiva para uso de la funcin "delay_ms" //definicin de los valores de las constantes

//definicin de un arreglo de 10 elementos //definicin de la variable "d" como entera, global, de 8 bits //declaracin de la funcin "puco( )".