Metodología de Programación, Programación en C, Aplicaciones electrónicas 1 / 7 Programación y diseño de dispositivos mediante microcontroladores PIC Hemos elegido el microcontrolador PIC16F84 por las características que se explicarán más adelante. Nuestro microcontrolador PIC16F84 (ver Figura 1) que es un chip de 18 pines grabable, por lo que necesitamos un dispositivo que permita grabar el programa elaborado dentro del PIC 16F84, es decir, un grabador o programador. Además, es necesario un compilador que produzca el código ejecutable de dicho programa. Una vez introducido el programa en la memoria del microcontrolador, éste funcionará mediante un conjunto mínimo de componentes externos (ver Figura 2). Francisco Larrosa Cascales 3ª Parte: Microcontrolador PIC 16F84 Metodología de Programación, Programación en C, Aplicaciones electrónicas 2 / 7 Las herramientas imprescindibles para ponemos a trabajar son: -Si desarrollamos bajo MS-DOS es necesario un editor de texto ASCII como el Edit. Si trabajamos con Windows 95/98 el programa del grabador MultiPIC ya incorpora un editor ASCII. -Ensamblador MPASM para MS-DOS o el MPLAB para Windows que proporciona gratuitamente la empresa fabricante del PIC Microchip. -Un compilador en C en este caso -Grabador o programador de PIC’s. En la página web www.ugr.es/~emartin/Microcont-O1.htm están disponibles los programas MPASM y MPLAB. El microcontrolador PIC 16F84 pertenece a la gama media del fabricante y posee unas características óptimas para su empleo en fases de aprendizaje. Este microcontrolador dispone de memoria Flash y está fabricado con tecnología CMOS. Su consumo es muy reducido, siendo un circuito estático que permite que su reloj pueda detenerse completamente sin pérdida de los contenidos de los Francisco Larrosa Cascales 3ª Parte: Microcontrolador PIC 16F84 Metodología de Programación, Programación en C, Aplicaciones electrónicas 3 / 7 registros. El consumo típico es de 2 mA a 4 MHz y unos 40 µA funcionando en modo Sleep. El encapsulado de 18 pines así como la descripción del patillaje puede verse en la «Figura 1 », mientras en la «Figura 2» se presenta el esquema eléctrico del mismo. Contiene sólo y exclusivamente el microcontrolador PIC16F84 así como la circuitería necesaria para su alimentación partiendo de una entrada en alterna de 9-12 V A.C. o desde una pila de 9V. Incluye además un conector de 17 pines (CN1) donde se encuentran todas las líneas útiles del microcontrolador así como las señales de masa, + 5V y el voltaje rectificado y filtrado del transformador PWR. Con la sola sustitución del cristal de cuarzo y dos condensadores puede hacerse funcionar el microcontrolador a 4 o 10 MHz. Arquitectura interna Las altas prestaciones de los microcontroladores PIC derivan de las características de su arquitectura (ver «Figura 3»). Están basados en una arquitectura tipo Hardvard, es decir, disponen de dos memorias independientes: una que contiene sólo instrucciones y otra sólo con datos. Ambas poseen sus respectivos sistemas de buses y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ellas. Esto los hace más rápidos que los microcontroladores basados en la arquitectura tradicional de Von Neumann. Otra característica es su juego de instrucciones reducido (35 instrucciones) RISC, que en su mayoría se ejecutan en un solo ciclo de reloj excepto las instrucciones de salto que necesitan dos ciclos. Los microcontroladores PIC 16F84 poseen dos bloques de memoria separados, la memoria de programa y los bancos de registros. (ver Figura 3 ). Francisco Larrosa Cascales 3ª Parte: Microcontrolador PIC 16F84 Metodología de Programación, Programación en C, Aplicaciones electrónicas 4 / 7 La memoria de programa está organizada con palabras de 14 bits con un total de 1K. Es del tipo EEPROM y en funcionamiento es de sólo lectura. Los bancos de registros RAM son de 8 bits (byte) a excepción del contador del programa que es de 13 bits. Como puede verse en la Figura 3 las direcciones bajas contienen los registros especiales y los registros de recursos, encontrándose a continuación los registros de propósito general. El PIC 16F84 posee 68 registros que van de la dirección $00 a la $4F, aunque no todas estas direcciones se usan. El vector de reset se encuentra en la posición 0x0000h y el de interrupciones en la 0004h, por lo que la memoria de usuario propiamente dicha se extiende desde la dirección 0005h a la 03ffh. La pila es de ocho niveles. No hay ningún flag que marque si está llena, por lo que será el programador el responsable de controlar que no se produzca su desbordamiento. Francisco Larrosa Cascales 3ª Parte: Microcontrolador PIC 16F84 Metodología de Programación, Programación en C, Aplicaciones electrónicas 5 / 7 Posee además una memoria EEPROM de datos de 8 bits. Ésta no forma parte del espacio normal direccionable y sólo es accesible en lectura y escritura a través de dos registros: para los datos el EEDATA que se encuentra en la posición 0008h del banco de registros RAM y para las direcciones el EEADR en la 0009h. Para definir el modo de funcionamiento de esta memoria se utilizan dos registros especiales, el EECONl dirección 0088h y el EECON2 en 0089h. Esta memoria EEPROM no emplea ningún recurso externo de alimentación. Su programación dura unos 10 ms y se controla mediante un temporizador interno. Mencionar por último que el microcontrolador dispone de dos puertos de entrada y salida (E/S). El puerto A con 5 líneas de la RAO a la RA4 y el puerto B que dispone de 8 líneas de entrada/salida que van de la RBO a la RB7. Programa de ejemplo El primer programa que haremos estará escrito en ensamblador. La finalidad del mismo consiste en contar en binario a través del puerto B (patitas RBO RB7), iluminando, en su caso los correspondientes diodos LED. El primer paso consiste en la escritura del programa CONTAR haciendo uso de un editor de textos ASCII El segundo paso es el ensamblado de este fichero (CONTAR.ASM) empleando el compilador-ensamblador MPASM.EXE que distribuye libremente el fabricante. El ensamblador produce varios ficheros, aunque de entre ellos el que necesitamos es el fichero CONTAR.HEX. Francisco Larrosa Cascales 3ª Parte: Microcontrolador PIC 16F84 Metodología de Programación, Programación en C, Aplicaciones electrónicas 6 / 7 Francisco Larrosa Cascales 3ª Parte: Microcontrolador PIC 16F84 Metodología de Programación, Programación en C, Aplicaciones electrónicas 7 / 7 Este programa utiliza dos registros de 8 bits para realizar un contador anidado, en el que por cada iteración del contador 1 se producen 256 iteraciones del contador 2. Llegados a este punto podemos comparar el número de líneas de código en ensamblador con su equivalente en C utilizando un compilador para PIC’s: main ( ) { //Declaro dos variables auxiliares para contar char i, j, k; set_tris_b (0); for (k=0;k<255;k++) { output_port-b(k); for (i=0;i<255;i++) for (j=0;j<255;j++) } } Francisco Larrosa Cascales 3ª Parte: Microcontrolador PIC 16F84