Copia de Teoria Pic

48
1 MICROCONTROLADORES 1. Introducción. En las aplicaciones sencillas resultan preferibles las soluciones no programables que no requieren desarrollo de software. Escribir software consume mucho tiempo por lo que resulta más costoso y en aplicaciones sencillas y/o de poca tirada a menudo es más razonable efectuar tareas en hardware. Sin embargo, conforme aumenta la complejidad del sistema, aumentan las ventajas del uso de sistemas programables. Una de las principales ventajas de los sistemas programables es su flexibilidad, lo que permite actualizar el funcionamiento de un sistema tan sólo mediante el cambio del programa sin tener que volver a diseñar el hardware. Esta flexibilidad es muy importante, al permitir que los productos se actualicen con facilidad y economía. 1.1. Referencia histórica. En el año 1971 la compañía de semiconductores Intel lanzó al mercado el primer microprocesador, lo que supuso un cambio decisivo en las técnicas de diseño de los equipos de instrumentación y control. Este circuito integrado contenía todos los componentes de la unidad central de procesos (CPU) de una computadora dentro de un solo dispositivo. Los fabricantes, conscientes de la importancia de este mercado, crearon una amplia gama de estos circuitos integrados, constituyendo familias de microprocesadores. En el año 1976, gracias al aumento de la densidad de integración de componentes en un circuito integrado, salió a la luz el primer ordenador en un chip, es decir se integraron junto con el microprocesador otros subsistemas que anteriormente formaban unidades independientes (memoria, entradas/salidas, etc.). A este nuevo integrado se le denominó microcomputadora monopastilla. Cuando los sistemas basados en microprocesadores se especializan en aplicaciones industriales, aparece la versión industrial de la microcomputadora monopastilla, el microcontrolador (μC). Estos dispositivos producen un obvio beneficio en aplicaciones pequeñas. Su característica más sobresaliente es que son sistemas integrados.

Transcript of Copia de Teoria Pic

Page 1: Copia de Teoria Pic

1

MICROCONTROLADORES 1. Introducción. En las aplicaciones sencillas resultan preferibles las soluciones no programables que no requieren desarrollo de software. Escribir software consume mucho tiempo por lo que resulta más costoso y en aplicaciones sencillas y/o de poca tirada a menudo es más razonable efectuar tareas en hardware. Sin embargo, conforme aumenta la complejidad del sistema, aumentan las ventajas del uso de sistemas programables. Una de las principales ventajas de los sistemas programables es su flexibilidad, lo que permite actualizar el funcionamiento de un sistema tan sólo mediante el cambio del programa sin tener que volver a diseñar el hardware. Esta flexibilidad es muy importante, al permitir que los productos se actualicen con facilidad y economía. 1.1. Referencia histórica. En el año 1971 la compañía de semiconductores Intel lanzó al mercado el primer microprocesador, lo que supuso un cambio decisivo en las técnicas de diseño de los equipos de instrumentación y control. Este circuito integrado contenía todos los componentes de la unidad central de procesos (CPU) de una computadora dentro de un solo dispositivo. Los fabricantes, conscientes de la importancia de este mercado, crearon una amplia gama de estos circuitos integrados, constituyendo familias de microprocesadores. En el año 1976, gracias al aumento de la densidad de integración de componentes en un circuito integrado, salió a la luz el primer ordenador en un chip, es decir se integraron junto con el microprocesador otros subsistemas que anteriormente formaban unidades independientes (memoria, entradas/salidas, etc.). A este nuevo integrado se le denominó microcomputadora monopastilla. Cuando los sistemas basados en microprocesadores se especializan en aplicaciones industriales, aparece la versión industrial de la microcomputadora monopastilla, el microcontrolador (µC). Estos dispositivos producen un obvio beneficio en aplicaciones pequeñas. Su característica más sobresaliente es que son sistemas integrados.

Page 2: Copia de Teoria Pic

2

¿Qué es un microcontrolador? Es un circuito integrado programable que puede ejecutar un sin número de tareas y procesos, con la capacidad para manejar señales de entrada y salida, así como para procesar datos y tomar decisiones gracias a las instrucciones de un programa almacenado en su memoria interna. Es un circuito integrado que contiene todos los componentes de un computador. Se emplea para controlar el funcionamiento de una tarea determinada y, debido a su reducido tamaño, suele ir incorporado en el propio dispositivo al que gobierna. Esta última característica es la que le confiere la denominación de «controlador incrustado» (embedded controller). Se dice que es “la solución en un chip” porque su reducido tamaño minimiza el número de componentes y el coste. El microcontrolador es un computador dedicado. En su memoria sólo reside un programa destinado a gobernar una aplicación determinada; sus líneas de entrada/salida soportan e conexionado de los sensores y actuadores del dispositivo a controlar. Una vez programado y configurado el microcontrolador solamente sirve para gobernar la tarea asignada. “Un microcontrolador es un computador completo, aunque de limitadas prestaciones, que está contenido en el chip de un circuito integrado y se designa a gobernar una sola tarea”. El número de productos que funcionan en base a uno o varios microcontroladores aumenta de forma exponencial. Casi todos los periféricos del computador (ratón, teclado, impresora, etc.) son regulados por el programa de un microcontrolador. Los electrodomésticos de línea blanca lavadoras, hornos, etc.) y de línea marrón (televisores, videos, aparatos de música, etc.) incorporan numerosos microcontroladores. Igualmente, los sistemas de supervisión, vigilancia y alarma en los edificios utilizan estos chips para optimizar el rendimiento de ascensores, calefacción, alarmas de incendio, robo, etc. Ofrecen la única solución práctica a muchos problemas de diversos campos: 1. Periféricos y dispositivos auxiliares de los computadores. 2. Electrodomésticos. 3. Aparatos portátiles y de bolsillo (tarjetas, monederos, teléfonos, etc.) 4. Máquinas expendedoras y juguetería. 5. Instrumentación. 6. Industria de automoción (Figura 1). 7. Control industrial y robótica. 8. Electromedicina. 9. Sistema de navegación espacial. 10. Sistemas de seguridad y alarma. Domótica en general.

Figura 1. Aplicaciones del microcontrolador en un utomovila

Page 3: Copia de Teoria Pic

3

1.3. Diferencia entre microcontrolador y microprocesador. El microprocesador es un circuito integrado que contiene la Unidad Central de Proceso (CPU), también llamada procesador de un computador. Al microprocesador se le conecta la Memoria y Módulos de E/S para configurar un computador implementado por varios circuitos integrados. Un microprocesador es un sistema abierto (configuración variable) con el que puede construirse un computador con las características que se desee, acoplándole los módulos necesarios. Un microcontrolador es un sistema cerrado que contiene un computador completo y de prestaciones limitadas que no se pueden modificar. Figura 2 (a)Estructura de un sistema abierto basado en un microprocesador. (b) Microcontrolador.

Decidirse por construir el sistema con el microprocesador, o utilizar directamente el microcontrolador dependerá de la economía. Si el C está limitado por su propia CPU, es necesario elegir un P potente y añadir los buffers, drivers, decodificadores, memorias, etc. pertinentes. Generalmente, salvo que la aplicación exija grandes prestaciones, el µC será una solución válida, con la ventaja de que reduce el espacio y el hardware.

Page 4: Copia de Teoria Pic

4

Fabricantes. Gran parte de los fabricantes de circuitos integrados disponen de su propia línea de microcontroladores. En la tabla 1 se relacionan los fabricantes más destacados. Tabla 1. Algunos fabricantes de C con algunos modelos.

Cada fabricante de microcontroladores oferta un elevado número de modelos diferentes, desde los más sencillos hasta los más poderosos, de forma que es posible seleccionar la capacidad de la memoria, el número de líneas de E/S, la cantidad y potencia de elementos auxiliares, la velocidad de funcionamiento, etc. Se considera a Intel como el padre de los microcontroladores y al 8048 como el primer microcontrolador de 8 bits (fabricado por Intel en la década de los 70). Otra de las principales empresas del mundo de dispositivos programables es Motorola, que dispone del potente microcontrolador 68HC11. Los microcontroladores PIC de la empresa americana Microchip se emplean en la actualidad cada vez más debido a su reducido consumo, bajo coste, pequeño tamaño, facilidad de uso y la abundancia de información y herramientas de apoyo.

Page 5: Copia de Teoria Pic

5

Arquitectura interna de un microcontrolador. Un microcontrolador posee todos los componentes de un computador, pero con características fijas que no se pueden alterar. Las partes principales son:

• Procesador o Unidad Central de Proceso (CPU). • Memoria no volátil para contener el programa. • Memoria de lectura y escritura para guardar los datos. • Líneas de E/S para los periféricos (comunicación serie, paralela, etc.). • Recursos auxiliares:

• Circuito de reloj. • Temporizadores. • Perro guardián (Watchdog). • Convertidores A/D y D/A. • Comparadores analógicos. • Protección ante fallos de alimentación. • Estado de reposo en bajo consumo.

La comunicación entre las principales secciones de un sistema computador (basado en microcontrolador o en microprocesador) tiene lugar sobre un cierto número de buses. Un bus está compuesto de líneas paralelas de datos que permiten flujo de información en uno o ambos sentidos (se pueden considerar un conjunto de conductores paralelos). La Figura 4 muestra la estructura de buses de un sistema típico. Se usan tres buses: • Bus de datos. Se emplea para transferir datos. El número de líneas de este bus igual a la longitud de

palabra del dispositivo. • Bus de direcciones. Permite transferir información de direcciones. El número de líneas en el bus de

direcciones determina el numero de posiciones de memoria que el procesador puede especificar. Un bus de direcciones de 8 líneas sería capaz de posicionar sólo 28 (256) direcciones.

• Bus de control. El procesador utiliza las líneas del bus de control para sincronizar operaciones con

componentes externos.

Figura 4. Estructura de buses un sistema típico Por ejemplo, si el procesador o microcontrolador deseara almacenar una palabra de datos en una ubicación de memoria particular, colocaría los datos en el bus de datos, la dirección en la que se van a almacenar los datos en el bus de direcciones y diversas señales de control para sincronizar la operación de almacenamiento en el bus de control.

Page 6: Copia de Teoria Pic

6

Procesador. Es el elemento más importante del microcontrolador tanto a nivel hardware como software. Se encarga de direccionar la memoria de instrucciones, recibir el código OP (opcode) de la instrucción en curso, su decodificación y la ejecución de la operación aritmética o lógica que implica la instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado. La necesidad de conseguir rendimientos elevados en el procesamiento de las instrucciones ha desembocado en el empleo generalizado de procesadores de arquitecturaHardvard, frente a los tradicionales que seguían la arquitectura de Von Neuman. Esta última se caracteriza porque la CPU se conectaba a una memoria única donde coexistían datos e instrucciones a través de un sistema de buses. En la arquitectura Harvard son independientes la memoria de instrucciones y la memoria de datos y cada una dispone de su propio sistema de buses para el acceso. Esto propicia el paralelismo (Figura 5).

Figura 5 arquitectura Harvard Almacenamiento y ejecución del programa. Un programa es una lista de instrucciones al procesador. Todos los µP y µC tiene un conjunto de instrucciones que pueden ejecutar. Cada tipo de procesador y controlador tiene su propio conjunto de instrucciones (set de instrucciones), y por lo general los programas escritos para una máquina no funcionarán en otra. Un µC típico tendrá instrucciones para: transferir información entre registros y memoria; realizar operaciones aritméticas y lógicas; efectuar comparaciones y pruebas sobre el contenido de sus registros de memoria; controlar la secuencia de ejecución de programas. Por lo general la operación que una instrucción ha de ejecutar está definida por un código de operación, (en C sencillos generalmente de un solo byte) conocido también como opcode. Algunas instrucciones requieren además del opcode información extra (operandos). Por ejemplo, una instrucción para almacenar el contenido de un registro en una posición de memoria, necesitará incluir la dirección de memoria de destino. La unidad de control y decodificación de instrucciones es el corazón del procesador. Es la encargada de extraer de forma secuencial las instrucciones de la memoria y luego ejecutarlas. Unido a la unidad de control se encuentra un generador de reloj, que utiliza un oscilador para producir una señal de reloj muy precisa. El tiempo se divide en un cierto número de ciclos de reloj. El funcionamiento de la unidad de control y decodificación de instrucciones se puede dividir en dos partes (ambas duran varios ciclos de reloj):

Page 7: Copia de Teoria Pic

7

• Ciclo de búsqueda de instrucciones. En él se transfiere la dirección de la siguiente instrucción al bus de direcciones, se envía una orden de lectura a los dispositivos de memoria a través del bus de control, se lee la información del bus de datos, y si se trata del primer byte de una instrucción, se transfiere este byte al registro de instrucciones.

• Ciclo de ejecución de instrucciones. En él se ejecuta la instrucción. El registro de instrucciones está

conectado a un decodificador, que determina cuántos bytes de información adicionales se requieren. Éstos se cargan mediante ciclos de búsqueda, como se indicó con anterioridad.

Cuando la ejecución está completa, la máquina comienza automáticamente el ciclo de búsqueda de la siguiente instrucción del programa. La ejecución es por tanto, una secuencia continua de ciclos de búsqueda y ejecución. El procesador de los modernos microcontroladores responde a la arquitectura RISC (Computadores de Juego de Instrucciones Reducido), que se identifica por tener un repertorio de instrucciones máquina pequeño y simple, de forma que la mayor parte de las instrucciones se ejecutan en un ciclo de instrucción.

Page 8: Copia de Teoria Pic

8

Memoria de programa. El microcontrolador está diseñado para que en su memoria de programa se almacenen todas las instrucciones del programa de control. Como el programa a ejecutar siempre es el mismo, debe estar grabado de forma permanente. Son posibles cinco tipos de memoria: • ROM de máscara. Esta memoria se graba en el chip durante el proceso de fabricación. Los altos costes

de diseño sólo aconsejan usarla cuando se precisan series grandes. • EPROM. En la superficie de la cápsula del microcontrolador existe una ventana de cristal por la que se

puede someter al chip a rayos ultravioletas para producir el borrado de la memoria y emplearla nuevamente. Su coste unitario es elevado.

• OTP (One Time Programmable). Este modelo de memoria sólo se puede grabar una vez por parte del

usuario. Su bajo precio y la sencillez de la grabación aconsejan este tipo de memoria para prototipos finales y series de producción cortas.

• EEPROM. La grabación es similar a la EPROM y OTP, pero el borrado es mucho más sencillo al

poderse ejecutar eléctricamente las veces que se quiera. • FLASH. Se trata de una memoria no volátil de bajo consumo que se puede escribir y borrar en circuito al

igual que la EEPROM, pero suele disponer de mayor capacidad que estas últimas. El borrado sólo es posible de bloques completos y no se puede realizar de posiciones concretas. Por sus mejores prestaciones está sustituyendo a la memoria EPROM para contener instrucciones.

Memoria de datos. Los datos que manejan los programas varía continuamente y eso exige que la memoria que los contiene deba ser de lectura y escritura. La memoria RAM estática (SRAM) es la más apropiada aunque sea no volátil. Hay microcontroladores que poseen como memoria de datos una memoria de escritura y lectura no volátil del tipo EEPROM. De este forma, un corte en el suministro de la alimentación no ocasiona la pérdida de la información.

Page 9: Copia de Teoria Pic

9

Líneas de E/S para los controladores de periféricos. A excepción de las patillas destinadas a recibir la alimentación, el cristal que regula la frecuencia de trabajo y el reset, las restantes patillas de un microcontrolador sirven para la comunicación con los periféricos externos. Recursos auxiliares. Según las aplicaciones cada modelo de microcontrolador incorpora una diversidad de complementos que refuerzan la potencia del dispositivo. Entre los más comunes se encuentran: • Circuito de reloj, encargado de generar los impulsos que sincronizan el funcionamiento de todo el

sistema. • Temporizadores, orientados a controlar tiempos. • Perro guardián (watchdog), destinado a provocar una reinicialización cuando el programa se queda

bloqueado. • Conversores A/D y D/A para poder recibir y enviar señales analógicas. • Estado de reposo, en el que el consumo de energía se reduce al mínimo.

Page 10: Copia de Teoria Pic

10

La familia PIC. Dado que las aplicaciones sencillas precisan pocos recursos y las aplicaciones más complejas requieren numerosos y potentes recursos, Microchip construye diversos modelos de microcontroladores orientados a cubrir las necesidades de cada proyecto. Siguiendo esta filosofía Microchip oferta diferentes gamas de microcontroladores: • PIC12CXXX gama baja( 8-pin, palabra de programa de 12 bits/14 bits):

o Bajo consumo. o Memoria de datos EEPROM.

• PIC16C5X, gama baja o clásica ( palabra de programa de 12 bits): o Encapsulados de 14, 18, 20 y 28 pines. o Óptimo para aplicaciones que trabajan con baterías (bajo consumo).

• PIC16CXXX, gama media (palabra de programa de 14 bits). o Convertidores A/D y puerto serie. o Encapsulados desde 18 a 68 pines.

• PIC17CXXX, gama alta (palabra de programa de 16 bits). o Arquitectura abierta, memoria ampliable.

• PIC18XXX, gama alta (palabra de programa de 16 bits). o Conjunto de instrucciones mejorado. o Detección de bajo voltaje programable (PLVD).

Dentro de cada gama se dispone de una gran variedad de modelos y encapsulados, pudiendo seleccionar el que mejor se adapte a cada proyecto (Tabla 2). En el año 2000 se comercializaron más de un centenar de modelos de PIC que cubren desde los “enanos” de ocho patillas y mínimos recursos hasta los “avanzados” de 84 patillas enormemente potentes. Tabla 2. Familias de microcontroladores PIC. Continúa en la siguiente página......

Page 11: Copia de Teoria Pic

11

Estos microcontroladores han logrado en pocos años ocupar un elevado puesto del ranking mundial de ventas de microcontroladores, dada su economía, fiabilidad, rapidez, abundante información técnica y el precio asequible de las herramientas que se precisan para desarrollar las aplicaciones.

Page 12: Copia de Teoria Pic

12

EL MICROCNTROLADOR PIC 16F84 El " PIC 16F84 " es un MICROCONTROLADOR de 8 bits, perteneciente a la subfamilia de la gama media de los microcontroladores fabricados por compañía Microchip Tecnology. Posee memoria de programa tipo FLASH, lo que ofrece una gran facilidad en el desarrollo de prototipos y en su aprendizaje ya que no se requiere de borrado con luz ultravioleta como las versiones EPROM sino, permite reprogramarlo nuevamente si ser borrado con anterioridad. Esta es una de las principales características por la que se elige para el desarrollo de muchas aplicaciones. Los PIC16F84, es un grupo de microcontroladores de bajo costo, alta ejecución, con tecnología CMOS, completamente estático, esto quiere decir que el reloj puede detenerse y los datos de la memoria no se pierden. Emplean arquitectura RISC (set reducido de instrucciones), con solo 35 instrucciones, fácil de usar y recordar lo que permite reducir el tiempo de desarrollo significativamente. Estos microcontroladores están equipados con dispositivos especiales que reducen el costo del sistema y los requerimientos de potencia. El reset de encendido (POR) y el temporizador de reset, ofrecen la posibilidad de no usar circuito externo de reset. Se tiene la alternativa de escoger entre cuatro configuraciones del oscilador, y además presenta un modo SLEEP de bajo consumo, temporizador Watchdog (perro guardián) y código de protección (encriptación) El encapsulado más común para el PIC16F84 es el DIP (Dual In-Line Pin) de 18 pines, aunque también existe el dispositivo con encapsulado tipo Surface Mount (de montaje superficial). Una de las referencias más comerciales es el PIC16F84-04/P, donde “–04” indica la frecuencia máxima de trabajo(4MHz) y la “P” indica el tipo de encapsulado plástico tipo DIP. El PIC 16C84 es un microcontrolador de la familia MICROCHIP, totalmente compatible con el PIC 16F84. Su principal característica es que posee memoria "EEPROM" en lugar de memoria Flash, pero su manejo es igual. Con respecto al PIC16F84, este microcontrolador presenta dos diferencias: • La memoria de datos tiene menor tamaño, aquí se tienen 32 registros de propósito general (el mapa de

memoria de datos llega hasta 2Fh). • En el momento de programar el microcontrolador, el fusible de selección del temporizador de arranque

(Power Up Timer) trabaja de forma inversa, es decir, si en el PIC 16F84 se selecciona la opción "Low" para activarlo, en el PIC 16C84 se debe seleccionar "High".

El microcontrolador PIC16C84 ha sido reemplazado de forma gradual por el PIC16F84, por lo tanto, los diseños que lo utilizan como elemento de control deben ser actualizados. Aunque, por lo tratado anteriormente, es un proceso casi transparente. Este microcontrolador se basa en la Arquitectura Harvard, en la cual el programa y los datos se pueden acceder desde memorias separadas, lo que posibilita que las instrucciones y los datos posean longitudes diferentes. Esta misma estructura es la que permite la superposición de los ciclos de búsqueda y ejecución de las instrucciones, lo cual se ve reflejado en una mayor velocidad del microcontrolador.

Page 13: Copia de Teoria Pic

13

La siguiente es la tarjeta de presentación de los PIC16C/F84:

• CPU de 8 bits de alto rendimiento y estructura RISC.

• Conjunto de instrucciones de solo 35 sencillas instrucciones.

• Todas las instrucciones son ejecutables en un solo ciclo (400 nS a 10 MHz), excepto para las instrucciones con bifurcación en las cuales se emplean dos ciclos de instruccioón.

• Velocidad de operación desde DC hasta 20 MHz, con un ciclo de instrucción de DC hasta 400 nS, respectivamente.

• Ancho de instrucción de 14bits. • Bus de datos de 8 bits. • 15 registros de función especial (SFR’s). • Pila (Stack ) de 8 niveles hacia abajo. • Direccionamiento directo e indirecto. • Cuatro fuentes de interrupción.

- Interrupción externa por pin RB0/INT. - Por sobreflujo del Timer0. - Por cambio en el puerto B <RB4:RB7>. - Escritura completa en la EEPROM de

datos. • 1.000.0000 de ciclos de borrado/escritura de

la memoria EEPROM.

• Retención de la EEPROM de datos hasta 40 años.

• 13 pines de entrada / salida para el control individual de periférico que permiten un suministro considerable de corriente para el manejo directo de LED’s (20 mA máximo por pin en modo sourcing y 25 mA máximo por pin en modo sinking).

• Temporizador/countador de 8 bits. • Reset de encendido (POR: power-on reset). • Dispositivo temporizador de reset (PWRT:

power-up timer). • Temporizador o de vigilancia watchdog

para recuperación por fallas de programa, lográndose una confiable operación.

• Código de protección programable. • Modo de operación SLEEP para bajo

consumo de potencia. • Opciones de selección del oscilador. • Programación serial en sistema, vía dos

pines. • Bajo consumo de potencia:

- < Típicamente 2mA a 5V, 4Mhz. - Típicamente 15µA a 2V, 32 KHz. - Corriente típica en standby a 2V.

Page 14: Copia de Teoria Pic

14

Arquitectura interna. El microcontrolar 16F84, como todos los microcontroladores PIC, están basados en la arquitectura Harvard que posee buses y espacios de memoria diferenciados para los datos y las instrucciones. Por otro lado, esta independencia entre datos e instrucciones permite que cada uno tenga el tamaño más adecuado. Así, los datos tienen una longitud de 8 bits, mientras que las instrucciones son de 14 bits (Figura 6).

Figura 6. Arquitectura Hardvard. Como se observa en la Figura 7 el PIC16F84 consta de un procesador con una ALU y un Decodificador de Instrucciones, una memoria de programa tipo FLASH de 1K palabras de 14 bits, una memoria de datos SRAM con 68 posiciones de 8 bits. También existe una zona de 64 bytes de EEPROM para datos no volátiles. Finalmente dispone de interrupciones, un temporizador, perro guardián y dos puertas A y B de entrada y salida de información digital. 3.1.1. El procesador o CPU. El procesador responde a la arquitectura RISC, que se identifica porque el juego de instrucciones se reduce a 35, donde la mayoría se ejecutan en un solo ciclo de reloj, excepto las instrucciones de salto que necesitan dos ciclos. La ALU (Arithmetic Logic Unit) ubicada dentro del procesador realiza las operaciones lógicas y aritméticas con dos operandos, uno que recibe desde el registro W (registro de trabajo) y otro que puede provenir de cualquier registro interno (Figura 7). Pasa a la siguiente página....

Page 15: Copia de Teoria Pic

15

Figura 7. Diagrama de bloques del PIC16F84.

Page 16: Copia de Teoria Pic

16

PINES Y FUNCIONES Los PUERTOS son el puente entre el microcontrolador y el mundo exterior. Son líneas digitales que trabajan entre cero y cinco voltios y se pueden configurar como entradas o como salidas. El PIC 16F84 tiene dos puertos. El puerto A con 5 líneas y el puerto B con 8 líneas. Cada pin se puede configurar como entrada o como salida independiente programado por un par de registros diseñados para tal fin. En ese registro un "0" configura el pin del puerto correspondiente como salida y un "1" lo configura como entrada.

• PUERTO A RA0 = Pin de Entrada/Salida (TTL). RA1 = Pin de Entrada/Salida (TTL). RA2 = Pin de Entrada/Salida (TTL). RA3 = Pin de Entrada/Salida (TTL). RA4/TOCKI = Pin de Entrada/Salida o entrada de Reloj Externo para el TMR0, cuando este pin se configura como salida es de tipo Open Drain (ST), cuando funciona como salida se debe conectar a Vcc (+5V) a través de una resistencia. • PUERTO B RB0/INT = Pin de Entrada/Salida o entrada de interrupción externa. (TTL/ST). RB1 = Pin de Entrada/Salida (TTL). RB2 = Pin de Entrada/Salida (TTL). RB3 = Pin de Entrada/Salida (TTL). RB4 = Pin de Entrada/Salida con Interrupción por cambio de Flanco. (TTL). RB5 = Pin de Entrada/Salida con Interrupción por cambio de Flanco.(TTL). RB6 = Pin de Entrada/Salida con Interrupción por cambio de Flanco. (TTL/ST). RB7 = Pin de Entrada/Salida con Interrupción por cambio de Flanco. (TTL/ST).

Figura No. 8 Distribución de pines de los microcontroladores de la serie PIC16C/F84.

Page 17: Copia de Teoria Pic

17

• PINES ADICIONALES MCLR = Pin de Reset del Microcontrolador (Master Clear) ), el cual se produce cuando se aplica un nivle bajo o cuando la tensión en dicho pin desciende entre 1,2V a 1,7V. Vss = Ground o Tierra VDD = Fuente Positiva (+5V) OSC2/CLKOUT = Entrada del Oscilador del Cristal. Se conecta al Cristal o Resonador en modo XT (Oscilador de Cristal). En modo RC (Resistencia-Condensador), este pin actúa como salida el cual tiene 1/4 de la frecuencia que entra por el pin OCS1/CLKIN. OSC1/CLKIN = Entrada del Oscilador del Cristal / Entrada de reloj de una Fuente Externa El pin RB0/INT se puede configurar por software para que funcione como interrupción externa. El pin RA4/TOCKI del puerto A puede ser configurado como un pin de entrada/salida como se mencionaba anteriormente o como entrada del temporizador/contador. Cuando este pin se programa como entrada digital, funciona como un disparador de Schmitt (Schmitt trigger, ST), esto quiere decir que puede reconocer señales un poco distorsionadas y llevarlas a niveles lógicos (cero y cinco voltios). Cuando se usa como salida digital se comporta como colector abierto, por lo tanto se debe poner una resistencia de pull-up (resistencia externa conectada a un nivel lógico de cinco voltios). Como salida, la lógica es inversa: un "0" escrito al pin del puerto entrega en el pin un "1" lógico. Además como salida no puede manejar cargas como fuente, sólo en el modo sumidero. Como este dispositivo es de tecnología CMOS, todos los pines deben estar conectado a alguna parte, nunca dejarlos al aire por que se puede dañar el integrado. Los pines que no se estén usando se deben conectar la fuente de alimentación +5V con una resistencia de 5 a 10 Kilo Ohmio.

Page 18: Copia de Teoria Pic

18

ORGANIZACIÓN DE LA MEMORIA Hay dos bloque de memoria: la memoria de programa y la memoria de datos. Cada bloque tiene su propio bus de acceso, de manera que se puede acceder simultáneamente a ambos bloques durante el mismo ciclo de instrucción. En general, para los microcontroladores, la memoria de datos se asume como una RAM (Random Access Memory: memoria de acceso aleatorio), es decir, una memoria que puede ser leída y escrita pero que tiene la desventaja de ser volátil, o sea, que su información se pierde al desenergizar el dispositivo. De aquí en adelante se le llamará registro a cada posición de la memoria de datos. La memoria RAM de datos a su vez puede esta dividida en dos secciones: en los registros de propósito general y los registros de función especial (SFRs: Special Function Registers). Los registros de función especial están dedicados a funciones dirigidas al control del dispositivo en sí mismo y de los módulos funcionales que lo componen. Los de propósito general y vienen a ser ni más ni menos que los registros que utilizará el usuario para almacenar los datos temporales de su programa en particular, son los registros de trabajo del usuario. En el PIC16F84, del área de la memoria de datos también hace parte una Memoria EEPROM de datos. Esta memoria no se encuentra directamente mapeada dentro la memoria de datos, pero se puede acceder indirectamente. El direccionamiento indirecto se realiza a través de un registro apuntador de direcciones (09h o EEADR) que contiene la dirección de la EEPROM de datos en la cual se va leer o escribir. Los 64 bytes de EEPROM de datos tienen un rango de direcciones que abarca desde 00h a 3fh.

Page 19: Copia de Teoria Pic

19

MEMORIA DE PROGRAMA

En la memoria de programa se graba o almacena el programa o códigos que le microcontrolador debe ejecutar. En le PIC16F84 la memoria de programa es de 1 K byte de longitud con palabra de 14 bits. Como es del tipo FLASH se puede programar y borrar eléctricamente, en otras palabras, se puede programar o borrar sin necesidad de un borrador de luz ultravioleta, lo que facilita el desarrollo de programas, la experimentación y el aprendizaje. Como el PIC 16F84 tiene un contador de programa de 13bits, tiene una capacidad de direccionamiento de 8K x 14, pero solamente tiene implementado el primer 1K x 14 (000h hasta 03FFh), es decir, permite hasta 1024 (2 10 ) instrucciones de 14 bits cada una (de la 0000h a la 03FFh). Si se direccionan posiciones de memoria superiores a 3FFh se causará un solapamiento o desborde con el espacio del primer 1K. En la memoria de programa se encuentra el vector de reset y el vector de interrupción. VECTOR DE RESET

En la figura 8 se indica que a la posición 0000h de la memoria de código se le llama vector de reset. Esto significa que la posición 0000h será la primera instrucción en ser leída por la etapa de control y decodificación de instrucciones como respuesta a cualquier evento de reset o se encienda el microcontrolador. En otras palabras, todo programa de usuario debe comenzarse a escribirse a partir de la posición 0000h pues es allí en donde comenzará la ejecución del programa en el momento en que se encienda el sistema o se active alguna condición de reinicio. VECTOR DE INTERRUPCION Cuando el microcontrolador recibe una señal de interrupción el contador de programa apunta a la dirección 04h de la memoria de programa, por eso allí se debe escribir toda la programación necesaria para atender dicha interrupción. Las causas por las que se produce un reset son las siguientes: • Conexión de la alimentación. • Cuando durante el funcionamiento normal, o en el modo bajo consumo (sleep) se aplican cero voltios al

terminal de MCLR . • Desbordamiento del perro guardián (watchdog) en funcionamiento normal o en funcionamiento en bajo

consumo (sleep). Las causas por las que se puede producir una interrupción son la siguientes: • Activación de la patilla de interrupción externa INT. • Desbordamiento del temporizador. • Cambio de estado en alguno de los terminales de entrada del puerto B (RB4-RB7). • Finalización del proceso de escritura de la EEPROM de datos. Cuando se produce una interrupción se activan unos indicadores (flags) para identificar la causa de la interrupción, se detiene la ejecución del programa almacenando la posición de la instrucción actual, para que una vez finalizadas las operaciones asociadas a la interrupción, el programa pueda continuar por donde iba y el programa salta a la posición 0004h. A partir de aquí se ejecutará la rutina de interrupción. Con la última instrucción de la rutina de interrupción automáticamente el programa continuará por donde se había quedado. Continúa en la página siguiente....

Page 20: Copia de Teoria Pic

20

Memoria de datos Se encuentra en dos zonas bien diferenciadas: a) Memoria tipo RAM (SRAM): b) La memoria de datos del tipo EEPROM.

Figura 8. Mapa de la memoria de programa.

Page 21: Copia de Teoria Pic

21

ORGANIZACIÓN DE LOS REGISTROS (Memoria SRAM)

En general, para los microcontroladores de Microchip, la memoria de datos se asume como una RAM (Random Access Memory: memoria de acceso aleatorio), es decir, una memoria que puede ser leída y escrita pero que tiene la desventaja de ser volátil, o sea, que su información se pierde al desenergizar el dispositivo. De aquí en adelante se le llamará registro a cada posición de la memoria de datos. La memoria RAM de datos a su vez puede esta dividida en dos secciones: en los registros de propósito general y los registros de función especial (SFRs: Special Function Registers). El PIC 16F84 puede direccionar 128 posiciones de memoria RAM, pero solamente tiene implementado físicamente los primeros 80 (0 a 4Fh). De estos los primeros 12 son registros que cumplen un propósito especial en el control del microcontrolador y los 68 siguientes son registros de uso general que se pueden usar para guardar los datos temporales de la tarea que se esta ejecutando. Los registros están organizados como dos bancos(paginas) de 128 posiciones de 8 bits cada una (128 x 8); todas las posiciones se pueden accesar directa o indirectamente (este ultimo modo de direccionamiento se realiza a través del registro FSR). Para seleccionar que pagina de registro se trabaja en un momento determinado se utiliza el bit RP0 del registro STATUS.

00h INDF(1) INDF(1) 80h 01h TIMER0 OPTION 81h 02h PCL PCL 82h 03h STATUS STATUS 83h 04h FSR FSR 84h 05h PORTA TRISA 85h 06h PORTB TRISB 86h 07h 87h 08h EEDATA EECON 1 88h 09h EEADR EECON 2(1) 89h 0AH PCLATH PCLATH 8Ah 0Bh INTCON INTCON 8Bh 0Ch

4Fh

68 registros de uso

general

Mapadeados en el banco 0

8Ch

CFh 50h

7Fh

NO

IMPLEMENTADOS

NO

IMPLEMENTADOS

DFh

FFh

Mapa de archivos de registros

Page 22: Copia de Teoria Pic

22

MEMORIA DE DATOS DE LA EEPROM El PIC 16F84 tiene una memoria EEPROM de datos de 64 posiciones (00h a 3Fh), de 8 bits cada una. Este bloque de memoria no se encuentra mapeado en ningún banco, el acceso a esas posiciones se consigue a través de dos registros de la RAM: • El registro EEADR (posición 09), que debe contener la dirección de la posición de la EEPROM a ser

accesada. • El registro EEDATA (posición 08), que contiene el dato de 8 bits que se va a escribir o el que se obtuvo

de la ultima lectura. Adicionalmente, existen dos registros de control: el EECON1 (88h), que posee cinco bits que manejan las operaciones de lectura/escritura y el EECON2 (89h), que aunque no es un registro físico, es necesario para realizar las operaciones de escritura. La lectura toma un ciclo de reloj de instrucciones, mientras que las escritura, por ser controlada por un temporizador incorporado, tiene un tiempo nominal de 10 milisegundos, este tiempo puede variar con la temperatura y el voltaje. Cuando se va a realizar una operación de escritura, automáticamente se hace primero la operación de borrado. El numero típico de ciclos de borrado/escritura de la EEPROM de datos es de 1.000.000.

Page 23: Copia de Teoria Pic

23

Puertos de entrada/salida Los PUERTOS son el puente entre el microcontrolador y el mundo exterior. Son líneas digitales que trabajan entre cero y cinco voltios. Para trabajar con los puertos previamente se pueden configurar como entradas o como salidas. El PIC 16F84 tiene dos puertos. El puerto A con 5 líneas y el puerto B con 8 líneas. Cada pin se puede configurar como entrada o como salida independiente programado por el par de registros diseñados para tal fin: TRISA para configurar los pines del puerto A y TRISB para los del B. En cada uno de estos registros un "0" configura el pin del puerto correspondiente como salida y un "1" lo configura como entrada. La máxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero (sink) es de 25 mA y en modo fuente (source) es de 20 mA.

El consumo de corriente del microcontrolador para su funcionamiento depende del voltaje de operación, la frecuencia y de las cargas que tengan sus pines. Por Ejemplo: Para un reloj de 4 MHz el consumo es de aproximadamente de 2mA; aunque este se puede reducir a 40 microamperios cuando está en el modo sleep (en este modo el micro se detiene y disminuye el consumo de potencia). Se sale de este estado cuando se produce alguna condición especial que veremos mas adelante. El Puerto B tiene internamente unas resistencias de pull-up conectadas a sus pines (sirven para fijar el pin a un nivel de cinco voltios), su uso puede ser habilitado o deshabilitado bajo control del programa. Todas las resistencias de pull-up conectan o desconectan a la vez mediante un bit de control. La resistencia de pull-up es desconectada automáticamente en un pin si este se programa como salida. El pin RB0/INT se puede configurar por software para que funcione como interrupción externa.

Page 24: Copia de Teoria Pic

24

LAS OPCIONES DEL OSCILADOR EXTERNO Todo microcontrolador, al igual que un microprocesador, requiere un circuito oscilador que genere pulsos de frecuencia y duración constante, los cuales se utilizan como señal de sincronismo para la operación del todo el sistema. Este circuito, que se conoce con el nombre de reloj o clock, es de vital importancia para el buen funcionamiento del sistema. Generalmente, en los microcontroladores el reloj está incorporado en el chip y sólo se necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia de trabajo. Los PIC brinda la posibilidad de establecer la frecuencia de oscilación a través de un circuito externo. El PIC 16F84 admite cuatro tipos de osciladores diferentes:

♦ Oscilador tipo RC. Se trata de un oscilador de bajo costo formado por una simple resistencia y un condensador. Suministra una estabilidad mediocre de la frecuencia de oscilación, cuyo valor depende de los elementos que conforman la red RC. Este sistema se debe emplear en aquellas aplicaciones donde no se requiere mucha precisión en el oscilador. se puede utilizar una resistencia y un condensador, como se muestra a continuación:

Los valores recomendados para este tipo de oscilador son: 5 KΩ < Rext <100 KΩ y Cext > 20 pF.

Nota: Cuando el oscilador del dispositivo esta en modo RC, no maneje el pin OSC1 con un reloj externo por que puede dañar el dispositivo.

La frecuencia del oscilador dividida por cuatro está disponible en el pin OSC2/CLKOUT, y puede ser usada para chequear propósitos o para sincronizar otra lógica.

• XT. Cristal de cuarzo. Es un oscilador de cristal o resonador cerámico para frecuencia estándar

comprendidas entre 100Khz y 4Mhz. El cristal de cuarzo o resonador cerámico se coloca entre los terminales identificados como OSC1 y OSC2.

Page 25: Copia de Teoria Pic

25

• HS. Cristal de alta velocidad. Es un oscilador que alcanza una alta velocidad comprendidas entre 4 y

10 Mhz , y está basado en un cristal de cuarzo o resonador cerámico. • LP. Cristal para baja frecuencia (entre 36 a 200Khz) y bajo consumo de potencia.

El tipo de oscilador a utilizar se debe elegir en el momento de programar o "quemar" el microcontrolador. Esto se hace a través de unos fusibles llamados "fusibles de configuración". En la mayoría de las practicas que realizaremos se sugiere el cristal de 4 MHz, por que garantiza una mayor precisión y un buen arranque del microcontrolador. Internamente esta frecuencia esta dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz, por lo que cada instrucción se realiza en un microsegundo (1 µS). El cristal debe ir acompañado de dos condensadores y se conecta como se muestra en la figura siguiente.

Dependiendo de la aplicación, se pueden utilizar cristales de otras frecuencias; por ejemplo se usa el cristal de 3.579545 MHz por que es muy económico, el de 32.768 KHz cuando se necesita crear bases de tiempo de un segundo muy precisas. El límite de velocidad de estos microcontroladores es de 10 MHz. La frecuencia del oscilador dividida por cuatro está disponible en el pin OSC2/CLKOUT, y puede ser usada para chequear propósitos o para sincronizar otra lógica. La frecuencia del reloj determina el ciclo de instrucción (tiempo que tarda una instrucción en ejecutarse). En los PICs, un ciclo de instrucción emplea cuatro periodos de oscilación del reloj principal. Por ejemplo si la frecuencia del reloj principal es de 4 MHz, un ciclo de instrucción tardará en realizarse:

Page 26: Copia de Teoria Pic

26

T oscilación del reloj principal = 1/F del reloj principal = 1/4 MHz = 250 ns Ciclo de instrucción = T oscilación x 4 = 250 ns x 4 = 1 µs.(un microsegundo) Si por ejemplo el programa tuviera 250 líneas de instrucciones, la ejecución completa tardaría:

250 x 1µs = 250 µs.

Page 27: Copia de Teoria Pic

27

RESET En los microcontroladores se requiere un pin de reset para reiniciar el funcionamiento del sistema cuando sea necesario, ya sea por una falla que se presente o por que así se halla diseñado el sistema. El pin de reset en los PIC es llamado "Master Clear" (MCLR). El PIC 16F84 admite diferentes tipos de reset: • Al encendido (Power On Reset) • Pulso en el pin Master Clear durante operación normal • Pulso en el pin Master Clear durante el modo de bajo consumo (modo Sleep) • El rebase del conteo del circuito de vigilancia (watchdog) durante operación normal. • El rebase del conteo del circuito de vigilancia (watchdog) durante el modo de bajo consumo (Sleep) El reset al encendido se consigue gracias a dos temporizadores. El primero de ellos es el OST (Oscillator Star-Up Timer: Temporizador de encendido del oscilador), orientado a mantener el microcontrolador en reset hasta que el oscilador de cristal es estable. El segundo es el PWRT (Power-Up Timer: Temporizador de encendido), que provee un retardo fijo de 72 mS (nominal) en el encendido únicamente, diseñado para mantener el dispositivo en reset mientras la fuente se estabiliza. Para utilizar estos temporizadores, solo basta con conectar el pin “Master Clear” (MCLR/VPP, pin 4) a la fuente de alimentación evitándose utilizar las tradicionales redes RC externas en el pin de reset. - El reset por Master Clear se consigue llevando momentáneamente este pin a un estado lógico bajo,

mientras que el watchdog WDT produce un reset cuando su temporizador rebasa la cuenta, o sea que pasa de 0FFh a 00H. Cuando se quiere tener control sobre el reset del sistema se puede conectar un botón como se muestra en la siguiente figura.

- Reset por Brown-Out: Un brown-out es una condición en donde la alimentación del dispositivo (Vdd) baja a un valor mínimo, pero no a cero (nivel tensión baja entre 2.8 y 4.2V) y luego se normaliza. El dispositivo debe resetearse en caso de presentarse un brown-out. Para resetear un PIC 16F84 cuando un brown-out ocurre se debe construir un circuito de protección externo como el de la siguiente figura: Circuito de Protección No. 1. Este circuito entrará en un reset activo cuando VDD baja por debajo de Vz + 0.7, en donde Vz = Voltaje del Zener.

Page 28: Copia de Teoria Pic

28

Circuito de Protección No. 2.

Este circuito es más económico, aunque menos eficaz. El transistor Q1 pasará a un estado de corte cuando VDD está por debajo de un cierto nivel tal que: VDD * (R1 / (R1 + R2)) = 0.7 V

Page 29: Copia de Teoria Pic

29

Recursos auxiliares. El microcontrolador PIC16F84 dispone de los siguientes recursos adicionales: • Estado de reposo. Cuando el microcontrolador funciona en modo de reposo (sleep) la potencia necesaria

es menor de 3 µA. Esta característica permite que el microcontrolador entre en un estado pasivo donde consume muy poca potencia. Cuando se entra en este modo el oscilador principal se detiene, pero el temporizador del circuito de vigilancia (watchdog) se reinicia y empieza su conteo nuevamente. Se entra en ese estado por la ejecución de una instrucción especial (llamada SLEEP) y se sale de él cuando el microcontrolador sufre un reset por un pulso en el pin MCLR, por que el watchdog hace que se reinicie el sistema o por que ocurre una interrupción al sistema.

Cuando se ejecuta la instrucción SLEEP, y si esta habilitado el WDT, este registro se limpiará (se cargará con cer0s), el bit PD se colocará a cero (0), el bit T0 en 1 y el oscilador principal se detendrá. Los puertos conservan la condición que tenían antes de la ejecución de la instrucción. Para el más bajo consumo en este modo, todos los pines de entrada deben estar conectados a 5 voltios o atierra, evitando que queden entradas flotantes. La entrada TOKI también debe estar a 5 voltios o tierra, y el pin MCLR a 5 voltios.

• TEMPORIZADOR DE ENCENDIDO (Power-up Timer). Este proporciona un reset al

microcontrolador en el momento de conectar la fuente de alimentación, lo que garantiza un arranque correcto del sistema. En el momento de grabar el microcontrolador se debe habilitar el fusible de configuración "Power-up Timer", para ello se debe seleccionar "ON". Su tiempo de retardo es de 72 milisegundos.

• Registro Temporizador (TMER/COUNTER). Se incrementará en una unidad por cada pulso de reloj.

Cuando llegue al valor máximo FFh (los 8 bits a ‘1’), se producirá el desbordamiento del registro asociado al temporizador (TMR0), se iniciará tomando el valor 00h y generará una interrupción (si se había autorizado), repitiendo dicho ciclo indefinidamente. El temporizador puede recibir la señal de reloj que hace que se incremente de una señal externa a través de una patilla de entrada, o del reloj principal del microcontrolador (en ese caso dividida por cuatro). Se puede trabajar directamente con estas señales o bien pasarlas por un divisor, cuyo valor se puede seleccionar por software.

• CIRCUITO DE VIGILANCIA (Watchdog Timer)

Su función es restablecer el programa cuando éste se ha perdido por fallas en la programación o por alguna razón externa. Es muy útil cuando se trabaja en ambientes con mucha interferencia o ruido electromagnético. Esta conformado por un oscilador RC que se encuentra dentro del microprocesador, y que no requiere de componentes externos. El oscilador Watchdog corre de manera independiente al oscilador principal. Cuando se habilita su funcionamiento, dicho circuito hace que el microcontrolador sufra un reset cada determinado tiempo (que se puede programar entre 18 mS y 2,3 segundos). El periodo nominal del Watchdog es de 18ms, los períodos más largos se logran utilizando el prescalador del registro OPTION. Continúa en la página siguiente.....

Page 30: Copia de Teoria Pic

30

Este reset lo puede evitar el usuario mediante una instrucción especial del microcontrolador (CLRWT: Borra el contenido del watchdog), la cual se debe ejecutar antes de que termine el periodo nominal de dicho temporizador. De esta manera si el programa se ha salido de su flujo normal, por algún ruido o interferencia externa, el sistema se reiniciará (cuando se acabe el tiempo programado y no se haya borrado el contador) y el programa puede restablecerse para continuar con su funcionamiento normal. En las primeras practicas no se utiliza el circuito de vigilancia para facilitar el trabajo; por eso, en el momento de programar el microcontrolador se debe seleccionar en los fusibles de configuración "watchdog timer OFF".

• Perro guardián. El temporizador perro guardián (watchdog) es independiente del reloj principal (posee

su propio oscilador), por tanto, en el modo en bajo consumo puede seguir funcionando. Cuando llegue al valor máximo FFh, se produce el desbordamiento del perro guardián, se iniciará tomando el valor 00h y provocará un reset. El tiempo típico es de 18ms, pero utilizando un divisor de frecuencia (programable por software) se pueden alcanzar 2,5s.

La utilización del perro guardián permite controlar los posibles “cuelgues” del programa, esto es, si durante el programa hemos previsto el poner a cero el perro guardián para evitar que se genere un reset, en el momento que por un fallo no previsto el programa se quede en un bucle sin fin, al no poder poner a cero el perro guardián, éste generará un reset sacando al programa del bucle. LAS PULL-UP INTERNAS Cada uno de los pines del puerto B tiene un elemento débil pull-up interno (250 uA típico); este elemento es automáticamente desconectado cuando el pin se configura como salida. Adicionalmente, el bit RBPU (OPTION) controla todos estos elementos, los cuales están deshabilitados frente a una condición de reset. Estos elementos pull-up son especialmente útiles cuando el microcontrolador va a colocarse en el modo de bajo consumo, ya que ayudan a no tener las entradas flotantes, significado una reducción en el consumo de corriente. FUSIBLES DE CONFIGURACION El PIC 16F84 posee cinco fusibles, cada uno de los cuales es un bit. Estos fusibles se pueden programas para seleccionar varias configuraciones del dispositivo: tipo de oscilador, protección de código, habilitación del circuito de vigilancia y el temporizador al encendido. Los bits se localizan en la posición de memoria 2007h, posición a la cual el usuario sólo tiene acceso durante la programación del microcontrolador. Cuando se programa la protección del código, el contenido de cada posición de la memoria no se puede leer completamente, de tal manera que el código del programa no se puede reconstruir. Adicionalmente, todas las posiciones de memoria del programa se protegen contra la reprogramación. Una vez protegido el código, el fusible de protección solo puede ser borrado (puesto a 1) si se borra toda la memoria del programa y la de datos.

Page 31: Copia de Teoria Pic

31

INTERRUPCIONES Las interrupciones son otra manera de hacer llamados a subrutinas por medios físicos. Es decir, es provocar la ejecución de una subrutina (un programa dentro de otro programa principal) cada vez que ocurra un evento físico determinado. Al programa, o bloque de programa, que se ejecuta sólo cuando se produce la interrupción la denominaremos rutina de servicio de la interrupción (RSTI). Al evento que provoca la interrupción se le denomina fuente de la interrupción. La fuente de la interrupción puede ser de dos tipos: externas, como por ejemplo la transición de alto a bajo de una señal externa aplicada a uno de los pines de entrada del microcontrolador, o internas, como el sobrepaso de la cuenta del temporizador interno del microcontrolador. Uno, o dos, de los registros de la RAM del microcontrolador se encuentran localizados unos bits encargados de informar sí a ocurrido algún tipo de interrupción. A cad uno de estos bits se denomina banderas de interrupción (IF, Interrupt flags). Para que la CPU de un PIC responda al llamado de una determinada bandera interrupción, se debe habilitar el bit asociado a la interrupción colocando en uno. Los habilitadores de interrupción (IE, Interrupt Enable)se encuentran en uno de los registros de la RAM, el INTCON. Cada bandera de interrupción está asociada con un bit habilitador de interrupción. El programador es quien decide en que valor colocar los bits de habilitación según las fuentes de interrupción que desee utilizar para la aplicación que este desarrollando. Los microcontroladores PIC16C/F84 incluyen el manejo de interrupciones, lo cual representa grandes ventajas. Estos microcontroladores poseen cuatro formas de interrupción que son: • Interrupción externa en el pin RB0/INT • Finalización del temporizador/contador TMR0 • Finalización de escritura en la EEPROM de datos • Cambio de estado en los pines RB4 a RB7

El registro 0Bh o INTCON contiene las banderas de las interrupciones INT, cambio en el puerto B y finalización del conteo del TMR0, al igual que el control para habilitar o deshabilitar cada una de las fuentes de interrupción, incluida la de escritura de la memoria EEPROM. Sólo la bandera de finalización de la escritura reside en el registro 88h o EECON1 (EECON1<4>). Si el bit GIE (Global Interrupt Enable) se coloca en 0, deshabilita todas las interrupciones. Cuando una interrupción es atendida, el bit GIE se coloca en 0 automáticamente pare evitar interferencias con otras interrupciones que se pudieran presentar, la dirección de retorno se coloca en la pila y el PIC se carga con la dirección 04h. Una vez en la rutina de servicio, la fuente de interrupción se puede determinar examinando las banderas de interrupción. La bandera respectiva se debe colocar, por software, en cero antes de regresar de la interrupción, para evitar que se vuelva a detectar nuevamente la misma interrupción. La instrucción RETFIE permite al usuario retornar de la interrupción, a la vez que habilita de nuevo las interrupciones, al colocar el bit GIE en uno. Debe tenerse presente que solamente el contador de programa es puesto en la pila al atenderse la interrupción; por lo tanto, es conveniente que el programador tenga cuidado con el registro de estados y el de trabajo, ya que se pueden introducir resultados inesperados si dentro de ella se modifican.

Interrupción Externa. Actúa sobre el pin RB0/INT y se puede configurar para activarse con el flanco de subida o el de bajada, de acuerdo al bit INTEDG (Interrup Edge Select Bit, localizado en el registro OPTION). Cuando se presenta un flanco valido en el pin INT, la bandera INTF (INTCON) se coloca en uno. La interrupción se puede deshabilitar colocando el bit de control INTE (INTCON<4>) en cero.

Cuando se atiende la interrupción, a través de la rutina de servicio, INTF se debe colocar en cero antes de regresar al programa principal. La interrupción puede reactivar al microcontrolador después de la instrucción SLEEP, si previamente el bit INTE fue habilitado.

Continúa en la siguiente página......

Page 32: Copia de Teoria Pic

32

Interrupción por finalización de la temporización. La superación del conteo máximo (0FFh) en el TMR0 colocara el bit TOIF (INTCON) en uno. El bit de control respectivo es TOIE (INTCON<5>).

Interrupción por cambio en el puerto RB. Un cambio en los pines del puerto B (RB4 a RB7) colocará en uno el bit RBIF (INTCON). El bit de control respectivo es RBIE (INTCON<3>).

Interrupción por finalización de escritura. Cuando la escritura de un dato en la EEPROM finaliza, se coloca en 1 el bit EEIF (EECON1). El bit de control respectivo es EEIE (INTCON<6>).

Page 33: Copia de Teoria Pic

33

Conexionado típico fijo para cualquier aplicación. En los circuitos donde se utiliza el PIC16F84 es habitual emplear tensión de alimentación de +5V y como circuito de reloj externo uno del tipo XT a una frecuencia de 4MHz. Con esta configuración, el conexionado fijo para cualquier aplicación es el mostrado en la Figura 13. Las patillas que no están conectadas son las dedicadas a transferir la información con los periféricos que utilice la aplicación.

Figura 13. Conexionado fijo del PIC16F84. Periféricos de E/S. Los diseños reales utilizan diversos periféricos que hay que conectar a las patillas del microcontrolador que soportan las líneas de E/S. Periféricos digitales de entrada. Pulsadores. Estos dispositivos permiten introducir un nivel lógico en el momento que se les acciona, pasando al nivel contrario cuando se deja de hacerlo (vuelven a la posición de reposo). En el esquema de la izquierda de la Figura 14 la línea de entrada (IN) recibe un nivel lógico alto cuando el pulsador está reposo y un nivel lógico bajo cuando se acciona. El pulsador de la derecha funciona al revés. Continua en la página siguiente.....

Page 34: Copia de Teoria Pic

34

Figura 14. Dos posibles formas de conectar un pulsador. Hay multitud de detectores, finales de carrera y sensores digitales que funcionan de la misma manera que los pulsadores. Interruptores. Los interruptores tienen dos estados estables y hay que accionarlos para cambiar de uno a otro. El interruptor admite el estado abierto y el estado cerrado. Las formas de conectar un interruptor a una entrada del microcontrolador son iguales a las de la figura 14, sustituyendo el pulsador por el interruptor. Todos los circuitos electromecánicos (pulsadores, interruptores,...) originan un fenómeno denominado “rebotes”: las láminas se abren y se cierran varias veces en el momento de la transición (Figura 15). El efecto que produce es semejante a abrir y cerrar el interruptor o pulsador varias veces, por lo que puede provocar resultados erróneos.

Figura 15 Efecto de los rebotes. El efecto de los rebotes se puede solucionar bien mediante software, o bien por hardware. En la Figura 16 se muestran dos circuitos hardware antirrebotes. El circuito de la izquierda emplea un condensador y el de la derecha un flip-flop R-S.

Figura 16. Esquemas para eliminar rebotes. . Periféricos digitales de salida Diodos LED. El diodo led es un elemento que se emplea como indicador luminoso. Cuando la diferencia de potencial entre su ánodo y su cátodo supere un determinado valor umbral el diodo led se encenderá. Las líneas de los PIC pueden suministrar suficiente corriente como para encender a un diodo led, por eso se pueden conectar directamente a través de una resistencia como muestra la Figura 17. Si empleamos la conexión de la izquierda de la figura, el diodo led se encenderá al poner a ‘1’ la salida del microcontrolador, mientras que con la conexión de la derecha lo hará cuando la salida se ponga a ‘0’. Continuar en la siguiente página.....

Page 35: Copia de Teoria Pic

35

Figura 17. Dos posibles formas de conectar un led. En ocasiones, los diodos u otro tipo de carga necesitan más corriente que la que pueden entregar las líneas de los PIC. En ese caso es necesario intercalar una etapa amplificadora. Relés La activación y desactivación de un relé brinda la oportunidad de poder controlar cargas mucho mayores (más corriente) porque pueden ser controladas por los contactos de dicho relé (Figura 18). Cuando la línea de salida, OUT, aplica un nivel alto a la base del transistor Darlington (etapa amplificadora) hace que conduzca y se active el relé. Al cerrarse los contactos del relé se controla una carga mayor. El valor de la resistencia depende del tipo de relé y del transistor.

Figura 18. Esquema del control de un relé.

Page 36: Copia de Teoria Pic

36

EL CONJUNTO DE INSTRUCCIONES En la siguiente tablase resume el conjunto de instrucciones del PIC16F4, este set de instrucciones es similar al de los PIC16C5X aunque aquí ya no aparecen, las instrucciones OPTION y TRIS. A pesar de que los PIC16CXX(PIC’s de la gama media) tienen una mayor cantidad de memoria y una versatilidad mucho mayor que la de sus antecesores (los PIC16C5X), el conjunto de instrucciones básicamente permanece igual. Lo anterior se debe a que los controles de los módulos funcionales que se adicionan en los PIC16C6XX se encuentran localizados en registros de los bancos RAM y por tanto para modificarlos o leerlos se hace de la misma manera a como se accedería a un registro de la RAM. Las 35 instrucciones se subdividen en: instrucciones orientadas a registros, instrucciones orientadas a bits y instrucciones orientadas a constantes y de control. Cada instrucción es una palabra de 14 bits, dividida en un código de operación, el cual específica la orden a ejecutar y uno o más operandos sobres los que se actúa. La convención de la sintaxis de las instrucciones es: f es un valor de 7 bits (entre 00h y 7Fh) el cual se refiere a la dirección de un registro, d puede tener el valor 0 ó 1 e indica en qué lugar se almacenará el resultado de la sentencia, si d es 0 el resultado se cargará en el registro de trabajo W; si d es 1 entonces el resultado se cargará en el mismo registro f al que se refiere la instrucción; b es un valor entre 0 y 7 y se refiere a la posición de un bit dentro de un registro; k es una constante y/o posición de memoria de código aportada por la instrucción. Operaciones orientadas a registros nemotécnico operación Código de la

operación Estados

afectados ADDWF f,d Sumar F y W. 00 0111 dfff ffff C, DC, Z ANDWF f,d AND entre F y W. 00 0101 dfff ffff Z CLRF f,d Limpiar f 00 0001 1fff ffff Z CLRW Limpiar W 00 0001 0xxx xxxx Z COMF f,d Complementar F 00 1001 dfff ffff Z DECF f,d Decrementar f 00 0011 dfff ffff Z DECFSZ f,d Decrementar f, saltar la

próxima línea si llego a cero 00 1011 dfff ffff -

INCF f,d Incrementar f 00 1010 dfff ffff Z INCFSZ f,d Incrementar f, saltar la próxima

línea si llego a cero. 00 1111 dfff ffff -

IORFW f,d Or entre W y f. 00 0100 dfff ffff Z MOVF f,d Mover f. 00 1000 dfff ffff Z MOVWF f,d Mocer W a f. 00 0000 1fff ffff - NOP No operación. 00 0000 0xxx 0000 - RLF f,d Rotar a la izquierda a través del

carry. 00 1101 dfff ffff C

RRF f,d Rotar a la derecha a través del carry

00 1100 dfff ffff C

SUBWF f,d Restar W a f ( F – W) 00 0010 dfff ffff C, DC, Z SWAPF f,d Intercambiar los nibbles de f. 00 1110 dfff ffff - XORWF f,d Or exclusiva entre f y W. 00 0110 dfff ffff Z Operaciones orientadas a bits BCF f,b Limpiar bit b de f. 01 00bbbfff ffff BSF f,b Activar bit b de f. 01 01bbbfff ffff BTFSC f,b Probar bit b de f, y saltar si es

cero 01 10bbbfff ffff

BTFSS f,b Probar bit b de f, y saltar si es uno

01 11bbbfff ffff

Operaciones orientadas a literales y de control ADDLW k Sumar literal k a W 11 111xkkkk kkkk C, DC, Z ANDLW K AND entre k y W 11 1001kkkk kkkk Z

Page 37: Copia de Teoria Pic

37

CALL K Llamar a subrutina. 10 0kkkkkkk kkkk - CLRWDT Limpiar WDT. TO, PD GOTO K Saltar a la dirección. 10 1kkkkkkk kkkk - IORLW K Or entre k y W 11 1000kkkk kkkk Z MOVLW K Cargar a W con literal k. 11 00xxkkkk kkkk - RETFIE Retornar de interrupción. 00 00000000 1001 - RETLW k Retornar de subrutina y cargar

W con la literal k. 11 01xxkkkk kkkk -

RETURN Retornar de subrutina. 00 00000000 1000 - SLEEP Ir al modo de bajo consumo. 00 00000110 0011 TO, PD SUBLW k Restarle W de la literal K 11 110xkkkk kkkk C, DC, Z XORLW k Or exclusiva entre W y K 11 1010kkkk kkkk Z

Conjunto de instrucciones de los PIC16F84

Page 38: Copia de Teoria Pic

38

Programación. Un programa es un conjunto ordenado de instrucciones que determinan el procesado de los datos y la obtención de los resultados. Cada procesador entiende un conjunto de instrucciones, que en el caso del PIC16F84 son 35. A dichas instrucciones se les llama “instrucciones máquina” y en este microcontrolador cada una de ellas consta de 14 bits con los cuales se indica el código de la operación. Como sería muy complejo escribir las instrucciones con 14 bits, a cada una se la referencia con un neumónico, que es un conjunto de letras que expresan de forma resumida la operación que hace la instrucción. Al lenguaje que utiliza estos neumónicos se le llama ensamblador. Programar en lenguaje ensamblador es programar con las mismas instrucciones que directamente puede ejecutar el procesador. Hay lenguajes de alto nivel en los que una instrucción equivale a muchas instrucciones máquina. Son más fáciles de utilizar, pero la utilización de los lenguajes más cercanos a la máquina (ensamblador) representan un considerable ahorro de código en la confección de los programas, lo que es muy importante dada la limitada capacidad de la memoria de instrucciones. Entre los lenguajes de alto nivel que se pueden emplear con microcontroladores PIC se encuentran l lenguaje C y Basic. Los compiladores son programas que se encargan de traducir el programa escrito en lenguaje ensamblador (u otro lenguaje) a código máquina, único lenguaje que el microcontrolador es capaz de entender. Tras la compilación, se grabará este código binario en la memoria de programa del microcontrolador. 3.4.1. Estructura general de un programa en ensamblador. En una programa escrito en lenguaje ensamblador, además de las 35 instrucciones que interpreta el procesador también se colocan directivas, que son comandos para realizar ciertas operaciones con el programa. A continuación se comentan las partes que generalmente hay en un programa: 1º. Modelo de procesador y sistema de numeración. Los programas comienzan con la directiva list que referencia el modelo de microcontrolador. También se suele especificar el tipo de numeración que se empleará con la directiva radix. Lo usual es emplear el sistema hexadecimal, en el que los valores se expresan precedidos de “0x”. En los ejemplos que se desarrollarán a lo largo del tema comenzaremos el programa ensamblador con las siguientes directivas (detrás del punto y coma se pueden añadir comentarios):

List p=16F84 ;Se utiliza el microcontrolador PIC16F84 Radix hex ; Se usará el sistema hexadecimal

2º. Variables. Las posiciones de la memoria de datos se utilizan para guardar operandos y resultados, además de almacenar registros especiales. Para que al programador le sea más sencillo confeccionar el programa, en lugar de hacer referencia a las posiciones de la memoria donde se encuentran los datos que va a emplear, a cada una de estas posiciones se le asocia un nombre. La directiva equ relaciona un nombre con la dirección que se asigna, así el programador trabaja con nombres y el compilador traduce automáticamente éstos a las direcciones correspondientes. Por ejemplo el registro que contiene la información de estado se encuentra en la dirección 0x03, el puerto de entrada A en 0x05, etc.. Si queremos emplear nombres de variables para estas direcciones de memoria escribiríamos:

ESTADO equ 0x03 ;La etiqueta “ESTADO” está asociada a la dirección 0x03

Page 39: Copia de Teoria Pic

39

PUERTAA equ 0x05 ;La etiqueta “PUERTAA” está asociada a la dirección 0x05 3º. Origen del programa. Antes de comenzar a escribir instrucciones máquina debe definirse la dirección de la memoria de programa a partir de la cual se desea comenzar a cargar el programa. Para ello se emplea la directiva org. En los PIC el origen del programa siempre se pone en la dirección 0x00 porque es donde comienza a ejecutarse el programa después de hacer un reset. Definiremos el origen de la siguiente manera:

org 0x00 ;Inicio de programa Cuando el programa maneja interrupciones, no se comienza a cargar el programa desde la dirección 0x00, porque si se genera una interrupción el programa que la atiende comienza en la dirección 0x04 (vector de interrupción). En este caso lo que se suele hacer es poner en la dirección 0x00 un salto a una dirección de la memoria de programa posterior al vector de reset, por ejemplo saltaríamos a una posición etiquetada como INICIO que se encuentra en la dirección 0x05.

org 0x00 ;La siguiente instrucción estará al inicio de la memoria goto INICIO ;Salta a la dirección etiquetada con INICIO org 0x05 ;La siguiente instrucción estará en la dirección 0x05 INICIO ------- ------- end

4º. Cuerpo del programa y final. Tras indicar la dirección donde se comenzará a cargar el programa, sigue el cuerpo del mismo compuesto por las instrucciones máquina y los operandos de éstas. El código se estructura en columnas. La primera columna se utiliza para las etiquetas que se emplean para hacer referencia a partes del programa y nos permiten realizar saltos a estas partes (como INICIO en el ejemplo anterior). Las siguientes columnas contienen el campo de instrucciones, el campo de datos y el campo de comentarios. Los comentarios comienzan con ; ). Al final del programa se coloca la directiva end. 3.4.2. Ejemplos de programación. Ejemplo 1. Sumar el contenido de la posición de memoria 0Ch (5) con el contenido de la posición de memoria 0Dh (2) y almacenar el resultado en la posición de memoria 0Eh. El sumador (ALU) del PIC es capaz de sumar dos datos de 8 bits cada uno, pero debido a su configuración uno de los sumandos debe proceder del registro de trabajo W (Figura 7). El ejemplo maneja tres posiciones de la memoria de datos de propósito general (figura 19). En la posición 0Ch se colocará el primer operando con el valor 5; en la posición 0Dh el segundo con el valor 2 y el resultado se almacenará en 0Eh. Como se vio en la Figura 9 las direcciones 0Ch, 0Dh y 0Eh son las tres primeras posiciones de la memoria de datos RAM (banco 0) que el usuario puede emplear para fines propios. Antes de exponer el código del programa se explican las instrucciones que se van a utilizar: ♦ Instrucción mov Permite transferir el contenido de un registro fuente f a un registro destino d. En los PIC todos los datos residen en posiciones de la memoria de datos a excepción del registro W. La instrucción mov puede mover tres tipos fundamentales de operandos: 1. El contenido del registro W.

Page 40: Copia de Teoria Pic

40

2. El contenido de una posición de memoria de datos. 3. Un literal o valor. ♦ movf f,d : mueve el contenido del operando fuente f (posición de la memoria de datos) al destino d (puede ser W o la propia fuente).

Figura 19. Mapa de memoria del ejemplo1. ♦ movwf f : mueve el contenido del registro W a la posición de memoria especificada por f. ♦ movlw k : mueve el valor k al registro W. ♦ addwf f,d : suma el contenido del registro W con el de f y deposita el resultado en W si d = 0 (o W), o en

f si d = 1. ♦ addlw k : suma al contenido del registro W el valor k y deposita el resultado en W. A continuación se expone el código ensamblador del programa y el diagrama de flujo (Figura 20). List p=16f84 OPERANDO1 equ 0x0C OPERANDO2 equ 0x0D RESULTADO equ 0x0E org 0x00 ;origen INICIO movlw 0x05 ;W ‘5’ movwf OPERANDO1 ;OPERANDO1W movlw 0x02 ;W ‘2’ movwf OPERANDO2 ;OPERANDO2W addwf OPERANDO1,W ;OPERANDO1+W W movwf RESULTADO ;RESULTADO W end

Page 41: Copia de Teoria Pic

41

Figura 20. Diagrama de flujo del ejemplo 1. Ejemplo 2. Confeccionar un programa para el microcontrolador PIC 16F84 que lea el número binario introducido por los interruptores y lo visualice en los diodos led (Figura 6-21). El PIC16F84 dispone de dos puertas, PUERTA A (RA0-RA4) y PUERTA B (RB0-RB7). Cada una de las líneas de estas puertas puede actuar como entrada o como salida. El valor de los datos que entran o salen por cada puerta están materializados en dos posiciones de la RAM, PORTA para la puerta A y PORTB para la puerta B (figura 21). Existen otros dos registros de la memoria RAM (TRISA y TRISB) que se emplean para configurar las líneas de PORTA y PORTB como entrada o salida, de tal forma que cuando en uno de los bits se graba un ‘1’, la línea correspondiente de la puerta afectada actúa como entrada, mientras que si se graba un ‘0’, actúa como salida. En las posiciones 5 y 6 (Figura 22) del banco 0 se ubican los registros de datos de las puertas y en las mismas posiciones de la memoria, pero en el banco 1, se encuentran los registros de configuración correspondientes. Si se desea acceder a posiciones del banco 1 hay que poner a ‘1’ el bit 5 (RP0) de un registro llamado STATUS.

Figura 21. Esquema de conexión del ejemplo 2. Por ejemplo si se quisiera configurar como entradas todas las líneas de la puerta A y como salidas las de la puerta B, habría que direccionar el banco 1 (bit 5 de STATUS=’1’), cargar con ‘1’ los bits de TRISA y con ‘0’ todos los bits de TRISB. Una vez configuradas las puertas habrá que volver a poner a ‘0’ el bit 5 del registro STATUS (volver al banco 0) para poder leer la información introducida por las líneas configuradas como entradas o enviar por las líneas configuradas como salidas.

Page 42: Copia de Teoria Pic

42

Figura 22. Registros STATUS, PORTA y TRISA. En el esquema de conexión mostrado en la figura 20 se puede observar que cuando se cierre un interruptor se aplicará un ‘0’ a la entrada correspondiente del microcontrolador y, si este valor se traslada a la salida el diodo led unido a la misma se apagará. Cuando se abra un interruptor, se aplicará un ‘1’ en la entrada y el diodo led se encenderá. Aparecen en este ejemplo algunas instrucciones nuevas: bsf f,d : pone a ‘1’ el bit b del registro f . bcf f,d : pone a ‘0’ el bit b del registro f . goto etiqueta : salta hasta la instrucción que va precedida por la etiqueta. A continuación se expone el código ensamblador del programa y el diagrama de flujo (Figura 23).

Figura 23. Diagrama de flujo del ejemplo 2. List p=16f84 STATUS equ 0x03 PORTA equ 0x05 PORTB equ 0x06 org 0x00 goto INICIO org 0x05 ;salta el vector de interrupción INICIO bsf STATUS,5 ;cambia al banco1 movlw b’00000000’ ;W ‘00’ movwf PORTB ;TRISBW (PORTB salidas) movlw b’00011111’ ;W ‘1F’ movwf PORTA ;TRISAW (PORTA entradas) bcf STATUS,5 ;cambia al banco0 BUCLE

Page 43: Copia de Teoria Pic

43

movf PORTA,W ;W PORTA movwf PORTB ;PORTB W goto BUCLE end Los valores codificados en binario se escriben entre comilla simple y precedidos de la letra b. Ejemplo 3. Confeccionar un programa para el PIC 16F84 que explore el estado de un interruptor conectado a la línea RA0 del puerto A (Figura 24) y que ilumine el diodo led conectado a la línea RB0 del puerto B cuando el interruptor se halle cerrado. Este ejemplo incorpora la instrucción: btfsc f,d : salta una instrucción si el bit b del registro f es ‘0’, si no, sigue por la siguiente instrucción. clrf f : borra el contenido del registro f. A continuación se expone el código ensamblador del programa y el diagrama de flujo (Figura 25).

Figura 24. Esquema de conexión del ejemplo 3.

Figura 25. Diagrama de flujo del ejemplo 3. List p=16f84 STATUS equ 0x03 PORTA equ 0x05 PORTB equ 0x06 org 0x00 goto INICIO org 0x05 ;salta el vector de interrupción

Page 44: Copia de Teoria Pic

44

INICIO bsf STATUS,5 ;cambia al banco1 clrf PORTB ;Puerto B configurado como salidas movlw b’00011111’ ;Puerto A configurado como entradas movwf PORTA bcf STATUS,5 ;cambia al banco0 BUCLE btfsc PORTA,0 ;¿RA0=0? salta si RA0 es ‘0’ goto RA0_es_1 bsf PORTB,0 ;pone a ‘1’ RB0, enciende el led goto BUCLE RA0_es_1 bcf PORTB,0 ;pone a ‘0’ RB0, apaga el led goto BUCLE end Ejemplo 4. Confeccionar un programa para el PIC 16F84 que comience poniendo a cero un contador y lo vaya incrementando de unidad en unidad hasta alcanzar el valor 5Fh (95), momento en el cual se encenderá un led conectado a RB0 y terminará el programa. No existe ninguna instrucción que nos permita comparar el contenido de los registros de la memoria. Para solucionar este problema lo que haremos será restar al contenido del registro el valor con el que queremos compararlo y analizar el resultado de dicha operación. Si el resultado de la resta es cero los dos valores son iguales y si por el contrario el resultado es distinto de cero los valores comparados son distintos. Existe un bit (Z) en el registro STATUS (figura 25) para indicar cuando una operación aritmética o lógica realizada en la ALU da como resultado cero. Las instrucciones nuevas que se van a emplear son: incf f,d : incrementa en una unidad el contenido del registro f y deposita el resultado en W si d = 0 (o W), o en f si d = 1. subwf f,d : resta el contenido de W al contenido de f y deposita el resultado en W si d = 0 (o W), o en f si d =1. sublw k : resta el valor de k al contenido de W y almacena el resultado en W. A continuación se expone el código ensamblador del programa y el diagrama de flujo (Figura 27).

Figura 26. Bit Z del registro STATUS.

Page 45: Copia de Teoria Pic

45

Figura 27. Diagrama de flujo del ejemplo 4. List p=16f84 STATUS equ 0x03 PORTB equ 0x06 CONTADOR equ 0x0C org 0x00 goto INICIO org 0x05 ;salta el vector de interrupción INICIO bsf STATUS,5 ;cambia al banco1 bcf PORTB,0 ;RB0 salida, TRISB.0=0 bcf STATUS,5 ;cambia al banco0 bcf PORTB,0 ;apaga el led (RB0=0) clrf CONTADOR ;inicializa CONTADOR =0 BUCLE incf CONTADOR,1 ;incrementa CONTADOR movwl 0x5f ;W ‘5F’ subwf CONTADOR,W ;resta el valor del contador a W btfss STATUS,2 ;salta si Z=1(el resultado de la resta es 0) goto BUCLE ;salta a BUCLE si no son iguales bsf PORTB,0 ;enciende el led (RB0=1) end Ejemplo 5. Confeccionar un programa para el PIC 16F84 trabajando a 4MHz que produzca una señal cuadrada de periodo 50 ms (25 ms a nivel alto y 25 ms a nivel bajo) en el pin RB0. Para generar la señal cuadrada en la patilla del microcontrolador RB0 procederemos de la siguiente manera: pondremos el bit RB0 a ‘1’ ejecutaremos un rutina (subprograma) encargada de realizar un retardo de 25 ms; pondremos de nuevo el bit RB0 a ‘0’ y volveremos a ejecutar la subrutina anterior. Este proceso se repetirá indefinidamente. Una de las funciones más habituales en los programas de control suele ser determinar intervalos concretos de tiempo. También suele ser frecuente contar impulsos producidos en el exterior del sistema. En el

Page 46: Copia de Teoria Pic

46

microcontrolador PIC16F84 estas funciones la realiza un temporizador/contador de 8 bits, llamado TMR0 que actúa de dos maneras distintas:

• Como contador de sucesos, representados por los impulsos que se aplican a la patilla RA4/T0CKI. Al llegar al valor FFh se desbordará el contador y, con el siguiente impulso pasa a 00h, advirtiendo esta circunstancia activando un señalizador y/o provocando una interrupción.

• Como temporizador, se incrementa con cada ciclo de instrucción (4/Freloj),o divisores del mismo, hasta que se desborda (pasa de 00h a FFh) y avisa poniendo a ‘1’ un señalizador y/o provocando una interrupción.

Para que el TMR0 funcione como contador de impulsos aplicados en RA4/T0CKI hay que poner a ‘1’ el bit T0CS, que es el que ocupa la posición 5 del registro OPTION (figura 27). Para que el TMR0 funcione como temporizador el bit T0CS debe ponerse a ‘0’. TMR0 es un registro de propósito especial ubicado en la posición 01h del banco 0 de la memoria de datos RAM. En igual dirección pero en el banco 1 se encuentra el registro de configuración OPTION. El tiempo de la temporización se calcula a partir del periodo de la señal de reloj (Treloj), el valor de un divisor de frecuencia definido en el registro OPTION y el valor del temporizador TMR0.

Figura 28. Registro OPTION. Temporización = 4·Treloj · (255 - TMR0) · Divisor 255 - TMR0 = Temporización / (4 ·Treloj · Divisor) Si se desea temporizar 25ms (25000 µs) y asignamos al divisor de frecuencia el valor 128 (PSA =’0’, PS2 = ‘1’, PS1 =’1’, PS0 = ‘0’), el temporizador TMR0 deberá contar 195 eventos: 255 -TMR0 = 25·10 –3 / (1·10 –6 · 128) = 195,3 El valor que hay que cargar en el temporizador TMR0 será el complemento de 195, es decir, 255-195= 60, que equivale al código hexadecimal 0x3c. Al cargar en el registro TMR0 el valor 60, éste se incrementará cada 128µs (ciclo definido por: Divisor · 4 · Treloj ). Cuando llegue al final de la cuenta (255), se habrá incrementado 195 veces, generando un retardo de aproximadamente 25ms (195 · 128s). En ese instante se pondrá ‘1’ el bit T0IF del registro INTCON (registro de propósito especial 0x0B del banco 0, Figura 29). Aparecen en el código las siguientes instrucciones: call k : guarda la dirección de la instrucción actual y salta a la dirección k (donde se encuentra la subrutina).

Page 47: Copia de Teoria Pic

47

return :retorna a la dirección almacenada. Una vez ejecutada la subrutina el programa vuelve a la posición de la memoria de programa posterior a la llamada call. A continuación se expone el código ensamblador del programa y el diagrama de flujo (Figura 30).

Figura 29. Registro INTCON.

Figura 30. Diagrama de flujo del ejemplo 5. List p=16f84 STATUS equ 0x03 PORTB equ 0x06 TMR0 equ 0x01 INTCON equ 0x0B org 0x00 goto INICIO org 0x05 INICIO bsf STATUS,5 ;cambia al banco1 clrf PORTB ;PORTB salidas movlw b’00000110 ;configuración OPTION movwf TMR0 bcf STATUS,5 ;cambia al banco0 BUCLE bcf PORTB,0 ;RB0 = ‘0’ call RETARDO ;retardo bsf PORTB,0 ;RB0 = ‘1’

Page 48: Copia de Teoria Pic

48

call RETARDO ;retardo goto BUCLE RETARDO bcf INTCON,2 ;desconecta el flag de desbordamiento movlw 0x3c movwf TMR0 ;carga TMR0 EXPLORA btfss INTCON,2 ;¿Se ha desbordado TMR0? goto EXPLORA ;bucle hasta que TMR0 llegue a 256 return end