Ing. Horacio D. Vallejo Vallejo
Microcontroladores PIC EDITORIAL QUARK
Precio en:
Arg Arg entina: $15 México $60 M.N. Venezuela: $4,500.00 Colombia: $18.000 Otros Otros Países: Países: U$S12
Con el aval de
Autor: Colaboración:
Ing. Horacio D. Vallejo Federico Prado Egon Strauss Alberto Picerno
Editado por:
EDITORIAL QUA RK S.R.L.
ISBN 987-922789-1
Herrera 761/63 (1295) Buenos Aires, Argentina Tel./fax: (0054-11) 4301-8804 Director: Horacio D. Vallejo Impresión: Imprenta Rosgal - abril 2002 Queda hecho el depósito que previene la ley 11723 Distribución en Argentina: Capital: Distribuidora Cancellaro e Hijo SH, Gutenberg 3258, Buenos Aires - Interior: Distribuidora Bertrán S.A.C., Av. Vélez Sarsfield 1950, Buenos Aires Distribución en Uruguay: Berriel y Martínez, Paraná 750, Montevideo. Distribución en México: Pernas y Cía., S.A. de C.V., Calle Poniente 134 Nº 650, Col. Ind. Vallejo, Delegación Azcapotzalco, CP 02300, México DF, Tel.: 55 87 44 55, FAX: 53 68 50 25, email:
[email protected] Distribución en otros países: Colombia: Proespind Ltda. - Cra. 54 Nº 171-21, Depto. Cundinamarca, Bogotá D.C. Tel.: 091 526 4208, Fax.: 091 679 5415, Uruguay: Amexi, Paraná 750, Tel.: 209-4709, Chile: Tel.: 01221-3356, Paraguay: Tel.: 621-698, Costa Rica: (506) 250-86-42, Ecuador: (593) 445-17-49, El Salvador: (503) 260-7151, Guatemala: (502) 361-17-50, Honduras: (504) 557-91-52, Puerto Rico: (787) 764-89-09, Rep. Dominicana: (809) 684-88-44, España: (93) 429-32-72
Representante exclusivo para todo el mundo: Centro Japonés de Información Electrónica, Norte 2 Nº 4, Col. Hogares Mexicanos Ecatepec, Edo. de México. - Director: Atsúo Kitaura - Tel.: (0155) 5787-1779 - www.centrojapones.com Solicite información al (005411)4301-8804 o por Internet a: www.webelectronica.com.ar (Los compradores de esta edición tienen acceso a información adicional con el password: pic2) La editorial no se responsabiliza por el contenido del material firmado. Todos los productos o marcas que se mencionan son a los efectos de prestar un servicio al lector, y no entrañan responsabilidad de nuestra parte. Está prohibida la reproducción total o parcial del material contenido en esta publicación, así como la industrialización y/o comercialización de los circuitos o ideas que aparecen en los mencionados textos, bajo pena de sanciones legales, salvo mediante autorización por escrito de la editorial.
Indice Cap tulo 1 Arquitectura de un PIC Introducci n ......................................................5 Caracter sticas del PIC .....................................5 Caracter sticas Perif ricas................................5 Caracter sticas Especiales del Microcontrolador ...............................................6 Patas del PIC....................................................6 Resumen del Dispositivo ..................................9 Ficha Did ctica ...............................................10 Lo que Debe Saber Sobre los PICs................................................13 a) El Procesador es segmentado tipo "pipe line" .................................................13 b) El Procesador es de tipo RISC ..................14 c) Poseen una arquitectura tipo Harvard ....................................................14 d) Son de arquitectura ortogonal basada en banco de registros .....................................15 Palabras de Configuraci n e Identificaci n................................................18 Organizaci n de la Memoria...........................19 Organizaci n de la Memoria de Programas .................................................19 Organizaci n de la Memoria de Datos..........................................................19 Los Registros del PIC.....................................20 Archivo de Registro de Uso General....................................................20 Registros de Funciones Especiales (SFR)............................................21 Registro de Status ..........................................23 Registro OPTION_REG..................................25
2
El Registro INTCON .......................................27 PCL y PCLATH ...............................................28 STACK (PILA) .................................................28 Registros INDF y FSR ....................................29 PORTS I/O......................................................30 Registros PORTA y TRISA .............................30 Registros PORTB y TRISB.............................32 M dulo Temporizador TIMER0 .......................34 Prescaler (Divisor de Frecuencia) ..................35 Interrupci n de Timer0....................................36 Memoria de Datos EEPROM..........................36 Lectura de la Memoria de Datos de EEPROM.........................................38 Escritura de la Memoria de Datos EEPROM..............................................39 Verificaci n de Escritura .................................40 La CPU del PIC ..............................................42 Bits de Configuraci n......................................43 Configuraciones del Oscilador........................43 Oscilador de Cristal o Resonador de Cer mica.................................44 Oscilador RC...................................................44 Reset...............................................................44 Reset de Encendido .......................................47 Temporizador de Arranque del Oscilador (OST)..............................................48 Temporizador de Encendido (PWRT) ...........................................................48 El Perro Guardi n (WDT) ...............................48 Interrupciones del Micro .................................49 Interrupci n Externa (INT) ..............................51 Interrupci n por Desborde del TMR0 ........................................................51 Interrupci n por Cambio de Estado en las patas RB7 y RB4 .....................51 Interrupci n por Finalizaci n de la Escritura en la EEPROM de datos ................................51
Microcontroladores PIC
Indice
Cap tulo 2 Manejo de las Instrucciones de un PIC Introducci n ....................................................53 Instrucci n: SUMA ..........................................54 C digo de la instrucci n ADDWf ....................55 El Set de Instrucciones del 16X84........................................................56 ADDLW...................................................59 ADDWF ..................................................60 ANDLW...................................................61 ANDWF ..................................................62 BCF ........................................................63 BSF ........................................................64 BTFSC ...................................................65 BTFSS....................................................67 CALL ......................................................68 CLRF......................................................69 CLRW.....................................................70 CLRWDT ................................................71 COMF.....................................................72 DECF .....................................................73 DECFSZ.................................................74 GOTO.....................................................75 INCF.......................................................76 INCFSZ ..................................................77 IORLW....................................................78 IORWF ...................................................79 MOVLW ..................................................80
MOVF.....................................................81 MOVWF .................................................82 NOP .......................................................83 RETFIE ..................................................83 RETLW ...................................................84 RETURN ................................................85 RLF ........................................................85 RRF........................................................86 SLEEP....................................................87 SUBLW...................................................88 SUBWF ..................................................90 SWAPF...................................................92 XORLW ..................................................93 XORWF ..................................................94 Palabras de Configuraci n e Identificaci n...............................................96
Cap tulo 3 Aprendiendo a Programar Circuito de un Entrenador...............................97 Encendido Intermitente de un Led......................................................100 Secuenciador de 4 Canales .........................108 Generador de Se ales de Audio...................112 Los Formatos de los Archivos.......................115 Secuenciador de 8 Canales..........................115 Compilaci n de un Programa .......................118 Carga del Programa en un PIC ....................121
Dedico este libro a todos los que trabajan por una Argentina mejor, a los que creen que es posible cambiar las cosas desde el trabajo y el esfuerzo colectivo, a los que creen que las respuestas est n en casa... en esta hermosa y bendita Am rica Latina. Dedico este libro a quienes saben construir en paz... Dedico este libro a quienes integran Editorial Quark, Imprenta Rosgal y Centro Japon s de Informaci n Electr nica. Horacio Daniel Vallejo
Microcontroladores PIC
3
Microcontroladores PICs
Pr logo: Los microcontroladores de la empresa Microchip, los PIC , est n ocupando un lugar de privilegio dentro de la industria electr nica, gracias a la facilidad de implementar programas con un set reducido de instrucciones y a la importancia que poseen sus caracter sticas. Cuando en 1998 publiqu el primer art culo sobre estos circuitos integrados, no cre que su divulgacii n llegar a tan lejos; sin embargo, cuatro a os despu s debo reconocer que trabajar con estos chips es un placer del que no se deben privar los amantes de la electr nica. Hace algo m s de un a o Editorial Quark public el primer libro sobre este tema titulado: Todo Sobre PICs , texto que trata sobre las caracter sticas fundamentales de estos dispositivos y qu es necesario para editar programas, simularlos y cargarlos en la memoria de los integrados. Dicho libro fue el punto de partida de una serie que contin a con el presente tomo y muy pronto continuar con Sistemas y Dispositivos con PICs , el tercer libro de una obra que vaya a saber en qu tomo va a culminar. Todo Sobre PICs (que tambi n fue el primer texto publicado por Editorial Quark en forma simult nea en varios pa ses de Am rica Latina) es el libro que debe leer todo aqu l que se inicia en esta disciplina, mientras que Microcontroladores PICs persigue ensear al lector a construir programas para armar sus propios dispositivos. ste es tambi n un texto b sico dado que utilizamos estructuras muy sencillas para realizar los primeros programas. Somos conscientes que para que alguien pueda trabajar con un dispositivo primero debe conocerlo y por ello en el cap tulo 1 hablamos sobre los diferentes bloques que integran a los PIC, bas ndonos en la familia 16X54/84 (que fue el componente que tomamos como referencia en el primer libro). De esta manera Ud. debe saber qu es y c mo se emplea la memoria de datos, la memoria de programas, el perro guardi n, el registro STATUS, etc. Una vez que tiene conocimientos sobre los recursos con que cuenta, en el cap tulo 2 presentamos las 35 instrucciones del set RISC de esta familia, dando ejemplos de uso en cada caso. Por ello, es probable que cuando lea algunos temas del cap tulo 1 (como verificaci n de un dato escrito en la memoria) precise conocer c mo se manejan determinadas instrucciones. Dicho de otra forma, si al leer un punto en particular no entiende alg n concepto, contin e la lectura y, seguramente, m s adelante comprender lo que hemos querido decir. Por ltimo, en el cap tulo 3 damos ejemplos de programaci n sobre circuitos reales , utilizando algunos temas escritos por el Ing. Picerno en Saber Electr nica, modificados convenientemente para que aprenda mientras se ejercita . Estoy convencido que este texto es mejor que el primero, pero no caben dudas que, si Ud. no sabe nada sobre microcontroladores, precisar leer el libro Todo Sobre PICs. Ing. Horacio D. Vallejo
4
Microcontroladores PICs
Arquitectura de un PIC
ARQUITECTURA DE UN PIC Introducci n El microcontrolador PIC16F84A de la marca Microchip es del tipo de 8 bits con EEPROM tipo flash reforzado encapsulado de 18 patas. El elevado rendimiento de este microprocesador de dise o avanzado permite realizar una gran cantidad de funciones y prestaciones como veremos a continuaci n. Caracter sticas del PIC Esta familia de microcontroladores PIC se destaca por las siguientes prestaciones especiales: • S lo se necesitan 35 instrucciones de una sola palabra para usarlo. • Todas las instrucciones son de un solo ciclo con excepci n de las ramificaciones del programa que son de dos ciclos. • La velocidad de funcionamiento es de DC a 20MHz en la entrada del clock y de DC a 200 ns (nanosegundos) en el ciclo de instrucciones. • La memoria del programa tiene capacidad para 1024 palabras (1kB). • La memoria RAM de datos es de 68 bytes. • La memoria de datos EEPROM es de 64 bytes. • Las palabras de instrucciones tienen una extensi n de 14 bits. • Los bytes de datos tienen una extensi n de 8 bits. • Posee 15 registros de hardware de funciones especiales. • Tiene una Pila de hardware de ocho niveles. • Procesa modos de acceso directo, indirecto y relativo. • Tiene cuatro fuentes de interrupciones: -Pata externa RB0/INT -Exceso del temporizador TMR0 -Interrupci n al cambio PORTB<7:4> -Al completar la escritura del EEPROM de datos. Caracter sticas Perif ricas • 13 patas I/O con control individual de direcci n. • Fuente de alta corriente para excitaci n directa de LED«s:
Microcontroladores PIC
5
Arquitectura de un PIC -25 mA m ximo de sink ( nodo) por pata -25 mA m ximo de source (c todo) por pata. • Temporizador/contador de 8 bits TMR0 con preescaler (divisor de frecuencia) programable de 8 bits. Caracter sticas Especiales del Microcontrolador • Memoria de programa de 1000 ciclos de escritura/borrado de flash reforzado. • Memoria de datos EEPROM de 1.000.000 de ciclos de borrado/escritura t pica. • Retenci n de datos de EEPROM de >40 a os. • Programaci n en serie dentro del circuito (ICSP = In Circuit Serial Programming) mediante dos patas. • Power-on Reset (POR), Power-up Timer (PWRT), Oscillator Start-up Timer (OST). • Watchdog Timer (WDT) con su propio oscilador RC incorporado en el chip para un funcionamiento confiable. • Protecci n de c digos. • Modo SLEEP para economizar consumo. • Opciones seleccionables de oscilador. • Tecnolog a CMOS con Flash reforzado y EEPROM. • Tecnolog a de baja potencia y alta velocidad. • Dise o est tico completo. • Rango amplio de tensiones de funcionamiento: -Comercial: 2,0 Volt a 5,5 Volt -Industrial: 2,0 Volt a 5,5 Volt. • Consumo muy bajo: - < 2mA t pico a 5 Volt, 4MHz - 15 A t pico a 2 Volt, 32kHz - < 0,5 A t pico de corriente en reposo a 2 Volt. Patas del PIC El microcontrolador PIC16C84 es un chip que como puede apreciarse en la figura 1, dispone de 18 patas. La funci n que cumple cada una de ellas es la siguiente: Patas 1, 2, 3 17 y 18 - RA0-RA4/TOCK1 : Es el PORT A. Corresponden a 5 l neas bidireccionales de E/S. Es capaz de entregar niveles TTL cuando la tensi n de alimentaci n aplicada en VDD es de 5V – 5%. El pin RA4, si se programa como sa-
6
Microcontroladores PIC
Arquitectura de un PIC Figura 1
lida es de colector abierto. Como entrada puede programarse en funcionamiento normal o como entrada del contador/temporizador TMR0. ______ Pata 4 - MLCR / Vpp: Es una pata de m ltiples aplicaciones, es la entrada de Reset si est a nivel bajo y tambi n es la habilitaci n de la tensi n de programaci n cuando se est programando el dispositivo. Cuando su tensi n es la de VDD el PIC funciona normalmente. Patas 5 y 14 - VSS y VDD: Son respectivamente las patas de masa y alimentaci n. La tensi n de alimentaci n de un PIC est comprendida entre 2V y 6V aunque se recomienda no sobrepasar los 5,5V. Dependiendo de la letra que posea al final, el PIC ser la tensi n admisible. Los modelos que contienen las letras C, F o CR admiten tensiones de alimentaci n comprendidas entre 4V y 4,5V como m nimo hasta 5,5V a 6V como m ximo. Los modelos que contienen las letras LC, LF o LCR admiten desde 2V a 6V. Patas 6, 7, 8, 9, 10, 11, 12, 13 - RB0-RB7: Es el PORT B. Corresponden a ocho l neas bidireccionales de E/S. Pueden manejar niveles TTL cuando la tensi n de alimentaci n aplicada en VDD es de 5V – 5%. RB0 puede programarse adem s como entrada de interrupciones externas INT. Los pines RB4 a RB7 pueden programarse para responder a interrupciones por cambio de estado. Las patas RB6 y RB7 se corresponden con las l neas de entrada de reloj y entrada de datos respectivamente, cuando est en modo programaci n del integrado. Patas 15 y 16 - OSC1/CLKIN y OSC2/CLKOUT: Corresponden a los pines de la entrada externa de reloj y salida de oscilador a cristal respectivamente. Los distintos elementos de la familia 16X84X, dependiendo de la nomenclatura que utilizan tienen
Microcontroladores PIC
7
Arquitectura de un PIC distintas caracter sticas de frecuencia m xima de funcionamiento, tipo de oscilador utilizado para generar frecuencias de reloj y margen de la tensi n de alimentaci n. Los microcontroladores PIC, permiten cuatro tipos de osciladores externos para aplicarles la frecuencia de funcionamiento. Durante el proceso de grabaci n, antes de introducir el programa en memoria, debe indicarse el tipo de oscilador empleado en los bits FSOC1 y FSOC2 de la Palabra de Configuraci n. Los tipos de osciladores que pueden utilizar los PIC16X54/84 son: * Oscilador de cristal o resonador de alta velocidad "HS"(High Speed Crystal/Resonator): Es un oscilador con una frecuencia comprendida entre 4MHz y 20MHz (figura 2). * Oscilador o resonador cer mico "XT" (Crystal/Resonator): Es un oscilador est ndar que permite una frecuencia de clock m xima de 4MHz. * Oscilador a cristal o resonador cer mico de baja potencia "LP" (Low Power Crystal): Se trata de un oscilador de bajo consumo construido con un cristal de cuarzo o un resonador dise ado para trabajar con frecuencias comprendidas entre 30kHz y 200kHz. * Oscilador RC (resistencia capacitor): Tambi n es posible construir un oscilador mediante la colocaci n de una resistencia y un capacitor externo. Se trata de un oscilador de bajo costo. Su circuito de aplicaci n es el que se muestra en la figura 3. Posee baja precisi n la cual depende de la estabilidad de la red RC, pero es f cil de construir y de bajo precio lo que lo hace interesante para muchas aplicaciones. La resistencia debe tener un valor comprendido entre 5k‰ y 10k‰. Figura 2
Figura 3
El circuito que opera con un cristal o un resonador se muestra en la figura 2 y depende de los valores de C1, C2 y del cristal para el buen funcionamiento del mismo. Se recomienda ver la tabla de datos del fabricante, aunque para los PIC16X54/84 los capacitores pueden ser del orden de los 27pF para casi todo el rango de frecuencias. En la figura 3 se muestra un oscilador construido a partir de una celda RC.
8
Microcontroladores PIC
Arquitectura de un PIC
Resumen del Dispositivo El PIC16F84A, utilizado en muchas aplicaciones y que ha servido de base para la elaboraci n del primer texto de esta serie titulado: Todo Sobre PICs , pertenece a la familia de rango medio de los microcontroladores PIC. Un diagrama en bloques se encuentra en la figura 4. Figura 4
Microcontroladores PIC
9
Arquitectura de un PIC Ficha Did ctica Antes de avanzar sobre la estructura interna de un PIC, vamos a realizar el primer resumen mediante una ficha t cnica que contiene la descripci n interna del circuito integrado. Los circuitos integrados programables (PIC) de Microchip son microcontroladores con una estructura interna como la mostrada en la figura 4. Existe un grupo de bloques dedicados a mejorar el funcionamiento pero sin influir directamente en el flujo de señales. Vemos un temporizador de encendido, un temporizador de arranque del oscilador de CLOCK, un circuito de reset y un circuito llamado de vigilancia o WATCHDOG. Los dos primeros bloques procuran un arranque ordenado para no producir una carga al mismo tiempo sobre la fuente. El circuito interno de reset se encarga de volver a “cero” el funcionamiento del circuito cuando sea requerido. Por último, existe un circuito con un nombre curioso, si el lector sabe algo de inglés habrá traducido el nombre literalmente como “perro guardián”. Su función es estar vigilante el máximo tiempo que tarda el microprocesador en completar su programa (o mejor sería decir, la derivación más larga de su programa) y en caso de superarse ese tiempo, provocar un reset automático porque el microprocesador se quedó trabado en alguna parte de su programa. También se dice que el microprocesador se quedó colgado o congelado. Este bloque de circuitos no trabaja independientemente sino que requiere conexiones al exterior y al interior del dispositivo. Por ejemplo, no siempre son utilizados y es el programa quien determina su utilización y además ajusta sus parámetros. Esto se realiza a través del bloque de control o decodificador de instrucciones. Analicemos ahora la sección de arriba a la izquierda en donde observamos la memoria de programa, el contador de programa, el registro de instrucciones y la pila o STACK de 8 niveles. Cuando hablamos de registros nos referimos a pequeñas unidades de memoria transitoria, construida por lo general con un registro de desplazamiento. Son memorias volátiles que se utilizan para guardar información por un tiempo mínimo con el fin de realizar una operación compleja de varios pasos. El contador de programa es el responsable de que el microprocesador vaya analizando las instrucciones en orden ascendente. El guarda el número de instrucción en el STACK y la instrucción misma le pasa registro de instrucciones desde donde se envía al resto del microprocesador. El STACK es, en realidad, una pila de registros (en nuestro ejemplo hay 8) debido a que el programa puede tener derivaciones (en la jerga LOOPS, rulos o subprogramas). Cuando se termina de ejecutar un loop se debe volver al mismo punto del programa en donde se había producido la bifurcación y eso es posible porque ese número de instrucción quedó guardado en uno de los registros de la pila. Es común que un loop tenga, a su vez, un loop secundario y cuando se ejecuta ese loop secundario se debe volver al mismo punto del loop primario, eso se consigue
10
Microcontroladores PIC
Arquitectura de un PIC guardando ese número de instrucción del loop secundario en otro registro de la pila. Analicemos ahora la sección inferior derecha. En ese sector se ubican los bloques responsables de efectuar operaciones matemáticas y lógicas binarias; recordemos que el nombre ALU proviene de Aritmetic Logic Unite (unidad arimética y lógica). En este sector es imprescindible utilizar un registro ya que una operación aritmética o lógica siempre se efectúa entre dos números. Los números binarios que deben procesarse se toman de la memoria de datos, el primero se acumula en el registro de trabajo o registro W (de Work = trabajo) el segundo es el presente en el instante en que se invoca la memoria de datos. Como las operaciones pueden ser encadenadas (cuando el resultado sirve como operando de la siguiente operación, tal como el caso de un producto) el registro W tiene un retorno a la ALU. Vemos además que la ALU está comandada por el bloque MUX (MUltipleXador). En efecto, la ALU requiere que se le envíen números para procesar que le lleguen desde la memoria de datos pero antes se la debe predisponer para que efectúe la operación requerida (comparación, rotación de dígitos, etc.). El registro de estado o estatus colabora durante las operaciones matemáticas. Piense cómo opera Ud. para realizar una resta: primero ubica el primer número, luego el segundo y después comienza a analizar los bits menos significativos (las unidades), pero si el número de arriba es menor que el número de abajo, entonces toma prestado de la columna de las decenas, luego debe recordar esto porque el número de arriba en la columna de las decenas se redujo en una unidad. En realidad, aunque se trate de una operación entre dos números su ejecución requiere guardar lo que se llama acarreo en otro registro y este no es otra cosa más que el registro STATUS. En resumen, las características sobresalientes de los PICs son las siguientes: Denominación: PIC1XXXX. Longitud de palabra: 14 bits. Memoria: EEPROM. Desde 512bytes de ROM y 32bytes de RAM a 4kB de ROM y 256bytes de RAM. Interface I/O: 13 patas seleccionables de entrada/salida en los modelos estándar. Arquitectura: Von Neumann (Instrucciones y datos juntos). La mayoría de las instrucciones se ejecutan en un ciclo. Pero posee un set de sólo 35 instrucciones de tipo RISC (Reduced Instruction Set Computer). Alimentación: 4 a 6V. Encapsulado: Múltiples versiones, lo normal es DIP de 18 patas. Fácil de programar, fácil de cargar, extremadamente confiable, económico. Se encuentra gran cantidad de software y hardware sin cargo. Ideal para Aplicaciones en servicio de equipos, diseños y construcción de "circuitos integrados a medida".
Microcontroladores PIC
11
Arquitectura de un PIC La memoria de programa contiene palabras de 1kB, lo que permite la formaci n de 1024 instrucciones, ya que cada palabra del programa posee el mismo ancho que cada instrucci n. La memoria de datos RAM contiene 68 bytes. La memoria de datos EEPROM contiene 64 bytes. Adem s existen 13 patas de I/O que se pueden configurar para el usuario en forma individual. Algunas patas son multiplexadas con otras funciones del dispositivo (tal como vimos anteriormente). Estas funciones incluyen:
• Interrupciones externas. • Cambios en la interrupci n de PORTB. • Entrada de clock Timer0. La Tabla 1 muestra las funciones de las patas del dispositivo con las descripciones y detalles de cada una.
12
Microcontroladores PIC
Arquitectura de un PIC
Lo que Debe Saber Sobre los PICs El PIC16X84 al igual que los dem s miembros de su familia, se caracterizan porque: a) El Procesador es segmentado tipo "pipe-line": Lo que significa que aplica la t cnica de segmentaci n que permite al procesador realizar simult neamente la ejecuci n de una instrucci n y la b squeda del c digo de la siguiente instrucci n. Esto permite que se pueda ejecutar una instrucci n en un ciclo. (Cada ciclo de instrucci n son cuatro ciclos de reloj). Es decir, la mayor a de las instrucciones se realizan en un ciclo de contador de programa (ciclo de instrucci n) excepto las instrucciones de salto que necesitan dos ciclos para ejecutarla. Se determina el ciclo de instrucci n dividiendo por cuatro la frecuencia del oscilador, elegida para el funcionamiento del microcontrolador tal como se observa en la figura 5. Es decir, la se al que proviene del oscilador externo, conectado a los pines OSC1/CLKIN y OSC2/CLKOUT del microcontrolador, se divide en cuatro ciclos, obteni ndose as la se al requerida por el procesador interno para realizar las operaFigura 5
Microcontroladores PIC
13
Arquitectura de un PIC ciones. De esta manera se puede realizar la b squeda y ejecuci n de la instrucci n. El reloj de instrucci n es el ciclo interno que posee el microcontrolador para cronometrar el tiempo de ejecuci n de las instruciones. Los pulsos entrantes del reloj son divididos por 4, generando diferentes se ales denominadas Q1, Q2, Q3 y Q4. El estado Q1 hace incrementar el contador de programa, Q2 y Q3, se encargan de la decodificaci n y ejecuci n de la instrucci n y por ltimo, Q4 es la fase de b squeda de la instrucci n. El c digo se almacena en el registro de instrucciones. b) El procesador es de tipo RISC: Esto implica que el P puede operar con un juego de instrucciones m nimo (35 instrucciones). Las CPU«s atendiendo al tipo de instrucciones que utilizan pueden clasificarse en:
• CISC: (Complex Instruction Set Computer). Procesadores de juego de instrucciones complejo, que disponen de un elevado n mero de instrucciones (unas 80), algunas de ellas complejas y potentes, pero que requieren muchos ciclos de m quina para ejecutar las instrucciones m s poderosas. • RISC: (Reduced Instruction Set Computer). Controladores que manejan un juego de instrucciones reducido, en los que la cantidad de instrucciones es m nima (en nuestro caso 35). Las instrucciones son muy simples y suelen ejecutarse en un ciclo m quina. Adem s los RISC deben tener una estructura pipeline (vea nuevamente la figura 1) y ejecutan todas las instrucciones a la misma velocidad. • SISC: (Specific Instriction Set Computer). Computadoras que manejan un set de instrucciones espec fico. c) Poseen una arquitectura tipo Harvard: Para la construcci n de microprocesadores existen b sicamente dos tipos de arquitecturas, una en la que los datos y la memoria del programa poseen la misma direcci n (denominada Von Neumann) y otra en la que existe un BUS de comunicaci n independiente para la memoria de datos y la memoria de programa (arquitectura Harvard). La mayor a de los microprocesadores tradicionales se basan en la estructura tipo Von Neumann (figura 6), que se caracteriza por disponer de una nica memoria
Figura 6
14
Microcontroladores PIC
Arquitectura de un PIC
Figura 7
principal en la que se almacenan los datos y las instrucciones, teniendo en cuenta que existe un sistema de BUS de acceso formado por: • Bus de datos • Bus de direcciones • Bus de control El modelo Harvard, representado en la figura 7, dispone de dos memorias: • Memoria de datos • Memoria de Programa En los procesadores basados en esta arquitectura cada memoria dispone de su respectivo bus, lo que permite, que la CPU pueda acceder de forma independiente y simult nea a la memoria de datos y a la de programa (instrucciones). Como los buses son independientes stos pueden tener distintos contenidos en la misma direcci n . d) Son de arquitectura ortogonal basada en banco de registros: Esto significa que cualquier instrucci n puede utilizar cualquier elemento de la arquitectura como fuente o destino. Adem s todos los elementos del sistema (temporizadores, puertos de entrada/salida, posiciones de memoria, etc.), est n implementados f sicamente como registros (de ah el nombre banco de registros ). Al tener manejo de banco de registros, la ALU (Unidad Aritm tico-L gica) efect a sus operaciones con dos operandos, uno que proviene del registro W (Work -que en otras CPUs recibe el nombre de Acumulador-), y el otro que se encuentra en cualquier otro registro del P. En la figura 8 vemos el diagrama que indica c mo se ejecuta una instrucci n, la ALU recibe datos del registro de trabajo y un registro MPX y el resultado puede ir a cualquier registro o al registro W. El PIC 16X54/84 posee caracter sticas importantes que lo hace til para el diseo de circuitos generales. Entre las caracter sticas m s importantes podemos resaltar las siguientes: • Memoria de programa EEPROM de 1Kx14 bits • Memoria de datos dividida en 2 reas:
Microcontroladores PIC
15
Arquitectura de un PIC rea RAM formada por 22 registros de prop sito espec fico (SFR) y 36 de prop sito general (GPR). rea EEPROM formada por 64 bytes. • ALU de 8 bits y registro de trabajo W del que normalmente recibe un operando que puede ser cualquier registro, memoria, puerto de Entrada/Salida o el propio c digo de instrucci n. • Varios canales para conectar al bus de datos: PortA de 5 bits
, PortB de 8 bits , Temporizador con Preescaler TMR0, etc. • Contador de programa de 13 bit (lo que en teor a permitir a direccionar 4kB de memoria, aunque el 16X84 solo dispone de 1kB de memoria implementada). • Pila de 8 niveles. Figura 8
La arquitectura del PIC16X84 se mantiene para todos los microcontroladores de esta subfamilia, diferenci ndose unos de otros por las siguientes caracter sticas:
• PIC 16F84: La memoria de programa es de lk, las palabras son de l4 bits, pero de tipo Flash. La memoria de datos RAM tiene 68 registros de tama o byte de prop sito general, en lugar de 36. • PIC16CR84: La memoria de programa es de 1k con palabras de 14 bits tipo ROM y la de datos tiene iguales caracter sticas que el PIC16F84. • PIC16F83: La memoria de programa es de 512 palabras de 14 bits y la RAM de datos tiene 36 bytes de registros de prop sito general. • PIC16CR83: Es igual que el PIC16F83, pero la memoria de instrucciones es de tipo ROM, o sea, s lo grabable durante el proceso de fabricaci n para ser utilizados con fines espec ficos (circuito integrado a medida). La caracter stica m s importante del PIC16C84 es que su memoria de programa es del tipo EEPROM y en el caso del PIC16F84 la principal caracter stica es que su
16
Microcontroladores PIC
Arquitectura de un PIC memoria es del tipo flash, por lo dem s, otros dispositivos de esta familia disponen de m s memoria, tienen m s perif ricos, etc. Los microcontroladores de la gama media disponen de un Contador de Programa (PC CP) de 13 bits, cuyos bits de menor peso corresponden a los 8 bits del registro PCL, implementado en la posici n de memoria RAM 02h (y duplicado en la posici n 82h),y los cinco bit de mayor peso del CP corresponden con los 5 bits de menor peso del registro PCLATCH, implementado en la posici n de memoria RAM 0Ah (y duplicado en la posici n 8Ah), lo que le permite direccionar hasta 8k x 14 bits dividido en p ginas de 2k x 14 bits. El PIC16C84 dispone de 1k x14 bits de memoria implementada, desde la posici n 0000h hasta la 03FFh, los 3 bit de mayor peso del CP no se utilizan, as pues la direcci n 20h, 320h, 420h, A20h,1420h, etc. se considera como la misma (figura 9). Figura 9
Un Reset provoca que se pongan a cero todos los bits del los registros PCL (parte baja del PC) y PCLATCH, forzando que la direcci n de inicio sea la 0000h. El vector de reset se almacena en la direcci n 0000h, mientras que el vector de interrupci n est en la direcci n 0004h (figura 10). La memoria de programa de usuario propiamente dicha, comienza en la posici n 0005h y llega hasta la 03FFh. La pila es una zona de memoria, que se encuentra separada tanto de la memoria de programa como de la de datos. Tiene una estructura LIFO (Last In First Out), lo que significa que el ltimo dato que se guarda es el primero que sale.
Microcontroladores PIC
Figura 10
17
Arquitectura de un PIC Tiene 8 niveles con una longitud de 13 bits cada uno. Su funcionamiento es como el de un buffer circular, de tal forma que el valor que se obtiene al realizar nueve desplazamientos, es igual al primer desplazamiento. La nica manera de cargar la Pila es a trav s de la instrucci n CALL (llamada a subrutina) o por una interrupci n que hacen que con cada una de ellas, se cargue el contenido del PC en el valor superior de la Pila. Para recuperar el contenido de la Pila en el PC hay que ejecutar una instrucci n RETURN, RETLW o RETFIE (vuelta del programa de atenci n a una subrutina o interrupci n).
Palabras de Configuraci n e Identificaci n Los PIC de la gama media disponen de una palabra de configuraci n de 14 bits que se escribe durante el proceso de grabaci n del dispositivo y que debe hacerse de acuerdo con el sistema en el que se va a insertar. Dichos bits ocupan la posici n reservada de memoria de programa 2007h. La estructura de la palabra de configuraci n es la mostrada en la figura 11. Figura 11
Bit 4: CP, bit de configuraci n de la protecci n 1= Protecci n de c digo desactivado 0= Protecci n de c digo activado Bit 3: PWRTE, activaci n del temporizador "Power-Up" 1= Desactivado 0= Activado Bit 2: WDTE, bit de configuraci n habilitaci n del Watchdog (WDT) 1: WDT activado 0: WDT desactivado Bit 1 y Bit 0: FOSC<1:0>, tipo de oscilador empleado 11: Oscilador RC 10: Oscilador HS ( 8 - 20MHz) 01: Oscilador XT ( 100 KHz- 4MHz) 00: Oscilador LP (Bajo consumo 32- 200Hz)
18
Microcontroladores PIC
Arquitectura de un PIC Adem s dispone de cuatro posiciones de memoria de programa ubicadas en las direcciones <2000h:2003h>, reservadas para las Palabras de Identificaci n ID. Estas palabras que se escriben durante el proceso de grabaci n, s lo emplean los 4 bits de menos peso y se utilizan por el programador para indicar el c digo del dispositivo, el n mero de serie, la versi n del programa, etc.
Organizaci n de la Memoria En el PIC16F84A existen dos bloques de memoria. Estos son la memoria del programa y la memoria de datos. Cada bloque posee su propio bus, de tal forma que el acceso a cada uno puede producirse durante el mismo ciclo del oscilador. La memoria de datos puede dividirse m s a n en la RAM de fines generales y los Registros de Funciones Especiales (SFR). El rea de la memoria de datos contiene tambi n los datos de la memoria EEPROM. Esta memoria no est directamente introducida en la memoria de datos, si no es registrada en forma indirecta. Esto significa que un puntero indirecto de direcciones especifica la direcci n de la memoria de datos EEPROM para escribir y leer. Los 64 bytes de la memoria de datos EEPROM poseen el rango de direcciones de 0h a 3Fh. M s detalles sobre la memoria EEPROM veremos en otro apartado.
Organizaci n de la Memoria de Programas. El PIC16FXX posee un contador de programas de 13 bits capaz de direccionar un espacio de memoria de programas de 8k x 14. Para el Pic16F84A, los primeros 1k x 14 (0000h-03FFh) est n f sicamente implementados como vimos en la figura 10. Tal como se muestra, el acceso a una locaci n por encima de la direcci n f sicamente implementada, causar un plegado. Por ejemplo, las locaciones 20h, 420h, 820h, C20h, 1020h,1420h, 1820h y 1C20h tendr n la misma instrucci n. El vector de reset est en 000h y el vector de interrupt en 0004h. Nota: Como puede observar, estamos repitiendo algunos conceptos; esto lo hacemos porque tratamos de ver un tema desde distintos puntos de vista con el objeto de facilitar el aprendizaje del lector.
Organizaci n de la Memoria de Datos. La memoria de datos est repartida en dos reas. El primero es el rea de Registros de Funciones especiales (SFR), mientras que el segundo es el Registro de Fines Generales (GPR). Los registros SFR controlan el funcionamiento del dispositivo. Partes de la memoria de datos est n colocados en bancos. Esto es v lido tanto para el rea de SFR como para el rea GPR. El rea de GPR es apilado para permitir m s que 116 bytes de RAM de uso general. Los reas de apilados del SFR se
Microcontroladores PIC
19
Arquitectura de un PIC destinan a los registros que controlan las funciones perif ricas. El apilado requiere el uso de bits de control para la selecci n de bancos. Estos bits de control se encuentran en el registro de STATUS. La figura 12 muestra la organizaci n del mapa de datos de la memoria. Las instrucciones MOVWF y MOVF permiten mover valores del registro W hasta cualquier locaci n en el archivo de registros ( F ) y viceversa. Se puede acceder a la memoria de datos entera en forma directa usando la direcci n absoluta de cada registro o en forma indirecta mediante el Registro de Selecci n de Archivos (FSR). El direc- Fig. 12 cionamiento indirecto usa el bit RP0 para acceder a las reas apiladas de la memoria de datos. La memoria de datos est dividida en dos bancos que contienen los registros de uso general y los registros de funciones especiales. El Banco 0 es seleccionado eliminando el bit RP0 (STATUS<5>). El ajuste del bit RP0 selecciona el Banco 1. Cada Banco se extiende hasta 7Fh (128 bytes). Las primeras doce locaciones de cada Banco est n reservadas para los Registros de Funciones Especiales (SFR). El resto son Registros de Uso general implementados como RAM.
Los Registros del PIC Archivo de Registro de Uso General. Cada Registro de Uso general (GPR) tiene un ancho de 8 bits y se accede en forma directa o indirecta mediante el FSR, como se explica m s adelante. Las direcciones GPR en el banco 1 est n conectados con direcciones en el Banco 0. Como ejemplo, la direcci n de la locaci n 0Ch o 8Ch, llamar el mismo GPR.
20
Microcontroladores PIC
Arquitectura de un PIC Registros de Funciones Especiales (SFR). Los Registros de Funciones especiales de la Figura 13 son usados por la CPU y las funciones Perif ricas para controlar el funcionamiento del dispositivo. Estos registros son RAM Est ticos (si bien mantenemos la figura en ingl s para preservar el formato dado por los manuales de Microchip, tambi n brindamos la versi n en castellano). Figura 13.A
Microcontroladores PIC
21
Arquitectura de un PIC Figura 13.B
22
Microcontroladores PIC
Arquitectura de un PIC Los Registros de Funciones Especiales pueden clasificarse en dos grupos: a) n cleo y b) perif rico. Aquellos asociados con las funciones del n cleo se describen en esta Secci n. Los relacionados con el funcionamiento de las caracter sticas perif ricas se describen en la Secci n respectiva. Leyendas de la figura 13 A y B: x = desconocido, u = sin cambio, - = sin implementar, leer como cero q = valor depende de las condiciones. Nota: 1. El byte superior del contador de programa no es directamente accesible. PCLATH es un registro esclavo para PC<12:8>. El contenido de PCLATH puede ser transferido al byte superior del contador de programa, pero el contenido de PC<12:8> no es transferido nunca a PCLATH. 2. Los bits de Status TO y PD del registro de STATUS no son afectados por el reset de MCLR. 3. Otros resets que no son POWER UP incluyen: reset externo por MCLR y el reset del temporizador de watchdog. 4. En todos los resets del dispositivo, estas patas son configuradas como entradas. 5. Este es el valor que se encontrar en el latch de la salida del port.
Registro de Status El registro del STATUS contiene el status aritm tico de la ALU, el status de reset y el bit selector de bancos para la memoria de datos. Como en todo registro, el registro de STATUS puede ser el destino de cualquier instrucci n. Si el registro de STATUS es el destino de una instrucci n que afecta los bits Z, DC o C, entonces la escritura de estos tres bits es desactivado. Estos bits son ajustados o anulados en concordancia con la l gica del dispositivo. Adem s, los bits TO y PD (la notaci n TO significa que el bit est activo con 1 o lo que es lo mismo: TO = negado de TO) no pueden ser escritos. Por lo tanto, el resultado de una instrucci n con el registro de STATUS como destino, puede ser diferente al previsto. Por ejemplo, CLRF STATUS anular los tres bits superiores y ajustar el bit Z. Esto dejar el registro de STATUS como 000u u1uu (donde u queda sin cambio). S lo las instrucciones BCF, BSF, SWAPF y MOVWF deben ser usados para al-
Microcontroladores PIC
23
Arquitectura de un PIC terar el registro STATUS, como veremos en el cap tulo dedicado al Set de Instrucciones, debido a que estas instrucciones no afectan ning n bit de status. Notas: 1. Los bits IRP y RP1 (STATUS<:6>) no se usan en el PIC16F84A y deben ser programados como anulados. El uso de estos bits como bits R/W de uso general, no es recomendado, debido a que puede afectar la compatibilidad para arriba con productos futuros. 2. Los bits C y DC funcionan como bits de BORROW (BORROW es el negado de BORROW), en operaciones de resta. Ver ejemplos en las instrucciones de SUBLW y SUBWF del cap tulo de Set de Instrucciones. 3. Cuando el registro de STATUS es el destino para una instrucci n que afecta los bits Z, DC o C, entonces se impide la escritura de estos tres bits. El bit espec fico ser actualizado en concordancia con la l gica del dispositivo. En la Figura 14 vemos aspectos del registro de STATUS.
Figura 14
Veamos qu significado y qu valor puede tener cada bit del registro STATUS: Bit 7, IRP: Bit de Selecci n de Banco de Registro, usado para direccionamiento indirecto. El bit IRP no es usado por el PIC16F84A. Mantenga IRP desactivado. Bit 6-5, RP1:RP0: Bits de Selecci n de Banco de Registro, usado para direccionamiento directo. 00 = Banco 0 (00h — 7Fh) 01 = Banco 1 (80h — FFh) Cada Banco posee 128 bytes. En el PIC16F84A se usa solo RP0. Mantenga. RP1 se mantendr desactivado. Bit 4, TO : Bit de Time out (fin de tiempo). 1 = Despu s de Encendido, instrucci n CLRWDT, o instrucci n SLEEP (toma el estado 1 ).
24
Microcontroladores PIC
Arquitectura de un PIC 0 = Cuando est en 0 es porque sucedi un Time out WDT (perro guardi n). Bit 3, PD: Bit de Power Down. 1 = Despu s de Power up o por la instrucci n CLRWDT. 0 = Al ejecutar la instrucci n SLEEP. Bit 2, Z: Bit cero. 1 = El resultado de una operaci n aritm tica o l gica es cero. 0 = El resultado de una operaci n aritm tica o l gica no es cero. Bit 1, DC: Bit de llevar o prestar en las instrucciones ADDWF y ADDLW. Para prestar la polaridad es invertida. 1 = Cuando ocurre un exceso en el resultado del 4… bit de menos peso. Acarreo en la suma. 0 = Cuando no ocurre un exceso en el resultado del 4… bit de menos peso. No hay acarreo en la suma (en la resta es lo contrario). Bit 0, C: Bit de carry/borrow (llevar/prestar) para las instrucciones ADDWF y ADDLW. 1 = Cuando ocurre un exceso en el resultado del bit m s significativo. Acarreo en la suma y no en la resta. 0 = Cuando no ocurre un exceso en el resultado del bit m s significativo. Acarreo en la resta y no en la suma. Nota: Para BORROW (prestar d gitos) se invierte la polaridad. Una resta se ejecuta al sumar el complemento de dos del segundo operando. Para instrucciones de rotaci n (RRF, RLF), este bit es cargado con el bit de orden superior o inferior del registro de fuente. Recuerde que: _________ ___ ___ BORROW = BORROW TO = TO PD = PD
Registro OPTION_REG. Ocupa la posici n la 81h del banco de registro 1. Es recomendable darle otro nombre por ejemplo "OPTION" en el programa ensamblador, para que el programa ensamblador no d mensajes de error, ya que en los PIC de la gama baja existe la instrucci n OPTION. El registro OPTION_REG (o simplemente registro OPTION) es un registro para escribir y leer que contiene varios bits de control para configurar el prescaler TMR0/WDT, el interrupt INT externo, el TMR0 y el pull-up d bil de PORTB.
Microcontroladores PIC
25
Arquitectura de un PIC Nota: Cuando el prescaler es asignado a WDT (PSA = 1), TMR0 tiene una asignaci n de prescalador de 1:1. En la figura 15 vemos el Registro de OPTION_REG (direcci n 81h).
Figura 15
bit 7, RPBU : Resistencia Pull-up, Puerto B, habilita el bit 1: Desactivadas 0: Activadas bit 6, INTEDG: Flanco activo para el control de interrupciones 1: Con flanco Ascendente 0: Con flanco Descendente bit 5, TOCS: Fuente de Reloj para TMR0 1: Pulsos introducidos a trav s de RA4/T0CK1 (Contador) 0: Pulsos de reloj interno Fosc/4 (Temporizador) bit 4, TOSE: Tipo de flanco en TOCK1 1: Incremento de TMR0 cada flanco descendente 0: Incremento de TMR0 cada flanco ascendente bit 3, PSA: Bit de asignaci n del prescaler divisor de frecuencia 1: El divisor de frecuencia se asigna al WDT 0: El divisor de frecuencia se asigna al TMR0 bit 2-0, PS2:PSO: Rango con el que act a el divisor de frecuencia, ste procede de acuerdo con la siguiente tabla:
26
Microcontroladores PIC
Arquitectura de un PIC
El Registro INTCON El registro INTCON es un registro de lectura y escritura que contiene los diferentes bits de activaci n de todas las fuentes de interrupci n. Sus detalles se encuentran en la figura 16.
Figura 16
Las siglas de esta figura significan lo siguiente: R = Bit Legible W = Bit Escribible U = Bit sin implementar, leer como cero - X = valor en reset POR. Cada bit posee el significado y toma el valor que describimos a continuaci n: Bit 7, GIE: Bit Global Interrupt Enable. 1 = Activa todos los Interrupt sin m scara. 0 = Desactiva todos los Interrupt. Bit 6, EIIE: Bit EE Write Complete Interrupt Enable. 1 = Activa el EE Write Complete Interrupt. 0 = Desactiva el EE Write Complete Interrupt. Bit 5, T0IE: Bit de TMR0 Overflow Interrupt Enable.
Microcontroladores PIC
27
Arquitectura de un PIC 1 = Activa el TMR0 Interrupt. 0 = Desactiva el TMR0 Interrupt. Bit 4, INTE: Bit de Interrupt Enable RB0/INT. 1 = Activa el Interrupt RB0/INT. 0 = Desactiva el Interrupt RB0/INT. Bit 3, RBIE: Bit de RB Port Change Interrupt Enable. 1 = Activa el RB Port Change Interrupt. 0 = Desactiva el RB Port Change Interrupt. Bit 2, T0IF: Bit de TMR0 Overflow Interrupt Flag. 1 = TMR0 tiene exceso y debe ser limpiado en software. 0 = TMR0 no tiene exceso. Bit 1, INTF: Bit de RB0/INT Interrupt Flag. 1 = Ocurri un RB0/INT Interrupt. 0 = No ocurri un RB0/INT Interrupt. Bit 0, RBIF: Bit de RB Port Change Interrupt Flag. 1 = Cuando por lo menos una de las patas de RB7 a RB4 cambi (debe ser limpiado en software). 0 = Ninguna de las patas RB7:RB4 cambi .
PCL y PCLATH El contador de programas (PC de program counter , tambi n denominado CP en este texto) especifica la direcci n de la instrucci n a buscar para la ejecuci n. El ancho del PC es de 13 bits. El byte bajo se denomina Registro PCL. Este Registro es legible y escribible. El byte alto se denomina Registro PCH. Este Registro contiene PC<12:8> bits y no es legible ni escribible en forma directa. Todas las actualizaciones del Registro PCH se canalizan a trav s del Registro PCLATH.
STACK (PILA) La pila permite que ocurra una combinaci n de hasta 8 llamadas de programa e interrupciones. La pila contiene la direcci n de retorno de esta rama de la ejecuci n de programas. Los dispositivos de rango medio poseen una pila de hardware de una profundidad de 8 niveles por 13 bits de ancho. El espacio de la pila no es parte de ning n programa ni de espacio de datos y el puntero de la pila no es legible ni escribible. El contador PC ( CP) es colocado a la pila v a PUSH cuando una instrucci n CALL es ejecutada o cuando una orden de interrupt produce una ramificaci n. La pila ejecu-
28
Microcontroladores PIC
Arquitectura de un PIC ta la orden POP cuando se ejecutan las rdenes RETURN, RETLW o RETFIE. PCLATH no se modifica cuando la pila ejecuta PUSH o POP. Despu s de ejecutar ocho veces la orden PUSH, la novena sobrescribe el valor que fuera almacenado del primer PUSH. El d cimo PUSH sobrescribe el segundo PUSH y as sucesivamente.
REGISTROS INDF y FSR El registro INDF no es un registro f sico. Dirigirse a INDF en realidad produce la direcci n del registro que est contenido en el registro FSR. FSR es un puntero. Esto se denomina Direccionamiento Indirecto. EJEMPLOS: 1: Direccionamiento Indirecto. • El archivo de registro 05 contiene el valor 10h. • El archivo de registro 06 contiene el valor 0Ah. • Cargue el valor 05 al registro FSR. • La lectura del registro INDF devuelve el valor de 10h. • Incremente el valor del registro INDF por uno (FSR = 06). • La lectura del registro INDF devuelve ahora el valor de 0Ah. La lectura indirecta de INDF mismo (FSR = 0), producir 00h. Escribir al registro indirectamente resulta en una no-operaci n, si bien el bit de STATUS puede quedar afectado. Un programa simple para desactivar las locaciones 20h-2Fh del RAM, usando el direccionamiento indirecto, puede verse en el siguiente ejemplo
PROX
Movlw
0x22
; cargo al registro W con el n mero 22 ; en hexadecimal
Movwf
FSR
; transfiero el contenido de W al registro FSR
Clrf
INDF
; borro el contenido del registro INDF
Incf
FSR
; incremento en una unidad el contenido ; del registro FSR
Btfss
FSR,4
; que el CP salte una unidad si el bit 4 ; del FSR es 1
Goto
PROX
; si el bit 4 de FSR = 0, entonces vuelva ; a PROX
Una direcci n efectiva de 9 bits se obtiene por la concatenaci n del registro FSR de ocho bits con el bit IRP (STATUS<7>), como vemos en la figura 17.
Microcontroladores PIC
29
Arquitectura de un PIC Sin embargo, IRP no es usado en el PIC16F84A.
Figura 17
PORTS I/O Algunas patas de ports I/O est n multiplexadas con una funci n alternativa para las prestaciones perif ricas del dispositivo. En general, cuando se activa un perif rico, esta pata no debe usarse como pata I/O de uso general.
Registros PORTA y TRISA PORTA es un puerto bidireccional de un ancho de 5 bits. El registro de direcciones de datos correspondiente es TRISA. Ajustar el bit de TRISA a 1 , har de la pata correspondiente de PORTA una entrada, lo que significa que el driver de salida correspondiente adquiere un modo de alta impedancia. Desactivar un bit de TRISA (= 0) convierte la pata correspondiente de PORTA en salida, lo que significa que el contenido del latch de salida se encuentra en la pata seleccionada. NOTA: En un Reset de Fuente (POWER RESET), estas patas son configuradas como entradas y leen como 0 . En la lectura, el registro de PORTA lee el status de las patas, mientras que al escribir, se escribe en el latch del port. Un latch o cerrojo es un circuito que permite retener datos en una posici n de preparaci n hasta que sea pedido, generalmente por medio de otro circuito. Todas las operaciones de escritura son del tipo de lectura-modificaci n-escritura . Esto significa que escribir a un port implica que las patas del port son le das, es-
30
Microcontroladores PIC
Arquitectura de un PIC te valor es modificado, y despu s escrito al latch del port. La pata RA4 es multiplexada con el temporizador, entrada Timer0 de la entrada del m dulo del clock y se transforma en la pata RA4/T0CKI. Esta pata RA4/T0CKI es la entrada de un disparador Schmitt y posee una salida de colector abierto. Las dem s patas de port RA poseen niveles de entrada TTL y son drivers completos del tipo CMOS. En la figura 18 vemos el diagrama en bloques de una de las patas RA3 a RA0. Para inicializar el PORTA, podemos realizar la siguiente rutina: CLRF
PORTA
BSF
STATUS, RPO ; pone a 1 el bit RPO del registro STATUS
MOVLW
B 0000 1111
; cargo a W con el n mero 0x0F
MOVWF
TRISA
; selecciono a las patas RA3 a RA0 como salidas ; y la pata RA4 como entrada.
Figura 18
; borro el contenido del registro PORTA
Figura 19
En el ejemplo del programa, las dos primeras instrucciones no tienen nada que ver con la definici n de las patas del puerto A, en realidad la inicializaci n comienza con la tercera instrucci n o l nea de programa. En la figura 19 se observa el diagrama de la pata RA4. Una s ntesis de la funci n que cumple cada pata del PORT se muestra en la siguiente tabla:
Microcontroladores PIC
31
Arquitectura de un PIC
Registros PORTB y TRISB PORTB es un port bidireccional con un ancho de 8 bits. El registro de direcciones de datos correspondiente es TRISB. Si se ajusta el bit TRISB = 1, la pata PORTB correspondiente se transforma en entrada, quiere decir que coloca el driver de salida correspondiente en el modo de alta impedancia. Limpiar el bit TRISB (= 0), transforma la pata correspondiente de PORTB en salida, quiere decir que el contenido del latch de salida aparece en la pata seleccionada. Para inicializar el PORTB podemos ejecutar la siguiente sentencia: MOVLW MOVWF
B 0010 1111 TRISB
; cargo a W con el n mero 0x0F ; selecciono las patas RB0 a RB3 y RB5 como salidas, ; mientras que las patas RB4, RB6 y RB7 ; ser n entradas.
Cada una de las patas de PORTB posee un resistor de polarizaci n interno. Un bit de control nico puede activar todos los resistores. Se realiza esto limpiando el bit RBPU (OPTION<7>). Este circuito es desactivado autom ticamente cuando la pata del port es configurada como salida. Estos circuitos son desactivados en un reset de encendido. Cuatro de las patas de PORTB, RB7:RB4, poseen una caracter stica de interrupt al cambiar. Solo las patas configuradas como entradas pueden producir este interrupt. Esto significa que toda pata RB7 a RB4 configurada como salida est excluida de la comparaci n de interrupt al cambiar. Las patas de entrada de RB7 a RB4, se comparan con el valor anterior asentado en el latch de la ltima lectura de PORTB. Las salidas de desequilibrio de RB7 a RB4 son combinadas en una funci n l gica OR para generar el cambio del RB Port con el bit de indicaci n RBIF (INTCON<0>) como flag.
32
Microcontroladores PIC
Arquitectura de un PIC Esta interrupci n puede despertar el dispositivo de SLEEP. El usuario puede limpiar el interrupt en la rutina de service en la siguiente manera: a) Toda lectura o escritura de PORTB. Esto termina con la condici n de desequilibrio. b) Limpie el bit del flag RBIF. Una condici n de desequilibrio har ajustar el bit de flag RBIF. La lectura de PORTB termina con la condici n de desequilibrio y permite la limpieza del bit RBIF. La prestaci n de interrumpir al cambiar es recomendada para operaciones de despertar al oprimir una tecla y para operaciones donde PORTB solo es usado para la prestaci n de interrupt al cambiar. No se recomienda el escrutinio (polling) de PORTB mientras se usa la prestaci n de interrupt al cambio. En la figura 20 se puede observar el diagrama en bloque correspondiente al sistema de patas RB4 a RB7, mientras que la figura 21 muestra lo propio para las patas RB0 a RB3. Figura 20
Figura 21
En la siguiente tabla vemos las funciones de PORTB.
Microcontroladores PIC
33
Arquitectura de un PIC
M dulo Temporizador TIMER0 El m dulo temporizador/contador posee las siguientes prestaciones: • Temporizador/contador de 8 bits. • Legible y escribible. • Selector de clock interno o externo. • Prescalador de 8 bits programable por software. • Interrupt por exceso de FFh a 00h. En la figura 22 vemos un diagrama en bloques simplificado del temporizador. Figura 22
El temporizador TIMER0 puede funcionar como temporizador o como contador. El modo de temporizador se selecciona limpiando el bit T0CS (OPTION_REG<5>). En el modo de temporizador, el m dulo Timer0 incrementa cada ciclo de instrucciones sin divisi n de frecuencia. Si se escribe en el registro TMR0, el incremento es inhibido durante los siguientes ciclos de instrucciones. El usuario puede evitar eso escribiendo un valor ajustado al registro TMR0.
34
Microcontroladores PIC
Arquitectura de un PIC El modo de contador se selecciona al ajustar el bit T0CS (OPTION_REG<5>). En el modo de contador, el m dulo Timer0 incrementa en el flanco ascendente o descendente de la pata RA4/T0CKI. El flanco ascendente es determinado por el bit Timer Source Edge Select, T0SE (OPTION_REG<4>). Limpiando el bit T0SE selecciona el borde ascendente. Cuando se usa una entrada de clock externo en el Timer0, se deben cumplir ciertos requisitos para que el clock externo pueda ser sincronizado con la fase del clock interno (Tosc). Adem s existe un retardo en el incremento real del Timer0 despu s de la sincronizaci n. Prescaler (Divisor de Frecuencia) Se dispone de un contador de 8 bits como prescaler en el m dulo Timer0, o como post escalador para el temporizador Watchdog, respectivamente. En la Figura 23 vemos este esquema. Figura 23
Para mayor simplicidad, nos referimos a este contador como prescaler. Observe que s lo existe un divisor que es compartido mutuamente en forma exclusiva por el m dulo del Temporizador y el Temporizador del Watchdog. De esta manera, una asignaci n del prescaler para el m dulo del temporizador significa que no hay divisor para el Temporizador del Watchdog y viceversa. El prescaler no es legible ni escribible. Los bits PSA y PS2:PS0 (OPTION_REG<3:0>) determinan la asignaci n y la ta-
Microcontroladores PIC
35
Arquitectura de un PIC sa de la divisi n. Al limpiar el bit PSA se asignar el prescaler al m dulo del Timer0. Cuando ste es asignado al m dulo Timer0, los valores de divisi n son seleccionables en 1:2, 1:4,..... 1:256. El ajuste del bit PSA asignar el prescaler al Temporizador Watchdog (WDT). Cuando el prescaler es asignado a WDT, los valores de divisi n son seleccionables en 1:1, 1:2, ..... 1:128. Cuando est asignado al m dulo Timer0, todas las instrucciones escritas al registro TMR0, como por ejemplo: CLRF 1, MOVWF 1, BSF 1,x ...y otros, limpiar n el prescaler. Cuando est asignado al WDT, una instrucci n CLRWDT limpiar el prescaler junto con WDT. NOTA: Escribir a TMR0 cuando el prescaler est asignado a Timer0, limpiar el conteo del prescaler, pero no modificar su asignaci n. Cabe aclarar que la asignaci n del prescaler est completamente bajo el control del software y por lo tanto puede ser cambiado durante la ejecuci n del programa. NOTA: Para evitar un RESET no intencional del dispositivo, es necesario ejecutar una secuencia de instrucciones espec ficas cuando se cambia la asignaci n del prescaler del Timer0 a WDT. Esta secuencia debe ser seguida a n cuando WDT est inactivo.
Interrupci n de Timer0 La interrupci n de TMR0 se genera cuando el registro TMR0 excede su capacidad de FFh a 00h. Este exceso ajusta el bit T0IF (INTCON<2>). La interrupci n puede ser enmascarada limpiando el bit T0IE (INTCON<5>). El bit T0IF se limpia por software por la rutina de service del m dulo Timer0, antes de reactivar esta interrupci n. La interrupci n TMR0 no puede despertar al procesador de SLEEP, debido a que el temporizador est desconectado durante SLEEP. En la siguiente tabla vemos los registros asociados con el Timer.
Memoria de Datos EEPROM La memoria de datos EEPROM se puede leer y escribir durante el funcionamiento normal del P, para el rango completo de Vdd. Esta memoria no est ordenada
36
Microcontroladores PIC
Arquitectura de un PIC en forma de mapa directamente en el espacio de los archivos del registro sino que es direccionada indirectamente mediante los Registros de Funciones Especiales (SFR). Existen cuatro SFR usados para leer y escribir en esta memoria. Estos registros son: • EECON1 • EECON2 (este registro no est implementado f sicamente) • EEDATA • EEADR EEDATA contiene los datos de 8 bits para leer y escribir, y EEADR contiene las direcciones de las locaciones del EEPROM que son accedidos. Los dispositivos PIC16F84A poseen 64 bytes de datos de EEPROM con un rango de direcciones que abarca de 0h a 3Fh. La memoria de datos EEPROM permite leer y escribir bytes. Una escritura de byte borra autom ticamente la locaci n y escribe los datos nuevos (borra antes de escribir). La memoria de datos EEPROM est preparada para ciclos elevados de leer y escribir. El tiempo de escribir es controlado por un temporizador incorporado en el chip. El tiempo de escritura puede variar con la tensi n y temperatura y tambi n entre una unidad y otra. Para l mites exactos s rvase referir a las especificaciones de corriente alterna. Cuando el dispositivo posee protecci n codificada, la unidad CPU puede continuar de leer y escribir los datos en la memoria del EEPROM. El programador del dispositivo no tiene m s acceso a la memoria. En la figura 24 vemos el registro EECON1 en su direcci n 88h. Figura 24
Las siglas de esta figura tienen el siguiente significado: R = Bit Legible W = Bit Escribible S = Bit Ajustable U = Sin Implementar, lea como cero, -n = Valor de acuerdo al Reset POR (donde n puede ser x, o). El significado y estado de los bits de la memoria son los siguientes: Bits 7, 6 y 5: Sin Implementar, lea como cero. Bit 4, EEIF: Bit indicador de EEPROM Write Operation Interrupt (FLAG). 1 = La operaci n de escritura est cumplida, debe ser borrado en el software.
Microcontroladores PIC
37
Arquitectura de un PIC 0 = La operaci n de escribir no est cumplida o no empez a n. Bit 3, WRERR: Bit indicador de Error en EEPROM. 1 = Una operaci n de escribir termin en forma prematura. Causado por un RESET MCLR o un RESET WDT durante el funcionamiento normal. 0 = La operaci n de escribir est terminada. Bit 2, WREN: Bit de Activar la Escritura. 1 = Permite ciclos de escritura. 0 = Inhibe la escritura al EEPROM. Bit 1, WR: Bit de Control de Escritura. 1 = Inicia un ciclo de escritura. El bit es anulado por hardware una vez terminada la operaci n. El bit WR s lo puede ser ajustado por software, pero no borrado. 0 = El ciclo de escritura al EEPROM est completo. Bit 0, RD: Bit de Control de Lectura. 1 = Inicia una lectura del EEPROM. La lectura ocupa s lo un ciclo. RD es borrado con hardware. El bit RD s lo puede ser ajustado por software, pero no borrado. 0 = No comienza una lectura del EEPROM.
Lectura de la Memoria de Datos de EEPROM Para leer una locaci n de memoria de datos, el usuario debe escribir la direcci n al registro EEADR y despu s ajustar el bit de control RD (EECON1<0>). El dato est disponible en el siguiente ciclo en el registro EEDATA y por lo tanto puede ser le do en la instrucci n siguiente. EEDATA conservar este valor hasta otra lectura o hasta que sea escrito por el usuario durante una operaci n de escribir. Ejemplo: Lectura de EEPROM de Datos. Veamos como podr a ser la secuencia de un programa para leer una locaci n de memoria:
38
BCF
STATUS, RPO
; pone a cero el bit 5 (RPO) del registro STATUS, ; dicho bit se usa para direccionamiento directo y, ; en este caso, elegimos el banco 0
MOVLW
0x20
; cargo al registro W con la direcci n de la memoria ; de datos que voy a leer
MOVWF
EEADR
; muevo el contenido del registro W al registro ; EEADR que es el registro de direccionamiento de ; la EEPROM, dicho de otra manera, estoy ; realizando el direccionamiento para leer
Microcontroladores PIC
Arquitectura de un PIC BSF
STATUS, RPO
; pone a uno el bit 5 (RPO) del registro STATUS, ; dicho bit se usa para direccionamiento directo y, ; en este caso, elegimos el banco 1
BSF
EECON1, RD
; pone a uno el bit 0 (RD) de control de lectura del ; registro de la memoria de datos (EECON1), esto ; significa que se inicia la lectura del dato ; contenido en la direcci n que hemos ; cargado en EEADR
BCF
STATUS, RPO
; pone a cero el bit 5 (RPO) del registro STATUS, ; dicho bit se usa para direccionamiento directo y, ; en este caso, elegimos el banco 0
MOVF
EEDATA, W
; como en la instrucci n anterior dijimos que ; har amos un direccionamiento directo y EEDATA ; es el registro de datos donde est la informaci n ; le da, ahora, con la instrucci n MOVF hemos ; cargado al registro de trabajo con el dato le do ; de la memoria de datos.
Escritura de la Memoria de Datos EEPROM Para escribir una locaci n de memoria de datos EEPROM, el usuario debe escribir la direcci n primero al registro EEADR y los datos al registro EEDATA. Despu s el usuario debe seguir una secuencia espec fica para iniciar la escritura de cada byte. Cabe aclarar que si deseo leer o escribir una direcci n de memoria tambi n es posible nombrar una variable , tema que analizaremos m s adelante. Ejemplo Escritura de EEPROM de Datos. Veamos c mo podr a ser la secuencia de un programa para escribir una locaci n de memoria: BSF
STATUS, RPO
MOVLW
0x18
MOVWF
EEADR
; en la direcci n de registro de escritura ; coloco la direcci n donde escribir el dato
MOVLW
0x12
; cargo a W con el n mero 12 en hexadecimal que ; ser el dato que voy a escribir en la posici n 18h
MOVWF
EEDATA
; escribimos el dato en EEDATA
Microcontroladores PIC
; pone a uno el bit 5 (RPO) del registro STATUS, ; dicho bit se usa para direccionamiento directo y, ; en este caso, elegimos el banco 1 ; cargo al registro de trabajo con la direcci n ; de la memoria donde escribir el dato
39
Secuencia requerida para realizar la escritura
Arquitectura de un PIC
WI
BSF
EECON1,WREN
; solicito el permiso de escritura y ; comienza la secuencia de escritura
MOVLW
0x55
; cargo a W con 55h
MOVWF
EECON2
; se escribe el dato 12h en EECON2
MOVLW
0xAA
; cargo a W con AAh
MOVWF
EECON2
; se escribe AAh en EECON2
BSF
EECON1, WR
; comienza la escritura
BTFSC
EECON1,WR
; espera a que termine la escritura
GOTO
WI
;
BCF
STATUS,R0
; selecci n del banco 0
La escritura no se inicia si las secuencias arriba mencionadas no se cumplen exactamente para cada byte. Escribir 55h a EECON2, escribir AAh a EECON2, despu s ajustar el bit WR. Recomendamos especialmente desactivar las interrupciones durante este segmento del c digo. Adem s, el bit WREN en EECON1 debe ser ajustado para activar la escritura. Este mecanismo impide la escritura accidental al EEPROM de datos debido a inesperadas ejecuciones del c digo, por ejemplo por programas perdidos. El usuario debe mantener el bit WREN limpio en todo momento, excepto cuando est actualizando EEPROM: el bit WREN no se limpia con hardware. Despu s de haber iniciado una secuencia de escritura, la limpieza del bit WREN no afectar el ciclo de escritura. El bit WR no podr ser ajustado hasta que el bit WREN est ajustado. Al completar el ciclo de escritura, el bit WR es limpiado por el hardware y el bit indicador de EE Write Complete Interrupt (EEIF) tambi n se ajusta. EEIF debe ser limpiado por software.
Verificaci n de Escritura De acuerdo a la aplicaci n, la pr ctica de buena programaci n puede indicar que los datos escritos a la EEPROM de Datos deben ser verificados. Este procedimiento debe ser usado cuando un bit de la EEPROM est muy cerca de su l mite especificado. Generalmente una falla de la EEPROM consiste en un bit que fue escrito como 0 , pero se lee como 1 , debido a problemas. Para verificar un dato escrito, debemos primero leer la posici n de memoria grabada (si tomamos el ejemplo de reci n deber amos leer el dato contenido en la direcci n 22h); posteriormente deber amos cargar al registro W con el dato que esperamos encontrar, realizar una resta entre el dato le do (en EEDATA) y el contenido
40
Microcontroladores PIC
Arquitectura de un PIC de W, luego por medio del flag Z del registro de STATUS, nos fijamos si la diferencia es cero; si esto ocurre, el programa continuar normalmente. Hay muchas formas de hacer este proceso, pero una alternativa ser a: BCF
STATUS, RPO
; pone a cero el bit 5 (RPO) del registro STATUS, ; dicho bit se usa para direccionamiento directo y, ; en este caso, elegimos el banco 0
MOVLW
0x22
; cargo al registro W con la direcci n de la memoria ; de datos que voy a leer, en este caso 22h
MOVWF
EEADR
; muevo el contenido del registro W al registro ; EEADR que es el registro de direccionamiento de ; la EEPROM, dicho de otra manera, estoy ; realizando el direccionamiento para leer
BSF
STATUS, RPO
; pone a uno el bit 5 (RPO) del registro STATUS, ; dicho bit se usa para direccionamiento directo y, ; en este caso, elegimos el banco 1
BSF
EECON1, RD
; pone a uno el bit 0 (RD) de control de lectura del ; registro de la memoria de datos (EECON1), esto ; significa que se inicia la lectura del dato ; contenido en la direcci n que hemos ; cargado en EEADR, en EEDATA tendr el ; n mero 15h (si est todo bien), si hubo un error ; de escritura no habr ese valor
BCF
STATUS, RPO
; pone a cero el bit 5 (RPO) del registro STATUS, ; dicho bit se usa para direccionamiento directo y, ; en este caso, elegimos el banco 0
MOVLW
0x15
; cargo a W con 15h
SUBWF
EEDATA, W
; resto el contenido de EEDATA con el de W
BTFSS
STATUS, Z
; si el flag Z del STATUS es 1 es porque el ; resultado de la resta es cero (est todo bien), ; luego, la siguiente instrucci n se ignora y el ; programa contin a normalmente. Si Z = 0, ; entonces se ejecuta la pr xima instrucci n
GOTO
ERROR
; el programa ir a una etiqueta que ejecuta una ; rutina que indica que hubo error.
MOVLW
........
; el programa contin a normalmente
Microcontroladores PIC
41
Arquitectura de un PIC En la pr xima tabla vemos los Registros y Bits asociados con la EEPROM de Datos.
La CPU del PIC Un microcontrolador se diferencia de otros tipos de procesadores por tener circuitos especiales para atender las necesidades de ciertas aplicaciones en tiempo real. El PIC16F84A, por ejemplo, posee una cantidad importante de este tipo de prestaciones cuyo prop sito es aumentar al m ximo la confiabilidad del sistema, minimizar los costos por la eliminaci n de componentes externos, proveer modos operativo de econom a del consumo y ofrecer una buena protecci n de c digos. Estas prestaciones son: • Selecci n del oscilador. • Reset -Reset al Encender (POR) -Temporizador de encendido (PWRT) -Temporizador de arranque del Oscilador • Interrupciones • Temporizador Watchdog (WDT perro guardi n). • Sleep (modo de operaci n en bajo consumo) • Protector de C digos. • Locaciones de Identificaci n (ID). • Programaci n en serie (en la confecci n del programa). El PIC16F84A posee un temporizador Watchdog que puede ser desactivado solamente mediante bits de configuraci n. Para mayor confiabilidad funciona con su propio oscilador RC. Existen dos temporizadores que ofrecen el retardo necesario al aplicar alimentaci n al PIC. Uno es el Temporizador de arranque del oscilador (Oscillator Start-up Timer = OST), cuya funci n es la de mantener el chip en Reset hasta que el oscilador a cristal se estabiliza. El otro es el Temporizador de Encendido
42
Microcontroladores PIC
Arquitectura de un PIC (Power-up Timer = PWRT) que provee un retardo fijo de 72ms (valor nominal) al aplicar tensi n VDD nicamente. Este dise o mantiene el dispositivo en Reset durante el tiempo de estabilizaci n de la fuente de alimentaci n. Con estos dos temporizadores incorporados, la mayor a de las aplicaciones no necesita circuitos de Reset externos. El modo de SLEEP ofrece una forma de apagado de muy bajo consumo. El usuario puede despertar desde SLEEP mediante un Reset externo, fin de tiempo del Temporizador de Watchdog o una Interrupci n. Se proveen varias opciones para los osciladores para poder adaptar el componente a diferentes aplicaciones. La opci n de oscilador RC ahorra costos del sistema aunque no es estable, mientras que la opci n con cristal ahorra consumo, es muy estable pero es m s costosa. Como vimos, en la palabra de configuraci n del PIC se debe decir qu tipo de oscilador se va a emplear.
Bits de Configuraci n Tal como vimos anteriormente en este cap tulo, los bits de configuraci n pueden ser programados para leer 0 o quedar sin programaci n para leer 1 y de esta manera seleccionar diferentes configuraciones del dispositivo. Estos bits se encuentran en la locaci n de memoria del programa 2007h. A continuaci n vemos otro aspecto de la palabra de configuraci n:
Las referencias son las siguientes: R = bit que puede ser le do P = bit programable u = sin cambio Ya hemos hablado de la funci n que cumple cada bit. La direcci n 2007h est fuera del espacio de la memoria del programa de usuario y pertenece al espacio de la memoria de test especial y configuraci n (2000h — 3FFFh). Este espacio s lo es accesible durante la programaci n.
Configuraciones del Oscilador Tipos de Osciladores El PIC16F84A puede funcionar con cuatro modos diferentes de oscilador. El usuario puede programar dos bits de configuraci n (FOSC1 y FOSC0) para seleccionar uno de estos cuatro modos:
Microcontroladores PIC
43
Arquitectura de un PIC • LP = Cristal de Baja Potencia • XT = Cristal o Resonador • HS = Cristal o Resonador de Alta Velocidad • RC = Oscilador RC Oscilador de Cristal o Resonador de Cer mica En los modos XT, LP o HS se conecta un cristal o resonador cer mico a las patas OSC1/CLKIN y OSC2/CLKOUT para establecer la oscilaci n de acuerdo a la figura 2 de este cap tulo. El dise o del oscilador del PIC16F84A requiere el uso de un cristal de corte paralelo. El uso de un cristal de corte serie puede dar oscilaciones con una frecuencia fuera del rango especificado por el fabricante del cristal. En los modos XT, LP o HP, el dispositivo permite la conexi n de una fuente externa para excitar la pata OSC1/CLKIN, como vemos en la figura 25. Figura 25
Oscilador RC Para aplicaciones insensibles a variaciones temporales, el uso de la opci n de oscilador RC ofrece ventajas adicionales. La frecuencia del oscilador RC es una funci n de la tensi n de la fuente, del valor de Rext, del valor de Cext y de la temperatura de funcionamiento. Adem s de estos par metros, tambi n puede haber una variaci n de la frecuencia del oscilador debido a las variaciones normales de los par metros del proceso. Adem s, las diferencias en las capacidades de conductores del dispositivo puede introducir variaciones, especialmente con valores muy bajos de Cext. El usuario debe tomar en cuenta asimismo variaciones debido a las tolerancias de los componentes externos R y C usados. La figura 3 de este cap tulo, muestra c mo conectar una combinaci n RC al PIC16F84A. Reset El PIC16F84A distingue entre varios tipos de reset. • Reset al encender (Power-on Reset POR). • Reset MCLR durante el funcionamiento normal. • Reset MCLR durante SLEEP. • Reset WDT durante el funcionamiento normal. • Reset WDT de despertar durante SLEEP.
44
Microcontroladores PIC
Arquitectura de un PIC Nota: La notaci n MCLR implica que el reset se activa con un 0 (negado), es decir: _____ MCLR = MCLR La figura 26 muestra un diagrama en bloques simplificado del circuito de reset incorporado en el chip. El paso de reset MCLR posee un filtro de ruido para ignorar pulsos peque os. Las especificaciones el ctricas fijan los requisitos del ancho de pulso necesario para la pata MCLR . Figura 26
Algunos registros no son afectados por ninguna condici n de reset, su status es desconocido en un reset POR y sin cambios en cualquier otro reset. La mayor a de los dem s registros se colocan en un estado de reset en resets POR, MCLR o WDR durante el funcionamiento normal y en un reset MCLR durante SLEEP. No son afectados por un reset WDT durante SLEEP debido a que este reset es visto como resumen del funcionamiento normal. En la siguiente tabla vemos la descripci n de condiciones de reset para el contador de programas PC y el registro de STATUS.
Microcontroladores PIC
45
Arquitectura de un PIC Leyenda: u = sin cambios, x = desconocido. Nota 1. Cuando el Despertar (volver de SLEEP) se debe a una Interrupci n y el bit GIE es ajustado, el contador PC se carga con el vector de interrupt (0004h). La siguiente tabla brinda una descripci n completa de los estado de reset para todos los registros:
Leyenda: u = sin cambios x = desconocido - = bit sin implementar, le do como 0, q = valor depende las condiciones. Notas 1: Uno o m s bits de INTCON ser n afectados para causar despertar. Nota 2: Cuando el despertar se debe a un interrupt y el bit GIE es ajustado, el contador PC se carga con el vector de interrupt (0004h).
46
Microcontroladores PIC
Arquitectura de un PIC Nota 3: Los valores para cada condici n espec fica est n listados en la tabla de condiciones de reset para el contador de programas PC y el registro de STATUS. Nota 4. En todo reset del dispositivo, estas patas son configurados como entradas. Nota 5: Este es el valor que se encuentra en el latch del port de salida. Los bits TO y PD son ajustados o limpiados en forma diferente en diferentes situaciones de reset. Estos bits se usan en software para determinar la naturaleza del reset.
Reset de Encendido (POR) Un pulso de reset de encendido se genera en el chip cuando se detecta una elevaci n de VDD en el rango de 1,2 a 1,7 Volt. Para aprovechar el POR, solo debe conectar la pata MCLR directamente o a trav s de un resistor a VDD. Esto elimina los componentes RC externos que se necesitan generalmente para crear un reset de encendido. Se necesita un tiempo de crecimiento m nimo para VDD para que funcione correctamente. Las especificaciones respectivas surgen de las Especificaciones El ctricas. Cuando el dispositivo comienza su funcionamiento normal al salir de la condici n de reset, es necesario asegurar los par metros (tensi n, frecuencia, temperatura, etc) en sus valores normales para garantizar el funcionamiento. Si estas condiciones no son cumplidas, el dispositivo debe mantenerse en reset hasta que se normalice. En la Figura 27 vemos un circuito de RESET de encendido externo para una aplicaci n lenta de VDD. Figura 27
El reset de encendido (POR) no produce un reset interno cuando VDD cae. Sobre el circuito de la figura anterior, debemos decir lo siguiente: 1. El circuito de Power-on Reset (externo) s lo es necesario cuando la tasa de crecimiento de VDD es demasiado lenta. El diodo D ayuda a descargar el capacitor r pidamente al apagar el equipo. 2. El resistor R < 40 k‰ es recomendado para estar seguro que la ca da de tensi n sobre R no exceda 0,2 volt. La m xima corriente de fuga sobre la pata MCLR
Microcontroladores PIC
47
Arquitectura de un PIC est especificada en 5 A. Una ca da de tensi n mayor producir la degradaci n del nivel de Vih en la pata MCLR . 3. El resistor R1 = 100‰ a 1000‰ limita toda corriente que circula en MCLR desde un capacitor externo C en el supuesto que haya una ruptura de MCLR debido a ESD o EOS.
Temporizador de Arranque del Oscilador (OST) El OST (Oscillator Start-up Timer = OST) tiene la funci n de mantener el chip en Reset hasta que el oscilador a cristal se estabiliza y entra en funciones en los modos XT, LP y HS del oscilador.
Temporizador de Encendido (PWRT) El PWRT (Power-up Timer) es un circuito interno que provee un retardo fijo de 72ms (valor nominal) al aplicar tensi n VDD nicamente. Este dise o mantiene el dispositivo en Reset durante el tiempo de estabilizaci n de la fuente de alimentaci n. Con estos dos temporizadores incorporados, la mayor a de las aplicaciones no necesitan circuitos de Reset externos.
El Perro Guardi n (WDT) Se trata de un contador de 8 bits que act a como temporizador y tiene el objetivo de generar un reset a todo el sistema cuando se desborda su valor. Su control de tiempos es independiente del oscilador principal y se basa en una red RC. La temporizaci n nominal con la que se halla programado el Perro guardi n es de 18ms, pero puede aumentarse utilizando el Divisor de frecuencia, con el cual, trabajando en el rango mayor, puede alcanzar hasta 2,3 segundos. Para evitar que se desborde el WDT y genere un reset, hay que recargar o refrescar su cuenta antes de que llegue a completarse. Este refresco, que en realidad consiste en ponerlo a 0 para iniciar la temporizaci n, se consigue por software con las instrucciones CLRWDT y SLEEP. El dise ador debe analizar el programa de trabajo y situar alguna de estas dos instrucciones en sitios estrat gicos por los que pasa el flujo de control antes que transcurra el tiempo que controla el Perro Guardi n. De esta manera, si el programa se cuelga (bucle infinito, espera de acontecimiento que no se produce, etc.), no se refresca a tiempo al Perro guardi n y se produce una reinicializaci n. La instrucci n CLRWDT borra simplemente el valor de WDT, reiniciando la cuenta. Sin embargo, la instrucci n SLEEP, adem s de borrar el WDT, detiene a todo el sistema entrando en un modo de trabajo en el que el consumo es m nimo (modo de Reposo o de bajo consumo). Si no se desactiva al Perro guardi n cuando se entra
48
Microcontroladores PIC
Arquitectura de un PIC en el modo de Reposo, al acabar su conteo provocar un reset y se saldr de dicho modo. Otra forma de salir del modo de Reposo es activando la patita MCLR . Como hemos visto, para desactivar al Perro Guardi n, hay que poner un 0 en el bit 2 (WDTE) de la Palabra de configuraci n. Existe la posibilidad de que el Divisor de frecuencia opere con el TMR0 o con el WDT, seg n el valor que tenga el bit PSA. Los impulsos de conteo pasan por el Divisor antes de aplicarse al TMR0 (prescaler). Por el contrario, los impulsos pasan primero por el WDT y luego por el Divisor (Post-divisor).
Interrupciones del Micro Las interrupciones son el mecanismo m s importante para la conexi n del microcontrolador con el mundo exterior, sincronizando la ejecuci n de programas con acontecimientos externos. Las interrupciones son una especie de subrutinas de las cuales se diferencian en los procedimientos que las ponen en marcha. Por otra parte las subrutinas se ejecutan cada vez que en el programa aparece una instrucci n CALL, mientras que las interrupciones se ponen en marcha al aparecer en cualquier instante un evento externo al programa, es decir por un mecanismo de hardware. El PIC16X84/PIC, por ejemplo, dispone de 4 posibles fuentes de interrupci n: 1. Activaci n del pin RB0/INT 2. Desborde del temporizador TMR0 3. Cambio de estado en una de las 4 patas de m s peso (RB7:RB4) del PORTB 4. Finalizaci n de la escritura en la EEPROM de datos. Cuando se produce alguno de estos estados, se origina una petici n de interrupci n, que si se acepta, guarda el valor del contador de programa (PC CP) actual en la Pila, pone a cero el bit GIE (Global Interrupt Enable), lo que prohibe cualquier otra interrupci n y se carga el PC con el valor 0004H , que es la posici n del vector de interrupci n, y comienza a ejecutarse el programa de atenci n a la interrupci n que se encuentra a partir de esta direcci n. Una interrupci n est controlada mediante dos bit. Uno de ellos act a como sealizador o flag que indica si se ha producido o no la interrupci n, y la otra funciona como bit de permiso o inhibici n de la interrupci n en s . Los bits de control que se encuentran en el registro INTCON (0Bh 8Bh) habilitan y configuran las interrupciones. Para que se pueda producir una interrupci n por alguna de estas fuentes, el bit
Microcontroladores PIC
49
Arquitectura de un PIC correspondiente debe estar en 1 , mientras que los bits se alizadores o flags que est n en los registros INTCON y EEDATA (08h) informan si se ha producido la interrupci n cuando stos se ponen a 1 . Cualquiera de las interrupciones tambi n puede sacar al procesador del modo de reposo SLEEP. El bit GIE (Global Interrupt Enable) es el de activaci n global del permiso de interrupci n, y se borra autom ticamente cuando aparece una interrupci n, con el objeto de evitar que se produzca otra interrupci n mientras se est atendiendo a la primera. Cuando por programa se retorna de la interrupci n con una instrucci n RETFIE, el bit GIE se vuelve a activar poni ndose a 1. Para el resto de los flags o bits indicadores de interrupci n, no est previsto mecanismo de puesta a cero, por lo que es el programa de atenci n a la interrupci n el que debe realizar el tratamiento de la correspondiente interrupci n y adem s, el que debe poner el o los flags de indicaci n de interrupci n a 0. De no ser as , no se podr salir de la rutina de atenci n a la interrupci n. Esta familia de PICs posee un vector de interrupci n en la direcci n 0004h; esto quiere decir que, sea cual sea la fuente de la interrupci n, el PC se carga con 0004h. Por lo tanto, el programa de atenci n a la interrupci n debe encargarse de comprobar el estado de cada uno de los flags para saber cu l es la fuente de interrupci n y actuar seg n el caso. Si se necesita preservar alg n otro registro adem s del PC, cuando se atiende una interrupci n, debe ser el propio programa de atenci n a la interrupci n el que se encargue de salvar su estado al inicio de la rutina y de devolverlos al final del mismo, de igual modo que se hac a en las subrutinas. Por lo dicho, el P debe realizar determinados procesos autom ticamente mientras que otros se ejecutan por programa, estos procesos son: 1. Cuando se activa una interrupci n, el flag correspondiente se activa. Si el bit de permiso correspondiente est en 1 y el bit de habilitaci n de todas las interrupciones (GIE) est en 1 , se produce la interrupci n. 2. Para evitar que se produzca otra interrupci n mientras se est atendiendo a otra anterior, el bit GIE se pone en 0 . 3. El valor del PC se guarda en la PILA 4. El PC se carga con el valor 0004h, que es el vector de interrupciones 5. El programador, debe comenzar la rutina de atenci n a la interrupci n con un salto a la posici n de memoria donde se encuentra el programa de atenci n a dicha interrupci n, seguidamente se guardan todos los registros que puedan ser modificados por sta, luego si est n habilitadas varias v as de interrupci n, se debe verificar el valor de los flag para determinar la causa de la interrupci n. 6. La rutina de interrupci n lleva al programa a la subrutina correspondiente. 7. Antes de retornar al programa principal se deben reestablecer los valores que ten an los registros antes de producirse la interrupci n y se deben borrar por software los flags que indican las fuentes de las interrupciones.
50
Microcontroladores PIC
Arquitectura de un PIC 8. Cuando se llega a la ltima instrucci n de la rutina de interrupci n, RETURN, se carga el PC con el valor que se guard inicialmente en la PILA y el bit GIE se pone autom ticamente en 1 .
Interrupci n Externa (INT) La fuente de interrupciones INT es sumamente importante para atender eventos externos en tiempo real. Cuando en la l nea RB0/INT se hace una petici n de interrupci n, entonces, de forma autom tica, el bit INTF del registro INTCON se pone en 1 y si el bit GIE=1. Luego se pone en marcha el mecanismo de atenci n a la interrupci n. Mediante el bit INTDEG del registro OPTION, se puede seleccionar el flanco activo de RBO/INT, ya que con esta puesta en 1 el flanco activo es el de subida y cuando est en 0 el flanco activo es el de bajada. El programa de atenci n a la interrupci n antes de regresar al programa principal debe borrar el flag INTF, para que no se repita el proceso de atenci n a la interrupci n cuando se ejecuta la instrucci n de retorno de interrupci n RETFIE.
Interrupci n por Desborde del TMR0 Para activar la interrupci n del TMR0, los bit T0IE y GIE del registro INTCON deben estar en 1 ; bajo estas condiciones cuando el temporizador TMR0 se desborda al pasar de FFh a 00h, se activa el flag TOIF del registro INTCON. Si no se carga de nuevo TMR0 cuando se desborda, ste sigue contando desde 00h hasta FFh. Este registro puede escribirse o leerse en cualquier momento, pero hay que tener en cuenta que al escribir sobre l, se pierden dos ciclos de reloj para mantener el sincronismo. Cuando se carga el registro TMR0 con un valor XXh, ste cuenta FFh-XXh impulsos y el tiempo que tarda en hacerlo viene dado por la expresi n: Temporizaci n = 4 . Tosc . (256 —N10). Rango del Divisor de Frecuencia
Interrupci n por Cambio de Estado en las patas RB7 y RB4 Para activar la interrupci n por cambio de nivel en las patas RB4 y RB7, los bits RBIE y GIE del registro INTCON deben estar a 1 . Cuando esto es as y se produce un cambio de nivel en cualquiera de los pines RB4 RB7, se activa el flag RBIF del registro INTCON. Este tipo de interrupciones est especialmente pensada para el control de un teclado matricial 4 x 4 de 16 teclas.
Interrupci n por Finalizaci n de la Escritura en la EEPROM de Datos El rea de EEPROM dispone de 64 bytes donde se pueden almacenar datos que no se pierden al desconectar la alimentaci n. La memoria EEPROM no est mapea-
Microcontroladores PIC
51
Arquitectura de un PIC da en la zona de memoria de datos donde se encuentran los registros SFR y GPR. Para poder leerla y escribirla durante el funcionamiento normal del microcontrolador hay que utilizar los registros especiales EEDATA, EEADR, EECON1 y EECON2, tal como ya hemos visto. Recuerde que el Registro EEADR, se encuentra en la posici n de memoria 09h del banco 0, en l se carga directamente la direcci n a la que acceden de la EEPROM de datos. Las 64 posiciones de un byte ocupan las direcciones de un mapa que comienza en la posici n 00h y termina en la 3Fh, por eso los 2 bits de m s peso del registro EEADR siempre valen 0. Los bit RD y WR indican respectivamente lectura o escritura. No hay que ponerlos a 0 s lo a 1. Se borran autom ticamente cuando la operaci n de lectura ha sido completada. El registro EECON2 no est implementado f sicamente, por lo que es imposible leerlo (si se intenta leer, todos sus bits se ponen a 0). Se emplea como dispositivo de seguridad durante el proceso de escritura de la EEPROM, para evitar las interferencias en el tiempo que precisa su desarrollo. La seguridad se consigue escribiendo los valores concretos 55h y AAh. Un ciclo de escritura en una posici n EEPROM de datos tiene una duraci n de 10 ms, que es un tiempo muy grande para la velocidad del procesador.
******************************************************
52
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
MANEJO
DE LAS
INSTRUCCIONES
DE UN
PIC
INTRODUCCI N Una instrucci n es un comando, parte del programa, que se le aplica al PIC para que lo interprete y ejecute su cumplimiento. La instrucci n se compone de una serie de bits presentada en secciones o posiciones perfectamente delimitadas, que el procesador interpreta para cumplir una orden deseada, quedando establecidas las variables que se modifican. Dicho de otra forma, las instrucciones poseen un formato de acuerdo a un sistema de codificaci n. El formato cambia de acuerdo con la operaci n que se va a realizar. Cada instrucci n, para la l nea baja de los PICs tipo 16C5X, consiste en una palabra de 12 bits que codifica en un solo bloque, la orden, el operador y la ubicaci n del resultado o el salto (en caso de que lo hubiere). En los microcontroladores PICs tipo 16X84 cada instrucci n tiene una longitud de 14 bits. Los bits que act an como datos de la memoria EPROM se reciben en el decodificador de instrucciones, y operan con el contador de programa y el registro de trabajo W, para acceder a lugares espec ficos del microcontrolador, tales como la ALU, posiciones de memoria, registros, etc. Como sabemos, los PICs 16X84, entre otros, manejan un set reducido de instrucciones (35 instrucciones en lo que se denomina RISC) que presentan una codificaci n muy particular llamada formato de la instrucci n . Cada instrucci n posee su formato y es totalmente definido por MICROCHIP. En la figura 1 de la p gina siguiente podemos apreciar la sintaxis de una instrucci n del set. Se trata de la instrucci n que suma el contenido del registro de trabajo con el contenido de un registro cuya direcci n est determinada por el operador f . En esta figura, en primer lugar se observa la sintaxis , es decir, la forma en que el programador escribir la instrucci n en el lenguaje entendible por el operador (el programa en .asm). La codificaci n es el formato de la palabra que define la instrucci n y que veremos en detalle luego. Note que para que se complete la instrucci n se necesita una sola palabra y un solo ciclo del contador de programas.
Microcontroladores PIC
53
Manejo de las Instrucciones de un PIC
Figura 1
Como veremos, el resultado de la operaci n se guarda en un sitio definido por el programador (dependiendo de qu estado tome el bit d ) y que esta instrucci n modifica los bits C, DC y Z del registro de estado (STATUS). Esto quiere decir que cuando coloco la instrucci n: ADDWF f,d El ensamblador generar el c digo: 0001 11df ffff En este c digo, los seis bits de mayor peso (bits 6 al 11 en la figura 2) definen la operaci n que va a realizar la instrucci n de acuerdo a lo requerido por el programador. Aqu se define una orden que el PIC interpreta y ejecuta sobre un operando determinado, cuya direcci n la busca seg n lo
54
Microcontroladores PIC
Manejo de las Instrucciones de un PIC indicado por los 5 bits menos significativos (bits 0 al 4 en la figura 2).
Figura 2
El bit 5 es un c digo de reconocimiento de destino y determina en qu lugar se va a alojar el resultado de la operaci n. Si este bit es 0 el destino de la operaci n ser puesto en el registro de trabajo (W). Si el bit d es puesto a 1 el destino ser el de la posici n de memoria definido por f . Los cinco bits de menor peso en el formato de la instrucci n representan la direcci n donde est guardado el operando (f), que est en la memoria de datos y por tener cinco bits s lo podemos direccionar una de las 32 posiciones de memoria de datos. La mayor a de las instrucciones se realizan en un ciclo de contador de programa (ciclo de instrucci n) excepto las instrucciones de salto que necesitan dos ciclos para ejecutarla. Se determina el ciclo de instrucci n dividiendo por cuatro la frecuencia del oscilador, elegida para el funcionamiento del microcontrolador tal como se observa en la figura 3. Es decir, la se al que proviene del oscilador externo, conectado a los pines OSC1/CLKIN y OSC2/CLKOUT del microcontrolador, se divide en cua-
Microcontroladores PIC
55
Manejo de las Instrucciones de un PIC tro ciclos, obteni ndose as la se al requerida por el procesador interno para realizar las operaciones. De esta manera se puede realizar la b squeda y ejecuci n de la instrucci n. El reloj de instrucci n es el ciclo interno que posee el microcontrolador para cronometrar el tiempo de ejecuci n de las instruciones. Los pulsos entrantes del reloj son divididos por 4, generando diferentes se ales denominadas Q1, Q2, Q3 y Q4. El estado Q1 hace incrementar el contador de programa, Q2 y Q3, se encargan de la decodificaci n y ejecuci n de la instrucci n y por ltimo, Q4 es la fase de b squeda de la instrucci n. El c digo se almacena en el registro de instrucciones.
Figura 3
El Set de Instrucciones del 16X84 Vimos c mo es la estructura de una instrucci n, raz n por la cual le recomendamos que lea nuevamente el comienzo de este cap tulo si no entiende lo que a continuaci n expresaremos.
56
Microcontroladores PIC
Manejo de las Instrucciones de un PIC Los c digos (denominados mnem nicos) que simbolizan un conjunto de instrucciones, representan la tarea que debe hacer el microcontrolador una vez que las analice en funci n del operando. Un mnem nico ayuda a recordar el significado que tiene la instrucci n. Para poder analizar al conjunto de instrucciones que conforman el set RISC, se los suele agrupar teniendo en cuenta el tipo de operaci n que realizan, as es com n que se las presente bajo cuatro posibles formas, a saber: 1. 2. 3. 4.
Instrucciones Instrucciones Instrucciones Instrucciones
orientadas a registros. orientadas a bits. con literales. de control y especiales.
Figura 4
Microcontroladores PIC
57
Manejo de las Instrucciones de un PIC Figura 5
En la figura 4 vemos un cuadro donde se reproducen las instrucciones orientadas a registros, la figura 5 muestra las operaciones orientadas a bits y la figura 6 nos permite conocer cu les son las instrucciones con literales y de control. Figura 6
Sobre las notas a las que hacemos referencia en dichas figuras, debe tener en cuenta lo siguiente: Nota 1. Al modificar un registro de entrada/salida (E/S) con una opera-
58
Microcontroladores PIC
Manejo de las Instrucciones de un PIC ci n sobre l mismo (por ejemplo MOVF PORTB,1), el valor utilizado es el que se encuentre presente en las patas del PORTB. Por ejemplo, si el biestable tiene un "1" para una pata configurada como entrada y se pone a nivel bajo desde el exterior, el dato se volver a escribir como un "0". Nota 2. Si se ejecuta esta instrucci n sobre el TMR0 y d=1, ser borrado el divisor de frecuencia (preescaler), si est asignado al TMR0. Nota 3. Si se modifica el Contador de Programa (PC CP) o es verdadera una condici n de prueba, la instrucci n requiere dos ciclos de m quina. El segundo ciclo se ejecuta como un NOP . Veamos a continuaci n, c mo deben emplearse cada una de estas instrucciones:
C Se pone a 1 si se produce un acarreo desde el bit de mayor peso. DC Se pone a 1 si se genera un acarreo del bit 3 al bit 4. Z Se pone a 1 si el resultado de la operaci n es cero.
Microcontroladores PIC
59
Manejo de las Instrucciones de un PIC EJEMPLO: Queremos sumar el contenido del registro de trabajo con el n mero 10 expresado en hexadecimal, la instrucci n ser : ADDLW H«10« La notaci n H«10« significa que el n mero est expresado en hexadecimal. Si la notaci n fuese D«10« significa que el n mero est expresado en decimal y si fuese B«10« entonces el n mero est en notaci n binaria. Volviendo a nuestro ejemplo: Si antes de la instrucci n ten a en cada registro: W = 21h (21h significa que el n mero est expresado en hexadecimal, que es lo mismo que 0010 0001 b —expresado en binario-) Al ejecutarse la instrucci n, se sumar n ambos n meros y el resultado se guarda en el registro W, es decir: W = 21 h + 10 h = 31 h (en hexadecimal), W = 0001 0000 b + 0001 0000 b = 0010 0000 b (en binario)
60
Microcontroladores PIC
Manejo de las Instrucciones de un PIC C Se pone a 1 si se produce un acarreo desde el bit de mayor peso. DC Se pone a 1 si se genera un acarreo del bit 3 al bit 4. Z Se pone a 1 si el resultado de la operaci n es cero. EJEMPLO: Supongamos querer sumar el contenido del registro de trabajo con el contenido de un registro llamado REG, y queremos guardar el resultado en el registro de trabajo, la notaci n ser : ADDWF
REG,0
Si antes de la instrucci n W = 10 h y REG = 21 h, el resultado de la suma ser 31 h que se guardar en el registro de trabajo, es decir, luego de la suma el contenido de los registros ser : W = 31 h
REG = 21 h
Note que el contenido del registro REG no se modific luego de la operaci n. Si la instrucci n hubiese sido: ADDWF
REG,1
Entonces el resultado se hubiese guardado en REG, por lo tanto, luego de la operaci n el contenido de los registros ser a: W = 10 h
REG = 31 h
Microcontroladores PIC
61
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la operaci n es cero. EJEMPLO: Supongamos querer hacer la funci n l gica AND entre el n mero 0001 0010 b que est almacenado en el registro de trabajo y el n mero 0011 1001 b. La instrucci n ser : ANDLW
B«00111001«
Luego, antes de la instrucci n ten amos: W = 0001 0010 b Se realiza la operaci n: (0001 0010) AND (0011 1001) = 0001 0000 Luego de la instrucci n, en W tendremos: W = 0001 0000 b
62
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la operaci n es cero EJEMPLO: Queremos realizar la operaci n AND entre el n mero 0001 1110 b que est almacenado en el registro ST y el n mero 1001 0110 b que est almacenado en el registro de trabajo, la instrucci n ser : ANDWF
ST,1
Antes de ejecutarse la instrucci n tenemos: W = 1001 0110 b
ST = 0001 1110 b
Se realizar la operaci n: (1001 0110) AND (0001 1110) = 0001 0110 Es decir que en los registros, luego de ejecutada la instrucci n tendremos: W = 1001 0110 b (no ha cambiado) ST = 0001 0110 (se ha almacenado el resultado).
Microcontroladores PIC
63
Manejo de las Instrucciones de un PIC
EJEMPLO: Queremos poner a 0 el bit N… 5 del registro DESC, luego la instrucci n ser : BCF
DESC, 5
Si antes de la instrucci n el registro DESC ten a: DESC = 1111 0111 b Al ejecutarse la instrucci n, el registro queda con el valor: DESC = 1110 0111 b Nota: Recuerde que el bit menos significativo es el cero y el m s significativo es el 7, es decir, los ocho bits de un registro se numeran de 0 a 7.
64
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
EJEMPLO: Queremos poner a 1 el bit N… 0 del registro DESC, luego la instrucci n ser : BSF
DESC, 0
Si antes de la instrucci n el registro DESC ten a: DESC = 1111 0111 b Al ejecutarse la instrucci n, el registro queda con el valor: DESC = 1111 0110 b
Microcontroladores PIC
65
Manejo de las Instrucciones de un PIC EJEMPLO: RUTINA
BTFSC GOTO GOTO
REG,2 DEC SIM
Bien, aqu hemos introducido algunas variables a saber: RUTINA es una etiqueta, de modo tal que cuando alguna instrucci n haga que el contador de programa apunte a dicha etiqueta, entonces se ejecutar la instrucci n BTFSC. REG es un registro que yo deb a haber postulado con anterioridad en el programa. DEC y SIM son etiquetas, de modo que cuando el contador de programa est apuntando a la l nea: GOTO
DEC
Entonces el programa se seguir ejecutando desde la l nea donde est la etiqueta DEC. Si antes de la instrucci n el contador de programa (PC CP) est en la l nea donde se encuentra la etiqueta RUTINA, entonces se ejecutar la instrucci n BTFSC. Al ejecutarse, si el BIT 2 del registro REG es igual a cero, el contador de programa saltar una l nea e ir a ejecutar la instrucci n: GOTO
SIM
Por ltimo, note que en esta instrucci n tenemos tres columnas y es la forma en que, en general, vamos a escribir un programa en lenguaje de usuario (editar un programa). En la primera columna se colocan las etiquetas , en la segunda columna se escribe siempre la instrucci n y en la tercera columna se escribe el operando de la instrucci n. Normalmente va una cuarta columna precedida del signo ; (punto y coma) que se utiliza para escribir observaciones que no ser n tenidas en cuenta por el compilador o el ensamblador que convertir al programa que estaba en lenguaje de usuario en un programa en lenguaje de m quina (para los PICS es un lenguaje hexadecimal o .hex). La misma instrucci n de nuestro ejemplo la podr amos escribir de la siguiente manera: RUTINA
66
BTFSC
REG,2
;comienzo de una rutina
Microcontroladores PIC
Manejo de las Instrucciones de un PIC La cuarta columna no ser tenida en cuenta dado que est precedida del signo ;
EJEMPLO: RUTINA
BTFSS GOTO GOTO
REG,0 DEC SIM
Igual que en el caso anterior hemos introducido algunas variables a saber: RUTINA es una etiqueta, de modo tal que cuando alguna instrucci n haga que el contador de programa apunte a dicha etiqueta, entonces se ejecutar la instrucci n BTFSS. REG es un registro que yo deb a haber postulado con anterioridad en el programa.
Microcontroladores PIC
67
Manejo de las Instrucciones de un PIC DEC y SIM son etiquetas, de modo que cuando el contador de programa est apuntando a la l nea: GOTO
DEC
Entonces el programa se seguir ejecutando desde la l nea donde est la etiqueta DEC. Si antes de la instrucci n el contador de programa PC est en la l nea donde se encuentra la etiqueta RUTINA, entonces se ejecutar la instrucci n BTFSS. Al ejecutarse, si el BIT 0 del registro REG es igual a uno, el contador de programa saltar una l nea e ir a ejecutar la instrucci n: GOTO
SIM
EJEMPLO: DIV
68
CALL
RUTIN
Microcontroladores PIC
Manejo de las Instrucciones de un PIC En la l nea DIV se encuentra la instrucci n CALL. Cuando el PC apunta a esta l nea, autom ticamente va a ejecutar un programa que se encuentra en la l nea que posee la etiqueta RUTIN. Cuando termina de ejecutarse la subrutina, se vuelve al programa principal a la l nea siguiente a DIV (se dice DIV+1).
Z Se pone a 1 si el resultado de la operaci n es cero. EJEMPLO: CLRF
REG
Si antes de la instrucci n: REG = 5A h Al ejecutarse: REG = 00 h flag Z = 1
Microcontroladores PIC
69
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la operaci n es cero. EJEMPLO: CLRW Si antes de la instrucci n: W= 0011 1111 b Al ejecutarse: W = 00 flag Z = 1 En definitiva, es una instrucci n que se utiliza cuando debemos asegurarnos que el contenido del registro de trabajo es igual a 0 .
70
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
Cuando se ejecutan las instrucciones CLRWDT o SLEEP, T0# se pone a 1. Se pone a 0 si el temporizador Watchdog se desborda. PD# se pone a 1 cuando se ejecuta la instrucci n CLRWDT o SLEEP. EJEMPLO: CLRWDT Si antes de ejecutarse la instrucci n: WDT = 0000 0100 b Al ejecutarse: WDT = 0000 0000 b Preescaler WDT = 0 bit de estado T0 = 1 bit de estado PD = 1
Microcontroladores PIC
71
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la operaci n es cero. EJEMPLO: COMF DIS,0 Realiza el complemento del n mero almacenado en el registro DIS y guarda el resultado en el registro W. Si antes de la instrucci n: DIS = 0011 1110 b W = 0000 0000 b Al ejecutarse: DIS = 0011 1110 b W = 1100 0001 b flag Z = 0
72
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la operaci n es cero. EJEMPLO: DECF SINT,1 Cuando el PC llega a esta l nea, se decrementa el contenido del registro SINT y en dicho registro se guarda el resultado. El registro de trabajo no interviene para nada. Si antes de la instrucci n: SINT = 0011 0111 b Z=0 Al ejecutarse: SINT = 0011 0110 b Z=0
Microcontroladores PIC
73
Manejo de las Instrucciones de un PIC
EJEMPLO: TEMP
DECFSZ GOTO CLRF
DEL,1 TEMP REG
Con estas l neas de programa estamos realizando una temporizac n , consumiendo ciclos de reloj. Cuando el PC se ubica en la l nea TEMP, se decrementa el contenido del registro DEL. Supongamos que el registro DEL estaba cargado con el n mero 50 expresado en notaci n decimal, al ejecutarse la instrucci n, ahora el contenido de dicho registro ser 49 (distinto de cero) por lo tanto el PC se ubicar en la siguiente l nea (GOTO TEMP). Cuando esto ocurre, la instrucci n est enviando al PC nuevamente a la etiqueta TEMP, con lo cual se volver a decrementar el contenido del registro DEL que ahora tendr cargado el n mero 48. Este ciclo se repite constantemente hasta que en el registro DEL se encuentre el n mero
74
Microcontroladores PIC
Manejo de las Instrucciones de un PIC 00 en cuyo caso el CP saltar una l nea y ejecutar la siguiente instrucci n que en este caso es CLRF REG.
EJEMPLO: GOTO
TEMP
Al ejecutarse la instrucci n, el contador de programa se dirige a la direcci n donde se encuentra la etiqueta TEMP.
Microcontroladores PIC
75
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la operaci n es cero al haber desbordamiento. EJEMPLO: INCF
REG,1
Cuando el PC llega a esta instrucci n se incrementa el contenido del registro REG y el resultado se guarda en el mismo registro, en este caso el registro de trabajo no interviene para nada. Si antes de la instrucci n: REG = FF h flag Z = 0 Al ejecutarse: REG = 00 (FF h +1 h = 00 h) flag Z = 1
76
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
EJEMPLO: ABA
INCFSZ GOTO GOTO
DEN,1 ABA SIGA
Para entender c mo es que si incrementamos un n mero en alg n momento ste puede llegar a cero, hay que decir que cuando se llega a la capacidad m xima de un registro, el pr ximo incremento har que ste se coloque en cero (en todos sus bits) produci ndose un desborde. Si el registro DEN ten a el n mero: DEN = 0111 0001 b Al ejecutarse la instrucci n INCFSZ:
Microcontroladores PIC
77
Manejo de las Instrucciones de un PIC DEN = 0111 0010 b (se increment en una unidad) Entonces el PC va a la direcci n GOTO ABA lo que hace que se vuelva a incrementar nuevamente el contenido de DEN. Este ciclo se repite hasta que el contenido de DEN sea cero en cuyo caso el PC salta una instrucci n y ejecutar la l nea GOTO SIGA (SIGA es el nombre que le hemos dado a otra variable o registro).
Z Se pone a 1 si el resultado de la operaci n es cero EJEMPLO: IORLW
0x32
Esto quiere decir que se realiza la operaci n OR entre el contenido del registro de trabajo y el n mero 32 expresado en hexadecimal, luego: 32 h = 0011 0010 b
78
Microcontroladores PIC
Manejo de las Instrucciones de un PIC Si en W est almacenado el n mero: W = 0001 1110 b, luego de la instrucci n, en el registro de trabajo se almacenar el resultado es decir: W = 0010 1100 b
Z Se pone a 1 si el resultado de la operaci n es cero. EJEMPLO: IORWF
RES,1
Si antes de la instrucci n: RES = 13 h = 0001 0011 b W = 91 h = 1001 0001 b
Microcontroladores PIC
79
Manejo de las Instrucciones de un PIC Al ejecutarse la instrucci n: RES = 0001 0011 b OR 1001 0001 b = 1001 0011 b = 93 h El contenido del registro de trabajo no se altera.
EJEMPLO: MOVLW
0x50
Al ejecutarse la instrucci n, en el registro de trabajo tendremos: W = 50 h La instrucci n MOVLW suele emplearse en la construcci n de las denominadas tablas que se construyen mediante la comparaci n de n meros. En ese caso se carga directamente en el registro de trabajo el n mero de referencia que se comparar con cantidades almacenadas en memoria (datos) mediante una instrucci n posterior.
80
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la operaci n es cero. EJEMPLO: MOVF
SER,0
Si el contenido del registro SER es: SER = 12 h Luego de ejecutarse la instrucci n se tendr : W = 12 h SER = 12 h Note que en este caso si el operando hubiese sido SER,1, entonces el propio contenido del registro se hubiese cargado en el mismo registro, lo que se emplea para corroborar que realmente esa posici n de memoria tiene el dato esperado.
Microcontroladores PIC
81
Manejo de las Instrucciones de un PIC
EJEMPLO: MOVWF
DIR
En este caso se carga al registro DIR con el contenido del registro de trabajo (W). Si antes de la instrucci n: W = 4C h Al ejecutarse: DIR = 4C h W = 4C h MOVWF es una de las instrucciones m s empleadas para la construcci n de programas dado que suele ser el medio empleado para cargar datos en posiciones de memoria RAM. Para que tenga una idea, es muy com n encontrar la siguiente secuencia: MOVLW MOVWF
82
d 22 DIR
Microcontroladores PIC
Manejo de las Instrucciones de un PIC Aqu hemos cargado al registro DIR con el n mero 22 expresado en decimal.
EJEMPLO: NOP
Microcontroladores PIC
83
Manejo de las Instrucciones de un PIC EJEMPLO: RETFIE Al ejecutarse esta instrucci n el contador de programa se dirige a la direcci n cargada en la posici n m s alta de la pila y el bit GIE se pone a 1 con el objeto de habilitar nuevamente la posibilidad de interrupci n.
EJEMPLO: RETLW
k
Como es l gico, esta instrucci n est ligada con las subrutinas, dado que nos indica que sta ha terminado y el retorno inmediato con la carga en el registro de trabajo W de un n mero que est expresado en la siguiente columna de la instrucci n. Adem s carga al CP con el valor que previamente almacen en la PILA (STACK). Esta instrucci n tarda dos ciclos de instrucci n.
84
Microcontroladores PIC
Manejo de las Instrucciones de un PIC Siempre W debe regresar con un literal (muchas veces ese literal es cero). Muchas veces es til esta instrucci n, especialmente cuando deseamos regresar al programa principal con alg n valor obtenido de la subrutina.
Esta instrucci n no amerita ejemplo alguno, dado que cuando sta se ejecuta, se vuelve al programa principal a una direcci n que est almacenada en el STACK.
Microcontroladores PIC
85
Manejo de las Instrucciones de un PIC
EJEMPLO: RLF
REG,0
Si antes de la instrucci n: REG = 1110 0110 b flag C = 0 Como d = 0 el resultado se guardar en W. Al ejecutarse la instrucci n: REG = 1110 0110 b W = 1100 1100 b flag C = 1
86
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
EJEMPLO: RRF
REG,0
Si antes de la instrucci n: REG1 = 1110 0110 b flag C = 1 Como d = 0 el resultado se guardar en W. Al ejecutarse la instrucci n: REG = 1110 0110 b W = 0111 0011 b flag C = 0
Microcontroladores PIC
87
Manejo de las Instrucciones de un PIC
TO Se pone a 1 al ejecutar la instrucci n SLEEP o CLRWDT. PD Se pone a 0 al ejecutar la instrucci n SLEEP. Es una instrucci n muy usada en programas almacenados en los microprocesadores empleados en controles remoto. Normalmente el circuito est en modo SLEEP mientras no se detecte la acci n de una tecla, pero cuando no hay ninguna orden, vuelve a este estado.
88
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la operaci n es cero. DC Se pone a 1 si se genera un acarreo del bit 3 al grupo de 4 bits superior. C Se pone a 1 si se genera un acarreo del bit de mayor peso. EJEMPLO: SUBLW
0x 05
a) Si antes de la instrucci n: W = 01 h Al ejecutarse la instrucci n: W = (05 — 01) = 04 flag C = 1 ; el resultado es positivo b) Si antes de la instrucci n: W = 05 h Al ejecutarse la instrucci n: W = (05 — 05) = 00 h flag C = 1 ; el resultado es cero flag Z = 1
Microcontroladores PIC
89
Manejo de las Instrucciones de un PIC c) Si antes de la instrucci n. W = 07 h Al ejecutarse: W = (05 — 07) = FE h flag C = 0 ; el resultado es negativo.
Z Se pone a 1 si el resultado de la operaci n es cero. DC Se pone a 1 si se genera un acarreo del bit 3 al grupo de 4 bits superior. C Se pone a 1 si se genera un acarreo del bit de mayor peso. Tenga presente que el complemento a 2 de un registro (sustraendo), equivale a restar dicho registro de 256 (255+1). Si el resultado se lo debemos sumar a otro registro (minuendo), si el minuendo (que lo vamos a sumar), es mayor o igual que el sustraendo (que se lo restamos a 256), el resultado ser mayor que 255 y por ende se producir un desborde u overflow con lo que C="1". Esto quiere decir que si C=1 entonces el reultado de la resta es positivo.
90
Microcontroladores PIC
Manejo de las Instrucciones de un PIC Para el acarreo decimal, el bit DC se colocar en "1" cuando el valor del nibble menos significativo (desde el bit 0 al 3) del registro W, sea menor que el nibble menos significativo del registro REG (registro fuente). EJEMPLO: SUBWF
REG,1
a) Si antes de la instrucci n: REG = 04 h W = 02 h Al ejecutarse la instrucci n: REG = (04 — 02) = 02h W = 02 h flag C = 1 ; el resultado es positivo b) Si antes de la instrucci n: REG = 04 h W = 04 h Al ejecutarse la instrucci n: REG = (04 — 04) = 00h W = 04 h flag C = 1 ; el resultado es cero flag Z = 1 ; el resultado es cero c) Si antes de la instrucci n: REG = 0100 0110 b (70 en decimal) W = 1110 0000 b (224 en decimal) Aqu ocurre un caso especial, veamos por qu . La operaci n es la siguiente: ¥ Se realiza el complemento a 2 del sustraendo (complemento a 2 de W) ¥ Se suma el contenido de REG con dicho complemento a 2 de W. ¥ El resultado de esta adici n, ser el resultado de la resta.
Microcontroladores PIC
91
Manejo de las Instrucciones de un PIC Registro w Complemento a 1 Sumando 1 Resultado
1110 0000 0001 1111 + 1 0010 0000 (complemento a 2 del contenido de W = 32 en decimal)
Ahora debemos sumar 32 m s 70 que es el contenido de REG, el resultado ser : 32 + 70 = 102 ¥ El resultado no excede de 255, por lo que no hay bit de acarreo y en consecuencia "C" es igual a 0 (lo que indica resultado negativo). Cuando el minuendo sea menor que el sustraendo, el n mero que debemos restar de 256, es mayor que el que habr que sumar (REG), por lo tanto no habr desbordamiento y el bit Carry C ser siempre igual a "0". El acarreo decimal DC se ha colocado en 1, ya que el valor del pack menos significativo (del bit 0 al 3), del registro de trabajo W (es 0000) y es menor que el del registro REG (registro fuente, es 0110). Por ltimo el bit Z es 0, ya que el resultado de la operaci n no es cero. Como consecuencia de un resultado negativo, el registro Reg permanece inalterable y en el registro W estar el resultado de la operaci n: W = 0010 0110 b (decimal 102) REG = 0100 0110 b (decimal 70) Flaf C = 1 Flag DC = 0 Flag Z = 0
92
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
EJEMPLO: SWAPF
INDI,0
Si antes de la instrucci n: INDI = 1010 0101 h Como d=0 el resultado se almacenar en W, luego de la ejecuci n de la instrucci n tendremos: INDI = 1010 0101 b W = 0101 1010 b
Microcontroladores PIC
93
Manejo de las Instrucciones de un PIC
Z Se pone a 1 si el resultado de la ltima operaci n es cero. EJEMPLO: XORLW
B 0011 1000
Si antes de la instrucci n: W = 1011 0101 b Al ejecutarse la instrucci n: W = 1011 0101 b ⊕ 0011 1000 b = 1000 1101
94
Microcontroladores PIC
Manejo de las Instrucciones de un PIC
EJEMPLO: XORWF
REG,1
Si antes de la instrucci n: REG = 0011 1000 b W = 1011 0101 b Como d=1, el resultado se almacena en REG Al ejecutarse la instrucci n: REG = 1011 0101 b ⊕ 0011 1000 b = 1000 1101 W = 1011 0101 b ************************************************** Nota 1: En las instrucciones CALL y GOTO los 11 <10:0> bits de menos peso corresponden al c digo de operaci n, mientras que los 2 bit de mayor peso <12:11> los suministran respectivamente los bit 4 y 3 del registro PCLATH que realmente apuntan a una de las 4 p ginas del mapa de memoria que puede direccionar el PC.
Microcontroladores PIC
95
Manejo de las Instrucciones de un PIC
Palabras de Configuraci n e Identificaci n Los PIC de la gama media disponen de una palabra de configuraci n de 14 bits que se escribe durante el proceso de grabaci n del dispositivo y que debe hacerse de acuerdo con el sistema en el que se va a insertar. Dichos bits ocupan la posici n reservada de memoria de programa 2007h. La estructura de la palabra de configuraci n es la siguiente:
Bit 4: CP, bit de configuraci n de protecci n de c digo 1= Protecci n de c digo desactivado 0= Protecci n de c digo activado Bit 3: PWRTE, Activaci n del temporizador "Power-Up" 1= Desactivado 0= Activado Bit 2: bit de configuraci n habilitaci n del Watchdog (WDT) 1: WDT activado 0: WDT desactivado Bit 1 y Bit 0: FOSC<1:0>, tipo de oscilador empleado 11: Oscilador RC 10: Oscilador HS ( 8 - 20MHz) 01: Oscilador XT ( 100 KHz- 4MHz) 00: Oscilador LP (Bajo consumo 32- 200Hz) **************************************************************
96
Microcontroladores PIC
Aprendiendo a Programar
Aprendiendo a Programar Introducci n Hace aproximadamente tres a os, comenzamos a mostrar c mo se deben escribir programas en nuestra querida revista Saber Electr nica; fue as que tanto Federico Prado, el Ing. Alberto Picerno y este autor hemos escrito art culos con la explicaci n de programas sencillos que le permitan aprender a utilizar las instrucciones del PIC 16X84. En este cap tulo utilizaremos la misma t cnica comenzando desde el principio, bas ndonos en prototipos reales.
Circuito de un Entrenador En Saber Electr nica hemos desarrollado un entrenador para aprender a programar y cargar PICs, este entrenador se muestra en la figura 1. Figura 1
Microcontroladores PIC
97
Aprendiendo a Programar Sea el programa: ; Primer programa de pr ctica
ptob
List equ
p = 16C84 0x06
; voy a utilizar el PIC16C84 ; inicializo la variable ptob en ; la direcci n 06h
Reset Inicio
ciclo
org movlw tris movlw nop goto
h0 h0 ptob h 0f ciclo
; comienza el programa ; cargo a W con 0 ; mando el contenido de W a ptob
; cargo a W con el n mero binario 15 ; rutina nula ; vaya a ciclo
El programa comienza con un (;), por lo tanto, lo que sigue en el rengl n es tomado como un comentario. Los signos = forman un resalte para indicar el inicio del programa y ayudan a darle una distribuci n agradable a la vista. El programa se lista en cuatro columnas; la primera sirve para colocar las variables que utilizaremos como registros y las etiquetas que son ubicaciones del programa ad nde se debe ir cuando el operando de una instrucci n as lo requiera. En la segunda columna se coloca la instrucci n y en la tercera el operando de la instrucci n. La cuarta columna siempre va precedida de (;) y se utiliza para colocar observaciones que le sirvan al programador como gu a para saber qu quiso hacer o qu funci n cumple esa sentencia, obviamente, al compilar esa instrucci n, las observaciones no son tenidas en cuenta. List p = 16C84 Es el encabezado del programa que le indica al ensamblador qu tipo de PIC se est utilizando para que ste pueda reconocer qu set de instrucci n debe utilizar. ptob equ 06 Nombr a la variable ptob y la coloqu en la direcci n 06 de la RAM, esta direcci n est reservada para el PUERTO B , es decir, ratifico que ptob es el registro del PORT B. Cuando, m s adelante, deba enviar informaci n al puerto b, s lo debo mencionar ptob. Reset org 0 Significa que al realizarse el reset, el programa comienza por la posici n 0 de la memoria del programa. Pero de inmediato pasa a la posici n 1 que tiene
98
Microcontroladores PIC
Aprendiendo a Programar escrita la siguiente sentencia: Inicio movlw 0 Con esto se carga el registro w con el hexadecimal 0 (es decir el binario 00000000) tris ptob Esta instrucci n env a la informaci n del registro W al puerto B para indicarle que todos sus pines son de salida (si se hubiera cargado el binario 11111111 todos los pines ser an de entrada y si se hubiera cargado 11001010 algunos ser an entradas y otros salidas). movlw 0f Carga el registro W con el hexadecimal 15 que equivale al binario 00001111 y movlw ptob Env a el valor cargado al puerto "B" que producir un estado alto en RB0, RB1, RB2 y RB3 y un estado bajo en RB4, RB5, RB6 y RB7. La informaci n del puerto pasa al buffer que lleva las patas 15, 16, 17 y 18 de un PIC16C84 a masa encendiendo los leds D7, D8, D9 Y D10. Ciclo nop Realiza una rutina nula, es decir, que no efect a operaci n alguna. goto ciclo Env a el programa hacia la etiqueta "ciclo". Las dos ltimas operaciones hacen que al ejecutarse un programa, ste se quede en un lazo que se llama loop cerrado . La nica manera de salir de este loop es pulsando RESET. Entonces se observa que los leds se apagan hasta que se suelta el pulsador y el programa comienza nuevamente por la etiqueta RESET. Obviamente, este programa debe ser editado en un utilitario adecuado (MPLAB, por ejemplo) y luego debe ser compilado (utilizando el MPASM o el mismo MPLAB) para obtener el archivo .hex que me permitir cargar el PIC que deber colocar en el circuito de la figura 1 para verificar que realmente hace lo que estamos diciendo. Para cargar el PIC con el programa .hex se utiliza un prototipo adecuado (cargador de PICs) que consiste en un circuito que es manejado por un programa para permitir la carga. Todo este proceso se explica con total claridad en el primer texto de esta serie, titulado: Todo Sobre PICs .
Microcontroladores PIC
99
Aprendiendo a Programar En la figura 2 se puede observar un diagrama de flujo que refleja el funcionamiento del programa que acabamos de explicar. Cu nto tardan en encenderse los leds luego de soltar el bot n de reset? Si se observa el circuito, se ver un cristal de clock de 4MHz (0,25 S de per odo); como internamente existe un divisor x4 cada operaci n se realizar en 0,25 x 4 = 1 S. Si contamos las sentencias hasta llegar a cargar el puerto B, veremos que hay 5 (cinco renglones de programa); por lo tanto, la demora es de 5 S.
Fig. 2
Encendido Intermitente de un Led Si Ud. no quiere armar el entrenador completo (que sirve para un sinf n de aplicaciones que se ense an en el Curso: Todo Sobre PICs , que est en venta en varios pa ses de Am rica a trav s de la red de distribuidores de Editorial Quark y Centro Japon s - vea en InterFig. 3 net la direcci n: www.webelectronica.com.ar) le proponemos que arme s lo lo imprescindible para encender los leds seg n el circuito de la figura 3; un circuito tan simple que no requiere plaqueta, puede armarse tipo ara a sobre la mesa de trabajo,
100
Microcontroladores PIC
Aprendiendo a Programar porque no es algo para mostrar sino para aprender. Observe que los leds est n conectados directamente al puerto B predispuesto como de salida por el programa. En efecto, el puerto de salida admite perfectamente los 3mA que toma cada led al conectarlos con resistores en serie de 1k5. Como nica precauci n para el armado debe utilizar un z calo de 18 patas para el PIC. Las conexiones de X1, C1 y C2 deben ser lo m s cortas posibles. Si usted repara TV y videograbadores seguramente tendr cristales de 3,58MHz (de PALN o NTSC o inclusive de PALM). Puede utilizarlos sin mayor inconveniente pero recuerde que los tiempos calculados estar n afectados de un coeficiente igual a 3,58/4. Nuestro programa va a hacer uso de lo que se llama una subrutina. Una subrutina es como un segundo programa anexo al principal. El programa principal va a la subrutina a trav s de una instrucci n "CALL" que no hab amos empleado hasta ahora. Esta instrucci n salta del paso del programa donde se encuentra, a la subrutina y cuando se ejecuta por completo vuelve al mismo punto del programa en donde se hab a producido el salto. Una subrutina debe estar siempre dirigida a una etiqueta para que el salto se realice con un destino bien determinado. Por lo general, las subrutinas se escriben a continuaci n del programa principal, pero esto es simplemente una costumbre, bien podr an ubicarse en otro lugar como el principio. Recuerde que todo comienza cuando se pulsa reset o cuando se enciende el equipo y, en ese momento, se ejecuta lo indicado con la etiqueta reset y se salta al rengl n siguiente. Cuando termina una subrutina, se debe colocar una referencia "RETURN", que significa retornar al siguiente rengl n del programa principal donde est la invocaci n a la subrutina. Otra instrucci n nueva que no hab amos utilizado es "decfsz" que siempre va acompa ada de un n mero hexadecimal. Esta instrucci n se utiliza para programar retardos. Por ejemplo, si su paso del programa fuera: CONST
equ decfsz
06 CONST
En el encabezado se declara que la variable CONST estar en la direcci n 06 luego, al ejecutarse la instrucci n el contenido de la variable CONST se ha decrementado en una unidad. Esto parece m s una complicaci n sin sentido, pero no es as ; en un programa bien estructurado los cambios se realizan en el encabezado y, adem s, muchas veces es necesario cambiar solidariamente varios operandos y el m todo propuesto lo logra f cilmente. Tambi n vamos a utilizar una instrucci n de doble uso y que forma parte de
Microcontroladores PIC
101
Aprendiendo a Programar una subrutina (generalmente la cierra). Se trata de "retlw" que debe ir acompaado de un literal (n mero hexadecimal). Esta operaci n carga el registro w con el literal que lo acompa a y retorna al programa principal todo en un solo rengl n. Su funcionamiento se apreciar mejor cuando veamos el programa de aplicaci n pero es equivalente a: movlw return
0x12
; cargo a W con el n mero 12h
A esta altura Ud. debe recordar unas cuantas sentencias y todav a faltan unas cuantas m s (recuerde todo lo visto en el cap tulo 2). Como ayuda para que no deba estudiar todas las sentencias de memoria le decimos que lo mejor es relacionarlas con palabras comunes del idioma ingl s. Por ejemplo "equ" proviene de "equal" que significa igual. En la figura 4 le damos una tabla con m s ayudas. Fig. 4
Para dise ar un programa usted debe tener en claro la funci n del proyecto. En nuestro caso queremos que al encender la fuente el led conectado a RB0 se encienda y apague con un tiempo que pueda modificarse f cilmente para alterar el programa. Al apretar el pulsador de reset se debe apagar el led y al soltarlo se encender luego de un retardo y continuar alternando per odos de encendido y apagado.
102
Microcontroladores PIC
Aprendiendo a Programar El programa completo lo vamos a dividir en dos partes: un programa principal y una subrutina que llamamos retardar . Los hacemos as porque casi todos los programas incluyen retardo y el dise o de esa subrutina lo podemos emplear posteriormente y nos ahorraremos trabajo. Un programa debe estar estructurado en forma clara, se deben diferenciar claramente los distintos sectores y esto se hace no s lo para que sea agradable a la vista, sino para facilitar los futuros cambios. La primera secci n es el t tulo y la declaraci n de qu PIC se va a utilizar. La segunda es el encabezado en donde se le da nombre a los literales (n meros hexadecimales) m s importantes. La tercera es el programa principal y la cuarta las subrutinas: ;=========================================================== ; Secuenciador de encendido de un led list p=16C84 ;micro PIC16C84 ;=========================================================== portb equ 06 ;el puerto b se ubica en la dirección de ;memoria RAM06 reg1 equ 0c ;asignación de los registros donde se cargan los reg2 equ 0d ;diferentes literales reg3 equ 0e ; grueso equ 40 ;al literal 40 lo llamamos grueso medio equ 40 ;al literal 40 lo llamamos medio fino equ 50 ;al literal 50 lo llamamos fino ;=========================================================== reset org 0 ;un reset envía a la posición 00 de la memoria ;de programa. Goto comienzo ;reenvío al comienzo del programa ;===========================================================
Analicemos el encabezado, las primeras l neas hasta la etiqueta portb ya las conocemos del programa anterior (aqu empleamos portb en lugar de ptob). Luego tenemos tres sentencias que le dan nombre reg1, reg2 y reg3 a tres registros de uso general, ubicados en las posiciones de memoria RAM destinadas a los registros. Recuerde que las primeras 12 posiciones de memoria hasta 0B est n ocupadas por registros fijos. A partir de 0C se ubican los registros de prop sitos generales de los cuales usaremos 3, a saber: 0C, 0D y 0E (que son los registros que hemos denominado reg1, reg2 y reg3). En esos registros volcamos inicialmente los literales 30, 40 y 50 que nombramos como grueso , medio y fino . Esto se realiza en las tres ltimas sentencias del encabezado que son aquellas que Ud. debe variar si desea que el
Microcontroladores PIC
103
Aprendiendo a Programar ritmo de encendido se haga m s lento o m s r pido. Desde luego que estas tres sentencias no son imprescindibles pero si no se usan, luego habr a que buscar dentro de la subrutina para cambiar los literales. Trabajando de esta manera es m s f cil introducir cambios porque los hacemos desde el encabezado. La secci n principal del programa es muy similar a la utilizada en el primer programa para encender permanentemente un led: reset comenzar ppal
org goto movlw tris movlw movwf
0 comenzar 00 ptob 01 ptob
call
demora
movlw movwf
00 ptob
call
demora
goto
ppal
;un reset envía el programa a la posición 0 ;se envía el control al comienzo ;se carga w con 00 ;se programa el puerto b como salida ;se carga w con 01 ;se descarga w en el puerto b para ;encender el led conectado RB0 ;se mantiene el led encendido por ;un intervalo de tiempo ;se carga w con 00 ;se descarga w en el puerto b para ;apagar el led de RB0 ;se mantiene el led apagado por ;un intervalo de tiempo ;continua el programa en el principio ;hasta realizar un reset
Siempre se comienza a analizar el programa observando qu ocurre al realizar un reset. En este caso, vemos que todo comienza en la posici n 00 de la memoria de programa. En la siguiente posici n se env a el control del programa a la posici n comenzar , en donde se predispone el puerto b para operar como salida. Luego, comienza el programa principal en el etiqueta ppal, en donde se carga el registro w con el n mero hexadecimal 01. Cuando este n mero se descarga en el puerto b se enciende el led conectado en RB0. Ahora se env a el control a la subrutina demora porque pretendemos que el led quede encendido algo menos de un segundo. Cuando se cumpla ese tiempo volver el control desde demora continuando por la carga de w con el hexadecimal 00. Al descargar w en el punto b se produce el apagado de led conectado en RB0. Nuevamente el control pasa a la subrutina demora, en donde se queda por algo menos de 1 segundo antes de volver al programa principal. Cuando vuelve es enviado de inmediato al comienzo de ppal con un nuevo encendido de RB0 y as permanentemente hasta que se opere el reset. Es el turno de platicar sobre la subrutina demora. Esta subrutina es m s complicada que el programa principal. Lo que ocurre es que la dise amos pa-
104
Microcontroladores PIC
Aprendiendo a Programar ra uso general, ya que la vamos a aplicar en una infinidad de programas. En principio, la demora la vamos a poder variar con tres n meros hexadecimales que fueron definidos en el encabezamiento como grueso , medio y fino porque operan de ese modo sobre el retardo final: demora
movlw
grueso
movwf
reg1
movlw
medio
movwf
reg2
dem2
movlw
fino
dem1
movwf decfsz
reg3 reg3
goto decfsz goto decfsz goto retlw
dem1 reg2 dem2 reg3 dem1 0
dem3
;recarga w con el número hexadecimal ;“grueso” es decir, con 30 ;se vuelca “grueso” en el registro ;reg 1 ;se carga w con el número hexadecimal ;“medio” es decir con 40 ;se vuelca "medio" en el registro ;reg2. ;se carga w con el número hexadecimal "fino" ;es decir con 50. ;se vuelca "fino" en el registro reg3. ;se decrementa el registro reg3 en una unidad ;y si el resultado es cero se salta a la siguiente ;instrucción, si no se sigue decrementando. ;retorno a la frecuencia etiqueta dem1. ;idem con reg2. ;retorno a la etiqueta dem2. ;idem con reg1. ;retorno a la etiqueta dem3. ;se carga w con 0 y se retorna al programa ;principal
end
La subrutina comienza cargando los registros de uso general con los n meros hexadecimales declarados en el encabezado. Luego que los tres registros especiales est n cargados con los hexadecimales 30, 40 y 50 se comienza a decrementar el registro 3 de a una unidad; mientras el registro tenga un n mero mayor o igual a 1 se contin a este proceso, pero al llegar a cero se salta a la siguiente sentencia que justamente es un "goto". Es como si el control retornara y fuera a dem1 tantas veces como lo indica el n mero hexadecimal cargado en el registro 1. Luego la subrutina pasa a la siguiente sentencia que comienza a decrementar el n mero cargado en reg2, s lo que el "goto" es a la etiqueta dem2 que es anterior a la dem1, es decir, que se vuelve a pasar por "dem1" a hacer todo el primer decremento del n mero guardado en "reg3" y reci n despu s se hace el siguiente decremento en el registro "reg2". Cuando "reg2" llega a cero se produce el primer decremento de "reg3" y para que se produzca el segundo tienen que decrementarse a cero "reg2". En una palabra, que la subrutina da much simas vueltas sobre "dem 1", muchas sobre "dem2"
Microcontroladores PIC
105
Aprendiendo a Programar y pocas sobre "dem3". Finalmente cuando "reg3" llega a cero, se pasa retlw que reenv a el control al programa principal justo en la sentencia que invoc a la subrutina pero antes de retornar lleva el registro w a cero. El programa termina en "end" que no puede considerarse como una sentencia, ya que no realiza ninguna tarea; sin embargo, su existencia es imprescindible para que el programador de PICs d por terminada su tarea. Cuando no se coloca el programa ensamblador emite un mensaje de error. Tenga en cuenta que le estamos ense ando a programar , es decir, a utilizar las instrucciones del set del PIC. Si Ud. es programador, estos ejemplos le van a parecer muy torpes, dado que el experto sabe c mo utilizar rutinas que permitan hacer lo mismo con menos esfuerzo de programaci n. Ud. est aprendiendo como cuando comenz a sumar y en aquella oportunidad seguramente le costaba entender que 1 + 1 es igual a dos, aunque hoy le parezca un ejemplo muy burdo. Volviendo a nuestro programa, sabemos que la subrutina "demora" tiene una cierta duraci n. Con un m nimo conocimiento de matem ticas podemos calcular ese retardo en funci n de los n meros hexadecimales que hallamos elegido. Tomemos primero el "loop" (rulo) m s interno de la subrutina; mientras no se cumpla que "reg 3" = 0 se consume un ciclo de instrucci n por vuelta (gen ricamente podemos decir que todas las sentencias consumen un ciclo salvo las de salto como la "goto" que consume dos). N mero de ciclos "reg 3" = 3 x "grueso" = 3 x 80 (ya que 50 Hex = 80 decimal) = 240 ciclos de instrucci n Para calcular la demora de los dos loops siguientes es conveniente realizar un diagrama de los mismos tal como el mostrado en la figura 5. Ahora vemos que el loop intermedio dura 2 + 1 + 1 + 1 = 5 ciclos de instrucci n a los cuales se les suman los 240 ciclos del loop m s interno. En total ser an 5 + 240 = 245. Pero este loop es recorrido hasta que el hexadecimal 40 (equivalente al decimal 64) se anule: n mero de ciclos "reg 2" = 245 x medio = 245 x 64 = 15.860 ciclos de instrucci n. El loop m s externo dura 2 + 1 + 1 + 1 = 5 ciclos de instrucci n a los cuales se les suman los 15.860.
106
Microcontroladores PIC
Aprendiendo a Programar
Fig. 5
Pero este loop es recorrido hasta que el hexadecimal 40 (equivalente al decimal 64) se anule: n mero de ciclos "reg 1" = 15.860 x fino = 15.860 x 64 = 1.015.040 ciclos de instrucci n.
Fig. 6
Nos quedar an 1 + 1 ciclos al comienzo de la subrutina y 2 ciclos al final para llegar a un valor de 1.015.044 ciclos de instrucci n. La duraci n de un ciclo de instrucci n depende del cristal utilizado. Si usamos un cristal de 4MHz cada ciclo de instrucci n dura 1 s y tendr amos una demora de 1,015 seg. El led estar a encendido casi un segundo y apagado otro tanto. El funcionamiento del programa principal y la subrutina de demora pueden representarse en un diagrama de flujo como el mostrado en la figura 6 para el programa principal.
Microcontroladores PIC
107
Aprendiendo a Programar
Secuenciador de 4 Canales Elegimos trabajar con cuatro leds para que usted pueda entender el tema con m s facilidad. Pero todo lo que veremos puede aplicarse a un secuenciador de 8 leds. Nuestro dispositivo enciende cuatro leds en secuencia de manera que nunca est n encendidos todos al mismo tiempo. En el ejemplo anterior vimos primero el programa y luego el diagrama de flujo. En realidad el m todo es el inverso. Un diagrama de flujo permite visualizar el funcionamiento de un programa y por lo tanto debe efectuarse previamente. Por ejemplo, en la figura 7 puede ver el diagrama de flujo correspondiente a la rutina demora del programa que permite el encendido intermitente de un led. El programa es la interpretaci n del diagrama de flujo; en el programa se plasman los detalles que no tiene el diagrama de flujo. Para construir el programa de nuestro secuencial, nos basamos en el diagrama de flujo de la figura 8. Observe que luego de iniciado, el proceso no se detiene jam s, ya que terminada la secuencia, vuelve a comenzar. Obviamente, la aplicaci n de un reset apagar todos los leds mientras se mantenga el reset pulsado. En este programa se van a utilizar nuevas instrucciones que debemos detallar. Entre otras utilizamos la instrucci n movf que se acompa a con un doble operando. Es una sentencia que sirve para realizar transferencias en el contenido de cualquier registro nombrado como primer operando al registro W. Otra instrucci n nueva es rlf, cuya fun-
108
Fig. 7
Fig. 8
Microcontroladores PIC
Aprendiendo a Programar ci n es desplazar el contenido de un registro nombrado como operando. El contenido se desplaza hacia la izquierda y el primer bit vuelve a ingresar como ltimo. Finalmente se utiliza tambi n la instrucci n btfss que incluye dos operandos; el primer operando indica en qu registro se realiza la operaci n y el segundo que posici n del registro se analiza (en que bit, del bit 0 al bit 7). La operaci n consiste en analizar la posici n siguiente a la nombrada como segundo operando. Por ejemplo: btfss
rot,4
Aqu se analiza el estado de 5 bit (bit 4, dado que el primer bit o bit menos significativo es el bit 0), si ste es cero se continua con la sentencia siguiente , si es 1 se saltea en la siguiente secuencia. En la figura 9 se realiza un dibujo que explica estas ltimas instrucciones. Fig. 9
Microcontroladores PIC
109
Aprendiendo a Programar Imag nese a movf como si volcara el contenido de un balde en otro, se lo asimila a un transvasamiento. La sentencia rlf la puede imaginar como si apretara un registro con el dedo puesto por la derecha del mismo; el bit que se cae por la izquierda lo toma con la mano y lo pone por la derecha donde qued un espacio vac o. Vea a btfss como si estuviera con la mano sobre el quinto bit. Si esa posici n esta fr a, mande el control de programa al rengl n siguiente. Si est caliente, saltee el que sigue y mande el control al posterior a ste. Bien, el programa del secuenciador es en realidad una modificaci n del programa de encendido y apagado de un led. Como vemos, los programas dif cilmente se inicien desde cero siempre se utilizan otros programas que se modifican y adem s se utilizan subrutinas completas como la "demora": ; SECUENCIADOR list P=16C84 ;el dispositivo usa el 16C84 ;------------------------------------------------------------------------------------------ptob equ 06 ;el puerto f se ubica en 06 de la RAM. Rot equ 0d ;al registro ubicado 0d se lo llama est. Reg1 equ 0e ;al registro ubicado en 0e se lo llama reg1 reg2 equ 0f ;al registro ubicado en 0f se lo llama reg1 reg3 equ 10 ;al registro ubicado en 10 se lo llama reg3 grueso equ 00 ;se asignan nombres a los literales. medio equ 40 ;se asignan nombres a los literales. fino equ 50 ;se asignan nombres a los literales. ;------------------------------------------------------------------------------------------reset org 0 ;reset en dirección 00h goto comenzar ;se lleva el control a comienzo comenzar movlw 00 ;se carga w con 00h tris ptob ;se programa el puerto "b" como salida. ppal movlw 01 se carga w con 01h movwf rot ;se descarga w en el registro rot ;preparándolo para la rotación. sec movf rot,0 ;el contenido de rot pasa a w movwf ptob ;enciende el led conectado donde indica w call demora ;se mantiene encendido el led. rlf rot ;se mueven los bits de "rot". btfss rot,4 ;se comprueba el 5º bit. goto sec ;si el 5º bit es cero se reenvía a sec. goto ppal ;si el 5º bit es uno se reenvía a ppal para ;comenzar una nueva secuencia.
110
Microcontroladores PIC
Aprendiendo a Programar demora movlw movwf dem3 movlw
grueso reg1 medio
movwf
reg2
dem2 movlw
fino
movwf dem1 decfsz
reg3 reg3
goto decfsz goto decfsz goto retlw
dem1 reg2 dem2 reg3 dem1 0
;recarga w con el número hexadecimal ;“grueso” es decir, con 30 ;se vuelca “grueso” en el registro ;reg 1 ;se carga w con el número hexadecimal ;“medio” es decir con 40 ;se vuelca "medio" en el registro ;reg2. ;se carga w con el número hexadecimal ;"fino" es decir con 50. ;se vuelca "fino" en el registro reg3. ;se decrementa el registro reg3 en una ;unidad y si el resultado es cero se salta a ;la siguiente instrucción, si no se sigue ;decrementando. ;retorno a la frecuencia etiqueta dem1. ;idem con reg2. ;retorno a la etiqueta dem2. ;idem con reg1. ;retorno a la etiqueta dem3. ;se carga w con 0 y se retorna al ;programa principal.
end
Todo comienza cargando el registro w con el hexadecimal 01, es decir que el registro se llenar con el binario correspondiente 00000001. Este contenido se transvasa a "rot" y luego devuelta a "w", desde donde se lo env a al puerto "b" para encender el ltimo led. Ahora el control del programa se env a a demora para que el led permanezca encendido cerca de 1 segundo. A continuaci n se produce la rotaci n de los bits de "rot" con lo cual queda cargado con el binario 00000010. Ahora se comprueba el estado del quinto bit; como es 0 se reenv a el control a "sec , se carga "w" con el contenido de "rot" se transvasa "rot" a "w" y luego se env a "w" al "ptob", entonces el segundo led se enciende y as sucesivamente, hasta que se enciende el cuarto led. En ese momento, al hacer la rotaci n se lleva el quinto bit a 1, momento en que se saltea el goto "sec", se hace un goto a ppal y comienza una nueva secuencia. Si lo analizamos globalmente, lo nico que hace el programa es cargar el puerto w con los binarios 00000001; 00000010; 00000100; 00001000 y realizar un cambio cada segundo aproximadamente. Sugerimos que cambie inicialmente la subrutina demora para que la secuencia sea m s r pida. Luego lo invitamos a realizar un cambio mayor, que
Microcontroladores PIC
111
Aprendiendo a Programar implique secuenciar 8 leds en lugar de 4, y por ltimo lo invitamos a construir una guirnalda para un arbolito de navidad. Lo nico que se modifica en este caso es que con el sistema simplificado, se requiere manejar un solo led. Para manejar una cantidad mayor, le sugerimos el circuito de la figura 10. Fig. 10
Generador de Se ales de Audio El programa que reci n vimos puede utilizarse para generar se ales de audio con forma de escalera, que son el medio id neo para comprobar la linealidad de los amplificadores de potencia de audio. En efecto, una escalera de 8 escalones de 1kHz de frecuencia aproximada, nos permite probar si la amplificaci n es lineal. Basta con usar un osciloscopio y medir si los 8 escalones generados son id nticos. En funci n del escal n deformado, se puede luego determinar en qu parte del amplificador se encuentra la falla. Por ejemplo, los escalones centrales se deforman cuando falla el circuito de corriente vac o. Una falla en los escalones extremos significa que no funcionan correctamente los circuitos de boostrap. (fi-
112
Microcontroladores PIC
Aprendiendo a Programar gura 11). Esta forma de onda es tambi n ideal para controlar la respuesta en frecuencia del amplificador de potencia, sin necesidad de realizar varias mediciones con un oscilador de audio. Un amplificador sobrecompensado en frecuencia (realce de agudos) producir sobreimpulsos en los escalones y uno subcompensado (falta de agudos) redondear los frentes (figura 12). Fig. 11
Fig. 12
La fabricaci n de un generador escalera nos da motivo para estudiar el manejo de llaves anal gicas con un PIC. Esta es una de las utilidades m s importantes del PIC y se usa en una gran cantidad de aplicaciones. Por ejemplo, un uso frecuente es la codificaci n y decodificaci n de se ales de TV. En este proyecto usaremos dos llaves CD4066 para conmutar 8 valores de tensi n de salida, que forman una se al escalera de 8 pelda os y 3,5V de amplitud pico a pico. El circuito se muestra en la figura 13. Los resistores R15 a R23 forman cada pelda o de la escalera y su valor debe ser sumamente exacto. Si no puede conseguir resistores al 1%, los debe conseguir con resistores en paralelo medidos con un buen t ster digital. Una
Microcontroladores PIC
113
Aprendiendo a Programar Fig. 13
vez armada la serie y con CI1 fuera del z calo se deben controlar las tensiones continuas en las uniones de los resistores con un t ster digital. Los resistores R6 a R9 y R11 a R14 se utilizan como reparadores para facilitar el service. En el uso normal no cumplen funci n especial alguna. El reset es autom tico al encender la fuente de 5V a trav s de R10 y C3 que demoran el crecimiento de la tensi n sobre el terminal 4 (MCLR ). El puerto A se conecta con resistores de 1k‰ a los +5 V para evitar captaciones espurias. La salida de se al en escalera se produce sobre la conexi n com n de salida de las llaves anal gicas y se aten a con el fin de reducir la impedancia de salida mediante R24 y RV1. La tensi n de salida m xima es de 100mV pap aproximadamente. La nica modificaci n que requiere el programa es la modificaci n de las constantes literales para que cada escal n dure 12 S. (8 escalones duraran 8 x 125 = 1000 S = 1mS). Si repasamos la secci n de la subrutina demora del art culo anterior veremos que cada instrucci n simple demora 1 S y que el loop definido con "FINO" dura 3 x FINO S. En nuestro caso, debemos buscar un n mero hexadecimal cuyo equivalente anal gico sea 125. Lo m s simple es recurrir al tanteo, usando hexadecimales que terminen en cero; sabiendo que el hexadecimal 10 corresponde al anal gico 16, podemos deducir que el anal gico 20 corresponde al 32, el 30 al 48 y as sucesivamen-
114
Microcontroladores PIC
Aprendiendo a Programar te, ir multiplicando el hexadecimal x 1,6. Si 3 x FINO = 125 S implica que FINO = 125/3 = 41,6 anal gico, que dividido por 1,6 es 26. Aproximamos al hexadecimal 30, ya que con ste tendremos que el loop "FINO" demorar 3 x 30 Hex = 3 x 48 = 144 S. La frecuencia obtenida ser de F = 1/(144 x 8) = 868Hz que se aproxima a la buscada. Si desea mayor precisi n ajuste el literal "FINO". Sintetizando: el programa debe variarse haciendo que fino valga 30 y medio y grueso sean ambos iguales a 00. Piense que el circuito propuesto puede tener muchas posibilidades de modificarse a voluntad y adaptarse a otros usos. Por ejemplo, si en lugar de conectar las entradas de las llaves a tensiones continuas, las aplican a se ales alternas provenientes de 8 osciladores sinusoidales, se puede hacer un barredor de audio. Si reduce la frecuencia de repetici n puede construir un generador musical de acordes de 8 notas, similares a los utilizados como bocina musical en autom viles y etc., etc., etc. Piense en otras posibilidades m s. Los Formatos de los Archivos Mencionamos el programa MPASM, que es un ensamblador que transforma el programa dise ado por nosotros en un idioma hexadecimal correspondiente al PIC. El programa generado a mano (el que escribe el programador, en base a las pautas dadas en este cap tulo) tienen una extensi n ASM (de ASEMBLER" o ensamblador) y cuando lo aplic bamos al MPASM se generaban tres archivos con terminaciones diferentes .err donde se encuentran los mensajes de error, si se cometi un error de sintaxis al escribir el archivo .asm; .asm un archivo .lst con los renglones numerados para ubicar en cual se produce el error y el m s importante, el archivo .hex que contiene los datos que supuestamente entiende el microprocesador. En realidad del microprocesador no entiende el archivo con terminaci n .hex. .hex El necesita otro programa que transforma el .hex en un lenguaje binario de datos en serie que es lo nico que entiende el microprocesador PIC, sto es lo que hace un PROGRAMADOR o cargador de PICs.
Secuenciador de 8 Canales Veamos un programa diferente al propuesto para rotar el encendido de 4 leds. Este programa sirve para encender 8 leds en sucesi n de la figura 3 y con algunos cambios para excitar las llaves anal gicas del generador de escalera que acabamos de analizar:
Microcontroladores PIC
115
Aprendiendo a Programar
En la primera sentencia se observa la declaraci n del microprocesador utilizado. Como puede observar en lugar de utilizar el 16C84, como lo hicimos hasta ahora, utilizamos el 16F84. La diferencia entre ambos radica en el tipo de memoria utilizada. El 16F84 contiene una memoria m s r pida del tipo EEPROM FLASH que se puede reescribir un mill n de veces. El almacenamiento de esta informaci n est garantizado por el fabricante por un lapso mayor a 40 a os con el dispositivo sin alimentaci n. El 16C84 es totalmente similar, pero contiene una memoria EEPROM com n, de acceso m s lento y con menores garant as de mantenimiento de la informaci n grabada. Tambi n se puede utilizar el 16F83 similar al 16F84 pero con la mitad de capacidad de memoria y por lo tanto m s barato. Cualquiera de los tres integrados puede alimentarse con tensiones de 4 a 6V. En el sector entre l neas punteadas, se declara donde se van a ubicar 3 variables que utiliza el programa, llamadas ptob, j y k. Aqu se puede observar que la posici n de memoria puede declararse de diferentes modos. En el primer rengl n s lo escribimos 06. Cuando no se coloca el n mero entre acentos, ni se coloca una letra adelante, se interpreta que se trata de un n mero hexadecimal. Es decir que el programa ensamblador (el MPASM) interpreta un n mero "por defecto" como si fuera hexadecimal. En el segundo y tercer rengl n se utiliza un criterio diferente. La letra H significa que el n mero entre acentos ser hexadecimal; en este caso particular se utilizar n las posiciones de memoria 1F y 1E para guardar a las variables j y k. En la carpeta reset se ubica la parte del programa que se ejecuta s lo cuan-
116
Microcontroladores PIC
Aprendiendo a Programar do se presiona el pulsador de reset. Se trata de 5 renglones o sentencias de las cuales la primera ubica el control en la posici n de memoria de programa cero. En la segunda se carga el registro de trabajo w con el n mero cero. Observe que en este caso utilizamos otra notaci n diferente; la letra B indica que a continuaci n se colocar un n mero binario de 8 d gitos (el PIC empleado s lo puede manejar hasta 8 bits). En la siguiente sentencia se vuelca el contenido del registro de trabajo en ptob, que en el copete se declar ubicado en la posici n de memoria 06. Esta posici n de memoria controla la disposici n del puerto "B" como de salida (aclaramos que el uso del comando TRIS generar un mensaje de precauci n pero que por ahora no debemos tener en cuenta). En la sentencia 4 de la carpeta "reset", se vuelve a cargar el registro de trabajo con el binario "00000001"; esto no implica que se realice ninguna modificaci n en la disposici n de puertos, ya que una vez cargada la posici n de memoria, sta no se modificar hasta que se produzca un reset. El registro w se utiliza para cargar informaci n nueva y ubicarla luego donde se desea. Por ejemplo, en la sentencia 5 se descarga w en el puerto de salida B, que con TRIS se declar como de salida. Esto significa que se va a encender el led ubicado en la pata 6 del mismo (B0). Aqu termina la carpeta reset y no se volver a ella hasta que se oprima reset o se desconecte y reconecte al microprocesador. La siguiente carpeta se llama "mciclo" y comienza con el comando "rlf" utilizado para mover posteriormente el bit puesto en uno del puerto B, una posici n hacia la izquierda. De cualquier modo al ejecutar rlf no se producir todav a el cambio de estado en las salidas. En la segunda sentencia de la carpeta "mciclo" se carga el registro de trabajo, pero ahora utilizamos otra notaci n diferente. La letra D indica que vamos a cargar un n mero decimal y luego entre acentos decimos que ese n mero ser el 50 (esto es adecuado para usar el microprocesador como generador de onda en escalera, pero debe cambiarse por 500 si se va a utilizar como secuenciador; como vemos este n mero determina la duraci n de los escalones o el tiempo de encendido de cada led). En la tercera sentencia se descarga el n mero 50 en la variable "j" que antes se declar ubicada en la posici n de memoria 1F. Aqu empieza la carpeta "jciclo" de una sola sentencia, en donde el mismo n mero 50 se vuelca en la variable "k" que antes se declar ubicada en la posici n de memoria 1E. La siguiente carpeta llamada "kciclo" se utilizar para decrementar estos n meros 50 ubicados en 1F y en 1E de modo de establecer una demora necesaria para que los escalones o el encendido de los leds dure el valor que nosotros impongamos. La primer sentencia de la carpeta "kciclo", decrementa k en una unidad. El
Microcontroladores PIC
117
Aprendiendo a Programar comando "decfsz" es del tipo condicional; si el valor de k es superior a cero (1 a 50 en nuestro caso), el control del programa va a la sentencia siguiente que es incondicional y reenv a el control de programa a la carpeta "kciclo". Cuando k llega al valor cero, env a el control a la sentencia posterior a "goto", obviando el bucle "kciclo". En una palabra que los dos primeros renglones de la carpeta "kciclo" decrementan el n mero 50 hasta cero y como cada sentencia dura 1 seg, ya que estamos usando un cristal de 4MHz, podemos calcular que este bucle del programa dura 100 seg. En la tercera sentencia se decrementa la variable "j", del mismo modo que se hiciera con "k" pero se retorna a la carpeta "jciclo" para generar un nuevo bucle de 100 seg. Esto implica que los dos bucles tienen una duraci n de 100 x 100 seg, es decir: 10.000 seg o 10mseg (con 500, cada bucle dura 1000 seg y el producto es 1.000.000 de seg o 1seg). Transcurrido este tiempo el control pasa a la quinta sentencia de la carpeta "kciclo" que es una sentencia incondicional goto que env a el control a la carpeta "mciclo". Reci n en este momento se produce la rotaci n de ptob, se apaga el primer led y se enciende el siguiente por otro lapso de tiempo de 1seg. El programa ir cambiando el binario acumulado en el puerto B, correr el 1 a la izquierda hasta que salga del registro y vuelva a ingresar por la derecha.
Compilaci n de un Programa Cuando uno tiene escrito el programa con el edit del DOS, debe verificarlo exhaustivamente, controlar el encolumnado y los errores de sintaxis antes del punto y coma separador. De cualquier modo siempre se puede deslizar un error que provocar una falla en el programa. Si usted trabaja correctamente, el programa ensamblador MPASM le avisar de los errores y le dar algunas advertencias tiles sobre el uso de algunas sentencias. Para ver c mo funciona sto, volvamos a escribir el programa del secuencial de 8 canales modific ndolo de modo que presente algunos errores:
118
Microcontroladores PIC
Aprendiendo a Programar
A continuaci n se abri el MPASM y se ejecut el archivo modificado con intenci n de obtener el archivo HEX que requiere el programador de pics. Pero si lo solicitamos se pueden generar los archivos .err y .lst que ser n de gran utilidad para encontrar errores de tipeo (si no sabe c mo se realiza este proceso, lea el texto: Todo Sobre PICs , de Editorial Quark). Veamos c mo se produce la limpieza de un programa con errores. Al ejecutar el archivo con F10 del MPASM, el ensamblador ofrece un resultado como el indicado en la figura 14. Luego se muesFig. 14 tra la pantalla graficada en la figura 15 donde se indican 5 errores y 6 precauciones, adem s de la indicaci n de la cantidad de l neas totales ensambladas (30 en este caso). Ahora se deben encontrar las l neas con errores y para eso se debe Fig. 15
Microcontroladores PIC
119
Aprendiendo a Programar editar el archivo .ERR con el mismo editor de DOS que estamos utilizando. Por cada error o advertencia hay una l nea de respuesta que comienza con "WARNING" (advertencia) o ERROR (error) y un n mero de c digo por el que se pueden obtener m s detalles sobre el error o la advertencia, luego el nombre de archivo analizado con el rbol de directorios correspondiente y el n mero de l nea que contiene el error o advertencia. Luego un separador dos puntos y el tipo de error o advertencia. Los mensajes de advertencia no impiden el desarrollo de la posterior programaci n, pero los mensajes de error s . Vamos a atender primero los mensajes de error y luego los de advertencia. No es necesario numerar las l neas de programa a mano, y a veces no es conveniente, porque la falta de un separador (punto y coma) puede generar l neas fantasmas y confundirnos. Es preferible editar el archivo .lst (en nuestro caso SECU8NO.LST) que tiene al mismo tiempo los mensajes de error y el n mero de l nea. Ver figura 16. En la primera columna se marcan los errores o precauciones y la localizaci n y valor de las variables. En la segunda, el n mero de l nea y a continuaci n la l nea de programa. El primer error lo tenemos indicado antes de la l nea 00005: y nos indica que las variables o s mbolos LA y VARIABLE no est n definidos previamente y que se produzco un cambio de operador. Mirando la l nea se observa que el nico problema es que falta el separador de comentarios y el ensamblador confundi el comentario con una sentencia. El siguiente error est en la l nea 12 y nos indica que el error se produce despu s de la primera columna, entre par ntesis se encuentra el argumento u orden equivalente (molw por movlw). En la l nea 22 est el siguienFig. 16 te error y consiste en la
120
Microcontroladores PIC
Aprendiendo a Programar orden GOTO escrita como GORO. Veamos ahora los mensajes de advertencia. El primero est en la primer l nea y se produce porque esta l nea est dirigida al programador y no puede ser entendida por el ensamblador. Se puede dejar sin inconvenientes. La siguiente est en la l nea 12 y seguramente va a desaparecer cuando se corrija la orden movlw. Luego pasamos a la l nea 13 en donde est la orden TRIS; ocurre que en los microprocesadores m s modernos esta orden se modifica por otra m s compleja; por ahora se puede seguir usando TRIS para programar los puertos si se usa el 16C84 o el 16F84. La siguiente precauci n est en la l nea 18 y se debe a que el decimal 50000 est fuera del rango admitido por el microprocesador. Esta precauci n debe ser considerada modificando el valor por uno menor. La siguiente precauci n est en la l nea 22 y se corregir al reemplazar GORO por GOTO. Al corregir los errores y agregar el separador, el MPASM va a reportar s lo dos advertencias. Una en la l nea 1 por la declaraci n del microprocesador dirigida al programador de PICs y la otra es la referida a la orden TRIS que puede ser ignorado por el momento.
Carga del Programa en un PIC Para programar un PIC se deben conectar varias de sus patas en una disposici n determinada que hace accesible su memoria para recibir datos serie desde el puerto paralelo de su PC. El puerto paralelo de la PC, en donde usted conecta habitualmente la impresora, tiene varias v as de conexi n, cuyo estado puede modificarse por medio de un programa adecuado. Con un programa adecuado como el NOPP Ud. podr a variar el estado de la pata 14 del puerto paralelo de la PC en una r pida sucesi n que se corresponda con la informaci n serie necesaria para cargar el PIC. En una palabra que cada hilo de un puerto paralelo puede transformarse en un puerto serie. Cabe aclarar que este programa, de la empresa Gernsback, puede bajarlo de Internet de la direcci n: ftp://ftp.gernsback.com/pub/EN/noppp.zip En el momento de grabar un PIC se lo debe disponer seg n lo indicado en la figura 17. Las conexiones de fuente y las se ales deben ser aplicadas seg n una secuencia predeterminada que debe respetarse invariablemente: A) El primer paso es colocar el PIC en el z calo del programador con se ales y fuentes a potencial de masa. B) Levantar la tensi n de fuente VDD a un potencial de 5V – 0,2V por la pata 14 (VDD). C) Levantar la tensi n de fuente VPP a un potencial de 13V – 0,3V por la pata 4 (MCLR NEGADO).
Microcontroladores PIC
121
Aprendiendo a Programar Fig. 17
D) Esperar en esas condiciones un tiempo superior a 1mS. E) Posicionar el primer dato en la pata 13 (RB7) con un potencial alto (mayor a 4V) o bajo (menor a 1V). F) Cuando la pata 12 (RB6) pase a un estado alto, superior a 4V, el dato se carga en la memoria. G) Continuar cargando los datos con el mismo criterio a un ritmo tal que el dato est presente por lo menos durante 100nS. H) Cuando todos los datos fueron cargados se debe esperar 1 segundo. I) Desconectar la fuente de 13V. J) Desconectar la fuente de 5V. K) Retirar el micro grabado.
Por sobre todas la cosas, debe respetarse el criterio de no sacar un PIC de su z calo con las fuentes conectadas porque puede desprogramarse o, peor a n, daarse definitivamente. Tambi n es muy importante respetar las tensiones de fuente y no demorar la llegada de datos, luego conectar VPP (porque podr an cargarse datos falsos por interferencias electromagn ticas). Como usted puede observar de la descripci n anterior la entrada RB6 es utilizada como clock y la RB7 como entrada de datos en una cl sica operaci n de transferencia de datos en serie. Hay un tiempo entre el momento en que MCLR (MCLR NEGADO) sale de la condici n de reset hasta que aparece el primer dato o el primer pulso de clock. Tambi n hay un tiempo m nimo para la permanencia de un dato en la entrada (la representaci n usada para un dato significa que el mismo puede ser alto o bajo, depende del bit que se est grabando). Lo que no hay es un tiempo m ximo pero evidentemente cuando mayor es este tiempo m s lenta ser la carga del programa. El tiempo m s adecuado depende de factores tales como el largo del cable utilizado para conectar el programador a la PC. Si el cable es largo, los pulsos tienden a deformarse y atenuarse, sobre todo cuando son de corta duraci n (100nS equiva-
122
Microcontroladores PIC
Aprendiendo a Programar len a una frecuencia de 10MHz). Para evitar problemas todos los programadores trabajan a velocidades inferiores a la m xima, sobre todo considerando que la capacidad de memoria no es muy grande y para el uso casero no son imprescindibles grandes velocidades de grabaci n. Luego de grabar un PIC se puede verificar que su programa haya sido correctamente grabado. Esto se realiza utilizando la misma pata 13 del PIC (RB7) que, como sabemos, es de I/O (Input/Output ; entrada/salida). La transformaci n del modo de escritura a lectura no requiere cambios de hardware; es decir que vale lo indicado en la figura 17. El micro detecta los primeros bit emitidos para saber si debe grabar o leer y luego transforma RB7 en puerto de salida para poder leer los datos grabados. As contin a todo hasta el final de la lectura de datos. La mejor prueba para saber si la grabaci n es exitosa consiste en modificar la tensi n de la fuente VDD desde 4 a 6V. Primero se debe realizar una verificaci n a 5V exactos, luego se debe pasar a 6V y realizar una nueva verificaci n; por ltimo ubicar la fuente en 4V y realizar la ltima prueba. Esta verificaci n es sumamente importante porque un PIC mal grabado puede presentar fallas en su funcionamiento o peor a n puede funcionar correctamente al principio pero borrarse en pocos d as. Vamos ahora a adaptar nuestro programador para que funcione con el software NOPP. Las diferencias entre un programador y otro muchas veces se deben a la utilizaci n de diferentes patas del puerto paralelo de la PC. En efecto el software del programador puede elegir diferentes patas para utilizarlas como entradas y salidas de datos serie. Tambi n es posible que se utilicen otras patas para generar las tensiones de control de fuentes y, por ltimo, algunos software s lo controlan la fuente VPP; que es justamente el caso que nos ocupa. Por ltimo los programadores m s completos utilizan una fuente regulada que puede ajustarse entre 4 y 6V para comprobar la efectiva grabaci n de los datos. En la figura 18 realizamos dos modificaciones. Por un lado agregamos la llave LL1 para operar la fuente de 5V a mano. Cuando la llave est cerrada Q1 conduce y el micro est alimentado con 5V por la pata 14. La acci n de la llave se controla por el encendido del led verde. Por lo tanto, usted debe colocar el PIC en el z calo o retirarlo s lo cuando el led verde est apagado. Con referencia a la fuente agregamos un regulador LM317 en lugar del 78L5 que tiene la posibilidad de poder programar su tensi n de salida. En efecto el preset RV1 en un extremo debe ajustar la salida en 4V y en el otro lo debe ajustar en 6V. Tanto la secci n de fuente como el volt metro necesitan ajustes a realizar con un t ster digital. La fuente requiere el ajuste de R21. Comience colocando resistores de 1k‰; luego debe variar ambos valores hasta que la salida cambie entre los l mites
Microcontroladores PIC
123
Aprendiendo a Programar Fig. 18
especificados de 4 y 6V. En el volt metro se deben ajustar los resistores de 27 y 22k‰ para que el led se encienda en el rango de 4,8 a 5,2V. Con referencia a los cambios en el puerto paralelo preferimos modificar el cable de conexi n dejando el conector de la plaqueta sin modificaciones. Observe que si la plaqueta est desconectada o la fuente est apagada el software NOPP reconoce este estado a trav s de la pata 5 de la ficha DB9 que est a potencial alto por medio de R9 y aborta la operaci n de carga. El transistor Q2 que controla la fuente VPP se maneja a trav s de CI1 desde la pata 1 de la ficha DB9. Pero la fuente de 5V deber manejarse a mano por intermedio de la llave LL1. *************************************************** Con este tema damos por finalizada esta obra que complementa al texto: Todo Sobre PICs que puede conseguir a trav s de la red de distribuidores de Editorial Quark y Centro Japon s. Aclaramos que en estos momentos estamos elaborando el tercer texto de la serie que explica la construcci n y programaci n de Sistemas con PICs para que Ud. pueda construir instrumentos electr nicos, codificadores y decodificadores de se ales de TV, aut matas programables, emuladores y un sinf n de dispositivos. ✪
124
Microcontroladores PIC