HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

tutorial: uso de librerías, archivos .h  

 

header.jpg (26395 bytes)

Introducción: en un programa ANSI C para sistemas de microcontrol, existen 2 tipos de archivos .h: el archivo del microcontrolador particular que se esté utilizando, y las librerías del programa. Ambos llevan la terminación ".h"

El archivo header del microcontrolador contiene las equivalencias que usa el compilador entre los nombres de los puertos, registros, bits y señales con su dirección física en el microcontrolador. Por ejemplo, para el compilador CCS, vea los archivos 16F628A.h, 16F88.h, 16F88ADC.h . Para el compilador HITECH, vea como ejemplos los archivos pic16F62xa.h ó pic16F88.h.

Los archivos ".h" del programa también se conocen como "librerías" ó "bibliotecas". Las que están siempre integradas en todos los compiladores ANSI C, como por ejemplo <stdlib.h>, se conocen como "librerías estándar".

En seguida se dan detalles con respecto a ambos tipos de archivos .h

 

ARCHIVO HEADER DEL MICROCONTROLADOR: El archivo header del microcontrolador contiene las equivalencias para el compilador entre los nombres de los puertos, registros, bits y señales con su dirección física en el microcontrolador.

Por ejemplo, para el compilador CCS, vea los archivos 16F628A.h y 16F88.h . Para el compilador HITECH, vea el archivos pic16F62xa.h pic16F88.h. El archivo "header" del microcontrolador debe siempre declararse en el encabezado del programa principal (main). El compilador HITECH, tiene un archivo header que se declara siempre mediante la directiva #include <htc.h> . El compilador busca el archivo particular del microcontrolador que haya sido seleccionado por el usuario durante la creación del proyecto en MPLAB, por ejemplo el 16F88.

En el caso del compilador CCS, debe incluirse la directiva #include "16F628A.h" ó "16F88.h". El uso de las comillas dirige al compilador a buscar ese archivo en la misma carpeta en donde está el proyecto generado desde MPLAB IDE. Si se usa la directiva #include <16F628A.h>, el compilador busca el archivo en la carpeta "devices" en donde se instalaron originalmente los drivers para cada microcontrolador.

 

LIBRERIAS DEL PROGRAMA: también llamadas "bibliotecas". Estos archivos header contienen las funciones que habrán de usarse en el programa principal ó en alguno de los otros archivos header. No es indispensable tener un archivo "header" separado del programa principal. Un programa ANSI C puede tener su encabezado, la función "main" y las demás necesarias para su funcionamiento, en un solo archivo con terminación .c, sin utilizar archivos header ó librerías adicionales.

Sin embargo, cuando el programador desea separar algunas ó todas las funciones del programa principal en un archivo ó archivos distintos, entonces es indispensable crear nuevos archivos ó librerías cuyo nombre debe llevar la terminación .h . De esta manera, el programa en el archivo "main" se simplifica a un mínimo de líneas, facilitando su comprensión.

Como ventaja adicional para los programadores al crear sus propias librerías, es permitir que esas funciones puedan ser utilizadas por otros programadores (ver LIBRERIA UNIVERSAL)

Un archivo .h puede contener las llamadas "directivas del preprocesador de C", como #define e #include, así como las funciones. Puede también contener la declaración de otros archivos .h, que son indispensables para la operación de algunas de las funciones, incluyendo las llamadas "librerías estándar" del propio compilador C como son "stdio.h" ó "string.h".

 

EJEMPLO: El nombre de la librería debe declararse en el encabezado de la función main mediante la directiva #include< >, como se verá en el siguiente ejemplo. Si se usan comillas " " en el nombre del archivo, el compilador lo busca en la carpeta del proyecto creado desde MPLAB. Si se usan brackets < >, entonces lo busca en la carpeta de instalación del compilador.

Ejemplo para el compilador CCS: tomemos el encabezado del programa principal (main) del controlador del LCD denominado CCSLCD.c.

Las definiciones y directivas necesarias están en el archivo header display.h   En este mismo archivo se incluyeron (en este ejemplo) el resto de las funciones que son llamadas desde el programa principal.

Abra ambos archivos y observe su contenido:

ENCABEZADO EN EL PROGRAMA PRINCIPAL:

#if defined(__PCM__)                                             //define el compilador para microcontroladores "Medium Range"
#include "16F628A.h"                                             //define el archivo header del microcontrolador empleado.
#include "display.h"                                               //librería del programa
#fuses XT,NOWDT,NOPROTECT,NOLVP        //define la palabra de configuración en el 16F628A.

ENCABEZADO EN EL ARCHIVO HEADER display.h:

#include <string.h>                                                  //librería estándar necesaria para el manejo de "strings"
#use delay(clock=4000000)                                    //directiva para uso de la función "delay_ms"
#define eight         0x38                                           //definición de los valores de las constantes
#define clear         0x01
#define home        0x03
#define cursor       0x0f
char letrero[10];                                                     //definición de un arreglo de 10 elementos
int d;                                                                        //definición de la variable "d" como entera, global, de 8 bits
void puco(void);                                                       //declaración de la función "puco( )".

/*Aquí siguen el resto de las funciones utilizadas por el programa principal*/

Para evitar errores en el compilador, no debe repetirse ninguna función, directiva, ó definición listada en algún archivo "header", en el propio archivo principal "main", ni en ninguna otra librería del programa. Es deseable, como en el caso de este ejemplo, incluir en un solo archivo header las funciones llamadas desde el programa principal.

 

EN EL CASO DE LOS SISTEMAS 16F84, 16F628 Y SISTEMA EB88, CONTAMOS CON UNA LIBRERIA UNIVERSAL QUE CONTIENE TODAS LAS FUNCIONES NECESARIAS PARA MANEJAR LOS DISPOSITIVOS COMO LEDS, MICROSWITCHES, RELEVADOR, LCD, TECLADO, CONVERTIDOR AD Y FUNCIONES DE DELAY.