Introducción a Microcontroladores en Electrónica
Introducción a Microcontroladores en Electrónica
ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
MICROCONTROLADORES
INTRODUCCION
Vcc.
ROM
UCP
RAM
I/O I/O
Entradas Salidas
interruptores visualizadores
teclados relés
Micro
controlador
(programa)
sensores parlantes
transductores motores
___________________________________________________________________ 1
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Periféricos Microcontrolador
Periféricos
___________________________________________________________________ 2
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
3)- En los microcontroladores, la memoria ROM de programa, es limitada. Por lo
general no mayor a 4 K x instrucciones. En un sistema con microprocesador, se pueden
tener ROM externas de acuerdo a las necesidades del sistema.
4)- Con los microcontroladores, no es necesario diseñar circuitos complejos
decodificadores, porque el mapa de memoria y de puertos I / O, están incluidos
internamente.
5)- La mayoría de los microcontroladores, no tienen accesibles al usuario, los buses
de direcciones, datos y control de la UCP. Algunos modelos, lo pueden hacer a través
de los puertos I / O, para construir expansiones de memoria RAM y ROM. En los
microprocesadores, la expansión es más fácil.
6)- La velocidad de operación de los microcontroladores es más lenta, de la que se
puede operar con los sistemas con microprocesadores. Sin embargo, actualmente existen
microcontroladores que operan por encima de los 50 MHZ.
7)- De manera similar a los sistemas basados con microprocesadores, para escribir,
ensamblar y depurar programas en lenguaje de maquina, los microcontroladores
necesitan un sistema de desarrollo para cada familia de microcontroladores. Éstos, están
compuestos por un paquete “software” con editor de textos, ensamblador y simulador de
programas y al mismo tiempo, se necesita de un “hardware”, para poder almacenar el
“programa “de aplicación”, en la memoria ROM del microcontrolador.
Resumiendo, podemos decir que algunas de las principales ventajas de los
microcontroladores son:
a)- El circuito impreso es más pequeño dado que muchos de los componentes se
encuentran dentro del circuito integrado.
b)- El costo del sistema es reducido, dado que es reducido él número de
componentes.
c)- Los problemas de ruido eléctricos que pueden afectar a los sistemas con
microprocesador, se eliminan, debido a que todo el sistema principal, se encuentra
en un solo encapsulado.
d)- El tiempo de desarrollo de un sistema con microcontrolador, se reduce
notablemente.
Cuando una aplicación sobrepasa las características del microcontrolador como
capacidad de memoria, velocidad de proceso, número de entradas y salidas, etc. , se
debe recurrir a un sistema con microprocesador o una computadora completa.
___________________________________________________________________ 3
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
d)- Existen sistemas que requieren sistemas de control por ancho de pulso PWM como
el caso de motores, cargas resistivas etc. Para este caso, hay disponibles
microcontroladores con módulos PWM.
e)- Para aquellos eventos que actúan en tiempo real o existen procesos que no dan
“espera”, se deben utilizar la técnica llamada “interrupciones”. Cuando una señal
externa activa una línea de interrupción, el microcontrolador deja de lado la tarea que se
encuentra ejecutando, para atender una situación especial y luego puede regresar a
continuar con la labor que esta realizando.
FLASH
UCP RAM
EEPROM
Señal de entrada
I/O A/D analógica
Señales de
entrada/salida TIMER 1
digitales I/O Salida temporizada o
contador de pulsos
TIMER 2 externos
Salida pulsos TX
modulados PWM Transmisión y
Rx Recepción serie
Partes principales:
-Unidad central de proceso (UCP)
-Memoria no volátil para guardar el programa, por ejemplo EPROM (hay varios tipos)
-Memoria no volátil para guardar datos, por ejemplo EEPROM.
-Memoria de lectura / escritura para guardar datos.
-Registros generales y especiales para programación.
-Líneas de entrada / salida para los controladores periféricos con comunicación paralela
-Líneas de entrada / salida para comunicación serie con periféricos (232C.I2C,USB,etc.)
Recursos auxiliares:
-Circuito reloj (oscilador para sincronismo)
-Temporizadores (timer)
-Perro guardián (watch dog)
-Conversores analógico / digital (A /D) y viceversa (D/A).
-Comparadores analógicos.
-Protección ante fallas de alimentación.
-Estado de bajo consumo o reposo.
___________________________________________________________________ 4
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Arquitecturas empleadas en los microcontroladores
Bus de direcciones
MEMORIA
UCP instrucciones
Bus de datos e instrucciones +
datos
Arquitectura Harvard
Bus de direcciones Bus de direcciones
Instrucc. datos
Memoria de UCP Memoria
instrucciones de
datos
La memoria de programa
___________________________________________________________________ 5
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
2)- EPROM: Se graba con un dispositivo físico (circuito electrónico) gobernado por
una PC, denominado “grabador”. En la superficie de la cápsula, tiene una ventana de
cristal para borrarla con rayos ultravioleta y volverla a utilizar.
3)- OTP: Estas memorias se graban una sola vez, por el usuario, y no se pueden borrar.
Son de bajo precio y fáciles de grabar. Se justifica para prototipos finales y series cortas.
4)- EEPROM: Se graban en forma similar a las OTP y EPROM y se borran en forma
similar a la grabación, o sea eléctricamente sobre el mismo zócalo del grabador. Puede
ser programada y borrada aprox. 1.000.000 de veces. La capacidad de memoria es
limitada, con tiempo de grabado relativamente alto y elevado consumo de energía. Por
ejemplo el microcontrolador PIC 16C84 puede almacenar en su memoria de programa
EEPROM, 1 K de palabras de 14 bits y algunos bytes de datos, sin pérdida de la
información cuando se interrumpe la tensión de alimentación.
5)- FLASH: Es una de las últimas versiones de memoria no borrables. Es de bajo
consumo con posibilidad de escribir y borrar (aprox. 1000 veces) como la EEPROM
pero de mayor capacidad. Por sus mejores prestaciones, están desplazando a las
EEPROM.
Son recomendables en aplicaciones que sea necesario modificar el programa a lo largo
de la vida del producto a controlar sea por desgaste, optimización etc. Por ejemplo la
empresa Microchip T. Comercializa los microcontroladores PIC. Dentro de esta familia
estén los PIC 16C84 con memoria de programa EEPROM y los PIC 16F84 con
memoria FLASH.
Ambos microcontroladores, son similares en sus prestaciones. La memoria FLASH, es
una variante de las EEPROM.
La memoria de datos
Esta memoria debe ser de lectura / escritura (L/E) por lo que la memoria “RAM
estática” (SRAM), es la mas adecuada aunque sea volátil al eliminar la tensión de
alimentación. Hay microcontroladores que utilizan para los datos dos memorias: una
EEPROM y otra SRAM. Por ejemplo el PIC 16F84 tiene 68 bytes de memoria SRAM
para datos y 64 bytes de memoria EEPROM, también para datos. La memoria de
programa para estos chips, es de 1 K x 14 bits. De tipo EEPROM.
Están destinadas a soportar los periféricos exteriores que controlan. Son de ambos
sentidos, es decir que pueden actuar como entradas o salidas según se las programe y se
adaptan con los periféricos, manejando información paralela; se agrupan generalmente
en grupos de 8 bits, denominándose el conjunto “Puertas”. La actuación de estas puertas
es la de suministrar corriente eléctrica en el estado binario alto, con el nivel de tensión
aprox. Al de la fuente de alimentación, y absorber corriente en el estado binario bajo.
Existen modelos que soportan comunicación serie, otros disponen de líneas para
diversos protocolos de comunicación como I2C, USB etc.
Otros terminales de un microcontrolador son dos entradas para alimentación de energía
eléctrica (VDD(+) y Vss(-); una entrada para el “reinicio” o “reset”(MCLR#) y dos
entradas para el oscilador externo (osc1/CLKIN y osc2/CLKOUT); una entrada para
interrupción.
___________________________________________________________________ 6
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PRINCIPALES FAMILIAS DE MICROCONTROLADORES
Familia Intel 8051: El primer microcontrolador fue el 8048 con 8bits de datos, con
RAM interna, pero la memoria de programa era externa. En los años 80 nació el 8051,
siendo el más difundido a nivel mundial. El 8051 tiene 4 Kbytes de ROM que deben
programarse durante su construcción. El 8751 reemplazo la ROM por una EPROM. El
8031 no tiene ROM interna; el programa reside en memoria externa. Para la
comunicación con la memoria, utiliza 3 de los cuatro puertos entrada / salida. Esta
posibilidad de expansión es característica de esta familia.
___________________________________________________________________ 7
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
-Buen promedio en los parámetros: velocidad, consumo, tamaño, alimentación, código
compacto, etc.
Microchip, clasifica a sus microcontroladores en cuatro gamas a saber:
1º Gama básica: familias PIC 125xx y PIC 16C5x, con un repertorio de 33
instrucciones de 12 bits y dos niveles de pila
2º Gama media: Familias PIC 12C6xx, PIC 16Cxx y PIC 16F87x con 8 niveles de pila,
1 vector interrupción y 35 instrucciones de 14 bits.
3º Gama alta: PIC 17Cxx con 16 niveles de pila, 4 vectores de interrupción y 58
instrucciones de 16 bits.
4º Gama mejorada: PIC 18Cxxx con 32 niveles de pila, 4 vectores de interrupción y
77 instrucciones de 16 bits.
Para el caso especifico del PIC 16F84 que vamos a trabajar, dispone de 8 niveles de
pila, 1 vector de interrupción y 35 instrucciones de 14 bits (gama media)
___________________________________________________________________ 8
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
DIAGRAMA DE CONEXIONES
RA2 1 18 RA1
RA3 2 17 RAO
RA4/TOCKI 3 16 OSC1/CLKIN
MCLR# 4 PIC16X84 15
OSC2/CLKOUT
VSS 5 14 VDD
RBO/INT 6 13 RB7
RB1 7 12
RB6
RB2 8 11
RB5
RB3 9 10 RB4
OSC1 / CLKIN : Entrada externa de los impulsos reloj o conexión con el cristal de
cuarzo.
OSC2 /CLKOUT: Salida de Fosc/4 en modo osc. RC o conexión con el cristal de
cuarzo.
MCLR#: En modo grabación se introduce la tensión VPP (12 a 14 V DC.).
En funcionamiento normal, es la entrada del “reset” del PIC.
RA0- RA3 :Líneas de E / S de la puerta A (puerto A)
RA4 / TOCKI: Línea de E / S de la puerta A o entrada de impulsos de reloj para
TMR0.
RB0 / INT : Línea de E / S de la puerta B (o puertoB) o de pedido de interrupción.
RB1-RB7 : Líneas de E / S de la puerta B. (o puerto B)
VDD : Entrada tensión de alimentación (+)
VSS : Entrada tensión de alimentación(-)
Como los microcontroladores son sistemas síncronos programables, necesitan una señal
eléctrica con una frecuencia de funcionamiento fija, provista por un oscilador. Esta
señal, ingresa a través del pin OSC1/CLKIN. Los pulsos que ingresan, se dividen
internamente por cuatro, dando lugar a las señales Q1, Q2, Q3 y Q4. Las instrucciones
del programa, requieren de estos cuatro periodos para ejecutarse, denominándose éste
tiempo, periodo (ciclo) de instrucción. Por ejemplo para una frecuencia reloj de 10
MHZ el periodo resulta T =100 ns y el ciclo de instrucción es 4 x 100 = 400 ns.
Las instrucciones simples, requieren para cumplirse de dos ciclos de instrucción. Las
instrucciones de salto, necesitan cuatro ciclos.
Q1: Durante este tiempo, se incrementa el contador de programa.
Q2: Se busca el código de instrucción en la memoria de programa y se carga en el
registro de instrucciones.
Q3 – Q4 : Se produce la decodificación y la ejecución de la instrucción.
___________________________________________________________________ 9
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Como los microcontroladores PIC aplican la técnica de segmentación (pipe-line), que
consiste en realizar en paralelo las dos fases que comprenden cada instrucción
(búsqueda y ejecución), podemos decir que cada instrucción simple, se ejecuta en un
tiempo de 1 ciclo de instrucción y las de salto, en 2 ciclos
| Q1 Q2 Q3 Q4 | Q1 Q2 Q3 Q4 | Q1 Q2 Q3 Q4 | Q1 Q2 Q3 Q4 |
OSC1|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
Búsqueda 1 Ejecución 1
Búsqueda 2 Ejecución 2
Búsqueda 3 Ejecución 3
Búsqueda 4
Tipos de osciladores
Los microcontroladores PIC admiten cinco tipos de osciladores externos para aplicarle
la señal con la frecuencia de funcionamiento. El tipo de oscilador empleado, debe
especificarse en dos bits ( FOSC1 Y FOSC2 ) de la denominada “palabra de
configuración” o registro de configuración, durante el proceso de grabación del
programa, en la memoria de instrucciones del micro.
Los tipos de osciladores son los siguientes;
1)- Oscilador tipo RC.
2)- Oscilador RC interno (INTRC)
3)- Oscilador tipo LP
4)- Oscilador tipo XT
5)- Oscilador tipo HS
PIC16X84
___________________________________________________________________ 10
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PIC16X84
RESONADOR
___________________________________________________________________ 11
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
CRISTAL
MODO FRECUENCIA C1 C2
LP 32 KHZ 68 –100 pf 68 –100 pf
200 KHZ 15 –30 pf 15 – 30 pf
XT 100 KHZ 68 – 150 pf 150 – 200 pf
2 MHZ 15 – 30 pf 15 – 30 pf
4 MHZ 15 –30 pf 15 –30 pf
HS 8 MHZ 15 –30 pf 15 – 30 pf
10 MHZ 15 – 30 pf 15 – 30 pf
20 MHZ 15 – 30 pf 15 –30 pf
Cuando el microcontrolador se configura en los modos LP, XT o HS, se puede utilizar
una fuente externa para los pulsos reloj adaptada mediante una compuerta lógica y
conectada al pin OSC1. Al pin OSC2 se le suele colocar una resistencia a masa para
disminuir ruidos del sistema, pero a costa de incrementar la corriente del sistema.
PIC16X84
Como lo hemos mencionado, el puerto “A” tiene 5 líneas conectadas a 5 terminales del”
chip” y el puerto “B” tiene 8 líneas conectadas a 8 terminales. Cada línea, puede ser
configurada, por el programa grabado, como entrada o salida. Cada Terminal, tiene un
resistor interno, conectado a la fuente de alimentación (pull-up) que puede ser
conectado o desconectado, por el programa. Estos resistores se desconectan
automáticamente, si un terminal se predispone como terminal de salida. Esto es asi
debido a que las salidas tienen la posibilidad de actuar como fuente de corriente
(entregan corriente) o como sumidero (absorben corriente). Todos los resistores de
“pull-up” se conectan o desconectan al mismo tiempo (no existe un comando que los
conecte independientemente.
Como salida, un terminal del puerto “A”, puede absorber 25 mA del circuito exterior o
entregar 20 mA al circuito exterior, pero en total, no se debe exceder de 80 mA
absorbidos y 50 mA entregados.
Para el puerto “B”, las características son similares por Terminal individual, pero en
total no se puede exceder de los 150 mA absorbidos y 100 mA entregados.
Terminales no utilizados
___________________________________________________________________ 12
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PIX16X84
Terminales no utilizados
El Terminal nº 3
PIX16X84 PIX16X84
Puerto de Terminal 3
salida
normal
Entradas:
En el primer programa que desarrollamos, introducimos los datos
directamente. En la práctica el microcontrolador se comunica con el mundo exterior, a
través de señales externas digitales o analógicas. De igual forma, son las señales de
salida, que gobiernan el proceso controlado. Solamente analizaremos las señales
digitales para el PIC16X84.
___________________________________________________________________ 13
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
A) Sin pulsar: entrada en VDD (+) = 1 B) Sin pulsar: entrada en cero volt. = 0
Pulsando: entrada a cero volt. = 0 Pulsando: entrada en VDD (+) =0
Contactos o interruptores:
Rebotes
Pulsación
Los dispositivos electromecánicos, al cerrar, provocan rebotes que pueden durar algunos
milisegundos. Si no se toma ninguna acción, pueden provocar inestabilidad, en la
mayoría de los circuitos digitales.
___________________________________________________________________ 14
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
2)- Solución por circuito:
Circuito (B): El circuito representa un flip flop tipo RS con puertas NAND, de manera
tal que este circuito cambia su salida, apenas detecta el 1° flanco.
___________________________________________________________________ 15
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Circuitos conectados a las salidas del microcontrolador
Diodos Leds :
No se puede utilizar
esta salida para R3
Se puede utilizar esta
salida para R3
Circuito (A): Cuando la salida del microcontrolador es una tensión positiva (uno
lógico), entrega una corriente al diodo Leds, limitada por la resistencia eléctrica. El
diodo Leds, emite luz.
Circuito (B): Cuando la salida del microcontrolador provee una tensión baja (0+), por
el diodo Leds circula una corriente, dado que su ánodo, tiene aplicada una tensión
positiva respecto a la masa o terminal común.
___________________________________________________________________ 16
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
IBsat = Icsat/ βsat V (+)= VDD =+5 volt. : Tensión de salida del
microcontrolador
RB = ( V(+) – Vbsat )/ IBsat
A)- Actuando las salidas sobre relés, nos permite controlar cargas mucho mayores,
dados que las corrientes de carga pasarán por los contactos del relé. Por ejemplo poner
en marcha un motor eléctrico a través de un contactor. Un “uno” en la salida del micro
(V+) produce el accionamiento del relé. Un “cero” (0+), el relé esta desactivado.
B) Este es el caso de activación por microrelés con doble contacto. En este caso, el
micro relé se activa con un “cero” en la salida del microcontrolador y se desactiva con
un “uno lógico”.
En este circuito, se utiliza un diodo Leds para indicar la activación del micro relé; el
otro se utiliza para la aplicación.
Cuando la salida del microcontrolador vale “1” (V+), el Leds del opto acoplador se
enciende y activa al fototransistor a la saturación, entregando entonces un “0” (0+)
lógico al periférico.
Cuando la salida del microcontrolador vale “0” (0+), el Leds esta apagado y el
fototransistor esta desactivado (corte); se entrega un “1” (VCC+) al periférico.
___________________________________________________________________ 17
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Los TRIAC son dispositivos electrónicos que dejan pasar una parte del semiciclo
positivo o negativo, en función de un impulso de disparo aplicado a su compuerta. En el
caso del circuito del ejemplo, resulta un control de carga eléctrica “por ciclos enteros”.
Cuando la salida del microcontrolador vale “1”, el diodo Leds se enciende ; el fototriac
se activa recién cuando la tensión alterna de la carga pasa por cero, y de esta manera le
inyecta un impulso de corriente a la puerta del triac de potencia que controla la carga. El
resistor 39 ohm y capacitor conectado a el (10nf), protegen al triac frente a sobre
tensiones y dv/dt.
Otras aplicaciones:
___________________________________________________________________ 18
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Este microcontrolador, admite cinco diferentes tipos de reset:
1)- Reset al encendido “POR” (Power On Reset), hasta estabilizar VDD y el oscilador;
Si esta habilitado, se logra conectando el terminal de reset (MCLR#) con el terminal de
la entrada de la tensión de alimentación VDD.(se conecta a través de una resistencia
eléctrica)
2)- Reset por pulsación externa (Master clear); se logra, llevando a masa el terminal
de reset.
3)- Reset por pulsación externa (Master Clear), cuando el microcontrolador esta en el
estado de bajo consumo (modo sleep). Se logra de la misma forma que el reset nº2
4)- Actuación del circuito de vigilancia “perro guardián” (watchdog) durante la
operación normal (si esta habilitado).
5)- Actuación del circuito de vigilancia “perro guardián” durante el modo de reposo
(modo slepp), si esta habilitado.
Un circuito sencillo que admite un reset al encendido” (si esta habilitado) y reset por
pulsación externa (2 y 3), es el siguiente:
1 18
2 PIC16X84 17
3 16
4 MLCR 15
5 14
6 13
7 12
Pulsador 8 11
9 10
Circuito práctico
___________________________________________________________________ 19
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
18
4 16
5 15
7 14
PIC16X84
CI
7805
___________________________________________________________________ 20
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROGRAMACIÓN DE LOS MICROCONTROLADORES
Introducción:
Cuando se decide realizar un automatismo o un subsistema de un sistema más
complejo (por ejemplo formando parte de un circuito de un aparato electrónico), se debe
establecer la combinación adecuada del “hardware” (circuitos) y del “software”
(programa). Estos puntos, son los que involucran el diseño con microcontroladores.
Los microcontroladores, permiten configurar un sistema que cumpla con los requisitos
del problema a resolver, gracias a una característica fundamental que comparten con las
computadoras convencionales: que son “programables”. Por ello, diseñar sistemas de
control con microcontroladores, exige el dominio de dos especialidades
fundamentales: la primera es la especialidad o destreza para seleccionar y
conectar componentes electrónicos (diseñar y realizar el circuito), y la segunda, es
el conocimiento de las técnicas de programación. Ambas especialidades, logran que
el microcontrolador actúe según los requisitos que el problema a resolver propone.
Un aspecto importante que tenemos que tener siempre presente, cuando realicemos el
programa, es que todos los sistemas programables, no procesan la información en forma
continua (como los sistemas analógicos), sino que lo hacen en pequeños periodos de
tiempo, por lo que deben organizar sus tareas en forma secuencial en el tiempo.
Los pasos básicos en la creación y ejecución de un programa, en un sistema
programable en Gral., son los indicados en el diagrama en bloques de la siguiente
figura:
Diseño de un
automatismo con
microcontroladores
Interpretar el
problema creando
diagrama de flujo
___________________________________________________________________ 21
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Lenguajes de programación:
Dado que programar en lenguaje de maquina (de unos y ceros) resulta muy
complicado, es conveniente utilizar lenguajes nemotécnicos, más fáciles de entender.
Existen varios lenguajes que utilizan las computadoras modernas. Algunos de ellos se
utilizan para resolver problemas de carácter administrativo, como lo es el lenguaje
COBOL. Otros lenguajes, ayudan a crear programas de utilidad para Ingeniería, como
FORTRAN , PASCAL etc.
Cuando se trata de resolver problemas de “control industrial” con microcontroladores,
cuya capacidad de memoria de programa resulta restringida, conviene utilizar lenguajes
de bajo nivel o más cercano al dispositivo. Él más conveniente, por requerir menos
instrucciones para ejecutar tareas especificas, es el” lenguaje ensamblador o Asembler”.
Este lenguaje esta compuesto por un conjunto de palabras sencillas, que permiten
describir las acciones básicas, que ejecuta la UCP del microcontrolador.
Uno de los inconvenientes de este lenguaje, es que cada familia de microcontroladores,
tiene su propio lenguaje ensamblador. No obstante esta dificultad, aprendiendo a
programar en “ensamblador” para un determinado tipo de microcontrolador, le permite
transferir esta especialidad, a otro diferente.
Otros lenguajes de alto nivel que se utilizan en la programación de microcontroladores
son el lenguaje “C” y el lenguaje “Basic”.
Cuando se utiliza uno de estos lenguajes, es necesario otro programa de computadora
para que lo traduzca al sistema binario, de manera tal que se pueda introducir en la
memoria de instrucciones del microcontrolador. Estos programas se denominan
“ensambladores” o “compiladores” y sirven para el microcontrolador específico o para
una determinada familia de microcontroladores. En el caso específico del
microcontrolador PIC tenemos:
___________________________________________________________________ 22
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
b)- Enlazador: Crea, a partir del archivo relocalizable y otros archivos del módulo
“control de librerías”(lib), un archivo binario ejecutable. Éste código, es el que ejecuta
directamente el microcontrolador.
c)- Control de librerías (lib): Éste módulo permite crear archivos binarios que pueden
ser unidos (enlazados) con otros bloques de código binario, lo que facilita la
reutilización de partes de programas generados en otros proyectos. El uso de librerías
simplifica el desarrollo de programas de gran tamaño y complejidad.
Ensamblador Enlazador
básico Linker
Código de
Librerías librería
Archivo Programa
ejecutable ensamblador
Estos son los pasos concretos que debemos seguir para obtener el programa ejecutable
que luego debe grabarse en la memoria del microcontrolador.
___________________________________________________________________ 23
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Fijar
objetivos Grabación
microcontrolador
si
si
Detectar Depurar
errores
no no
si si
Depurar Depurar
no no
Producto final
___________________________________________________________________ 24
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Archivos generados por el programa ensamblador:
___________________________________________________________________ 25
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
___________________________________________________________________ 26
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Este registro consta de 8 bits y el valor que toma cada bit (1 ó 0), nos determina el
estado de los componentes internos del microcontrolador. Durante la ejecución del
programa, mediante instrucciones, los bits de este registro son consultados y su valor
puede modificar el desenvolvimiento del programa en ejecución, por medio de rutinas
preparadas a ese fin Estos bits se pueden modificar mediante instrucciones.
___________________________________________________________________ 27
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
IRP: Selección de bancos de memoria direccionamiento indirecto
GIE: Activación global de interrupciones.
La memoria de programa:
0004 H VECTOR DE
INTERRUPCIONES
0005 H MEMORIA DE
--------- PROGRAMA
--------- (1 K )
03FF H
La memoria de datos (RAM ) del PIC16F84, esta compuesta por los registros de
propósitos específicos (SFR ) y los registros de propósitos general (GPR ). La figura
muestra un esquema simplificado de esta memoria:
___________________________________________________________________ 28
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
De la misma forma, los bits de estos registros especiales, tienen distintas funciones, que
las explicaremos, mas adelante.
Los registros de propósito general, son en total 68 para el PIC16F84 y están mapeados
sobre el banco cero. Se los utiliza para guardar temporalmente datos que ingresan de los
puertos o resultados de operaciones de la UAL.
___________________________________________________________________ 29
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Por ejemplo el PIC16F84 dispone de una memoria EEPROM con una capacidad de
almacenamiento de 64 bytes, comprendidas entre las direcciones 00 H hasta la 3F H.
Para acceder a estos registros, hay que utilizar los registros especiales de control
EEDATA, EEADR, EECON1 EECON2. El proceso de escritura de esta memoria es
lento y dura unos 10 ms. Mas adelante veremos la aplicación de estos registros.
Los puertos, son los elementos por los cuales se introduce o extrae información del
microcontrolador. En el caso del PIC 16F84, se disponen de dos puertos denominados A
y B. Pasamos a detallar, brevemente, cada uno de estos puertos.
Puerto A: Este puerto consta de 5 líneas que pueden utilizarse como entradas o como
salidas, dependiendo del tipo de aplicación. Se denominan RA0, RA1, RA2, RA3, RA4.
La línea RA4 puede utilizarse también, como entrada de pulsos de reloj aplicados al
temporizador / contador interno TMR0.
___________________________________________________________________ 30
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
RA0
Mundo RA1
exterior RA2
RA3
RA4
05H
| direc | Registro PUERTO A |
Banco cero de memoria RAM
RB0
RB1
RB2
Mundo
RB3
exterior
RB4
RB5
RB6
RB6
RB7
06H
0 1 1 0 1
TRIS A
___________________________________________________________________ 31
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PUERTO B
E E E S E E S S
1 1 1 0 1 1 0 0
TRIS B
LA PALABRA DE CONFIGURACIÓN
___________________________________________________________________ 32
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Cuando colocamos un “1” el “perro guardián esta activado”. Si colocamos un “0”,esta
desactivado. Cuando esta activado, para evitar que produzca reset cuando el programa
funciona correctamente, es necesario anular el final de la temporización, con
instrucciones al efecto, ubicadas en puntos estratégicos del programa.
FOSC1 – FOSC2 : Selección del oscilador utilizado. Estos bits deben ser cargados con
“1” 0 “0” según el tipo de oscilador que se va a utilizar para generar los pulsos reloj,
necesarios para el funcionamiento del PIC.
1-1 : Oscilador RC
1-0 : Oscilador HS.
0-1 : Oscilador XT
0-0 : Oscilador LP
W MPX
8 MPX:multiplexor
op1 op2
Registro de estado
ALU
Z DC C
acarreo
8
___________________________________________________________________ 33
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
W, es el registro de trabajo o registro acumulador. Como hemos dicho anteriormente es
el más utilizado y ocupa un lugar físico especial. Los demás registros especiales del
microcontrolador, se los localiza en la memoria de datos RAM, en los bancos 0 y 1
entre las direcciones 0x 00 y 0x 0B.
0x: indica que la dirección esta en hexadecimal, o sea 0x 0B > 00001011(binario),
El programa que vamos a realizar, requerirá de tres instrucciones que son mover, sumar
y restar. A continuación analizaremos cada una de ellas en su lenguaje nemotécnico.
movf f,d : mueve el contenido del operando “fuente” o sea “f” y que es una posición de
la memoria de datos y lo deposita en W si d=0 o´ en el propio fuente si d = 0.
Cuando se realiza esta operación, se activa el señalizador de cero FZ (ó Z) ubicado en el
registro especifico (SFR) ESTADO, en el bit n°2. Si Z = 1 el resultado es cero. Si Z =0
el resultado es distinto de cero. En este caso moverse a si mismo cuando d = 1, se utiliza
para saber si el contenido del registro fuente, vale cero o no.
addwf f,d : suma el contenido del registro W con el de “f” y deposita el resultado en
W si d = 0, mientras que lo deposita en “f” si d = 1.
El la operación de suma, también interviene el bit nº0 (C), que indica si hubo acarreo. Si
C=1, hubo acarreo; caso contrario, no lo hubo.
En la operación de resta, el bit “C” también actúa como señalizador de “llevada”. En
este caso la correspondencia es inversa (si vale 1 no hay llevada y si vale 0 si).
A continuación realizaremos este programa con variantes, utilizando las instrucciones
para “mover” y para sumar.
___________________________________________________________________ 34
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
LIST p= 16F84 ;Indica el modelo de PIC que se usa
;Es una directiva del ensamblador.
; --------------------------------------------------------------------
;Zona para etiquetas.
OPERANDO1 EQU 0x0c ;Define la posici¢n del operando1
OPERANDO2 EQU 0x0d ;Define la posición del operando2
RESULTADO EQU 0x0e ;Define la posición del resultado
;---------------------------------------------------------------------
;---------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
;PRIMERO2.ASM Optimizaci¢n del programa Primero.asm que calcula la
;suma de 2 posiciones de memoria y deja el resultado en una tercera.
;Estas posiciones son 0x0c para operando1, 0x0d para operando2 y 0x0e
; para el resultado.
;La optimización consiste en ahorrar una instrucción al aprovechar el
;hecho de que la suma es una operación conmutativa.De esta manera tras
;cargar en W el operando 2, se puede realizar directamente la suma.
; --------------------------------------------------------------------
;Zona para etiquetas.
OPERANDO1 EQU 0x0c ;Define la posici¢n del operando1
OPERANDO2 EQU 0x0d ;Define la posici¢n del operando2
RESULTADO EQU 0x0e ;Define la posición del resultado
;---------------------------------------------------------------------
;---------------------------------------------------------------------
___________________________________________________________________ 35
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
movlw 02 ;2 --> W
movwf OPERANDO2 ;W --> Operando2
addwf OPERANDO1,0 ;W + operando1 --> W
movwf RESULTADO ;W --> resultado
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;---------------------------------------------------------------------
movlw 02 ; 2 -> W
movwf OPERANDO2 ; W -> OPERANDO2
movlw 05 ; 5 -> W
movwf OPERANDO1 ; W -> OPERANDO1 ( Operando1 esta en W y
. ; en 0x0C)
addwf OPERANDO2,1 ; OPERANDO2 + W -> Operando2
LIST 16F84
ORG 0
movlw 0x05
movwf 0x0c
movlw 0x02
movwf 0x0d
addwf 0x0c,1
END
___________________________________________________________________ 36
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
TABLA REPERTORIO DE INSTRUCCIONES PIC16F84-PIC16F87x
INSTRUCCIONES DE “SALTO”
___________________________________________________________________ 37
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROGRAMACIÓN DEL PIC CON ENTRADAS Y SALIDAS EXTERIORES
MEMORIA RAM
DIREC BANCO 0 BANCO1
00
01
02
03 ESTADO ESTADO
04
05 PUERTA A TRIS A
06 PUERTA B TRIS B
07
-----
-----
7F
Para configurar las líneas de estos puertos como entradas o salidas, existen dos registros
TRIS A y TRIS B, que se encuentran en la misma dirección de los registros PUERTA A
y PUERTA B, pero en el banco 1 de la memoria de datos.
Colocando un “uno”(1) en los bits de TRIS A o TRIS B, se configuran como “entradas”
las líneas de PA o PB. Serán “entradas” aquellas líneas que tengan el bit en “1” y
“salidas”, las que tengan en “0”, en los registros TRIS A y TRIS B.
Cuando se conecta la alimentación del PIC, o se reinicializa su funcionamiento
mediante un “RESET”, automáticamente se tiene acceso al banco cero. Para pasar al
banco 1, debemos poner a “1” el bit 5 del llamado “REGISTRO DE ESTADO”, que se
encuentra duplicado en los dos bancos, en la dirección o posición de memoria 03 (Hex).
Por ejemplo, si queremos que todas las líneas del puerto A sean entradas, debemos
cargar con “1” todos los bits del registro TRIS A; y si queremos que sean salidas todas
las líneas del puerto B, debemos cargar con “0” todos los bits del registro TRIS B.
Como aplicación, vamos a desarrollar un programa, donde intervienen variables
exteriores tanto de entrada como de salida del microcontrolador.
Para ello vamos a introducir tres nuevas instrucciones a saber:
___________________________________________________________________ 38
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
bsf f,b: Pone a “1” el bit “b” del operando fuente “f”, que es una posición de la
memoria de datos o registros.
bcf f, b: Pone a “0” el bit “b” del operando fuente “f”
PROBLEMA : SEGUNDO.ASM
Mediante los tres interruptores, se introduce un numero binario de tres bits , de forma
que si el interruptor esta abierto, coloca un “1” y si esta cerrado coloca un “0”.
Realizar un programa con las instrucciones del PIC (nemónica), denominado
“SEGUNDO:ASM” que comienza leyendo el número binario introducido por los
interruptores, luego suma 2 unidades a este valor y visualiza en los diodos Leds el
resultado binario de la operación.
Los diodos Leds apagados representan un “0” y encendidos un “1”.
Solución:
Resulta siempre conveniente en todos los casos, realizar el diagrama de flujo, que nos
permita presentar el desarrollo del programa especialmente cuando este presenta
bifurcaciones como ser saltos condicionales, incondicionales, interrupciones, etc.
Luego con un editor de textos (utilizaremos el DOS del sistema operativo de la PC),
crearemos un archivo de textos, con nombre “SEGUNDO.ASM” .
En este archivo se debe indicar el tipo de PIC que se va a utilizar y el sistema de
representación de números que se va a emplear, para que el “programa ensamblador”
pueda interpretarlo; también se debe indicar, donde se colocará la primera instrucción
dentro de la memoria de instrucciones del PIC. Se colocaran etiquetas, si se quiere
___________________________________________________________________ 39
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
trabajar con ellas y luego se desarrollara el programa en el lenguaje ensamblador,
resultando conveniente agregar a cada instrucción, el comentario de su finalidad, dentro
del programa.
Diagrama de flujo de “SEGUNDO:ASM”
Comienzo
Le sumo 2 a la lectura
puerta entrada
Defino
etiquetas El resultado de la suma lo
presento en la salida
Defino puertas
entrada/salida Salto incondicional para
repetir lectura de la
entrada
Realizo lectura
puerta entrada
FIN
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;---------------------------------------------------------------------
___________________________________________________________________ 40
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
bsf ESTADO,5 ;Pone a 1 el bit 5 de ESTADO para
. ;direcc
;la pagina 1 de la memoria de datos.
movlw 0xff ;W <-- FF(Hex)
movwf PUERTAA ;W --> TRISA
movlw 0x00 ;W <-- 0
movwf PUERTAB ;W -->TRISB (lineas salida puerto B)
bcf ESTADO,5 ;Pone a 0 el bit 5 de ESTADO pasando a
;acceder al banco 0.
Tenemos tres métodos prácticos para confeccionar el programa que resuelva este tipo
de automatismo.
El primero método, consiste en resolver la función lógica que cumple con el
automatismo propuesto, utilizando instrucciones que realizan operaciones lógicas entre
registros (AND ,OR y NOT).
El segundo método, consiste en guardar en la memoria de datos RAM, “la tabla de la
verdad” del automatismo combinacional. Utilizando el direccionamiento indexado e
indirecto, los valores lógicos de las variables de entrada, se convierten en direcciones,
que direccionan la “tabla de la verdad” y presentan su contenido en las salidas.
El tercer método, consiste en realizar la tabla de la verdad en la memoria de programa,
mediante la llamada a una rutina, con la instrucción “call”. El retorno de la rutina, trae
el valor lógico de la salida, mediante la instrucción “retlw”.
Para ello, utilizaremos las siguientes instrucciones del repertorio disponible del PIC
16X84.
Nota: Las operaciones lógicas presentadas, se realizan entre los registros direccionados
(f) y el registro de trabajo W encolumnados bit a bit.
rrf f,d : Rotación hacia la derecha, (a través del señalizador de acarreo C), del registro
f. El resultado queda en W si d=0 . El resultado queda en f si d=1.
___________________________________________________________________ 41
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
rlf f, d: Es similar al caso anterior pero rotación hacia la izquierda.
A = A0 = 4 KVA
B = A1 = 6 KVA
C = A2 = 8 KVA
D = A3 = 12 KVA
Para resolver, por programa la función lógica “ B0”, debemos tener en cuenta que las
variables lógicas A0....A3 se encuentran en distintas columnas (orden de bit) por lo
cual para poder realizar las operaciones AND y OR , deberemos realizar los
corrimientos de esta variables, para que queden encolumnadas. Para ello deberemos
ingresarlas en registros auxiliares, previamente desplazadas por ejemplo a la columna de
la variable A0 y luego proceder con las operaciones lógicas que indique “la función
lógica “ a resolver.
Como primer paso a la resolución, plantearemos el diagrama de flujo que nos permitirá
posteriormente desarrollar el programa para ser ejecutado por el microcontrolador
El programa, lo desarrollaremos sin definir etiquetas.
___________________________________________________________________ 42
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Diagrama de flujo de “MOTORES1.ASM”
Comienzo
inicialización
Defino puertas
Entrada/ salida
Realizo lectura
puerta de entrada
Realizo
operaciones
lógicas entre las
variables
Fin del
programa
___________________________________________________________________ 43
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Desarrollamos a continuación el programa, sin definir etiquetas:
; MOTORES1.ASM
; ===============
; B0 = A0.A1.A2 + A1.A3 +A2.A3
;Programa que permite controlar la cantidad de motores que se
;conectan a una barra de alimentación eléctrica, que tiene
;limitaciones respecto a la m áxima potencia eléctrica entregada.
LIST P=16F84
RADIX HEX
ORG 0
goto INICIO
ORG 5
___________________________________________________________________ 44
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
DIRECCIONAMIENTO DE LA MEMORIA DE DATOS
Para los microcontroladores PIC de la gama media, la memoria de datos esta organizada
para alojar un máximo de 4 bancos de 128 bytes cada uno. Los bits RP1 y RP0 del
registro de ESTADO, se utilizan para seleccionar el banco y se necesitan otros 7 bits,
para elegir una de las 128 posiciones del banco seleccionado.
Para el caso del PIC 16F84, solamente tiene disponibles dos bancos; el banco 00 y el
01.
(Banco 0 y banco 1). El banco 0 tiene en sus primeras direcciones, los “registros de
propósito especifico” SFR, en una cantidad de 11, ubicados entre las direcciones 0x 00
y 0x 0b (la dirección 0x 07, no es operativa). Desde la dirección 0x 0c hasta la 0x 4f
dispone de 68”registros de propósito general” GPR. Todos estos registros son de 1
byte.
El banco 1 dispone también de la misma cantidad de “SFR” y los “GPR” están
mapeados sobre el banco 0, es decir que si nos encontramos en el banco 1 y queremos
direccionar un “GPR” desde este banco, accederemos a los “GPR” del banco 0. Como
conclusión El PIC16F84, dispone solamente de 68 registros de propósito general.,
accesibles desde el banco 0 ó banco 1.
Como este PIC, solamente dispone de dos bancos, siempre RP1= 0 y RP0 = 0 para
trabajar sobre el banco 0 y RP0 = 1 para pasar al banco 1. Veamos un esquema
simplificado de esta memoria para el PIC16F84 (memoria de datos RAM Volátil)
REGISTRO DE ESTADO
IRP RP1 RP0 TO# PD# Z DC C
Bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
7f
___________________________________________________________________ 45
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Direccionamiento directo:
13 8 7 6 0
CÓDIGO OPERACIÓN D F(DIRECCIÓN DEL REGISTRO)
D= 1 El registro destino es f
D= 0 El registro destino es W
Ejemplo: add f,d como ser: add 0x0c,1
add: Código de operación (6 bits) , sumar a W el contenido del registro fuente 0x0c
f≡ 0x0c: dirección del registro fuente (7 bits), en la memoria de datos (GPR)
d≡1: registro destino (1bit) , en este caso el resultado se deposita en 0x0c
Direccionamiento indirecto:
(REG. ESTADO)
IRP
(REGISTRO FSR)
7 6 0
___________________________________________________________________ 46
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Veremos a continuación, una aplicación de direccionamiento indirecto.
Comienzo
Cargo el valor de W
Inicialización en registro FSR
(Direccionamiento
Indirecto)
Defino entradas y
salidas
Cargo en W el
Cargo tabla en valor del registro
GPR a partir de INDF
0x0c
Cargo el valor de
W en el registro de
salida
Cargo W con
valores de entrada
Salto
incondicional
Sumo a W literal 0c
(direccionamiento
indexado)
FIN
___________________________________________________________________ 47
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
;MOTOREST.ASM
movlw 0x01
movwf 0x13
movwf 0x16
movwf 0x17
movwf 0x18
movwf 0x19
movwf 0x1a
movwf 0x1b
Mas adelante, veremos otro método alternativo (3°), para resolver automatismos
combinacionales, con instrucciones especiales como son las llamadas a rutinas y
retornos (instrucciones call y retlw k).
___________________________________________________________________ 48
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
;INCF~IND.ASM
;programa que permite, utilizando el direccionamiento indirecto,
;borrar los registros de proposito general "GPR"
;desde las direcciones 0x0c hasta la 0x20 inclusive.
;(21 registros)
LIST P=16F84
RADIX HEX
ORG 0
___________________________________________________________________ 49
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Permiso de habilitación con las instrucciones de salto condicionada
Con las instrucciones btfss y btfsc podemos utilizarlas para efectuar habilitaciones
externas para la ejecución del programa principal o también ingresar variables
“pulsantes” (por ejemplo provenientes de pulsadores mecánicos), para cualquiera de los
pines correspondientes al puerto A y B, cuando estos, están configurados como
entradas.
Ejemplo 1: Porción de programa que mediante el bits RA0, configurado como entrada,
autoriza (RA0=1) o no autoriza (RA0=0) la ejecución del programa principal.
HABILITO btfss 0x05,0 ;reviso bit 0 de 0x05 y salto si vale uno (1)
goto HABILITO ;bucle infinito si vale cero (0)
mov --------------- ; continua el programa
------------------
Ejemplo 2: Porción de programa donde se introduce una habilitación pulsante en RB1,
configurado como entrada, permitiendo la ejecución del resto del programa; Para la
habilitación, la entrada primero debe pasar a uno y luego a cero.
ENTRADA btfss 0x06,1 ; reviso bit1 de 0x06 y salto si vale uno (1)
goto ENTRADA ; bucle infinito si vale cero (0)
btfsc 0x06,1 ; reviso bit1 de 0x06 y salto si vale cero
goto ENTRADA ; nuevamente bucle infinito si vale uno (1)
movf ----------- ; continua el programa
--------------------------
Revisando llave de habilitación y pulsadores para ejecutar diversas acciones
Con las instrucciones de salto condicionado btfss y btfsc puede crearse un programa
que revise el estado de varios pulsadores mecánicos, cuyos accionamientos, ejecutan
distintas acciones, previa habilitación de una llave de contacto.
Ejemplo 3: Porción de programa que revisa una llave RA0 que habilita a dos
pulsadores para accionar un motor con giro horario (RA1) o con giro antihorario (RA2)
HABILITO btfss 0x05,0 ;reviso bit 0 de 0x05 y salto si vale uno (1)
goto HABILITO ;bucle infinito si vale cero (0)
btfsc 0x05,1 ; reviso bit1 de 0x05 y salto si vale cer0
goto giro_horario ; paso a rutina girar motor sentido horario
btfss 0x05,2 ; reviso bit2 de 0x05 y salto si vale uno
goto HABILITO ; reviso llave de habilitación y pulsadores
goto giro_antihorario ; a rutina girar motor sentido antihorario
___________________________________________________________________ 50
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROYECTO : SALTOS.ASM
Comienzo
no
RA0
=1
Inicialización ?
si
Defino
entradas/salidas RA0 no
=0
?
Si
Borro contador y lo
cargo nuevamente
no
Incremento
RA4 contador
no =1 =10 ?
si
?
Si
Salida=FF
no RA4 y salto a contar nuevamente
=0
?
Si
Fin
Borro salidas
___________________________________________________________________ 51
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROGRAMA : SALTOS.ASM
; saltos.asm
; programa que cuenta hasta 10 pulsos por la entrada RA0 (en
descenso),
; previa habilitacion con RA4 (pulso en bajada). Cuando se llega a la
;cuenta final la salida (RB0....RB7)pasa a 1(FF), y se inhabilita la
cuenta. Para volver a contar, debemos nuevamente pulsar RA4.
LIST P=16F84
RADIX HEX
estado equ 0x03 ;defino etiquetas de registros e
entrada equ 0x05 ;instrucciones
salida equ 0x06
contador equ 0x0c
#define borrar clrf
ORG 0 ;prox. instrucc. cargar en 000
GOTO INICIO
ORG 5 ; prox. Instrucc. en 005
___________________________________________________________________ 52
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROYECTO: CONTROL VAGONETA
Carga Fin de
Fin de carrera
carrera Vagoneta derecho
izquierdo Mov. Izquierda Mov. Derecha RA3
RA3 RB6 (1) RB7 (1) (1)
(1)
Entradas de mandos
___________________________________________________________________ 53
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Diagrama de flujo automatismo vagoneta.asm
Comienzo
Defino
entradas y
salidas
REVISO
Anulo salidas
RB6=RB7=0
Habilit.
No (0) RB0
Si (1)
Mov. Si (1)
Derecho
RA1
No (0)
No (0) Mov.
Izquierdo
RA0
IZQUIERDA Si (1) DERECHA
CARGA DESCARGA
No (0) No (0)
Cargado Descargado
RB1 RB2
Si (1) Si (1)
END
___________________________________________________________________ 54
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
;VAGONETA.ASM
;Automatismo para el movimiento de una vagoneta que se desplaza hacia
;la izquierda, carga y vuelve a la derecha a descargar.Despues de
;descargar, vuelve a la izquierda a cargar nuevamente.Las entradas
;son:habilitacion RB0(1,pulsador mov.izquierda RA0(1,pulsador
;movimiento derecha RA1(1),pulsador de parada RA2(1),fin de carrera
;izquierdo RA3(1), fin de carrera derecho RA4(1), carga completa
;RB1(1),descarga completa RB2(1).Las salidas son: Accionamiento para
;el movimiento a la izquierda RB6(1), accionamiento para el movimiento
;a la derecha RB7(1).El pulsador de parada detiene el automatismo
;bajo cualquier condicion: mov.izquierda, mov. derecha, esperando
;cargar,esperando descargar; su accionamiento pasa a revisar la llave
;de habilitacion y los pulsadores de movimientos.
LIST P=16F84
ORG 0
goto INICIO
ORG 5
___________________________________________________________________ 55
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
RESOLUCIÓN DE UN AUTOMATISMO LÓGICO SECUENCIAL
Alarma
Rebose
salidas Lleno
Vacio
B1 bomba1
entradas B2 bomba2
C
B1 B2
B
Proceso :
Se trata de controlar el nivel de líquido de un depósito, utilizando tres sondas detectores
de niveles A, B y C y dos bombas B1 y B2, con indicadores de nivel y alarma por falla
___________________________________________________________________ 56
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
en los detectores. En este proceso, tenemos desde el punto de vista con el mundo
exterior, los tres tipos de señales principales de un automatismo lógico:
-Entrada de la información, a través de los “SENSORES”.
-Actuación sobre los elementos finales denominados “ACTUADORES”.
-Señalizadores del proceso, denominados “INDICADORES”.
Actuadores e indicadores:
Estos representan las salidas del microcontrolador que actuarán sobre las bombas de
líquidos electromecánicas, que se activarán o desactivarán en las siguientes condiciones
propuestas:
Nivel del líquido en ascenso
-Si el nivel del líquido no supera la sonda “A”, las dos bombas estarán activadas y se
indicará “VACIO”.
-Cuando se supere el nivel “A” desaparecerá la indicación “VACIO”; las dos bombas
seguirán funcionando.
-Cuando se llegue al nivel “B”, la bomba “B2” se desactivará y se indicará “LLENO”.
La bomba “B1” seguirá activada.
-Cuando se llegue al nivel “C”, la bomba “B1” se desactivará, quedando ambas bombas
fuera de servicio. El indicador señalizará “REBOSE”.
___________________________________________________________________ 57
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Salidas: RB0 => B2 ; RB1 => B1; RB2 => VACIO ; RB3 => LLENO
RB4 => REBOSE ; RB5 => ALARMA
(RB5) ALARMA
(RB4) REBOSE
A (RA2)
(RB3) LLENO
Entradas PIC16F84 Salidas
B (RA1) (RB2) VACIO
(RB1) bomba B1
C (RA0)
(RB0) bomba B2
A continuación realizaremos las tablas de la verdad para las dos condiciones: en subida
y en bajada.
Tabla de la verdad en subida
___________________________________________________________________ 58
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Con señalización “VACIO” , se pasa al secuencia “líquido en ascenso
DIAGRAMA DE FLUJO
Realizaremos a continuación, el diagrama de flujo que nos permitirá determinar el
programa que, deberá ejecutar la CPU del microcontrolador, para cumplir con los
objetivos del automatismo.
Valor de Valor de
tabla en W SI NO tabla en W
Rebose
?
Cargo la Cargo la
salida con salida con
W W
NO SI SI NO
Vacío Rebose
? ?
FIN
___________________________________________________________________ 59
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Desarrollamos a continuación el programa, en archivo de texto, denominado
“NIVELTAN.ASM”, escrito en lenguaje Asembler, sin definir etiquetas.
;NIVEL TAN.ASM
LIST P=16F84
RADIX HEX
; TABLA ASCENDENTE
; ----------------
movlw 0x07 ;Guardo tabla Nø1 ascendente
movwf 0x0c ;a partir de la direcc. 0x0c
movlw 0x20 ;hasta la direcc. 0x13
movwf 0x0d
movwf 0x0e
movwf 0x0f
movwf 0x11
movlw 0x03
movwf 0x10
movlw 0x09
movwf 0x12
movlw 0x18
movwf 0x13
; TABLA DESCENDENTE
;------------------
___________________________________________________________________ 60
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
movwf 0x1b
___________________________________________________________________ 61
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
03FF H
0400 H
NO
IMPLEMENTADO
1FFF H 12 0
PC
13 0
NIVEL 1
PILA
(Stak)
NIVEL 8
De la misma manera que todos los registros específicos que controlan la actividad del
procesador, el contador de programa esta implementado sobre dos posiciones de la
memoria RAM de datos. Cuando se escribe el contador de programa como resultado de
una operación de la ALU, los 8 bits de menor peso del PC residen el registro PCL que
ocupa repetido, la posición 2 de los dos bancos de la memoria RAM. Para tener acceso
y modificar los bits de mas peso del contador de programa PCH <12 : 8>, lo hacemos
con los 5 bits de menor peso del registro PCLATH, que ocupa la posición “0A” de los
dos bancos de memoria RAM.
En las instrucciones de salto incondicional GOTO y CALL de la gama media, los 11
bits de menor peso del PC provienen del código de instrucción y los otros dos, de los
bits PCLATH 3 y 4.
___________________________________________________________________ 62
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Con los 11 bits que se cargan en el PC desde el código de instrucción GOTO y CALL,
se puede direccionar una página de 2 K de la memoria. Los bits restantes del PC el 11 y
12 tienen la misión de apuntar una de las cuatro paginas de memoria y, en los modelos
PIC que alcanzan este tamaño, dichos bits proceden del PCLATH, bits 3 y 4.
La pila:
La pila es una zona aislada de las memorias de instrucciones y datos. Tiene una
estructura LIFO, en la que el último guardado, es el primero en salir. Tiene 8 niveles de
profundidad cada uno con 13 bits. Funciona como un “buffer” circular, de manera que
el valor que se obtiene al hacer el “desempilado (pop) es igual al que se obtuvo en el
primero.
La instrucción CALL y las “interrupciones” originan la carga del contenido del PC en el
nivel superior o “cima “de la pila. El contenido del nivel superior se saca de la pila al
ejecutarse las instrucciones RETURN, RETLW y RETFIE. El contenido del registro
PCLATH, no es afectado por la entrada o salida, de la información de la pila.
PCH PCL
12 8 7 0
CONTADOR DE PROGRAMA 8
5
Resultado
de la ALU
7 4 0
-- -- -- . .. .. .. ..
PCLATH
PCH PCL
12 11 10 0
CONTADOR DE PROGRAMA 11
2
Desde
código de
7 4 3 0 operación
-- -- -- . .. -- --. --..
PCLATH
___________________________________________________________________ 63
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROYECTO CON INSTRUCCIONES CALL, RETLW CON MODIFICACION
DEL CONTADOR DE PROGRAMA
; MOT0RES6.ASM
;Programa que permite controlar la cantidad de motores que se
conectan
;a una barra de alimentación de energía, que tiene limitaciones
;respecto a la máxima potencia entregada
; B0=A0.A1.A2+A1.A3+A2.A3
;RESOLUCION POR TABLA DE CONVERSIÓN (direcc. Memoria de programa)
LIST P=16C84
RADIX HEX
ORG 0
goto INICIO
ORG 5
___________________________________________________________________ 64
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
;comienza la tabla de conversión (subpagina 0).Reg.PCH vale cero
PROGRAMA PRINCIPAL
RUTINA
Comienzo TABLA DE CONVERSION
Defino
entradas y
salidas Al valor actual del
contador de programa le
sumo el valor de la entrada
y lo cargo en PCL
Exploro y
enmascaro
entradas
Retorno al programa
principal con retlw valor
Llamo a rutina
de tabla cargado en w
con call donde
esta la tabla
Presento resultado
en la salida y
vuelvo a explorar
entradas
___________________________________________________________________ 65
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Direccionamiento de la memoria de programa para ejecutar dos subprogramas
El programa que desarrollaremos a continuación, es un ejemplo de cómo podemos
ejecutar dos subprogramas, grabados en distintas subpaginas, dentro de la memoria de
programa. Para este caso, ejecutaremos dos “tablas de la verdad”, confeccionadas
mediante las instrucciones “call” y “retlw”.
Para ello, deberemos tener en cuenta, que las paginas de la memoria de programa, de los
PIC de la gama media, se dividen a su vez, en “subpaginas” de 256 direcciones. Para
acceder a cada subpagina, dentro de una pagina, lo hacemos cargando el registro
PCLATH (bit 0, 1y 2), que se encarga de modificar la parte alta del contador de
programa PCH.
Recordemos que para los PIC de la clase media, el contador de programa PC, esta
preparado para direccionar una memoria de programa de hasta 8 K Instrucciones,
divididas en 4 páginas de 2 K Instrucciones. Estas páginas se acceden mediante los bits
3 y 4 de PCLATH. El PIC16F84 solo tiene la “pagina 0”, incompleta, con solamente, un
total de 1 K instrucciones a cargar (1024). En este caso, la pagina 0, solamente tiene 4
subpaginas (0, 1, 2, y 3) que se acceden mediante los bits 0 y 1 de PCLATH.
Tomaremos como ejemplo el programa anterior (control de motores6.asm) para
modificarlo. Mediante la directiva ORG 100, cargaremos la tabla de conversión a partir
de la dirección 0x100 (subpagina1). Mediante la directiva ORG 200, (subpagina 2,
0x200) cargaremos otra tabla de conversión, similar en cuanto a las variables de
entrada, pero diferente respecto al resultado de su salida.
Para acceder a una tabla u otra, se revisará el valor lógico de la entrada RA4 (con btfss)
y mediante la instrucción “call” (que permite direccionar toda una “pagina”) se accederá
a uno u otro de los subprogramas que resuelven la lógica combinacional.
Como punto importante a tener en cuenta en este programa, es el modo de
direccionamiento de la memoria de programa dentro de la “subpagina”. Previo a la
modificación del registro PCL, con los valores lógicos actuales de las variables de
entrada, mediante la operación de la unidad aritmetica y logica, (con la instrucción
“addwf k”), debemos cargar el registro PCLATH con la dirección de inicio de la
“subpagina”, donde están grabadas las instrucciones de retorno “retlw”.
El programa principal, que consulta el valor de las variables de entrada, y decide cual
tabla consultar, se desarrolla en la “subpagina 0” de la memoria de programa.
; MOT0RES7.ASM
; Programa que permite controlar la cantidad de motores que se conectan
;a una barra de alimentación de energía, que tiene limitaciones
;respecto a la máxima potencia entregada. La función lógica que cumple
;es: B0=A0.A1.A2+A1.A3+A2.A3 , siempre que sea A4=0
; B0=A1.A2.A3+A0.A1+A0.A2 , siempre que sea A4=1
; Resolución por tabla de conversión. Para la primera función, la tabla
; esta grabada en la memoria de programa, en la subpagina 1,a partir de la
;dirección 101. La tabla para resolver la 2º función lógica, también
;esta grabada en la memoria de programa, en la subpagina 2, a partir de la
;dirección 201. El programa principal que inspecciona las entradas y
;consulta las tablas para resolver la salida, esta en la subpagina 0.
LIST P=16F84
RADIX HEX
; Subpagina cero
ORG 0
___________________________________________________________________ 66
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
goto INICIO
ORG 5
___________________________________________________________________ 67
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
bcf 0x0a,0
addwf 0x02,1 ;modifico el contador de programa PCL
;sumandole el valor de la entrada
retlw 0x00 ;regreso de la rutina con el valor 00 H
;cargado en W
retlw 0x00
retlw 0x00 ;idem al anterior
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x00
retlw 0x01
retlw 0x01
retlw 0x01
end
Defino
entradas y Llamo a rutina Llamo a rutina
salidas con call en con call en
direccion 0x200 direccion 0x100
Exploro y
enmascaro Cargo PCLATH Cargo PCLATH
entradas con 0x02 y al PCL con 0x01 y al
actual le sumo el PCL actual le
valor de la entrada sumo el valor de
la entrada
no
RA4 = 1
? Retorno al Retorno al
programa programa
si
principal (retlw) principal (retlw)
con valor de tabla con valor de tabla
___________________________________________________________________ 68
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
CONTROL DE TIEMPOS CON LOS MICROCONTROLADORES
Acción a temporizar
COMPARADOR
ELECTRONICO
A
Salida temporizada
T = R x C x ln ( VCC/ VCC – VC )
Siendo VC, la tensión de comparación.
El principio de los temporizadores digitales, esta basado en dos módulos importantes
que son “el oscilador o generador de impulsos de periodo fijo” y “el contador de
impulsos “cuya base constructiva, son los denominados FLIP FLOP.
CONTADOR DE SALIDA
CIRCUITO IMPULSOS
OSCILADOR
___________________________________________________________________ 69
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
La temporización, depende del periodo del oscilador y del numero de cuenta del
contador: T = periodo oscilador x cantidad de impulsos contados
A E
T
B Eta E Eta
C T Etd E Etd
___ ___
D T Eta E Eta
1
___ ___
T Etd
E Etd E
1
_ _
F E E E
1
T _ _
G Eta E Eta
1
_
_
H T Etd E Etd
1
E: Entrada
___________________________________________________________________ 70
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
___
Etd : Entrada temporizada a la desactivación, complementada
_
E : Entrada complementada.
_
Eta : Entrada complementada, temporizada a la activación
_
Etd : Entrada complementada, temporizada a la desactivación
___ _
Eta = Etd
___ _
Etd = Eta
===
Etd = Etd
===
Eta = Eta
Se puede observar que los seis diagramas se reducen a cuatro y a la vez tres de ellos se
pueden expresar en función del otro; así se pueden establecer las siguientes
equivalencias:
===
Etd = Etd
_---
Eta = Etd
___ ===
Eta = Eta
___________________________________________________________________ 71
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
CONTROL DE TIEMPOS CON EL MICROCONTROLADOR PIC 16X84:
Como lo hemos dicho, una de las tareas más habituales en los programas de control
automático de dispositivos, es la de determinar “intervalos de tiempo” a las variables de
control. Para el caso de los microcontroladores, tenemos dos formas de realizarlo: Por
programa (software) o utilizando módulos especiales (hardware) internos temporizables.
(timer).
Para el primer método, consiste básicamente en una subrutina de programa que
contenga en su interior otras subrutinas que cargan un registro, del tipo SFR y aplicando
instrucciones de salto condicional cuando se llega al tiempo establecido.
Para el segundo método, se disponen de temporizadores/ contadores de 8 bits, siendo
uno solo para el PIC16X84, denominado TMR0, que puede actuar de dos maneras a
saber:
El registro “OPTION”:
___________________________________________________________________ 72
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Para utilizar el TRM0 como contador de impulsos externos provenientes del Terminal
“RA4/TOCKI”, debemos poner a “1” el bit “TOCS” que ocupa la dirección 5 del
registro OPTION que se encuentra en la dirección 0x01 del banco uno. En la misma
dirección pero en el banco cero, se encuentra el contador TRM0.
En el registro “OPTION” también podemos seleccionar el flanco activo para que actúe
el contador. En el bit TOSE (4) si es igual a 1, el flanco activo es el descendente. Si vale
0, el flanco activo es el ascendente.
A continuación y como ejemplo realizaremos un programa para usar al
microcontrolador PIC16X84 como contador de impulsos externos hasta una cantidad de
10.Cuando llega a esta cuenta, todas las salidas RB0...RB7 se colocan a “uno”; el
contador nuevamente queda en condiciones de contar nuevamente hasta 10. Cuando
comienza a contar, las salidas pasan otra vez a cero. Además como parte del
automatismo, se agrego la entrada RA0 que actúa como RESET (vuelve a cero la cuenta
en cualquier estado) si alguna condición especial lo requiera.
Seguidamente, damos una aplicación práctica del TRM0 como contador de impulsos:
___________________________________________________________________ 73
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
DIAGRAMA DE FLUJO CONTADOR1
Comienzo
Habilito el
Inicialización contador
INICIO
Complemento
valor de
TMR0, con
producto
Defino logico 0xF7
entradas y
salidas
NO
Arranco
TRM0?
BUCLE 1
SI
Borro salidas
Cargo TRM0 y
borro TOIF
NO
Llego a 10
la cuenta?
BUCLE 2
Llevo a 1
salidas y salto
a BUCLE 1
NO SI
RA0 vale
cero ?
FIN
___________________________________________________________________ 74
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
A partir del diagrama de flujo, desarrollamos en archivo de texto, el programa
“CONTADOR1.ASM”
; CONTADOR1.ASM
; =============
;el programa cuenta hasta 10 pulsos que ingresan por RA4/TOCKI
;en el flanco de subida. Cuando termina la cuenta, las salidas
;RB0...RB7,pasan al estado uno, para comenzar nuevamente a contar
; hasta 10.
;Durante la cuenta a 10 ;es posible resetear con RA0=1 (F1)
; y volver a contar.
LIST P=16F84
RADIX HEX
ORG 0
goto INICIO
ORG 5
___________________________________________________________________ 75
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
del divisor de frecuencias; para ello debemos colocar un “cero” en el bit 3 (PSA) en el
registro OPTION para que se le asigne el divisor de frecuencias que comparte con
WDT. El valor de la división de frecuencias depende de los bits PS2, PS1 y PS0, del
registro OPTION, según el dibujo anterior, de este registro.
El TMR0 se comporta como un registro de propósito especial (SFR) ubicado en la
dirección 0x01 del banco 0. En igual dirección pero en el banco 1, se encuentra el
registro OPTION.
El TMR0 puede ser leído y escrito en cualquier momento al estar conectado al bus de
datos. Funciona como un contador ascendente de 8 bits, cuando funciona como
temporizador,
Se puede detectar el tiempo de carga de TMR0, de dos formas a saber: La primera
determinando el número de cuenta, por medio de lectura de uno de los bits del contador
con una instrucción de salto condicionada. La segunda forma, conviene cargarle con el
valor de los impulsos que se quiere temporizar, pero expresados como “complemento a
2”. De esta manera al llegar al número de impulsos deseado, se desborda y al pasar por
00 H se activa el señalizador TOIF y /o se produce una interrupción.
El cálculo del tiempo que controla TMR0 lo calculamos con la siguiente expresión:
Subrutinas de retardo:
Cuando se necesita aplicar temporizaciones en automatismos, éstas suelen reiterarse
durante el desarrollo del programa. Para simplificar y ahorrar espacio de la memoria de
programa, conviene establecer subrutinas de retardo, de manera tal que puedan ser
invocadas, en distintas partes del programa principal. Las subrutinas desvían el flujo de
ejecución del programa “central”, a otro punto, por medio de la instrucción “call k”
que guarda la dirección actual en la pila y salta a la dirección “k”, al modificar el
contador de programa con esa dirección. Una vez ejecutada la subrutina se debe volver
al programa principal, para ello mediante la instrucción “return” y/o “retlw”,
modifican al contador de programa con la dirección de retorno sacada de la pila. La pila
del PIC16X84 tiene ocho niveles, lo que permite anidar hasta ocho subrutinas con las
instrucciones mencionadas.
Como primera aplicación practica al uso de subrutinas de retardo, veremos un programa
que produce el parpadeo de un diodo Leds. Tomaremos como tiempo de retardo 8,2 mS
suficiente como para observarlo en el programa de simulación. En la practica
deberemos usar tiempos mayores (aprox. 0,5 S) si queremos ver el parpadeo.
Tiempo de retardo : Si tenemos en cuenta que vamos a usar un oscilador de cristal de
1 MHZ, los 8,2 mS lo podemos obtener mediante una división de frecuencia de 128 y
una cuenta en TMR0 de 16 pulsos.
Temporización = 4 . Tosc . valor cargado en TMR0 . Rango del divisor
Temporización = 4 . 1us . 16 . 128 = 8,2 ms
___________________________________________________________________ 76
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Diagrama de flujo del programa PARPADEO
Programa principal
Comienzo
Inicialización
Activar TRM0 y
asignar rango
1:128 al divisor
Borrar TRM0
Borrar puerta B
NO
Encender Leds TRM0<4>
RB7 = 1 =1?
SI
Pasar a subrutina de
retardo
Retornar a
encender Lds RB7=1
; PARPADEO.ASM
___________________________________________________________________ 77
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
; Programa que ilustra c¢mo realizar una temporización
; sin emplear interrupciones. Se realiza una temporización de 8,2 ms
; que se emplea para hacer parpadear un diodo led en RB7
; Reloj del PIC: 1Mhz
LIST P=16F84
RADIX HEX
; --------------------------------------------------------------------
; --------------------------------------------------------------------
; --------------------------------------------------------------------
bsf ESTADO,5 ; Banco 1
movlw b'11010110' ; Valor a cargar en
; OPTION
movwf TMR0_OPT
movlw 0x00
movwf PUERTAB ; La Puerta B salida
bcf ESTADO,5 ; Banco 0
clrf PUERTAB ; Las líneas de salida
; de PB a 0
parpa bsf PUERTAB,7 ; Enciende el led RB7 = 1
call retar ; Llamada a subrutina de
; RETARDO
bcf PUERTAB,7 ; Apaga el led, RB7 = 0
call retar
goto parpa
___________________________________________________________________ 78
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Conexionado del microcontrolador para el programa PARPADEO.ASM
PIC16X84
___________________________________________________________________ 79
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
; PARPADEO1.ASM
; Programa que ilustra c¢mo realizar una temporización
; sin emplear interrupciones. Se realiza una temporización de 1Seg.
; que se emplea para hacer parpadear un diodo led en RB7
; Reloj del PIC: 1Mhz
LIST P=16C84
RADIX HEX
; --------------------------------------------------------------------
PUERTAB EQU 0x06
TMR0_OPT EQU 0x01 ; TIMER0 en banco 0 y
; OPTION en banco 1
CONTA EQU 0X0D
ESTADO EQU 0x03
; --------------------------------------------------------------------
ORG 0 ; Inicio del programa en direc.0
; --------------------------------------------------------------------
bsf ESTADO,5 ; Banco 1
movlw b'11010110' ; Valor a cargar en
; OPTION
movwf TMR0_OPT
movlw 0x00
movwf PUERTAB ; La Puerta B salida
bcf ESTADO,5 ; Banco 0
clrf PUERTAB ; Las líneas de salida
; de PB a 0
parpa bsf PUERTAB,7 ; Enciende el led RB7 = 1
call retardo ; Llamada a subrutina de
; RETARDO
bcf PUERTAB,7 ; Apaga el led, RB7 = 0
call retardo
goto parpa
;.................rutina de retardo.................
Retardo clrf TMRO_OPT ;TMRO=0,su 1ºincremento
movlw d'122' ; 122 -> W
movwf CONTA ;CONTA => 0x0D es el
;contador auxiliar
bucle call explora
clrf TMR0_OPT ; TMR0 = 0 y empieza su
; su incremento
decf CONTA,0 ; CONTA - 1 -> W
movwf CONTA ; Se actualiza FZ
btfss ESTADO,2 ; ¨FZ = 1?
goto bucle ; Otra vez al bucle de
; exploración
return ; Se ha explorado 122 veces
;...............subrutina de retardo....................
explora btfss TMR0_OPT,4 ; TMR0<4> = 1?
goto explora ; No ha llegado TMR0 a 16d
return ; Ha llegado TMR0 al
; valor 16d y retorna
END ; fin del programa
A continuación, resolveremos el circuito combinacional “MOTORES”, con el agregado
de una salida parpadeante, cuando se da la condición de exceso de potencia, en la barra
de alimentación, de acuerdo al problema planteado en su inicio. Aprovecharemos
además este programa para introducir “ayudas” que nos brinda el programa
ensamblador, como las siguientes:
-INCLUDE <P16F84.INC> : El programa ensamblador nos suministra una librería que
nos permite reemplazar la dirección hexadecimal y bits de los registros especiales por
nombres nemotécnicos. Por ejemplo: bsf STATUS, RP0 ≡ bsf 0x 03, 5
___________________________________________________________________ 80
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
-INCLUDE <RETARDO.ASM> : Este comando permite al programa ensamblador
(MPASM) utilizar el programa editado RETARDO.ASM como subrutina en el
programa nuevo que se va a editar.
-# define BORRAR clrf : Se le da definición nemotécnica a la instrucción “clrf”
como “BORRAR”
-# define BORRAR ENTRADA clrf 0x05 : Se da como definición nemotécnica
“BORRAR ENTRADA” a la instrucción clrf 0x05
-A0 equ 0x 0C : Se define al registro 0x0C con el nombre “A0”
-La proxima sentencia sirve para denominar a un grupo de registros en forma
consecutiva con nombres nemotécnicos:
Cblock 0x0c ;inicio, se definen registros de propósito gral
A0 ;=0x0C
A1 ;=0x0D
A2 ;=0x0E
A3 ;=0x0F
A2.A3 ;=0x10
A1.A3 ;=0x11
endc ;fin del bloque de registros
Comienzo
Inicialización no
Salida RB0
Vale uno (1)
?
Defino puertas
Entrada/ salida si
Parpadeo de RB1 y
Realizo lectura RB2 mediante rutina
puerta de entrada PARPADEO.ASM
Realizo operaciones
lógicas entre las variables
___________________________________________________________________ 81
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROGRAMA: MOTORES3.ASM
; MOTORES3.ASM
; Resolución de un automatismo combinacional
; Programa que controlar la cantidad de motores que se conectan
;a una barra de alimentación eléctrica, que tiene limitaciones
;respecto a la m xima potencia eléctrica entregada, con parpadeo
;en RB3 y RB4
; RB0=RA0.RA1.RA2 + RA1.RA3 + RA2.RA3
;-------------------------------------------------------------------
LIST P=16F84 ;asigno el microc. Para el ensamblador
RADIX HEX ;se editara con el sistema hexadecimal
INCLUDE <P16F84.INC> ;incluyo libreria del PIC16F84
#define BORRAR clrf ;se define la instruc.con BORRAR
#define BORRAR_ENTRADA clrf 0x05 ;se define la instruc.y reg.
cblock 0x0c ;inicio,se definen registros de propósito gral
A0 ;=0x0C
A1 ;=0x0D
A2 ;=0x0E
A3 ;=0x0F
A2.A3 ;=0x10
A1.A3 ;=0x11
endc ;fin del bloque de registros
;--------------------------------------------------------------------
ORG 0 ;se indica la ubicación de
goto INICIO ;1a instrucción en la direcc.0x00
ORG 5 ;se salta el vector reset para ubicar la
;próxima instrucción
INICIO BORRAR_ENTRADA ;llevo a cero r05 (entradas)
BORRAR PORTB ;llevo a cero r06 (salidas)
bsf STATUS,RP0 ;selecciono el banco uno
movlw 0xff ;ff>w
movwf TRISA ;w>trisa A son entradas
clrf TRISB ;B son salidas
bcf STATUS,RP0 ;selecciono el banco cero
BUCLE1 movf PORTA,0 ;entradas A>w
movwf A0 ;w>0C direcc. memoria datos.Entrada "Ao"
movwf A1 ;w>0D " " "
rrf A1,1 ;desplazo A1 a columna A0 y lo cargo en 0x0D
rrf A1,0 ;desplazo A2 a la columnna A0 resultado>w
movwf A2 ;w>0E direcc.mem datos Entrada A2
rrf A2,0 ;desplazo A3 a la columna Ao resultado>w
movwf A3 ;w>0F direcc.mem datos Entrada A3
andwf A2,0 ;A2.A3>w
movwf A2.A3 ;w>10 direcc.mem datos producto "A2.A3"
movf A3,0 ;0F>w
andwf A1,0 ;A1.A3>w
movwf A1.A3 ;w>11 direcc.mem datos producto "A1.A3"
movf A0,0 ;0C>w
andwf A1,0 ;Ao.A1>w
andwf A2,0 ;Ao.A1.A2>w
iorwf A1.A3,0 ;Ao.A1.A2+A1.A3>w
iorwf A2.A3,0 ;Ao.A1.A2+A1.A3+A2.A3>w
andlw 0x01 ;10 producto lógico con w resultado wo
movwf PORTB ;w>06 puerta B salida
btfss PORTB,0 ;reviso salida RB0 y salto si vale uno
goto BUCLE1 ;si vale 1,activo RB4 y desactivo RB3
bsf PORTB,4 ;activo RB4(1)
bcf PORTB,3 ;desactivo RB3(0)
call RETARDO ;llamo subrutina archivo RETARDO.ASM
___________________________________________________________________ 82
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
bcf PORTB,4 ;desactivo RB4 (0)
bsf PORTB,3 ;activo RB3 (1)
call RETARDO ;llamo subrutina archivo RETARDO.ASM
goto BUCLE1 ;reviso nuevamente las entradas
INCLUDE <RETARDO.ASM> ;incluye subrutina de retardo, ubicada
;en el archivo RETARDO.ASM
end ;fin del programa
Aviso del
wach dog Divisor de frecuencia
Frecuencia externa sleep
(reset) (hasta 128 WDT)
TOCKI
(hasta 256 TRM0)
Registro INTCON
bit 2 (TOIF) 1
6 Registro OPTION
aviso TRM0
Temporizador principal
TRM0 (8bits) 8
Registro de trabajo
W
___________________________________________________________________ 83
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
INTERRUPCIONES EN LOS MICROCONTROLADORES
Las interrupciones son desviaciones del desarrollo del programa principal provocadas
asincrónicamente por diversos sucesos que no se hallan bajo la supervisión de las
instrucciones. Por ejemplo la instrucción “call” es una desviación sincrónica del
programa principal, llamando a una subrutina. La interrupción, cuando se produce, pasa
a ejecutar una subrutina, pero el acontecimiento se produce imprevistamente. En ambos
casos, se guarda la dirección actual en la pila y se carga el contador de programa PC
con una dirección, que en caso de la instrucción “call” ya viene en la propia instrucción.
Para el caso de una interrupción, el contador de programa se carga con una dirección
reservada de la memoria de instrucciones denominada “vector de interrupción”. Para los
PIC16X8X, el vector interrupción se halla situado en la dirección 0004 H, donde
comienza la rutina de servicio a la interrupción (RSI). En general en dicha dirección se
coloca una instrucción de salto incondicional (goto), que traslada el flujo de control a la
zona de la memoria de instrucciones, destinada a contener la rutina de atención a la
interrupción.
La RSI, en general suele comenzar guardando en la memoria de datos algunos registros
específicos que empleara y alterará, durante el desarrollo de la rutina. Antes del
retorno, al programa principal, es necesario recuperar estos valores para restaurar el
estado previo a la interrupción. El retorno de una rutina de interrupción se produce con
la instrucción “retifie”.
Causas de interrupción:
Para que se produzca la rutina de interrupción, el bit 7, GIE (Global interrup Enable) del
registro INTCON, debe valer uno (1); caso contrario, prohíbe todas las interrupciones.
Cuando se produce una interrupción, GIE pasa a valer cero (0), con el objeto de no
atender nuevas interrupciones hasta que termine la que ha comenzado. GIE, pasa a valer
uno automáticamente cuando se produce el retorno de la interrupción.
Cada fuente de interrupción, tiene un bit de permiso de interrupción como así también
un bit de señalización. Estos bits de permiso y señalización, se encuentran en el registro
INTCON, salvo el señalizador de fin de escritura de la EEPROM, denominado EEIF,
que se encuentra en el bit 4 del registro EECON1.
Los señalizadores deben ponerse a cero por programa, antes del retorno de la
interrupción y además son operativos aunque la interrupción este prohibida, por el bit
de permiso correspondiente.
___________________________________________________________________ 84
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Organigrama de las operaciones principales de una interrupción
Comienzo
Interrupción
Se determinan las
PC→PILA causas de la
GIE=0 interrupción
Retorna (retfie)
PC←PILA
GIE=1
GIE= 1 Permite todas las interrupciones si los bits de permisos individuales lo permiten.
GIE =0 Prohíbe todas las interrupciones.
___________________________________________________________________ 85
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
EEIE: Permiso de la interrupción por fin de la escritura en la EEPROM
___________________________________________________________________ 86
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Siempre que se produzca una interrupción por cualquier causa, GIE=0 y el PC se carga
con el valor 0004 H, que es, el vector interrupción. Para conocer que causa provocó la
interrupción, es necesario explorar los señalizadores. Éstos, posteriormente, deben
ponerse a cero por programa, dado que son siempre operativos.
Existe un término, conocido como “latencia de la interrupción”, que se define como el
tiempo que transcurre, desde que apareció la interrupción (el señalizador se pone a uno)
hasta el momento en que la instrucción ubicada en la dirección 0004 H, comienza a
ejecutarse. Para interrupciones sincrónicas, este tiempo es de tres ciclos de instrucción.
Para interrupciones no sincrónicas como las externas, éste tiempo puede ser entre 3 y
3,75 ciclos de instrucción.
Describiremos a continuación, una porción de programa, que nos permite explorar todos
los señalizadores de interrupciones y saltar a “la rutina de servicio de interrupciones”
(RSI) correspondiente, al que se encuentra activado.
----------------------------------------------------------------------------------------------------------
int btfss
intecon,intf ;explora el bit intf de intecon
;y salta si vale uno
goto puertab ;salto incondicional para explorar
;activación interrupción RB7..RB4
goto inter1 ;RSI de la interrupción externa
;por RB0/INT.
puertab btfss intecon,rbif ;explora el bit rbif de intecon
;y salta si vale uno
goto tmr0 ;salto incondicional para explorar
; Activación interrupción de TMR0
goto rb7_rb4 ;RSI de la interrupción por activa
;ción de las entradas RB7..RB4
tmr0 btfss intecon,toif ;explora el bit toif de intecon
;y salta si vale uno
goto eeprom ;salto incondicional para explorar
;fin de escritura EEPROM
goto tempo ;RSI de la interrupción por desbor
;damiento de TMR0
eeprom btfss eecon1,eeif ;explora bit eeif de eecon1 y
;salta si vale uno
goto int ;salto incondicional a int para
;volver a explorar los señalizadores
goto escritura ;RSI de la interrupción por fin de
;escritura de la EEPROM
* continua el programa
Interrupción externa por RB0 /INT
Este tipo de interrupción es muy importante cuando se debe atender acontecimientos
externos en tiempo real. Cuando se activa la entrada RB0/INT, de forma automática, el
bit INTF se hace igual a uno (1) y si el bit de permiso INTE es igual a uno (1), la
interrupción se autoriza, desarrollándose los procesos que corresponden a la
interrupción ya comentada.
Mediante el bit 6, llamado INTDEG, del registro OPTION, se puede seleccionar cual
será el flanco activo en la entrada RB0/INT. Si deseamos que la activación se produzca
con el flanco ascendente, entonces INTDEG= 1. Si deseamos que sea el descendente,
entonces INTDEG =0. El tiempo de demora entre la activación del flanco hasta que se
produce la interrupción, es de 3 o 4 ciclos reloj.
Como conclusión, con INTE=1 habilitamos la interrupción externa y, si se produce un
flanco activo en la entrada RB0/INT, el señalizador INTF se pone a 1 automáticamente,
solicitando la interrupción, que es aceptada sí GIE =1. Antes de regresar al programa
principal es necesario borrar el bit INTF, puesto que en caso contrario al ejecutar la
___________________________________________________________________ 87
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
instrucción de retorno RETFIE, se volvería a desarrollar el mismo proceso de
interrupción.
A modo didáctico, realizaremos un programa sencillo de aplicación de interrupción
externa, consistente en tres salidas lógicas de un automatismo, que copian el valor
lógico de tres entradas, solamente en el momento que una interrupción externa por
RB0/INT lo autorice.
Diagrama de flujo
Comienzo
Habilito la
interrupción gral
“GIE” y externa
Defino “INTE”
etiquetas (reg.INTCON)
Se ejecuta la rutina de
Defino la interrupción
entradas y
salidas
Se borra el señalizador
Defino flanco de de la interrupción
activación de externa”TOIF”
interrup. (reg.INTCON)
externa “INTDEG
(reg,OPTION)
Retorna (rectfie)
PC←PILA
GIE=1
FIN
___________________________________________________________________ 88
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROGRAMA
;EXTERNO.ASM
;programa por el cual las salidas RB1,RB2 y RB3 copian el valor
;lógico de las entradas RA1, RA2 y RA3, solamente en el momento
;que se autoriza a través de la entrada por interrupción externa
;RB0/INT (flanco descendente).
LIST p= 16F84
RADIX HEX
ORG 0
goto INICIO ;inicio del programa
ORG 4
goto INT ;salto a la rutina interrup.
En la figura mostramos un circuito práctico para generar pulsos de duración limitada (en
el ejemplo 23,5 us) con un circuito antirrebote, para el pulsador, utilizando dos
inversores del circuito integrado 74LS04 realimentados. La red RC y el último inversor,
controlan la duración del impulso
PIC16F84
___________________________________________________________________ 89
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
C
GIE =1, se produce una interrupción.
Si no se recarga el TMR0 cuando se desborda, sigue contando desde 00 H a FF H.
La lectura y escritura de este registro, se puede realizar en cualquier momento, pero
cada vez que se escribe se pierden dos ciclos de reloj de sincronización.
Cuando se carga inicialmente TMRO con un valor determinado N, el desbordamiento se
produce con 256 – N impulsos, por lo tanto el tiempo que tarda para llegar a esta
situación vale: T = 4 . Tosc. .(256 – N) . Rango del divisor de frecuencia.
Como ejemplo practico de interrupciones por TMRO, tomaremos un ejercicio del libro
Microntroladores PIC (Angulo, Usategui) con algunas modificaciones.
El programa consiste en utilizar un PIC16X84, con un oscilador interno de frecuencia 4
MHZ. Conectado a las entradas RA0 y RA1 tenemos dos contactos A y B, los cuales
deben ser explorados continuamente y reflejar su estado (abierto o cerrado) sobre dos
diodos Leds A1 y B1, conectados a las líneas RB0 y RB1 de la puerta B.
Además tendremos otro diodo Leds, conectado a la salida RB7, que comenzara a
parpadear cuando se activen los otros diodos, con un lapso de tiempo de 1 segundo
entre los estados de encendido y apagado.
Esquema eléctrico
PIC16X84
___________________________________________________________________ 90
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Para controlar el retardo de 1 segundo para realizar el parpadeo del led, conectado a
RB7, realizaremos una interrupción por desbordamiento de TMR0.
Cargaremos a TMRO con el valor decimal 12, con lo que el desbordamiento se
producirá (si tomamos el rango del divisor de frecuencia en 256) , en un tiempo:
T= 4 . 250 ns .(256-12) . 256 = 62,4ms
Como no alcanzamos el retardo de 1 segundo, emplearemos un contador auxiliar
CONTA (0x0c) que al cargarse con el valor 16 y decrementarse una unidad cada 62,4
ms, cuando llegue a cero , se conseguirá, aproximadamente el tiempo buscado
T = 62,4 ms . 16 = 1s
El programa utiliza las instrucciones de salto condicionado btfss f,d y btfsc f,d para
inspeccionar las entradas y copiarlas en las salidas como así también verificar que el
parpadeo solamente este presente , cuando se activen las salidas (se enciendan los
diodos A1 y B1.
A los efectos que se pueda apreciar en la simulación el parpadeo del diodo, conviene
utilizar el divisor de frecuencias por 2, cargar el TMRO con 0xf0 y el contador auxiliar
con 0x03.
Desarrollamos a continuación el programa EXTERNO2.ASM :
;-------------------------------------------------------------------
W EQU 0
F EQU 1
TMR_OPT EQU 0x01 ; TMRO en banco 0 OPTION en banco 1
ESTADO EQU 0x03
PUERTAA EQU 0x05 ; PA en banco 0 TRISA en banco1
PUERTAB EQU 0x06 ; PB en banco 0 TRISB en banco1
INTCON EQU 0x0B ;
CONTA EQU 0x10 ; Contador auxiliar
;---------------------------------------------------------------------
ORG 0 ; Vector de Reset
goto inicio
___________________________________________________________________ 91
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
movlw 0x03
movwf CONTA ; Se carga CONTA con 16 decimal
goto bucle2
;---------------------------------------------------------------------
goto seguir
movlw 0xf0
movwf TMR_OPT ; Se recarga TMR0 con 12
retfie
end
___________________________________________________________________ 92
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROGRAMA
;ALARMA.ASM: Un PIC 16F84 controla la alarma de un coche:
;Conectados a RB4 - RB7 hay 4 sensores que controlan cada uno
;una puerta del coche. Cuando una de las puertas del coche es abierta
;su sensor manda un 1 por su línea respectiva cambiando esta de estado
;con lo que se provoca una interrupción y comienzan a sonar 2 bocinas
;(buzzer) conectados a RA0 y RA1.
;Para detener la alarma,el usuario debe mandar una señal infrarroja a
;un sensor, que cuando la detecta, activa la patita RBO con lo que se
;produce una interrupción, las bocinas se paran y el programa vuelve a
;su comienzo.
;---------------------------------------------------------------------
LIST P=16F84
RADIX HEX
;---------------------------------------------------------------------
W EQU 0
F EQU 1
ESTADO EQU 0x03
PUERTAA EQU 0x05
PUERTAB EQU 0x06
INTCON EQU 0x0B
;---------------------------------------------------------------------
ORG 0
goto inicio
ORG 4
goto inter
ORG 5
clrf PUERTAA
clrf PUERTAB
___________________________________________________________________ 93
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
bucle goto bucle
;---------------------------------------------------------------------
inter btfss INTCON,0 ; Explora flag int por cambio RB4 RB7
goto parar
goto alarma
end
Dado que el tiempo típico para la operación de escritura de la EEPROM de datos de los
PIC16X8X es de 10 ms, este valor resulta alto en comparación con la velocidad del
procesador del microcontrolador. Para asegurarse entonces que la escritura se ha
completado y se puede continuar con el flujo de control del programa, se aconseja
utilizar la interrupción que se produce al finalizar la escritura, que pone
automáticamente el señalizador EEIF a 1(del registro EECON1) y se autoriza siempre
que los bits EEIE= GIE= 1 (correspondientes al registro INTCON).
Previo a dar un ejemplo de este tipo de interrupción, veremos primero las características
principales de la memoria de datos EEPROM
Los PIC 16X8X tienen 64 bytes de memoria EEPROM de datos, donde se pueden
guardar datos o variable que interesan que no se pierdan cuando se desconecta la fuente
de alimentación al sistema. (Soportan 1.000.000 de ciclos de escritura/borrado y 40 años
sin alterarse)
Para poder leerla y escribirla, durante el funcionamiento normal, se utilizan cuatro
registros especiales ubicados en la memoria de datos RAM. Estos son:
_EEDATA
_EEADR
_EECON1
_EECON2
___________________________________________________________________ 94
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
desde la 0x00 hasta la 0x3f (64 direcciones), por lo tanto los dos bit de mayor peso de
EEADR son siempre cero.
En el registro EEDATA, ubicado en la dirección 0x08 del banco cero, se depositan los
datos a leer o guardar.
El registro EECON1, que ocupa la dirección 0x08 del banco uno, tiene misiones de
control de las operaciones en la EEPROM, siendo los siguiente
REGISTRO EECON1
------ ------ ------ EEIF WRERR WREN WR RD
RD: lectura
RD se pone a 1 cuando se va a realizar la operación de lectura. Luego se pone
automáticamente a cero
WR: escritura
WR se pone a 1 cuando se inicia el proceso de escritura. Cuando se completa, se pone
automáticamente a cero
Proceso de lectura:
___________________________________________________________________ 95
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
movwf 0x09 ; cargo dirección 0x01 en registro EEADR
bsf 0x03,5 ; paso al banco uno
bsf 0x08,0 ; llevo a 1 RD del reg.EECON1 para realizar lectura de EEPROM
bcf 0x03,5 ; paso al banco cero
movf 0x09,0 ; llevo el dato de EEDATA al registro de trabajo W
Proceso de escritura:
LIST P= 16F84
___________________________________________________________________ 96
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
RADIX HEX
ORG 0
goto INICIO
ORG 4
goto bucle3
ORG 5
INICIO bsf 0x03,5 ;banco 1
movlw 0xff ;defino a RA como entradas
movwf 0x05
clrf 0x06 ;defino a RB como salidas
bcf 0x03,5 ;banco 0
clrf 0x06 ;borro salidas
clrf 0x05 ;borro entradas
clrf 0x0c ;borro registro 0x0c
movlw 0xff
movwf 0x0d
bucle1 btfss 0x05,4 ;espero que se pulse RA4
goto bucle1
bcf 0x05,4 ;borro RA4
movf 0x05,0 ;cargo entrada en W(RA0..RA3)
movwf 0x0c ;guardo entrada en 0x0c
___________________________________________________________________ 97
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
;grabada en la EEPROM)
goto bucle1
end
REINICIALIZACION O RESET
___________________________________________________________________ 98
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Cuando el dispositivo sale del estado de reset y comienza su operación normal, los
parámetros de operación (tensión, frecuencia, temperatura, etc.) deben encontrarse
dentro de sus valores normales de operación; de otra manera el microcontrolador no
funcionara correctamente. El retardo provisto por el capacitor permite un retardo
suficiente para la normalización.
___________________________________________________________________ 99
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Reinicialización por caída en la tensión de alimentación BOR
Para el circuito 1, cuando VDD desciende por debajo del valor VZ+ 0,7 volt, el
transistor PNP se bloquea, lo que provoca un nivel bajo de tensión sobre el terminal
MCLR#, provocando un reset por nivel bajo de tensión de alimentación (BOR).
En el circuito 2, el transistor PNP se bloquea y activa el reset al pasar a nivel bajo el
terminal MCLR# cuando el valor VDD desciende por debajo de:
VDD.R1/(R1+R2=0,7v.
___________________________________________________________________ 100
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
que esperar largos periodos de tiempo hasta que se produzca un suceso asincrónico,
como por ejemplo una interrupción externa.
El consumo típico de un PIC de clase media es de 2ma aprox. ; cuando ingresa en el
modo de bajo consumo pasa a menos de 10 a.
Para pasar al modo de bajo consumo, es necesario ejecutar la instrucción “SLEEP”;
Después de ejecutada, el microcontrolador pasa a un estado de bajo suministro de
energía, manteniéndose en un estado sin actividad.
En este estado de reposo, el terminal TOCKI se conecta a VDD o a tierra, para eliminar
la entrada de impulsos externos al TMR0. Por otra parte, como se detiene el oscilador
principal que genera los impulsos Tosc. , También se para TMR0. Los terminales de
Entrada / salida mantienen el estado anterior al de reposo y las que no se hallan
conectados a periféricos y actúan como entradas de alta impedancia se aconseja
conectarlas a VDD o a tierra, para evitar posibles fugas de corriente. El terminal
MCLR# debe conectarse a nivel alto. Sin impulsos reloj, el microcontrolador deja de
ejecutar instrucciones hasta que se lo saque de ese estado (despierte).
Si el perro guardián continúa activo en el modo de reposo, al entrar en él, se borra, pero
continúa funcionado. Los bits del registro de ESTADO TO# y PD# toman los valores 1
y 0 respectivamente.
Para salir del estado de “reposo” existen tres alternativas:
Activación externa de MCLR# para provocar un “reset” ( PC= 000)
Desbordamiento del perro guardián si quedo operativo en el modo de reposo ( PC=
PC+1)
Generación de una interrupción. (menos la de TMR0,dado su inactividad y PC= 004)
Cuando el microcontrolador “despierta”, estando el PWRT activo, desarrolla la
secuencia del oscilador OST, que retarda 1.024 Tosc. para estabilizar la frecuencia de
trabajo, luego pasa a ejecutar la instrucción siguiente a “sleep” a sea PC+1.
Los bits TO# y PD# se emplean para conocer la causa del reset que despierta al sistema.
PD# pasa a 0 cuando se ejecuta la instrucción “sleep”. TO# pasa a 0 cuando se desborda
el perro guardián.
El teclado, es un periférico muy útil para ingresar información al sistema, por parte del
usuario, en aplicaciones que así lo requieran. Las teclas de un teclado, desde el punto
de vista eléctrico, funcionan simplemente como un pulsador mecánico que conecta
eléctricamente dos puntos de un circuito.
El teclado de uso habitual, es el de tipo matricial de 16 teclas (para disminuir el número
de pines para su gestión), distribuidas en cuatro columnas y cuatro filas. Con esta
configuración, solamente es necesario el uso de 8 pines del microcontrolador,
configurados 4 como entradas y 4 como salidas
En la siguiente figura, se observa una de la posible conformación física de un teclado
típico, con su conexionado eléctrico interno, y su conexión con los pines de un
microcontrolador PIC
___________________________________________________________________ 101
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
F E D F
3 6 9 B
2 5 8 0
1 4 7 A
F E D C
3 6 9 B
2 5 8 0
1 4 7 A
+VCC
___________________________________________________________________ 102
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
programa que administra al teclado, conjuntamente con el código generado en el
teclado, al pulsar las teclas se identifica la tecla pulsada.
Si quisiéramos al mismo tiempo visualizarlo en un display de 7 segmentos, deberemos
entonces convertir el código de tecla generado en otro codigo que permita excitar los
Leds y exhiban el número o letra.
Por ejemplo cuando pulsamos la letra “C”, se genera el codigo 11101110 (0xEE) que
deberá convertirse (mediante una tabla de conversión) al codigo 01110001 (0x71) para
mostrarlo en un display de 7 segmentos. Si quisiéramos mostrar en una pantalla LCD,
es necesario convertir a otro codigo (ASCII).
La siguiente tabla, muestra los códigos generados por el teclado en particular, cuando se
pulsan las distintas teclas:
teclas RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 codigo
C 1 1 1 0 1 1 1 0 EE
B 1 1 0 1 1 1 1 0 DE
0 1 0 1 1 1 1 1 0 BE
A 0 1 1 1 1 1 1 0 7E
D 1 1 1 0 1 1 0 1 ED
9 1 1 0 1 1 1 0 1 DD
8 1 0 1 1 1 1 0 1 BD
7 0 1 1 1 1 1 0 1 7D
E 1 1 1 0 1 0 1 1 EB
6 1 1 0 1 1 0 1 1 DB
5 1 0 1 1 1 0 1 1 BB
4 0 1 1 1 1 0 1 1 7B
F 1 1 1 0 0 1 1 1 E7
3 1 1 0 1 0 1 1 1 D7
2 1 0 1 1 0 1 1 1 B7
1 0 1 1 1 0 1 1 1 77
En Gral., los códigos de exploración de las teclas, dependerá del modelo del teclado, en
relación a la ubicación de las mismas.
El programa que gestiona el teclado, realiza la exploración periódica, en un tiempo que
suele estar comprendido en un valor aproximado a los 20 mseg. Este programa, también
es el encargado del tratamiento adecuado cuando se pulsan varias teclas a la vez,
generar un código especifico si no se pulsan teclas, eliminar los rebotes por
temporización etc.
Para la gestión del teclado, se puede aprovechar “la interrupción por cambio en RB4 -
BR7 y la utilización de las resistencias internas “pull up”.
___________________________________________________________________ 103
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Emisor de
Emisor de Luz 7
Luz 7 Segmentos
Segmentos Ánodo
Cátodo común
común
___________________________________________________________________ 104
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
En este esquema no están dibujadas las resistencias limitadoras de corriente a los
visualizadores.
El programa para gestionar la presentación, deberá enviar los datos en forma secuencial,
de las cantidades a representar, o sea las unidades, decenas y centenas, a través de las
salidas RA4, RA5, RA6 y RA7, mediante lecturas cíclicas. Simultáneamente con los
datos en el bus, a través de las salidas RA1, RA2, y RA3, se deberá habilitar el cerrojo
(LE), para visualizarlo en el display que corresponda, según sea la magnitud presente en
el bus (unidades, decenas, centenas). Los otros CI, que no tienen habilitados el cerrojo,
mantendrán la información anterior (mediante los Lath), visualizadas en los
correspondientes display. De esta manera, mediante un bus de datos común, y la
selección del cerrojo correspondiente, es posible la presentación simultánea en todos
los visualizadores
ESQUEMA SIMPLIFICADO
PRESENTACION CANTIDADES
MICROCONTROLADOR NUMERICAS CON CIRCUITO
INTEGRADO
BCD/7SEG/EXITADOR/CERROJO
RB7 RB6 RB5 RB4 RB3 RB2 RB1
__
LE CENTENAS
A a
CD4511B b
B c
BCD/7SEG/
C EXITADOR/ d
CERROJO e
D f
g
__
LE DECENAS
A a
CD4511B b
B c
BCD/7SEG/
C EXITADOR/ d
CERROJO e
D f
g
__
LE UNIDADES
A a
CD4511B b
B c
BCD/7SEG/
C EXITADOR/ d
CERROJO e
D f
g
En este caso por los terminales RB1..RB7 se excitan cada uno de los segmentos del
display. Como estas salidas están conectadas a los segmentos de los tres display, es
necesario activar solamente al que corresponde el código que están sacando en ese
momento por la puerta B; para ello se utilizan las líneas RA0, RA1 y RA2, que son las
encargadas de habilitar los correspondientes display. Por ejemplo si por el puerto B se
___________________________________________________________________ 105
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
presenta el código a exhibir, correspondiente a las unidades, se deberá habilitar el
display de las unidades, colocando un nivel bajo en el terminal RA0; los otros, RA1 y
RA2 deberán permanecer en nivel alto. De esta forma se activa el transistor PNP,
conectando a masa el cátodo común del display, haciendo que se activen los segmentos
que correspondan con el código a exhibir Esta iluminación dura un breve tiempo /se
estima entre 10 y 20 ms). Después el proceso se repite con el display de las decenas,
luego de las centenas, nuevamente con las unidades y asi sucesivamente en forma
periódica. Este proceso, se denomina “barrido” de los display lo cual provoca una
sensación óptica de que todos los display están iluminados.
La ventaja de este método, respecto al anterior, es que no necesita un circuito extra
decodificador/excitador/cerrojo. Como desventaja, necesitamos tres terminales mas del
microcontrolador, dedicados para la exhibición.
RA2 R
Q2
MICROCONTROLADOR RA1 R
RA0
R
RB7 RB6 RB5 RB4 RB3 RB2 RB1 Q1
Q1
R R R R R R R
CENTENAS
a
b
c
d
e
f
g
DECENAS
a
b
c
d
e
f
g
UNIDADES
a
b
c
d
e
f
g
___________________________________________________________________ 106
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
F E D F
TECLADO MATRICIAL 3 6 9 B
COMBINADO CON DISPLAY 7
SEGMENTOS 2 5 8 0
1 4 7 A
RA2 MICROCONTROLADOR
RA1
RA0
___________________________________________________________________ 107
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
VCC +VCC
VEE P.10 K
MODULO LCD 2X16
VSS GND
D7 D6 D5 D4 D3 D2 D1 D0 E R/W RS
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 RA2 RA1 RA0
MICROCONTROLADOR
PROYECTO N°1
Realizaremos un programa de alarma (alarma1.asm), con tres sensores de entrada y uno
de inhabilitación. Tendremos tres terminales, que identificaran las entradas activadas y
quedaran fijas. Otra salida será intermitente y se activara con cualquiera de las salidas
fijas. Todas las salidas pasaran a cero, cuando se active (1) la entrada de inhabilitación.
El sistema volverá a activarse cuando la entrada de inhabilitación pase a cero.
El programa lo realizaremos inspeccionando en forma sucesiva el estado de cada una de
las tres entradas conectadas a los sensores, que darán señales de 1 cuando se activen;
utilizaremos entonces instrucciones de salto condicionado para revisar estas entradas.
___________________________________________________________________ 108
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
DIAGRAMA DE FLUJO ALARMA.ASM
Comienzo
Habilito salida
Defino etiquetas intermitente
RB0=1
Defino
entradas/salidas
Paso a rutina de
retardo T=1seg
si
Habilitacion
? RB0=0
no
Borro salidas
Paso a rutina de
retardo T=1seg
Reviso entradas si
valen 1 y activo la
correpondiente
salida Programa de la rutina
de retardo
Hay salidas no
activadas
?
si FIN
;ALARMA1.ASM
;RA0=0habilitacion. RA0=1 anulación
;RA1, RA2,RA3 entradas de alarma
;RB1, RB2,RB3 indicación de activación
___________________________________________________________________ 109
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
;RB0 intermitencia
LIST P=16F84
RADIX HEX
ORG 0
goto INICIO
ORG 5
INICIO bsf 0x03,5 ;banco 1
movlw 0xff
movwf 0x05 ;RA0..RA4 entradas
clrf 0x06 ;RB0..RB7 salidas
bcf 0x03,5 ;banco cero
clrf 0x05
clrf 0x06
BUCLE1 btfsc 0x05,0 ;verifico si la entrada RA0
goto BORR ;esta habilitando o no la
goto REV1 ;alarma
BORR clrf 0x06
goto BUCLE1
___________________________________________________________________ 110
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Circuito practico
PROYECTO Nº 2
Realizaremos un programa para un juego como el caso del “Tiro del dado”, que
consiste en sacar un numero arbitrario al azar, comprendido entre el nº1 y el nº 6
incluidos. La base de este programa, consiste en generar un contador,(usando un
registro auxiliar) que cuente entre el nº1 y el nº6 en forma cíclica. Mediante una
interrupción, se lee el estado actual del contador, y mediante una tabla de conversión,
aplicando direccionamiento indirecto, se convierte el número leído, en una salida para
excitar un display de 7 segmentos.
A los efectos de que la probabilidad de lectura del contador sea la misma para cualquier
número, se deberá prestar atención, para que el tiempo transitorio que permanece cada
número, sea el mismo
El programa se desarrollara sin definir etiquetas.
Desarrollaremos primero el diagrama de flujo:
___________________________________________________________________ 111
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
Comienzo
Se incrementa el
contador
Se definen tipo de
microcontrolador
SI NO
Llego la cuenta
Se define vector a6
reset y vector ?
interrupción
Rutina de la
interrupción
Se definen externa
entradas /salidas
Se obtiene lectura
del contador y
Bucle indefinido, dirección indexada
se sale por la de la tabla de
interrupción conversión
Lectura de la tabla
Se habilita de conversión
interrupción gral
GIE e interrupción
externa
Salida del valor de
la tabla de
conversión para
Se carga el excitar 7
contador auxiliar segmentos
FIN
___________________________________________________________________ 112
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROGRAMA DADO.ASM
;DADO.ASM
;programa que simula un dado electronico con salida 7 segmentos
;(RB1...RB7)con numeros aleatorios de 1, 2, 3, 4, 5, 6. "El tiro del
dado"
;se realiza por un pulso en la entrada RB0/INT que provoca una
; interrupcion externa (flanco descendente).
LIST p= 16F84
RADIX HEX
ORG 0
goto INICIO ;inicio del programa
ORG 4
goto INT ;salto a la rutina interrup.
___________________________________________________________________ 113
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
nop
PROYECTO Nº3
Modificación automatismo “Nivel tanque.asm”
___________________________________________________________________ 114
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
DIAGRAMA DE FLUJO “NIVEL TANQUE1.ASM”
Liquido en bajada Liquido en subida
Comienzo
Inspección Inspección
entradas , Se definen entradas,
obtengo entradas y obtengo
direcciona salidas direcciona
miento miento
indirecto indirecto
Se carga tabla
Cargo ascendente Cargo
salidas con desde 0x0C salidas con
valor de la valor de la
tabla en tabla en
descenso ascenso
Se carga tabla
descendente
NO desde 0x=0C NO
Nivel lleno Nivel lleno
? ?
SI SI
SI
NO
Bucle22 Rebose Bucle11
?
Inspección NO
entradas, con Nivel lleno
direcc. ?
Indirecto , SI
obtengo valor
de las salidas Inspección
entradas con
direcc.indirecto,
SI obtengo valor de
Nivel lleno las salidas
?
NO
Vacío SI NO
? Rebose
?
FIN
___________________________________________________________________ 115
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
PROGRAMA “NIVEL TANQUE1.ASM”
; NIVEL TANQUE1.ASM
LIST P=16F84
RADIX HEX
; TABLA ASCENDENTE
; ----------------
movlw 0x07 ;Guardo tabla Nø1 ascendente
movwf 0x0c ;a partir de la direcc. 0x0c
movlw 0x20 ;hasta la direcc. 0x13
movwf 0x0d
movwf 0x0e
movwf 0x0f
movwf 0x11
movlw 0x03
movwf 0x10
movlw 0x09
movwf 0x12
movlw 0x18
movwf 0x13
;TABLA DESCENDENTE 1
;------------------
___________________________________________________________________ 116
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
movlw 0x18
movwf 0x1b
btfss 0x06,4 ;Salto condicional revisando
;si se produjo REBOSE en salida
; despues de actuar el V.reset
goto BUCLE1 ;salto condicional a BUCLE1
goto BUCLE2 ;salto condicional a BUCLE2
___________________________________________________________________ 117
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
goto BUCLE1 ;salto incondicional a BUCLE1
goto BUCLE22 ;salto incondicional a BUCLE2
end
clrf PUERTAA
clrf PUERTAB
inter btfss INTCON,0 ; Explora flag int por cambio RB4 RB7
goto parar
goto alarma
___________________________________________________________________ 118
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
NOP
bcf PUERTAA,1
goto bocina
end
___________________________________________________________________ 119
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli
UTN REG. SANTA FE – ELECTRONICA II –ING. ELECTRICA
7-2 Microcontroladores
……………………………………………………………………………………………
TABLA REPERTORIO DE INSTRUCCIONES PIC16F84-PIC16F87x
INSTRUCCIONES DE “SALTO”
___________________________________________________________________ 120
Apunte de cátedra Autor: Ing. Domingo C. Guarnaschelli