Microcontroladores PIC - PIC16F84

Microcontroladores PIC - PIC16F84 1 ¿Qué es un microcontrolador?  Se denomina controlador al dispositivo que se emplea para el gobierno de uno o ...
3 downloads 2 Views 3MB Size
Microcontroladores PIC - PIC16F84

1

¿Qué es un microcontrolador? 

Se denomina controlador al dispositivo que se emplea para el gobierno de uno o varios procesos. Por ejemplo, el controlador que regula el funcionamiento de un horno eléctrico dispone de un sensor que mide constantemente la temperatura del horno y actúa sobre las resistencias para mantener la temperatura dentro del rango establecido.



Un microcontrolador es un circuito integrado de alta escala de integración, que incorpora la mayor parte de los elementos que configuran un controlador, que contiene todos los componentes fundamentales de un ordenador, y que se suele destinar a gobernar una sola tarea.



En su memoria reside un programa que controla la ejecución de una tarea determinada. Sus líneas de entrada/salida (E/S) se conectan a los sensores y actuadores del dispositivo a controlar y, debido a su pequeño tamaño, suele ir integrado en el propio dispositivo al que gobierna. Por ello son muy útiles para controlar diferentes tipos de dispositivos y procesos.

2

Prof. Mario Gomikian - IHDA

En la fotografía se puede observar el tamaño de un microcontrolador, en comparación con el de una aguja.

3

Prof. Mario Gomikian - IHDA

Aplicaciones de los microcontroladores.        



4

Sistemas de comunicación: centrales telefónicas, teléfonos fijos, móviles, fax, etc. Electrodomésticos. Medida y control de procesos. Enseñanza e investigación. Periféricos y dispositivos auxiliares de las computadoras. Automoción: climatización, seguridad, ABS, sistemas de navegación, etc. Automatización industrial, robótica, control de procesos, etc. Domótica: sistemas de supervisión, vigilancia y alarma, ascensores, calefacción, aire acondicionado, alarmas de incendio, robo, etc. Otros: instrumentación, electromedicina, tarjetas (smartcard), sistemas de navegación, etc. Prof. Mario Gomikian - IHDA

Aplicaciones de los microcontroladores.

5

Prof. Mario Gomikian - IHDA

Ejemplo de aplicación: el automóvil.

6

Prof. Mario Gomikian - IHDA

Ejemplo de aplicación: el automóvil. •Control del motor. •Consumo, gases, etc. •Climatización. •Seguridad (airbag). •Control frenado (ABS). •Instrumentación. •Control de velocidad. •Sistemas de seguridad. •Mantenimiento. •Sistema de navegación. •Control de luces. •ETC. 7

Prof. Mario Gomikian - IHDA

Ejemplo de aplicación: el automóvil.

8

Prof. Mario Gomikian - IHDA

Características de los microcontroladores:

9

Prof. Mario Gomikian - IHDA

¿Qué tiene un microcontrolador?     



10

Procesador o CPU (Unidad Central de Proceso). Memoria RAM de datos (donde están los registros). Memoria para contener el programa del tipo: ROM, OTP, EPROM, EEPROM o FLASH. Puertos de comunicación con varias líneas de E/S para comunicarse con el exterior. Diversos módulos y buses para el control de periféricos: temporizadores, puertos serie y paralelo, conversor analógicodigital y digital-analógico, etc. Generador de pulsos de reloj que sincronizan el funcionamiento de todo el sistema. Prof. Mario Gomikian - IHDA

Memoria de programa.

11

Prof. Mario Gomikian - IHDA

Memoria de programa. Según el tipo de memoria de programa del que dispongan los microcontroladores, la aplicación y utilización de los mismos es diferente. Los cinco tipos de memoria no volátil que se pueden encontrar en los microcontroladores del mercado son: • • • • •

12

ROM con máscara. OTP EPROM EEPROM FLASH

Prof. Mario Gomikian - IHDA

Memoria ROM con máscara. •

Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación del chip.



Los circuitos integrados se fabrican en obleas que contienen varias decenas de chips. Estas obleas se obtienen a partir de procesos fotoquímicos: se impregnan capas de silicio y oxido de silicio y se erosionan exponiéndolos a la luz.



Para la selección de los puntos del circuito que deben ser erosionados, se sitúa entre la luz y la oblea una máscara con agujeros que permiten el paso de la luz.



El elevado costo del diseño de la máscara sólo hace aconsejable el empleo de este tipo de memoria cuando se precisan integrados en cantidades superiores a varios miles de unidades.

13

Prof. Mario Gomikian - IHDA

Memoria OTP. •

Es una memoria no volátil de sólo lectura, que puede ser programada una sola vez OTP (One Time Programmable).



La versión OTP es aconsejable cuando es muy corto el ciclo de diseño del producto, o bien, en la construcción de prototipos y series muy pequeñas.



Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptación para proteger el código contenido.

14

Prof. Mario Gomikian - IHDA

Memoria EPROM. •

Las memorias EPROM (Erasable/Programmable Read Only Memory) pueden borrarse y grabarse muchas veces.



La grabación se realiza, como en el caso de los OTP, con un dispositivo gobernado desde un PC.



Si posteriormente se desea borrar el contenido, disponen de una ventana de cristal en su superficie por la que se somete a la EPROM a radiación UV durante varios minutos.



Hoy en día se utilizan poco, siendo sustituidas por memorias EEPROM o Flash.

15

Prof. Mario Gomikian - IHDA

Memoria EEPROM. • •

• • •

• 16

Se trata de memorias de sólo lectura, programables y borrables eléctricamente EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la programación como el borrado, se realizan eléctricamente desde el propio grabador y bajo el control de una PC, lo que hace más cómodas y rápidas dichas operaciones. No disponen de ventana de cristal en la superficie. Los microcontroladores dotados de memoria EEPROM, una vez instalados en el circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho circuito (Programacion en circuito). El número de veces que puede grabarse y borrarse una memoria EEPROM es finito, por lo que no es recomendable una reprogramación continua. Si bien este tipo de memoria es relativamente lenta, es bastante común que los fabricantes incluyan una pequeña zona de memoria EEPROM en los dispositivos programables para guardar y modificar cómodamente una serie de datos o parámetros de utilidad. Hoy en día están siendo sustituidas por memorias de tipo Flash. Prof. Mario Gomikian - IHDA

Memoria FLASH. •

Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar. Funciona como una ROM y una RAM pero consume menos y es más pequeña.



La memoria FLASH es programable en circuito y es más rápida y de mayor densidad que la EEPROM.



La alternativa FLASH está recomendada frente a la EEPROM cuando se precisa gran cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos de escritura/borrado. Son idóneas para la enseñanza y la ingeniería de diseño.



Las memorias EEPROM y FLASH son muy útiles al permitir que los microcontroladores que las incorporan puedan ser reprogramados en circuito, es decir, sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con este tipo de memoria, incorporado al control del motor de un automóvil, permite que pueda modificarse el programa durante la rutina de mantenimiento periódico. Así, la reprogramación del microcontrolador puede convertirse en una labor rutinaria dentro de la puesta a punto.

17

Prof. Mario Gomikian - IHDA

¿Microcontrolador = PIC? 

Existen distintos fabricantes de microcontroladores (por ejemplo, Analog Devices, National, Philips, Texas, Intel, Motorola, etc.)



Otro fabricante de microcontroladores -quizá el más conocido- es Microchip.



Sólo los microcontroladores de Microchip se denominan PIC.

18

Prof. Mario Gomikian - IHDA

¿Por qué elegir Microchip? 

Gran facilidad de uso.



Gran cantidad de información disponible en libros, revistas e Internet.



Herramientas de desarrollo muy asequibles.



Bajo precio y fácil disponibilidad.



Gran cantidad de dispositivos y versiones de distinta gama, lo que permite lograr la mejor opción para resolver un problema.

19

Prof. Mario Gomikian - IHDA

Arquitectura Harvard. Harvard. Esta es la arquitectura que utilizan los microcontroladores PIC. La unidad central de proceso (CPU) está conectada a dos memorias (una con las instrucciones y otra con los datos) por medio de dos buses diferentes.

20

Prof. Mario Gomikian - IHDA

Arquitectura Harvard: Harvard:

Una de las memorias contiene solamente las instrucciones del programa (Memoria de Instrucciones o de Programa), y la otra sólo almacena datos (Memoria de Datos). Los buses de instrucciones y datos son totalmente independientes, lo que permite: 1- a la CPU poder acceder de forma independiente y simultánea a la memoria de datos y a la de instrucciones; 2que los mismos puedan tener distintos contenidos en la misma dirección y también distinta longitud; 3- que la longitud de los datos y las instrucciones puede ser distinta, lo que optimiza el uso de la memoria en general; 4- que la CPU pueda acceder a los datos para completar la ejecución de una instrucción y, al mismo tiempo, leer la siguiente instrucción a ejecutar. 21

Prof. Mario Gomikian - IHDA

Arquitectura Harvard: Harvard:

Ventajas de esta arquitectura: 

El tamaño de las instrucciones no esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que cualquier instrucción ocupe una sola posición de memoria de programa, logrando así mayor velocidad y menor longitud de programa.



El tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando una mayor velocidad en cada operación.

22

Prof. Mario Gomikian - IHDA

El PIC16F84.

23

Prof. Mario Gomikian - IHDA

El PIC16F84. Dentro de la familia PIC de Microchip -en la gama media- quizá el modelo más difundido, con mayor disponibilidad para utilizarlo en montajes y prácticas, y del que existe mayor información es el PIC16F84A. Si bien es cierto que hoy puede sustituirse por otros modelos con mas prestaciones, incluso más baratos, no por ello deja de ser ideal para comenzar el estudio. 24

Prof. Mario Gomikian - IHDA

Conociendo al PIC16F84A…            25

Repertorio de 35 Instrucciones. Todas las instrucciones se ejecutan en un solo ciclo excepto las de salto que necesitan dos. Versiones para bajo consumo (16LF84A), de 4 MHz (PIC16F84A-04) y 20 MHz (PIC16F84A-20). Un ciclo máquina del PIC son 4 ciclos de reloj, por lo cual si tenemos un PIC con un cristal de 4 MHz, se ejecutarán 1 millón de instrucciones por segundo. Memoria de programa Flash de 1 K x 14 bits. Memoria RAM dividida en 2 áreas: 22 registros de propósito específico (SFR) y 68 de propósito general (GPR) como memoria de datos. 15 registros de funciones especiales. Memoria de datos RAM de 68 bytes (68 registros de propósito general). Memoria de datos EEPROM de 64 bytes. Contador de programa de 13 bit (lo que en teoría permitiría direccionar 4 KB de memoria, aunque el 16F84 solo dispone de 1KB de memoria implementada). Modos de direccionamiento directo, indirecto y relativo. Prof. Mario Gomikian - IHDA

Conociendo al PIC16F84A… 

4 fuentes de interrupciones:    

          

26

A través del pin RB0/INT. Por desborde del temporizador TMR0. Por cambio de estado de los pins 4:7 del Puerto B. Por finalización de la escritura de la memoria EEPROM.

1.000.000 de ciclos de borrado/escritura de la memoria EEPROM. 40 años de retención de la memoria EEPROM. 13 pins de E/S con control individual de dirección. PORTA de 5 bits . PORTB de 8 bits . Contador/Temporizador TMR0 de 8 bits con divisor programable. Power-on Reset (POR). Power-up Timer (PWRT). Oscillator Start-up Timer (OST). Watchdog Timer (WDT). Protección de código.

Prof. Mario Gomikian - IHDA

Conociendo al PIC16F84A…      

Modo de bajo consumo SLEEP. Puede operar bajo 4 modos diferentes de oscilador. Programación en serie a través de dos pines. Tecnología de baja potencia y alta velocidad CMOS Flash/EEPROM. Temperatura ambiente máxima para funcionamiento de -55°C a +125°C. Rango de alimentación:   

    

27

16LF84A: de 2V a 5,5 V en configuración de oscilador XT, RC y LP. 16F84A: de 4V a 5,5V en configuración de oscilador XT, RC y LP; y de 4,5V a 5.5V en configuración de oscilador HS.

Máxima Máxima Máxima Máxima Máxima

corriente corriente corriente corriente corriente

del puerto "A" como fuente: 50 mA. del puerto "A" como sumidero: 80 mA. del puerto "B" como fuente: 100 mA. del puerto "B" como sumidero: 150 mA. que puede suministrar una salida: 25 mA.

Prof. Mario Gomikian - IHDA

Tipos de encapsulado. El encapsulado más común para este microcontrolador es el DIP (Dual in line Pin) de 18 pines. Sin embargo, hay otros tipos de encapsulado, por ejemplo, el encapsulado de montaje superficial (Surface mount), mucho más pequeño.

28

Prof. Mario Gomikian - IHDA

Diagrama del PIC16F84A.

29

Prof. Mario Gomikian - IHDA

Descripción de los pines.     





30

VDD: Alimentación positiva. VSS: Alimentación negativa. OSC1/CLKIN: Oscilador externo que proporciona la frecuencia de trabajo del microcontrolador. OSC2/CLKOUT: Auxiliar del circuito oscilador. MCLR: Reset del PIC. Se activa con un nivel lógico bajo y reinicia el PIC. También se utiliza durante la grabación de la memoria de programa para introducir VPP, la tensión de grabado, que está comprendida entre 12 y 14 VDC. RA0–RA4: Puerto A. Son 5 (cinco) líneas de I/O. La línea RA4 multiplexa otra función expresada por TOCKI. Esta línea sirve para recibir una frecuencia externa de reloj para el temporizador interno TMR0. RB0-RB7: Puerto B. Son 8 (ocho) líneas de I/O. La línea RB0 multiplexa otra función (INT) que sirve como entrada a una petición externa de interrupción.

Prof. Mario Gomikian - IHDA

31

Prof. Mario Gomikian - IHDA

¿Cómo se ejecuta una instrucción? 

Para ejecutar una instrucción se aplica la técnica de la segmentación (pipe-line), que consiste en realizar en paralelo los dos ciclos que comprende cada instrucción.



En realidad cada instrucción consta de dos ciclos: en el primero se lleva a cabo la búsqueda del código de la instrucción en la memoria del programa (ciclo de búsqueda); en el segundo se decodifica y se ejecuta (ciclo de ejecución).



La estructura segmentada del procesador, permite realizar al mismo tiempo el ciclo de ejecución de una instrucción, y el de búsqueda de la siguiente. Cuando la instrucción ejecutada corresponde a un salto no se conoce cuál será el siguiente hasta que se complete, por eso en esta situación se sustituye el ciclo de búsqueda de la siguiente instrucción por un ciclo vacío, lo que hace que las instrucciones de salto ocupen dos ciclos de instrucción.

32

Prof. Mario Gomikian - IHDA

¿Cómo se ejecuta una instrucción?

33

Prof. Mario Gomikian - IHDA

Osciladores.

34

Prof. Mario Gomikian - IHDA

Osciladores. 

Todo microprocesador o microcontrolador requiere de una señal de reloj que sincronice su funcionamiento. Esta señal se obtiene mediante un oscilador de frecuencia.



Existen microcontroladores que tienen un oscilador interno y no requieren de componentes externos.



El microcontrolador PIC16F84 requiere de un circuito externo de oscilación o generador de pulsos de reloj.



La frecuencia de clock máxima es de 4 MHz para el PIC16F84A-04 y de 20 MHz para el PIC16F84A-20.



El PIC16F84 puede utilizar cuatro tipo diferentes configuraciones para el oscilador. La elección dependerá de la precisión y velocidad que requiramos. Por otro lado, el costo también es un aspecto a tener en cuenta a la hora de elegir uno u otro.

35

Prof. Mario Gomikian - IHDA

Tipos de osciladores. Los cuatro tipos de oscilador que admite el PIC 16F84 son:  Oscilador RC  Oscilador tipo HS  Oscilador tipo XT  Oscilador tipo LP 36

Prof. Mario Gomikian - IHDA

Oscilador RC. Es un oscilador de bajo costo, formado por una resistencia y un capacitor. No tiene una frecuencia muy estable. Su valor depende de los valores de los elementos de la red RC.

37

Prof. Mario Gomikian - IHDA

Los otros osciladores. 

Oscilador tipo HS Es un oscilador de alta velocidad (HIGH SPEED) que alcanza una frecuencia comprendida entre los 4 y 10 MHz. Está basado en un cristal de cuarzo o un resonador cerámico.



Oscilador tipo XT Es un oscilador (de cristal o resonador cerámico) para frecuencias standard comprendidas entre 100KHz y 4MHz



Oscilador tipo LP Oscilador de cristal de bajo consumo (LOW POWER), diseñado para trabajar en un rango de frecuencias de 35 a 200KHz.

38

Prof. Mario Gomikian - IHDA

Conexión del cristal.

La figura muestra la forma de conectar un cristal. Se indican los capacitores (C1 y C2), recomendados por el fabricante para lograr una mayor estabilidad en la frecuencia del oscilador. 39

Prof. Mario Gomikian - IHDA

Conexión de osciladores (resumen)   

40

Los pines OSC1/CLKIN (pin 16) y OSC2/CLKOUT (pin 15) sirven para la conexión del oscilador. Los osciladores mas usados son el XT (cristal de cuarzo) y el RC (resistencia y condensador). La forma de conectar los mismos es la siguiente:

Prof. Mario Gomikian - IHDA

Valores de C1 y C2 recomendados: Valores de capacitancia (C1 y C2) recomendados por el fabricante para resonadores cerámicos.

Valores de C1 y C2 para cristales osciladores.

41

Prof. Mario Gomikian - IHDA

Esquemas mínimos de conexión:

Cristal

42

Oscilador RC C1 de 20pF como mínimo 5KΩ ≤ R1 ≤ 100KΩ Prof. Mario Gomikian - IHDA

Memoria de datos.

43

Prof. Mario Gomikian - IHDA

Memoria de datos. La memoria de datos se divide en dos áreas diferentes: 1. El Área de RAM estática o SRAM, donde reside el banco de Registros de Funciones Especiales (SFR) y el banco de Registros de Propósito General (GPR).

44

Prof. Mario Gomikian - IHDA

Memoria de datos. 2.

45

El Área EEPROM, de 64 bytes donde, opcionalmente, se pueden almacenar datos que no se pierden al desconectar la alimentación. Esta parte de la memoria no está directamente mapeada. Se tiene acceso a la misma indirectamente a través de 4 registros SFR (usados para leer y escribir en ella) que son:

Prof. Mario Gomikian - IHDA

Registros de Funciones Especiales (SFR) 

Ocupan 24 posiciones -de 1 byte cada una- de la memoria de programa, aunque dos de ellas no son operativas.



Tienen como misión principal controlar el núcleo del microcontrolador y sus recursos.



Algunos de estos registros se hallan repetidos en la misma dirección de los dos bancos, para simplificar su acceso (INDF, STATUS, FSR, PCL, PCLATH E INTCON).

46

Prof. Mario Gomikian - IHDA

47

Prof. Mario Gomikian - IHDA

Registro STATUS.  Este registro SFR contiene el estado aritmético de la ALU (bits: C, DC y Z).  Indica el estado de RESET (bits: TO y PD).  Selecciona el banco a acceder en la memoria de datos (bits: IRP, RP0 y RP1).

48

Prof. Mario Gomikian - IHDA

49

Prof. Mario Gomikian - IHDA

Registro OPTION.

Este registro SFR (tanto de lectura como de escritura) contiene varios bits de control que permiten configurar el prescaler del temporizador interno (TMR0), la interrupción externa INT y las resistencias de pull-up de PORTB.

50

Prof. Mario Gomikian - IHDA

51

Prof. Mario Gomikian - IHDA

Temporizaciones.

52

Prof. Mario Gomikian - IHDA

Temporizador interno TMR0) Cómo se temporiza en forma precisa? o o

o o

53

Mediante la cuenta del TMR0 (“contar para temporizar”). Este temporizador puede ser configurado (a través del registro OPTION) para que cuente más rápido o más lento, pero con ciertos límites. La configuración se hace mediante el prescaler. Sin embargo, las temporizaciones que pueden lograrse con el prescaler son pequeñas (múltiplos del ciclo de instrucción), aún cuando el TMR0 esté configurado para ir lo más lento posible. Prof. Mario Gomikian - IHDA

Componentes del TMR0. 

PRESCALER: a través del registro OPTION podemos seleccionar que el TMR0 cuente en forma sincrónica (bit T0CS en 0), al ritmo de ejecución de las instrucciones.



PRESCALER RATE SELECT(bits PS0 a PS2 de OPTION): seteando estos bits podemos seleccionar la velocidad a la cual queremos que “cuente” el timer. Tanto el PRESCALER como el PRESCALER RATE SELECT se configuran en el registro OPTION

54

Prof. Mario Gomikian - IHDA

Frecuencia de trabajo y ciclo de instrucción. 

La frecuencia de trabajo del microcontrolador es un parámetro fundamental a la hora de establecer la velocidad en la ejecución de instrucciones y el consumo de energía.



Un PIC16F84 que funciona a una frecuencia de 10MHz (100ns de período), posee un ciclo de instrucción de 400ns, puesto que cada instrucción tarda en ejecutarse 4 períodos de reloj, o sea 4 x 100ns.



Todas las instrucciones del PIC se realizan en un ciclo de instrucción, menos las de salto, que tardan el doble.

55

Prof. Mario Gomikian - IHDA

¿Cómo contar 1 segundo? Si el PIC trabaja a 4MHz (frecuencia de clock), el ciclo de instrucción vale 1microsegundo (la frecuencia será de 1MHz). Si elegimos un PRS de 64 (para ello seteamos en los tres bits del prescaler el valor binario 101), entonces la frecuencia que le estaría llegando al TMR0 será de: f = 1000000 / 64 = 15625 Hz Como f = 1 / T, entonces T = 64 microsegundos Esto significa que cada 64 microsegundos se incrementará la cuenta del TMR0. Entonces si queremos saber cuántas veces tiene que aumentar dicha cuenta para llegar a 1 segundo, hacemos: 64 us por X = 1 segundo => X = 15625 Se necesita que el TMR0 “cuente” hasta 15625!! 56

Prof. Mario Gomikian - IHDA

¿Cómo contar 1 segundo? Pero recordemos que el TMR0 es un registro SFR igual que todos los otros, por lo tanto tiene sólo 8 bits, con lo que solamente puede contar hasta 255.

¿Qué se puede hacer, entonces?

57

Prof. Mario Gomikian - IHDA

¿Cómo contar 1 segundo?  Contar 15625 es lo mismo que contar 125 veces 125, con la diferencia de que el número 125 sí cabe en el registro del TMR0.  Entonces la idea es contar hasta 125 con el TMR0 y, mediante un registro auxiliar (GPR), ir contando las veces que hacemos eso.  Cuando lleguemos a 125 en el registro auxiliar, habrá pasado exactamente un segundo.

58

Prof. Mario Gomikian - IHDA

¿Cómo contar 1 segundo? Para que el TMR0 sólo cuente 125, tenemos que hacer que su valor inicial sea 130 (ya que de 130 a 255 hay 125). Asimismo, al registro auxiliar lo tenemos que inicializar con 125, para ir restándole 1 cada vez. Cuando el registro llegue a 0, sabremos que ya pasó un segundo.

Pero… ¿Cómo sabemos que el TMR0 llegó a 255? 59

Prof. Mario Gomikian - IHDA

¿Cómo contar 1 segundo?

Para reconocer si el temporizador ha desbordado (es decir, si llegó a 255 y volvió a cero), se usa el flag de desborde del TMR0 (T0IF), ubicado en el bit 2 del registro INTCON.

60

Prof. Mario Gomikian - IHDA

Interrupciones.

61

Prof. Mario Gomikian - IHDA

62

Prof. Mario Gomikian - IHDA

63

Prof. Mario Gomikian - IHDA

Registro INTCON. Este registro SFR se encarga de controlar todo lo que se refiere a interrupciones. Es un registro de lectura y escritura cuyos bits nos permiten el manejo de las 4 fuentes de interrupción que admite el PIC16F84.

64

Prof. Mario Gomikian - IHDA

65

Prof. Mario Gomikian - IHDA

Interrupciones. • El sistema de interrupciones consiste en un mecanismo por el cual un evento interno o externo, asíncrono respecto al programa, puede interrumpir la normal ejecución del mismo produciendo automáticamente un salto a una subrutina, de manera que pueda atender inmediatamente el evento, y retomar luego la ejecución del programa exactamente en el lugar donde estaba en el momento de ser interrumpido. Este mecanismo es muy útil para el manejo de rutinas que deben repetirse periódicamente. 66

Prof. Mario Gomikian - IHDA

Interrupciones. •

Las interrupciones se comportan casi exactamente igual que las subrutinas. Desde el punto de vista del control del programa, al producirse una interrupción se produce el mismo efecto que ocurriría si el programa tuviese un CALL 0004h en el punto en que se produjo la interrupción.



Como vimos, en el registro de control del sistema de interrupciones (INTCON) existe un bit de habilitación general de interrupciones: el bit 7 (GIE), que debe ser seteado a 1 para que las interrupciones puedan ocurrir. Al producirse una interrupción, este bit se borra automáticamente para evitar nuevas interrupciones.

67

Prof. Mario Gomikian - IHDA

Interrupciones. •

La instrucción RETFIE se utiliza al final de la rutina de interrupción, y es idéntica a un retorno de subrutina (RETURN), salvo que además pone a 1 automáticamente el bit GIE del registro INTCON, volviendo a habilitar las interrupciones.



Dentro de la rutina de atención a la interrupción, el programa deberá comprobar el estado de las banderas de interrupción de cada una de las fuentes habilitadas, para detectar cual fue la que causó la interrupción y así decidir que acción tomar.

68

Prof. Mario Gomikian - IHDA

Interrupciones: diagrama de flujo.

El diagrama corresponde a un ejemplo de interrupción externa (INT).

69

Prof. Mario Gomikian - IHDA

Interrupciones: fuentes. El PIC16F84 posee cuatro fuentes de interrupción:  Interrupción externa por el pin RB0/INT.  Desborde del timer (TMR0).  Cambio de estado de los bits de mayor peso de PORTB (RB4, RB5, RB6, RB7).  Finalización de un ciclo de escritura en la memoria EEPROM.

70

Prof. Mario Gomikian - IHDA

Interrupciones: su lógica.

71

Prof. Mario Gomikian - IHDA

Interrupción externa por el pin RB0/INT. La fuente de interrupción externa 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 a 1 y si el bit GIE=1, se pone en marcha el mecanismo de atención a dicha interrupción. Mediante el bit INTDEG del registro OPTION, se puede seleccionar el flanco activo de RBO/INT. Si INTDEG=1 el flanco activo es el de subida, y si INTDEG=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, puesto que, en caso contrario, al ejecutar la instrucción de retorno de interrupción RETFIE se volverá a desarrollar el mismo proceso de interrupción. 72

Prof. Mario Gomikian - IHDA

Interrupción por desborde del timer (TMR0).

Esta interrupción hay que habilitarla poniendo en 1 el bit 7 (GIE) y el bit 5 (T0IE), ambos del registro INTCON. Si se produce la interrupción, el bit 2 del registro INTCON (T0IF) nos lo informa. Si el TMR0 desbordó (T0IF = 1), de lo contrario (T0IF = 0).

73

Prof. Mario Gomikian - IHDA

Interrupción por cambio de estado de los bits de PORTB (RB4, RB5, RB6, RB7).

Para activar esta interrupción los bits RBIE y GIE del registro INTCON deben de estar en 1. Bajo estas condiciones cuando se produce un cambio de estado en cualquiera de los pines RB4 a RB7 se activa el flag RBIF del registro INTCON. Este tipo de interrupción está especialmente pensada para el control de un teclado matricial 4 x 4 (16 teclas).

74

Prof. Mario Gomikian - IHDA

Interrupción por finalización de un ciclo de escritura en la memoria EEPROM. 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á mapeada 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. El Registro EEADR, se encuentra en la posición de memoria 09h del banco 0, en este registro se carga directamente la dirección a la que queremos acceder 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, solo 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 largo intervalo de tiempo que precisa su desarrollo. 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. 75

Prof. Mario Gomikian - IHDA

EEPROM

Lectura de la memoria EEPROM. Para leer un dato de la memoria EEPROM tienen que efectuarse los siguientes pasos: 

Escribir la dirección que hay que leer, en el registro EEADR.



Poner en 1 el bit RD del registro EECON para habilitar la lectura.



Leer el dato y esperar a que termine la operación.



El dato está disponible en el registro EEDATA.

76

Prof. Mario Gomikian - IHDA

EEPROM

Dos ejemplos prácticos: LECTURA1 y LECTURA2.       

LECTURA1 ;aquí se supone que el dato en EEDATA estará disponible rápidamente BCF STATUS,RP0 ; Selecciona banco 0 MOVLW MEM1 ; Dirección a leer de MOVWF EEADR ; la EEPROM BSF STATUS,RP0 ; Selecciona banco 1 BSF EECON1,RD ; Activar lectura BCF STATUS,RP0 ; Selecciona banco 0 MOVF EEDATA,W ; W se carga con el valor leído en EEPROM

         

LECTURA2 ; aquí se espera hasta confirmarlo. BCF STATUS,RP0 ; Selecciona banco 0 MOVLW MEM1 ; Dirección a leer de MOVWF EEADR ; la EEPROM BSF STATUS,RP0 ; Selecciona banco 1 BSF EECON1,RD ; Activar lectura ESPERA BTFSC EECON1,RD ; Espera final de lectura GOTO ESPERA ; a que baje la bandera BCF STATUS,RP0 ; Selecciona banco 0 MOVF EEDATA,W ; W se carga con el valor leído en EEPROM

77

Prof. Mario Gomikian - IHDA

EEPROM

Escritura de la memoria EEPROM.   

Poner a 1 (si no lo estaba) el bit WREN del registro EECON1, para habilitar la operación de escritura. Cargar en EEADR la dirección de la posición a escribir. Cargar en el registro EEDATA el valor a grabar. Ejecutar la siguiente secuencia que inicia la escritura de cada byte, y además sirve de protección frente a errores eventuales. La secuencia siempre es la misma y ha de ejecutarse siempre.

    

MOVLW 55H MOVWF EECON2 ; Escribe 55h en EECON2 MOVWF AAH MOVWF EECON2 ; Escribe AAh en EECON2 BSF EECON1,WR ; Coloca a 1 el bit de escritura



Esta última instrucción inicia el proceso de escritura. Cuando se termina, el bit EEIF está a 1 y, si ha sido habilitada la interrupción de EEPROM haciendo uso del bit EEIE del registro INTCON, esta interrupción se genera. Mediante software es necesario poner a cero el bit EEIF.



 78

Prof. Mario Gomikian - IHDA

EEPROM

Ejemplo de escritura típico sin utilizar interrupciones. (1)                   79

ESCRITURA ; Establecer EEADR y EEDATA MOVLW DIRMEM1 MOVWF EEADR ; Escribe la dirección en EEADR MOVLW DATO1 MOVWF EEDATA ; Se escribe el dato en EEDATA BSF STATUS,RP0 ; Selecciona el banco 1 BSF EECON1,WREN ; Permiso de escritura activado ;Comienzo de la secuencia de escritura MOVLW 0x55 MOVWF EECON2 ; Se escribe el dato 55h en EECON2 MOVLW 0xAA MOVWF EECON2 ; Se escribe AA h en EECON2 BSF EECON1,WR ; Comienza la escritura BCF EECON1,WREN ; Permiso de escritura desactivado ESPERA BTFSC EECON1,WR ; Espera a que termine la escritura GOTO ESPERA BCF STATUS,R0 ; Selecciona el banco 0 Prof. Mario Gomikian - IHDA

EEPROM

Ejemplo de escritura típico sin utilizar interrupciones. (2)  





80

La escritura de cada byte no se iniciará si la secuencia de introducir 55h y AAh en EECON2 y activar el bit WR no se sigue exactamente. Considerando lo anterior, es recomendable que durante la secuencia de inicio de escritura se deshabiliten las interrupciones, con el fin de evitar errores no deseados y habilitarlas posteriormente si van a ser utilizadas. Adicionalmente, el bit WREN de EECON1 debe ser activado para habilitar la escritura. Para evitar errores, también es recomendable que el bit WREN esté desactivado durante todo el programa excepto en el momento de la escritura. Debemos tener en cuenta que este bit no se pone a cero automáticamente mediante hardware. Una vez iniciado el ciclo de escritura, si ponemos a cero WREN, esto no afectará a el ciclo de escritura iniciado. En este caso el bit WR estará inhibido y no se podrá poner a uno. Después del ciclo, el bit WR es puesto a cero por hardware y el EEIF es puesto a uno (si EEIE lo está). Si EEIE, está habilitado, EEIF debe ser puesto a cero por software. Prof. Mario Gomikian - IHDA

EEPROM

Un ejemplo de escritura típico que utiliza interrupciones.                    81

ESCRITURA BCF STATUS,RP0 ; Selecciona el banco 0 ; Establecer EEADR y EEDATA MOVLW MEM1 MOVWF EEADR ; Escribe la dirección en EEADR MOVLW DATO1 MOVWF EEDATA ; Se escribe el dato en EEDATA BSF STATUS,RP0 ; Selecciona el banco 1 BSF EECON1,WREN ; Permiso de escritura activado BCF INTCON, GIE ; Desabilita interrupciones. ;Comienzo de la secuencia de escritura MOVLW 0x55 MOVWF EECON2 ; Se escribe el dato 55h en EECON2 MOVLW 0xAA MOVWF EECON2 ; Se escribe AAh en EECON2 BSF EECON1,WR ; Comienza la escritura BSF INTCON,GIE ; Habilita las interrupciones. BCF EECON1,WREN ; Permiso de escritura desactivado BCF STATUS,R0 ; Selecciona el banco 0 Prof. Mario Gomikian - IHDA

EEPROM

Verificación de la escritura en la EEPROM.            

82

Dependiendo de la aplicación, la experiencia indica que los datos escritos en la EEPROM deben ser verificados comparándolos con el dato que se acaba de escribir. Generalmente el fallo de escritura en un bit de la EEPROM será un bit que se escribe como un 0 lógico pero devuelve un 1. La siguiente porción de código es un ejemplo de verificación del dato escrito: BCF STATUS,RP0 ; Nos situamos en el banco 0 MOVF EEDATA,W ; Debemos estar en el banco 0 BSF STATUS,RP0 ; Cambiamos al banco 1 BSF EECON1,RD ; Leemos el dato que se guarda en BCF STATUS,RP0 ; EEDATA, y cambiamos a banco 0 ;Se comprueba si los datos en W y en EEDATA son los mismos SUBWF EEDATA,W ; Restamos ambos valores BTFSS STATUS,Z ; Si la operación es cero son iguales GOTO ERR_ESCRIT ; Si no son iguales, saltamos a ERR_ESCRIT ..... ; Si son iguales, seguimos con el programa Prof. Mario Gomikian - IHDA

EEPROM

Dos rutinas para leer y escribir en la EEPROM. ;EEPROM_R: Lee un byte de la ;EEPROM. Se supone al registro ;EEADR cargado con la dirección a ;leer. En EEDATA aparecerá el dato ;leído. ; EEPROM_R bsf STATUS,RP0 ;Selección banco 1 bsf EECON1,RD ;Orden de lectura bcf STATUS,RP0 ;Selección banco 0 return

83

;EEPROM_W: Graba un byte en la EEPROM de ;datos. La dirección será la contenida en EEADR y ;el dato se lo supone previamente introducido en ;EEDATA ; EEPROM_W bsf STATUS,RP0 ;Selecciona banco 1 bsf EECON1,WREN ;Permiso de escritura movlw b'01010101' ;Secuencia de escritura movwf EECON2 movlw b'10101010‘ movwf EECON2 bsf EECON1,WR ;Orden de escritura bcf EECON1,WREN ;Desconecta permiso de ;escritura ESPERA btfss EECON1,EEIF ;Comprobar bandera fin de goto ESPERA ;escritura bcf EECON1,EEIF ;Reponer flag fin de escritura bcf STATUS,RP0 ;Selección banco 0 return

Prof. Mario Gomikian - IHDA

El lenguaje ensamblador .

84

Prof. Mario Gomikian - IHDA

Programación del PIC y lenguaje ensamblador. 

Para programar el PIC puede utilizarse el Lenguaje Ensamblador (Assembly Language).



El Lenguaje Ensamblador está compuesto por pequeñas instrucciones (mnemónicos).



Para escribir los programas (código fuente) podemos usar, por ejemplo, el bloc de notas o, directamente, el editor del MPLAB.



Una vez escrito se lo guarda con extensión .asm y se lo convierte (se lo ensambla) con un programa ensamblador: el MPASM (el MPLAB lo contiene). Si es necesario, se lo simula, depura y ensambla con el MPLAB, hasta que no contenga errores.



El resultado es un archivo con extensión .hex que podemos transferir al PIC mediante el programador (fase de grabación). 85

Prof. Mario Gomikian - IHDA

El programador o grabador es el dispositivo necesario para grabar en la memoria del PIC, nuestro programa. El que se muestra en la fotografía es el programador de Microchip (para encapsulado DIP).

86

Prof. Mario Gomikian - IHDA

Lenguaje ensamblador.

87

Prof. Mario Gomikian - IHDA

De código fuente a código máquina…

88

Prof. Mario Gomikian - IHDA

Directivas del ensamblador: 

Existen una serie de instrucciones -para el programa ensamblador- que nos hacen la tarea de programación mas sencilla.



EQU: Podemos ponerle un nombre (o etiqueta) a un registro GPR de la memoria, esto se hace mediante la instrucción EQU. Por ejemplo: VARIABLE1



0CH

#DEFINE: Es muy parecida a EQU, solo que aquí no ponemos etiquetas a un registro, sino a una instrucción entera. Por ejemplo: #DEFINE #DEFINE

89

EQU

BANCO1 BANCO0

BSF BCF

STATUS,5 STATUS,5

Prof. Mario Gomikian - IHDA

Directivas del ensamblador: 

A partir de ahora, cuando escribamos BANCO1 se pondrá a 1 el bit de selección de banco y pasaremos al banco 1 de la memoria. Del mismo modo, al escribir BANCO0 pasaremos al banco 0.



ORG: Indica al ensamblador la dirección de memoria de programa donde se guardará la primera instrucción a ser ejecutada por el programa. Por ejemplo:



90

ORG

0

CLRF

VARIABLE1

;vector de reset. Apunta a la ;dirección de memoria 00H. ;será la primera instrucción en ;ejecutarse.

END: Se escribe al final del programa para indicar que ya ha acabado. Es obligatorio.

Prof. Mario Gomikian - IHDA

Directivas del ensamblador:

91

Prof. Mario Gomikian - IHDA

Subrutinas.  



 

92

Una subrutina o subprograma es una parte del programa que hace algo concreto y se repite a menudo. Para ahorrar memoria y esfuerzo y para hacer el programa mas comprensible- se la agrupa en un determinado lugar, apartada del programa principal. Para acceder a esa parte se la debe “llamar” con la instrucción CALL, seguida de la etiqueta que identifica la subrutina SUBR (por ejemplo, DEMORA). Una vez ejecutada la subrutina, se “retorna” al programa principal, mediante la instrucción RETURN. Siempre que existe un CALL, debe existir un RETURN.

Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLER

Son en total 35 instrucciones. De ellas, 18 son orientadas al byte. 4 son orientadas al bit. Las 13 restantes son literales y de control.

93

Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLER

94

Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLER

95

Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLER

96

Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLER

97

Prof. Mario Gomikian - IHDA

Instrucciones en ASSEMBLER

98

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

99

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

100

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

101

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

102

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

103

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

104

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

105

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

106

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

107

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

108

Prof. Mario Gomikian - IHDA

Instrucciones: detalle

109

Prof. Mario Gomikian - IHDA

Ejemplo de un programa.

110

Prof. Mario Gomikian - IHDA