anejo anejo de led leds, s, micr microsw oswitc itches hes y rele relevad vador or e para PIC 16/
INTRODUCCION:
cializadas en el desarrollo de compiladores C para PICS y que son actualmente las más con S. Debido a que la mayoría de los usuarios interesados en la programación en C para PICS , este tema y los siguientes habrán de enfocarse en los dos compiladores.
ema, se aprenderá a programar el manejo de 3 dispositivos: los leds, los microswitches y el relevador. El pro grama que utilizar mplo está específicamente orientado al PIC16F88 y concretamente al hardware del sistema EB88. Sin embargo, hacer modific ogramas para adaptarse a cualquier otro microcontrolador o a cualquier otra asignación de puertos y señales es sumamente sen que se ha comprendido el procedimiento. ama que usaremos como ejemplo realiza la siguiente función: si el microswitch RA1=0, se realiza una cu enta binaria en los led . Si RA1=1, entonces enciende y apaga el relevador con un período de 1 segundo. Se utiliza un microcontrolador con la frecue 4 Mhz. Los diagramas electrónicos y asignación de puertos y señales puede consultarlos aquí.
CREAR UN PROYECTO EN MPLAB v8.50, USANDO EL COMPILADOR HITECH PRO v9.70
instala la versión 8.50 de MPLAB, el compilador de HITECH se instala automáticamente (por default) en su versión LITE en l : C:\Archivos de programa\HI-TECH Software\PICC\9.70 una carpeta con el nombre "LEDS" y almacene allí los siguientes archivos: HITECHLEDSTINY.c, y key33.h procedimiento detallado en este archivo: CREAR UN PROYECTO DENTRO DE MPLAB.PDF ACION DEL PROGRAMA: En las directivas del preprocesador, se incluye el archivo header . Este archivo contiene l ncias entre los nombres de los puertos, registros y bits con su dirección física en el microcontrolador 16F88. A pesar de que no l número del microcontrolador, el compilador reconoce que se trata del 16F88 porque se le indicó cuando se creó el proyecto d y busca su driver en el path en donde se instaló el compilador. El archivo "key33.h" se incluye porque permite utilizar la funci DelayMs( )". stros SPEN, ANSEN, CMCON, CVRCON, TRISA y TRISB deben inicializarse dentro del programa principal tal y como se m los leds, los microswitches y el relevador funcionen adecuadamente. Para activar ó desactivar el relevador, usamos RA0=0; y como se muestra en el listado de abajo. Los nombres de variables de los 4 microswitches son: RA1, RA2, RA3, RA4. "key33.h" id){ =7; N=0; =0 0X1E; 0x00; 0;
++;
//ARCHIVO HEADER DEL MICROCONTROLADOR 16F88 //CONTIENE LA FUNCION DelayMs( ). //AQUI EMPIEZA EL PROGRAMA PRINCIPAL //DESHABILITA UART //DESHABILITA COMPARADORES ANALOGICOS //DESHABILITA VOLTAJE DE REFERENCIA //DESHABILITA CONVERTIDORES A/D //RA0 SE INICIALIZA COMO SALIDA, RA1...RA3 COMO ENTRADAS //TODOS LOS BITS DEL PUERTO B SE INICIALIZA COMO SALIDAS. //SE APAGAN TODOS LOS LEDS //SE DESACTIVA EL RELEVADOR //AQUI INICIA EL LOOP DEL PROGRAMA //INCREMENTA EN 1 EL VALOR DEL PUERTO B
(RA1==1) ; s(200);
//SI RA1=1, EJECUTA LO DEFINIDO ENTRE LOS CORCHETES DE ABAJO //AQUI INICIA EL SUBPROGRAMA RA0=1 ENCIENDE EL RELEVADOR //LLAMA A FUNCION RETRASO //RA0=0, APAGA EL RELEVADOR //FUNCION RETRASO 250 MS. //AQUI SALTA A LA ETIQUETA "dado" HACIENDO UN LOOP //SI RA1=0 ENTONCES SALTA A ESTA LINEA //RETRASO DE 20 MILISEGUNDOS PARA CUENTA BINARIA DE LEDS //REGRESA A LOOP EN LA LINEA DESPUES DE LA DECLARACION "WHILE(1)" //ESTE CORCHETE DEFINE EL FINAL DEL PROGRAMA PRINCIPAL
s(200); o;} s(20); ;}}
Aquí puede encontrar ejemplos simples de programación en C para los sistemas EDUPIC 16F84 y EVOLUPIC 16F628.
CREAR UN PROYECTO EN M PLAB v8.50, USANDO EL COMPI L ADOR CCS:
versión PRO que incluye las familias 10/12/16/18 por $150.00 dólares, en versión integrad se instala el programa y sus carpetas auxiliares es: C:\Archivos de programa\PICC l nombre "LEDS" y almacene allí los siguientes archivos: CCSLEDSTINY.c y 16F88.h tiene la información sobre los nombres de los puertos y registros especiales y de los bits. ( es en memoria de datos, de tal forma que es posible asignarles un valor en forma directa, co ivo se le hicieron adiciones para hacerlo compatible con el de HITECH. Es necesario inclui
MPLAB de una manera similar a la indicada más arriba para el caso del compilador de HI compilador de CCS. OGRAMA: A diferencia del compilador de HITECH, es necesario usar la directiva #includ sma carpeta junto con el programa fuente CCSLEDSTINY.c La directiva "use delay" permi principal es casi idéntico al usado para el compilador de HITECH. El nombre de la función esario en CCS inicializar los registros SPEN, CVRCON, CMCON, ANSEN.
0)
//ARCHIVO HEADER DEL MICROCONTROLADOR //DIRECTIVA PARA FUNCION delay_ms( )
0X2803}
//DATOS REQUERIDOS POR FIRMWARE TINY PARA 16F88
eset=0x0003) id){ 0X1E; 0; 0;
++; A1==1) ; s(1000);
//AQUI EMPIEZA EL PROGRAMA PRINCIPAL //ESTA PARTE ES IDENTICA A LA USADA PARA EL COMPILADOR //DE HITECH. //TODOS LOS LEDS SE APAGAN //SE DESACTIVA EL RELEVADOR
//FUNCION DE RETRASO.
s(1000); o;} s(20); ;}} //ESTE CORCHETE DEFINE EL FINAL DEL PROGRAMA PRINCIPAL
tutorial: manejo de rutinas de interrupción en C
Antecedentes:
en un tutorial de la sección correspondiente a pr ensamblador, se explica el mecanismo de interru 16F84/F628/F88 para el manejo de varios de sus particular, en el proyecto Reloj de Tiempo Real, escrito en lenguaje ensamblador, para mostrar la empleando la interrupción del TIMER0. Descripción: en este tutorial, se explican las cap lenguaje C (compilador CCS), para el manejo d de las mismas en el caso particular del microcon Si se le compara con el desarrollo en lenguaje en interrupciones desde C representa un ahorro con debido a la gran simplificación en el manejo de
CIONES DISPONIBLES EN EL 16F88, UTILIZANDO EL COMPILADOR CCS. E FUENTES DE INTERRUPCION:
E INTERRUPCION
CONDICION QUE GENERA LA INTERRUPCI
INT_AD INT_COMP INT_CCP1 INT_EEPROM INT_EXT INT_RB INT_RDA INT_ SSP INT_TBE INT_ TIMER0 INT_TIMER1 INT_TIMER2
Dato resultado de la Conversión Analógica- digital, listo Dato proveniente del comparador analógico, listo Dato de captura ó comparación, listo Escritura de dato en EEPROM, completa Señal de interrupción externa, activa Cambio de nivel en entradas digitales RB4...RB7 Dato en buffer de recepción en UART, listo para leerse Líneas de SPI ó I2C, activas Buffer de trasmisión de UART, listo para recibir dato Overflow en temporizador 0 Overflow en temporizador 1 Overflow en temporizador 2
ama que se usará para ejemplificar el uso de interrupciones en C es el mostrado en la ventana de abajo. Usando el TIMER1, se de tiempo de 1 segundo, a través del mecanismo de interrupciones. En este ejemplo, el programa principal "main" enciende y cada segundo. os bloques señalados con las llaves azules en el programa son indispensables incluirlos en caso de manejar rutinas de interrup lquier otro dispositivo. R1 es un registro que tiene 16 bits. Su carga inicial es de 0x0000 e incrementa cada vez que se genera 1 pulso en su clock. El na interrupción cada vez que existe un "overflow", es decir que la cuenta alcance 0xFFFF y pase a 0x0000. Si se usa el oscilad e 4 Mhz, el clock del TIMER1 tiene una frecuencia de FOSC/4, y un período de 1 us. Esto significa que se genera una interrup 36 us. los 3 comandos de CCS que permiten fácilmente operar el TIMER1. Estos mismos comandos se utilizan también con el resto vos mostrados en la tabla de arriba: imer_1(TI_INTERNAL|TI_DIV_BY_1)" permite configurar bits particulares en el registro de control de 8 bits del temporizad , se elije el funcionamiento del temporizador con el oscilador interno del 16F88 (T1_INTERNAL) y un preescalador de la fre orizador que divide entre 1 (T1_DIV_BY_1). El operador " | " realiza el "OR" de ambos datos de 8 bits, realizando una suma . interrupts(INT_TIMER1)", habilita la interrupción del temporizador 1. interrupts(GLOBAL)", habilita las interrupciones en el 16F88 en forma global. tiva #int_TIMER1 debe escribirse antes de la función de interrupción. La función de interrupción puede llevar cualquier nombr se le nombró "TIMER1_isr( )" (isr significa: interrupt subrutine) l archivo CCSINTSEGUNDOTINY.hex en el sistema EVOLUPIC Bootloader 16F88, usando el software TINY, y compruebe a funciona correctamente. Vea una aplicación de esta rutina en el proyecto Reloj de Tiempo Real de alta precisión para 16F88 PROGRAMA DE PRUEBA INTERRUPCION TIMER 1
CSINTSEGUNDOTINY.c CSINTSEGUNDOTINY.hex
Rutina de interrupción. Proporciona una base de tiempo de 1 segundo.