You are on page 1of 34

Para la aprobación de la materia se deben rendir las pruebas escritas correspondientes, presentar una

carpeta de clase completa, prolija y al día. Y una carpeta de ejercicios en la que se irán realizando los
ejercicios resueltos en clase y que deben incluir el anunciado del mismo, el circuito esquemático (una captura
del software Isis incluido en Proteus ) diagrama de flujo y listado en código ensamblador, debiendo comentar
todas las líneas del programa. En todos los casos se presentará una captura de la simulación, y en el caso
de realizar en el protoboard, sacar fotografía del circuito funcionando. El ejercicio se considera aprobado
una vez verificado su funcionamiento en el simulador o en protoboard según corresponda.
Aplicaciones de electrónica digital

Los micro-controladores se utilizan en circuitos electrónicos comerciales desde hace algunos años en forma
masiva, debido a que permiten Realizar aplicaciones de Control que remplazan otras tecnologías (lógica de
relés, circuitos integrados lógicos) agregando la posibilidad de programación de los mismos, aumentando la
flexibilidad de los desarrollos, reduciendo el tamaño y el precio de los equipos.

Un ejemplo de estos son los teléfonos móviles, las cámaras de video, la televisión digital, la transmisión por
satélite y los hornos de microondas. Hasta poco tiempo atrás para los aficionados a la electrónica y
estudiantes resultaba imposible utilizarlos por varias razones: alto precio, complejidad del montaje, y
principalmente por los escases y alto precio de las herramientas de desarrollo (hardware y software).

En los últimos años esto ha cambiado y al bajar los precios de los micro-controladores, aumentar los modelos
y simplificar el montaje, de forma que muchas veces merece la pena utilizarlos en aplicaciones donde antes
se utilizaba lógica discreta.

Los micro controladores más aceptados para diseño de aficionados y estudiantes (y buena parte de
profesionales) son los micro controladores PIC fabricados por microchip technology inc. El mayor fabricante
del mundo de micro controladores de 8 bit.

Profesor Ing. Jorge Pantano 2


Aplicaciones de electrónica digital

Un uC es un CI programable que contiene todos los componentes necesarios para controlar el


funcionamiento de una aplicación determinada, como por ejemplo el control de un lavarropa, o un sistema
de alarmas.

Para esto el uC utiliza pocos componentes asociados. Un sistema con uC debe disponer de una memoria
donde se almacena el programa que gobierna el funcionamiento del mismo, que una vez programado y
configurado, solo sirve para realizar la tarea asignada.

La utilización de un uC reduce el tamaño y el número de componentes, y en consecuencia disminuye el


número de fallas, el volumen, el peso de los equipos entre otras ventajas.

Cada tipo de uC sirve para una serie de casos y el diseñador del sistema es quien debe decidir cuál es el
uC más idóneo para cada uso.

Los uC PIC (peripheral interface controller) son una familia de uC que han tenido gran aceptación en los
últimos años gracias a sus buenas características, bajo costo, reducido consumo, reducidos tamaños,
abundancia de atribución y fácil utilización.

Profesor Ing. Jorge Pantano 3


Aplicaciones de electrónica digital

Profesor Ing. Jorge Pantano 4


Aplicaciones de electrónica digital
Utilizaremos el pic F1684A encapsulado DIL de 18 pines, muy popular debido a su facilidad de uso, puede
trabajar con una frecuencia máxima de 10Mhz y la versión avanzada puede llegar a los 20Mhz (nosotros
realizaremos ejercicios con una frecuencia de 4Mhz).

Se alimenta con 5Vcc aplicado entre los pines Vdd y Vss que son respectivamente alimentación y masa. Se
utiliza típicamente reguladores de tensión 7805 que se alimenta a partir de una fuente de tensión continua
de más de 7V y al menos 500mA (no más de 30V). El consumo de corriente para el funcionamiento del micro
controlador depende de la tensión de alimentación, la frecuencia de trabajo y las cargas que soporten sus
salidas, siendo del orden de unos pocos mA.

El micro controlador se comunica con el mundo exterior a través de los puertos. Estos están constituidos por
líneas digitales de entrada/salida que trabajan entre 0 (nivel lógico cero) y 5V (nivel lógico 1). Los puertos se
pueden configurar como entradas para recibir datos o como salidas para gobernar dispositivos externos.

 El puerto A tiene 5 líneas, pines desde RA0 a RA4.

Profesor Ing. Jorge Pantano 5


Aplicaciones de electrónica digital
 El puerto B con 8 líneas, pines desde RB0 a RB7.

Cada línea se puede configurar como entrada o como salida, independientemente unas de otras, de acuerdo
como se las programe. Así por ejemplo en el circuito de la figura el puerto A esta configurado como entrada
para leer los interruptores y el puerto B está configurado como salida para activar una barra de LED’s.

Las líneas son capaces de entregar niveles de la lógica TTL cuando la tensión de alimentación apropiada
de VDD es de 5V. La máxima capacidad de corriente de cada una de ellas es:
 25 mA, cuando el pin está en nivel bajo, es decir cuando consume corriente. Sin embargo la suma
de las intensidades por las 5 líneas del puerto A no puede exceder de 80 mA, ni la suma de las 8
líneas del puerto B puede exceder de 150mA.
 20 mA, cuando el pin está a nivel alto, es decir cuando proporciona corriente, sin embargo la suma
de intensidades por las 5 líneas del puerto A no puede exceder de 50mA, ni la suma de las 8 líneas
del puerto B pueden exceder de 100mA.

Profesor Ing. Jorge Pantano 6


Aplicaciones de electrónica digital
Todo micro controlador requiere de un circuito que le indique la velocidad de trabajo, es el llamado oscilador
o reloj (clock). Este genera una onda cuadrada de alta frecuencia que se utiliza como señal para sincronizar
todas las operaciones del sistema.
Todos los componentes del reloj se encuentran integrados dentro del micro controlador y solo se requieren
algunos componentes externos, como un cristal de cuarzo o una red RC, para definir la frecuencia de trabajo.
En el PIC 16F84 OSC1/clkin y OSC2/clkout son las líneas utilizadas para tal fin. Permiten 5 tipos de
osciladores para definir la frecuencia del funcionamiento:

 XT: Cristal de cuarzo.


 RC: Oscilador con resistencia y capacitor.
 HS: Cristal de alta velocidad.
 LP: Cristal para baja frecuencia y bajo consumo de potencia.
 Externa: Cuando se aplica una señal de reloj externa.

Es el más utilizado y está basado en un oscilador de cristal de cuarzo o en un resonador cerámico. Es un


oscilador estándar que permite una frecuencia de reloj muy estable comprendida entre los 100Khz y los
4Mhz.
En la figura se muestra la conexión típica. En muchos proyectos se usa un cristal de 4Mhz El cual debe ir
acompañado de dos capacitores entre 15pF y 33pF.

Profesor Ing. Jorge Pantano 7


Aplicaciones de electrónica digital

1)Se recomienda que C1 y C2 sean idénticos.

2) Un resistor serie (RS) requerido para algunos cristales.

3) RF varía de acuerdo al cristal elegido.

Si se comprueba con un osciloscopio la señal en el pin OSC2/clkout, se debe visualizar una onda senoidal
de igual frecuencia que la del cristal utilizado.

Es un oscilador de bajo costo formado por una red RC. Su principal inconveniente es la baja precisión o
exactitud, pero como contra partida esta su bajo precio, que lo hace interesante para algunas aplicaciones
en las cuales no se requiere una gran exactitud en los tiempos.

Los valores recomendados por el fabricante para este tipo de oscilador son de: 5KΩ=REXT=100KΩ.
CEXT=20pF

Profesor Ing. Jorge Pantano 8


Aplicaciones de electrónica digital
La frecuencia del oscilador dividida por 4 queda disponible en el pin OSC2/clkout y puede ser utilizada para
sincronizar otros circuitos externos.

Nota Importante: cuando el oscilador está funcionando en modo RC no conectar un clock externo en OSC1
porque puede dañar el dispositivo.

El oscilador de cristal de alta velocidad HS (high speed) trabaja a una frecuencia comprendida entre 4Mhz
y 20Mhz.
El oscilador de cristal de baja potencia LP (low power) es un oscilador de bajo consumo. Su cristal está
diseñado para trabajar con frecuencias con frecuencias entre 32Khz y 200Khz.

Esta posibilidad se utiliza para hacer funcionar varios micros controladores a partir de una única señal de
clock. La frecuencia del oscilador dividida por cuatro estará disponible en el pin OSC2/clkout.

El llamado reset en un micro controlador provoca el reinicio de su funcionamiento, “comienza a funcionar


desde 0”. En ese estado la mayoría de los dispositivos internos del micro controlador toman un estado
conocido (por defecto). En el micro-controlador se requiere un pin de Reset para reiniciar el funcionamiento
del sistema cuando sea necesario. El pin de reset en los PIC se denomina MCLR (master clear) y produce
un reset cuando se le aplica un nivel lógico bajo.

El pulsador permite generar un reset manual poniendo el master clear a masa cada vez que se lo presiona.
El reset permanece mientras el pulsador esté operado y no inicia la secuencia de arranque hasta que sea
liberado.

Profesor Ing. Jorge Pantano 9


Aplicaciones de electrónica digital

Es un recurso interno del micro controlador que proporciona un reset al micro controlador en el momento de
conectar la fuente de alimentación.

El pic dispone además de un temporizador denominado PWRT (power-up timer) que proporciona un retardo
de 72ms desde el momento de la conexión a la alimentación. Un reset es mantenido durante ese tiempo,
garantizando que VDD alcance un nivel aceptable de tensión para un correcto arranque del sistema.

Hardware correspondiente a entradas/salidas:

Profesor Ing. Jorge Pantano 10


Aplicaciones de electrónica digital

En este capítulo vamos a estudiar algunos componentes que se pueden conectar al micro controlador para
realizar las prácticas.

El led es un dispositivo que permite comprobar el funcionamiento de los circuitos mediante la emisión de luz.
Se polariza en directo con una tensión entre 1,2v y 2,2v de acuerdo al modelo, y solo requiere entre 5mA a
30mA para su encendido.
El pic 16F84 puede manejar LED’s en forma directa de dos formas distintas de acuerdo a la figura:
 Conectando el cátodo a la salida del micro controlador y el ánodo a el positivo de la alimentación a
través de una resistencia limitadora. En este caso el LED se ilumina con un nivel bajo.
 Conectado el ánodo del LED a la salida del micro controlador a través de una resistencia limitadora
y el cátodo a masa. En este caso el LED se ilumina con un nivel alto.

Los LED también se pueden encontrar en encapsulados en barras de 8 o 10 LEDS

Profesor Ing. Jorge Pantano 11


Aplicaciones de electrónica digital

Estos dispositivos permiten introducir un nivel lógico “0” o “1” según la posición en que se encuentre “cerrado”
o “abierto”.
La lectura del estado de interruptores y pulsadores es muy simple, basta conectar el mismo entre una entrada
y masa, con el agregado de una resistencia de pull-up de 10K.

En algunos proyectos es necesario utilizar como entrada señales de alta tensión o relacionada con la tensión
de la red eléctrica. Estas tensiones no se pueden aplicar directamente al micro controlador si es necesario
eléctricamente el circuito mediante un opto acoplador.
El integrado 4N25 es un opto acoplador muy popular cuya capsula de tipo DIL-6 incluye un led y un foto
transistor.

Profesor Ing. Jorge Pantano 12


Aplicaciones de electrónica digital

 Cuando se aplica una tensión en Vin, circula una corriente por el LED emitiendo un haz de luz que
incide sobre el transistor y lo satura. En ese caso en la entrada del micro controlador se aplica un
nivel bajo (0V).
 Cuando no se aplica tensión al LED el mismo se encuentra apagado, por lo tanto el foto-transistor
queda bloqueado y en la entrada del micro controlador aparece un nivel alto (5V).

La ventaja de estos circuitos es que están eléctricamente aislados, la única comunicación entre la entrada y
la salida es la luz que emite el LED.

Profesor Ing. Jorge Pantano 13


Aplicaciones de electrónica digital
SE utiliza para representar valores numéricos. Cada display consta de 7 segmentos y un punto decimal,
todos ellos son diodos LED. Los mismos se pueden encontrar en dos configuraciones posibles, de acuerdo
a los pines que tengan unidos: Ánodo común o cátodo común:

Los segmentos del display se controlan directamente mediante los pines de puerto “B”.
El principio del display de 7 segmentos hace que requieran muchas líneas para su control, más adelante
veremos que con el uso de un Ci se pueden gobernar hasta 4 dígitos con muy pocas líneas.
La representación de números, letras y signos se pueden realizar con el uso del uC, que aprenderemos más
adelante.

En algunas oportunidades tenemos que realizar algún proyecto donde, por ejemplo, halla que encender
lamparitas de 220V, motores, etc. Cualquier error además de ocasionar daños al circuito puede producir
lesiones personales, por lo tanto hay que tener especial cuidado en revisar las aislaciones de todas las
conexiones.

En algunas oportunidades tenemos:

Profesor Ing. Jorge Pantano 14


Aplicaciones de electrónica digital
El uso de un relé es la forma más sencilla de manejar cargas de potencia a partir de una línea de salida del
uC (en este caso RB3). Se utilizan un par de transistores NPN en configuración Darlington. Cuando la salida
del micro controlador proporciona un nivel alto a la base del Darlington, pasa a conducción y activa el relé,
que al cerrar sus contactos puede controlar una potencia mayor en la carga. Este circuito también aísla
eléctricamente la carga del micro controlador. El valor de la potencia a controlar depende de los contactos
del relé y varía de acuerdo al modelo, aunque casi todos pueden soportar más de 5A.

Es indispensable conectar un diodo en inversa en paralelo con la bobina del relé como se ve en la figura 15
como protección ante los picos de fuerza contra electromotriz producidos por la carga inductiva de la bobina
en el momento de la conmutación.

Para cargas e hasta 10W es mejor utilizar relés encapsulados en DIL que necesitan menor corriente de
activación, aunque sus contactos no permiten activar cargas muy grandes. Normalmente este tipo de relé
llevan incorporados dentro de la capsula el diodo de protección. En este caso alcanza simplemente con un
BC547 en configuración colector abierto para activar la bobina de este relé (corriente máxima de la carga
500mA).

Para controlar un cierto número de relés a partir de un mismo micro controlador se puede utilizar un circuito
integrado especializado como el ULN 2003. Este integrado dispone de 7 circuitos inversores realizados
internamente con circuitos Darlington que soporta una tensión máxima de 50v y pueden alimentar cargas de
hasta 500mA, incorporando también los diodos de protección.

El aislamiento necesario entre el micro controlador y la carga de 220V se realiza mediante un opto-acoplador
MOC que es un circuito integrado que incluye un led que controla al foto-triac. Este dispositivo está

Profesor Ing. Jorge Pantano 15


Aplicaciones de electrónica digital
especialmente diseñado para usarse como interface entre sistemas lógicos con equipos que se alimentan
de la red eléctrica. Encapsulado dip 6 con una tensión de aislamiento de 7500v, es capaz de tirar hasta
100mA lo que le permite alimentar cargas de hasta 20W en forma directa. El foto-triac interno permite
controlar casi la totalidad de los grandes triacs, lo que sería imposible con un foto-transistor común.

Cuenta con un detector de cruce por cero interno que le permite ahorrar gran cantidad de componentes
externos. Cuando la conmutación de un triac no coincide con un cruce por cero de la tensión de red, el
cambio brusco en la corriente produce ruido eléctrico de alta frecuencia que introduce interferencias en la
tensión de red, que por ejemplo puede afectar las imágenes de un televisor o chasquidos en el parlante de
una radio. Para evitar estos problemas el MOC3041 tiene un detector de cruce por cero que conmuta al foto-
triac únicamente cuando la tensión aplicada al mismo pase por cero.

En la figura cuando RB3 se pone en nivel alto (5v) hará circular una corriente de 15mA por el led del
MOC3041, este emitirá un haz de luz que provoca que el fototriac entre en conducción en el siguiente cruce
por cero, comportándose como un interruptor cerrado que alimenta la carga. Hay que recordar que el triac
se desactiva automáticamente cada vez que la corriente pasa por cero, por lo tanto será necesario
mantenerlo con la señal de control activa durante todo el tiempo que necesite la carga.

Profesor Ing. Jorge Pantano 16


Aplicaciones de electrónica digital

Cuando la línea RB3 pasa a nivel bajo (0v) el led del MOC3041 se apaga y en el siguiente cruce por cero el
triac deja de conducir, comportándose como un interruptor abierto, y por lo tanto la carga se desconecta.

La red RC formada por el capacitor de 10nF y la resistencia de 100Ω mejora el funcionamiento del circuito
filtrando disparos indeseables del triac producidos por picos bruscos en la tensión de red que se pueden
presentar en forma aleatoria.

Esta red es responsable de un consumo de 0,1W aunque el circuito este desactivado.

El MOC4031 que se puede utilizar para disparar un triac externo permitiendo manejar cargas de 1500W o
más dependiendo del triac utilizado.

Cuando el foto-triac entra en conducción, entrega la corriente necesaria para que Q1 entre en conducción.
La resistencia R2 de 360Ω limita la corriente que pasa por el foto-triac para evitar que supere el valor máximo
de 100mA. El triac del ejemplo, el BT137 de 400V/8A permite controlar cargas de hasta 1500W. Pero también
se podrían utilizar en el mismo circuito un BT138 (12Amp) o un BT139 (16Amp).

Estos dispositivos vienen preparados para soportar distintas tensiones de alimentación y se los identifica
mediante un guion con el numero 400 o un guion con un numero 600.

Para conseguir estas potencias el triac debe estar montado sobre un disipador que refrigere adecuadamente.
Hay que tener en cuenta que en la parte metálica del componente va conectada internamente al terminal
T2, por lo tanto hay que aislar al disipador mediante una lámina de mica y un separador plástico para el
tornillo.

Profesor Ing. Jorge Pantano 17


Aplicaciones de electrónica digital

En algunos proyectos es necesario indicar mediante una señal audible la ocurrencia de un evento. Para ello
normalmente se utiliza un zumbador piezoeléctrico miniatura que funciona con tensiones entre 3V a 16V, y
su consumo no supera los 10mA, por lo tanto puede ser alimentado directamente por la salida de un micro
controlador.

Profesor Ing. Jorge Pantano 18


Aplicaciones de electrónica digital

Profesor Ing. Jorge Pantano 19


Aplicaciones de electrónica digital

El micro controlador está diseñado para que en su memoria de programa se almacenen todas las
instrucciones del programa de control. El programa a ejecutar siempre es el mismo, por lo tanto, debe estar
gravado en forma permanente. Pr lo tanto la memoria de programa es del tipo “no volátil” que garantiza que
su contenido se mantiene aún sin alimentación, de modo que el programa no necesita ser cargado
nuevamente cada vez que el sistema se utilice.

La información contenida en estas memorias debe ser grabada previamente mediante un equipo
denominado programador o grabado. El mismo se conecta a la computadora mediante un software que
controla la grabación del programa en la memoria. A este proceso se lo llama programar o grabar el micro
controlador.

El pic 16F84 es un micro controlador con memoria no volátil denominada ROM Flash, que permite una fácil
grabación facilitando los desarrollos, tiene una capacidad de 1KB (1024 posiciones) y está organizada en
palabras de 14Bits. Comenzando desde la posición 000H (posición inicial de reset). Y llega hasta la

Profesor Ing. Jorge Pantano 20


Aplicaciones de electrónica digital
posición 3FFH. Esta memoria admite unas mil grabaciones y el fabricante garantiza que la información
permanece inalterable durante varias decenas de años.

Un programa se compone de instrucciones que generalmente se ejecuta en forma secuencial, y cada una
de esas instrucciones ocupa un lugar en la memoria de programa. El contador de programa o PC (Program
Counter) es un registro interno que se utiliza para direccionar las instrucciones del programa que están
guardadas en la memoria. Este registro contiene la dirección de la próxima instrucción a ejecutar, y se
incrementa automáticamente de manera que la secuencia natural de ejecución del programa es lineal, es
decir una después de la otra. El contador del programa permite direccionar los él KB de memoria desde la
posición 000H hasta la 3FFH. Cuando ocurre un reset, el contador de programa se pone a 0, forzando así
que la dirección inicial sea 000H, por lo tanto, en dicha dirección se debe guardar la primera instrucción del
programa.

En esta memoria se almacenan los datos que se utilizan en un programa. Estos datos varían
constantemente, por lo tanto esta memoria debe ser de lectura y escritura. Se utiliza una memoria
denominada RAM. Esta memoria es de tipo volátil, por lo cual los datos se borran en caso que desaparezca
la alimentación.

Como se aprecia en el grafico está dividida en dos partes:

 Registros de funciones especiales SFR (special function register). Son los primeros registros cada
uno de ellos cumple un propósito especial para el control del micro.
 Registros de propósitos general GPR (general purpose register). Son registros de uso general para
guardar los datos temporales del programa que se está ejecutando. Para el pic 16F84 tiene 68
posiciones.

La memoria de datos cuenta con dos bancos de memoria, banco 0 y banco 1:

 Los registros de SFR están agrupados entre las direcciones 000H hasta 0BH para el banco 0 y entre
las direcciones 80H hasta 8BH para el banco 1. Algunos registros del SFR se encuentran duplicados
para la misma dirección en los dos bancos, con el objeto de simplificar su acceso. Así por ejemplo el
registro status se localiza en las direcciones 03H (banco 0) 83H (banco 1).
 El banco de los registros GPR está formado por 68 posiciones ya que solo son operativas las del
banco 0 (desde la 0CH hasta la 4FH) porque las del banco 1 se mapean sobre el banco 0. Es decir

Profesor Ing. Jorge Pantano 21


Aplicaciones de electrónica digital
cuando se apunta a un registro de propósito general en el banco 1 se accede al mismo registro del
banco 0.

Para seleccionar el banco que se quiere acceder hay que configurar el bit 5 (RP0) del registro status. Con
un 0 se accede al banco 0 y con un 1 se accede al banco 1. El banco 0 es seleccionado automáticamente
después de un reset.

 PORTA, en la posición 05H del banco 0. Es un puerto de entrada/salida de 5bits (pines RA4: RA0)
el puerto A puede leerse o escribirse como un registro cualquiera. Para configurar sus pines como
entrada o salida se utiliza el registro TRISA.
 PORTB, en la posición 06H del banco 0. Es un puerto de entrada/salida de 8bits (pines RB7: RB0)
el puerto B puede leerse o escribirse como un registro cualquiera. Para su configuración como
entrada o salida se utiliza el registro TRIB.
 TRISA, posición 85H del banco 1. Registro que se utiliza para configurar las líneas del puerto A. Un
0 en el bit correspondiente al pin lo configura como salida, mientras que un 1 lo hace como entrada.
 TRISB, posición 86H del banco 1. Registro que permite configurar las líneas del puerto B. Colocando
un 0 en el bit correspondiente del registro TRISB se puede configurar como salida el bit
correspondiente del puerto B, mientras que con un 1 se lo puede configurar como entrada.

Profesor Ing. Jorge Pantano 22


Aplicaciones de electrónica digital

 PCL (program counter low byte), implementado en la posición de memoria RAM 02H (duplicado en
la posición 82H del banco 1). Su contenido correspondo a los 8bits menos significativos del contador
de programa. Este registro es de lectura y escritura.
 PCH (program counter high byte), los 5 bits de mayor peso del pc corresponden a este registro.

Durante la ejecución normal del programa el pc se aumenta con cada instrucción, a menos que se trate de
una instrucción de salto.

Los 13bits del contador de programa le permiten direccionar hasta 8K por 14bits, sin embargo el pic 16F84
dispone solamente de 1K por 14bits.

El registro de trabajo W (work) es el registro principal y participa en la mayoría de las instrucciones.se localiza
dentro de la CPU del pic 16F84. Dentro de la misma el micro posee una ALU (arithmetic logic unit) de 8bits.
Esta se encarga de realizar las operaciones lógicas o aritméticas que requiere la ejecución del programa
con dos operandos, uno que proviene del registro W y otro que se encuentra en cualquier otro registro, o en
el propio código de la instrucción.

Este registro ocupa la posición 03H del banco 0 y 83H del banco 1, es también uno de los registros más
importantes y utilizados. Los bits de este registro indican el estado de la última operación aritmética o lógica
realizada, la causa de reset y los bits de selección de banco para la memoria de bancos. A los bits de registro
de estado se los suele denominar FLAGS o banderas.

Profesor Ing. Jorge Pantano 23


Aplicaciones de electrónica digital

Profesor Ing. Jorge Pantano 24


Aplicaciones de electrónica digital

 Bit7 (IRP): Bit selector de bancos para direccionamiento indirecto.


 Bit6-5 (RP1-RP0): Bits de selección de bancos para direccionamiento directo.
RP1 RP0 BANCO
0 0 0
0 1 1
1 0 2
1 1 3
 Bit4 (TO, time out): Se pone en 1 después de un “power up”, una instrucción “CLRWDT” o la
instrucción “sleep”. Y se pone en 0 cuando el temporizador “WDT” produce un “time out”.
 Bit 3 (PD, power down): Se pone en 1 después de un “power up” o por medio de la instrucción
“CLWDT”. Se pone en 0 por medio de la ejecución de la instrucción “sleep”.
 Bit2 (Z, ZERO): se pone en 1 cuando el resultado de una operación lógica o aritmética da 0. Y se
pone en 0 cuando el resultado de las operaciones no son 0.
 Bit 1 (DC, digit carry): Se pone en 1 cuando se produce el acarreo del tercero a cuarto bit y 0 cuando
no hubo acarreo.
 Bit 0 (C, carry): se pone en 1 cuando hubo acarreo del bit más significativo, y en 0 cuando no hubo
acarreo.

El pic 16F84 dispone de una palabra de configuración (configuration word) de 14bits que se escribe durante
el proceso de grabación del micro controlador y que no se pueden modificar durante la ejecución del
programa. Dichos bits ocupan la posición reservada de la memoria de programa 2007H.

CP PWRTE WDTE FOSC1 FOSC0


BIT13 …. BIT5 BIT4 BIT3 BIT2 BIT1 BIT0

FOSC1 FOSC0 TIPO


0 0 LP
0 1 XT
1 0 HS
1 1 RC

WDT: Watch dog timer enable>> 0 deshabilitado; 1 habilitado.

PWRTE: Power up timer enable>> 0 habilita; deshabilita.

CP: CODE PROECTION (protección de código)>> 0 info protegida; 1 no protegida.

Profesor Ing. Jorge Pantano 25


Aplicaciones de electrónica digital

El único lenguaje que entiendes los uC es el binario. Cualquier instrucción que deba ser ejecutada por el uC
debe estar escrita en binario. A este lenguaje se lo llama lenguaje de máquina, por ser el que entiende el
uC. Los códigos de este lenguaje se llaman código de máquina. Así por ejemplo cuando el pic 16F84 lee el
siguiente código de maquina: “11111000111010”, está recibiendo la instrucción: “suma58 al registro de
trabajo W y guardar el resultado en el mismo registro W”.
Cualquier otro lenguaje que se utilice para escribir esta instrucción deberá ser traducido a binario para que
el uC pueda procesarlo. Dicha codificación binaria resulta incómoda para trabajar, por lo que se utiliza la
codificación hexadecimal para facilitar la interpretación de los códigos de máquina.

El lenguaje de maquina es difícil de usar por el hombre ya que no es su forma natural de expresarse, por
eso se utiliza el lenguaje ensamblador, que es una forma de expresar la instrucciones más parecidas al
lenguaje humano y que sin embargo es muy cercana al uC porque cada una de sus instrucciones se
corresponde con otra en códigos de máquina que el uC es capaz de interpretar.
El lenguaje ensamblador utiliza nemónicos que son grupos de caracteres que simbolizan las órdenes o
tareas que se deben realizar con cada instrucción. Los nemónicos son las iniciales de la instrucción en
lenguaje ingles de forma que recuerdan las operaciones que se realizan en dicha instrucción, facilitando su
memorización.
Así por ejemplo la instrucciones que vimos anteriormente en lenguaje ensamblador se escribiría ADDLW
d”58”,W

“11111000111010” BINRIO

ADDLW d”58”,W ENSAMBLADOR

3E3A HEXADECIMAL

Es un software que se encarga de producir los nemónicos del programa escrito por el usuario a código de
máquina.
El programa escrito en lenguaje ensamblador recibe el nombre código fuente, archivo fuente, fichero
fuente. Que suele tener la extensión *.ASM.
El archivo fuente debe ser traducido al código de maquina mediante el código ensamblador. La mayoría de
los ensambladores proporcionan a sus salidas un archivo que tiene la extensión *.HEX. Este archivo es el
que debe ser gravado en la memoria del programa mediante la utilización de un hardware grabador de uC.
El programa ensamblador para los PIC es el MPASM que trabaja dentro del entorno de programación
llamado MPLAB IDE. Este entorno de trabajo se consigue libremente en la agina web
http://www.microchip.com/.

El código fuente está compuesto por una sucesión de líneas de programa. Todos los archivos fuente tienen
una estructura similar independientemente de la marca y modelo del procesador que utilizamos.
Cada línea de programa está compuesta por cuatro campos o columnas separados por uno o más espacios
o tabulaciones.

Profesor Ing. Jorge Pantano 26


Aplicaciones de electrónica digital
Estos campos son:

 Campo de etiquetas
 Campo del código de operación
 Campo de operandos y datos
 Campo de comentarios

A continuación veremos un ejemplo

Profesor Ing. Jorge Pantano 27


Aplicaciones de electrónica digital

b = bit d = destino
s = set k = constante (literal)
f = file add = sumar
s = skip sub = restar
clr = clear com = complementar
c = clear swap = intercambiar Nibles
mov = mover clr = borrar
l = literal inc = incrementar
w = work (acumulador) dec = decrementar
t = test (comprobar)

INSTRUCCIONES QUE MANEJAN REGISTROS

Nemónicos operandos Descripción Ciclos Flags

ADDWF f,d Suma W y f 1 C, DC, Z


ANDWF f,d AND W con f 1 Z
CLRF f Borra f 1 Z
CLRW --- Borra W 1 Z
COMF f,d Complementa f 1 Z
DECF f,d Decrementa f 1 Z
Decrementa f, si es 0
DECFSZ f,d 1 (2) Ninguno
salta
INCF f,d Incrementa f 1 Z
Incrementa f, si es 0
INCFSZ f,d 1 Ninguno
salta
IORWF f,d OR entre W y f 1 Z
MOVF f,d Mueve f 1 Z
MOVWF f Mueve W a f 1 Ninguno
NOP --- No opera 1 Ninguno
Rota f a la izqda. a
RLF f,d 1 C
través del carry
Rota f a la dcha. a
RRF f,d 1 C
través del carry
SUBWF f,d Resta a f el reg. W 1 C, DC, Z
SWAPF f,d Intercambia f 1 Ninguno
XORWF f,d XOR de W con f 1 Z
INSTRUCCIONES QUE MANIPULAN BITS
BCF f,b Borra bit de f 1 Ninguno
BSF f,b Pone a 1 el bit de f 1 Ninguno
Comprueba un bit de f y
BTFSC f,b 1 (2) Ninguno
salta si es 0

Profesor Ing. Jorge Pantano 28


Aplicaciones de electrónica digital

Comprueba un bit de f y
BTFSS f,b 1 (2) Ninguno
salta si es 1
INSTRUCCIONES DE CONTROL Y DE OPERANDOS INMEDIATOS
ANDLW k AND inmediato con W 1 Z
CALL k Llamada a subrutina 2 Ninguno
CLRWDT k Borra Watchdog 1 TO, PD
GOTO k Salto incondicional 2 Ninguno
IORLW k OR inmediato con W 1 Z
Mueve a W un valor
MOVLW k 1 Ninguno
inmediato
Carga el registro
OPTION k 1 Ninguno
OPTION
RETLW k Retorno y carga de W 2 Ninguno
Pasa a estado de
SLEEP --- 1 TO, PD
reposo
TRIS f Carga el registro 1 Ninguno
XORLW k OR exclusiva a W 1 Z

La primera columna es el campo de etiquetas. Son expresiones alfanuméricas elegidas por el usuario. Su
principal función es identificar a una determinada instrucción del programa, asignando a esa etiqueta el valor
de la dirección de memoria correspondiente a dicha instrucción, facilitando la identificación de estas
direcciones para las instrucciones de salto. Ejemplo:

Principal …………..
……………..
……………..
Goto Principal ; Salta a la dirección de la memoria de
programa
; Identificada con la etiqueta principal
Las etiquetas deben cumplir las siguientes normas:
1. Deben empezar por letras y luego admiten letras, números, y el carácter “_”.
2. No se pueden insertar espacios o tabulaciones antes de la etiqueta, porque de lo contrario será
considerada como una instrucción.
3. No pueden utilizarse palabras reservadas del ensamblador, tales como: instrucciones, nombres de
los registros, nombres de los bits de los registros, directivas del ensamblador.

Especifica la tarea a realizar por el uC, que se traduce directamente a código de maquina por el ensamblador,
por ejemplo:

SLEEP “00 0000 0110 0011”

Profesor Ing. Jorge Pantano 29


Aplicaciones de electrónica digital

Son los datos que necesita la instrucción para ser ejecutada, por ejemplo: MOVWF PORTB, donde
PORTB representa el operando. Este campo puede obtener uno o más operandos separados por comas.
Dependiendo de la instrucción pueden ser números o etiquetas que representen constantes o direcciones.

Ayuda al programador a documentar, explicando el funcionamiento del mismo, facilitando la posibilidad en


el futuro de realizar correcciones y modificaciones. Los comentarios no son tenidos en cuenta por el
ensamblador y por lo tanto no se traducen al lenguaje de máquina.

Los comentarios pueden extenderse a varias líneas con la condición de comenzar siempre por “;” no necesita
tener espacios o tabulaciones del campo anterior, e incluso puede comenzar en la primera posición de la
línea. El ensamblador ignora todo el texto después del “;”, permitiendo utilizar líneas que contengan
solamente comentarios.

Debe tenerse en cuenta que un programa indebidamente documentado sería muy difícil de modificar en el
futuro, o al menos podría resultar tan costoso que haría renunciar a tal propósito.

Los ensambladores permiten que cada línea pueda estar escrita en formato libre, esto significa que puede
haber cualquier número de espacios entre 2 campos de una línea, y se pueden utilizar mayúsculas o
minúsculas a criterio del programador. Sin embargo hay una serie de normas de estilo, que si bien no son
obligatorias facilitan la lectura:

 Conviene respetar el nombre de los registros tal como aparecen en el archivo P16f84a.INC
 Para que el programa sea más legible se recomienda utilizar los tabuladores para definir las
columnas de cada campo.
 Los espacios en blanco no son significativos en ningún campo, como tampoco lo son las líneas en
blanco ni los tabuladores, que solo sirven para darle forma al texto.
 El nombre de las etiquetas debe aclarar, en lo posible, el funcionamiento del programa. Deben ser
significativas y referidas al programa. A veces se suelen utilizar varias palabras para que sean más
significativas, separando con un “_” o utilizando mayúsculas y minúsculas. Ejemplo:
MotorRotaDerecha / MOTOR_ROTA_DERECHA

Técnica de enmascaramiento: Ejemplo de uso en ejercicios N°3 y N°4

Profesor Ing. Jorge Pantano 30


Aplicaciones de electrónica digital

EjN°3
Diseñar circuito y programa para
PIC16f84 que permita reconocer el
estado sobre 4 interruptores en
configuración pull-up conectados a
las líneas RA0 a RA3 y reflejar su
estado sobre 4 leds conectados a las
líneas RB4 a RB7. Se pide diagrama
de flujo, circuito esquemático,
listado assembler.

EjN°4
Modificar el ejercicio 3 agregando
un led a la línea RA4 que encienda
solamente cuando se detecta el
código 1001, y permanece apagado
con cualquier otro código. Se pide
circuito esquemático, diagrama de
flujo y listado assembler.

Para saber si un registro vale 0 hay que cargar el registro sobre sí mismo mediante la instrucción “MOVF”
(que es la única instrucción de carga que posiciona flags) con lo cual se logra posicionar el flag Z sin variar
su contenido.
movf Registro,F ;Registro  Registro
btfss STATUS,Z ;¿es cero?  Z=1
goto NO_ES_CERO
ES_CERO ……. ;si es cero hace una parte del programa
NO_ES_CERO ……. ;si no es cero hace otra
…….

Para comprobar si el contenido de los registros: Registro 1 y Registro 2 son iguales, se podría hacer lo
siguiente:
movf registro1,w
subwf registro2,w
btfsc STATUS,z ;se podria usar xorwf regitro2,w
goto IGUALES
NO_IGUALES …….
…….
IGUALES ……
…….

Profesor Ing. Jorge Pantano 31


Aplicaciones de electrónica digital

En la mayoría de las aplicaciones es necesario definir variables con la finalidad de reservar o asignar las
direcciones de la memoria ram de datos cosas que hasta ahora hacíamos con la directiva ecu. Estas
directivas nos permiten definir una lista de variables, asignándole automáticamente las direcciones libres
disponibles.

Ejemplo típico de uso CBLOCK y ENDC:

Centenas EQU 0x0C CBLOCK 0x0C ;Dirección de inicio


Decenas EQU 0x0D Centenas ;del bloque de
Unidades EQU 0x0E Decenas ;variables que se
Unidades ;van a asignar
ENDC

La directiva CBLOCK del ejemplo indica el valor inicial del conjunto de variables. Si este valor no se coloca,
la primera variable recibe el valor inmediatamente superior al de la última directiva CBLOCK anteriormente
definida. El comienzo de las direcciones será a partir de 0 que corresponde a la zona SFR (registro de usos
específico), esto no es correcto ya que se sobrescriben los datos en dicha zona y el programa no funcionara
correctamente, por lo tanto es importante que el primer CBLOCK cuente con la dirección inicial asignada.

Sintaxis:
#DEFINE <name> { <string> }

Ejemplo de uso #DEFINE:


#DEFINE banco_1 bsf ,5
#DEFINE banco_2 bcf status,5
#DEFINE LED bsf PORTB,4
;*---------------------------------------------------------------------------------*
Inicio banco_1
Led
Banco_0
Enciende_led Goto enciende
;*---------------------------------------------------------------------------------*
END

En la actualidad los programas tienden a diseñarse en forma modular: cada tarea específica es realizada
por un módulo determinado. El uso de subrutinas facilita la programación modular.

Algunas veces el mismo grupo de instrucciones se debe ejecutar varias veces en distintas partes del
programa, de acuerdo a lo que habíamos realizado hasta ahora dicho conjunto de instrucción es debía

Profesor Ing. Jorge Pantano 32


Aplicaciones de electrónica digital
insertarse dentro del programa tantas veces como fuera necesario. Aunque este método parezca más
directo, es el más ineficiente ya que requiere mayor extensión de los programas, y en consecuencia mayor
uso de la memoria ROM (de programa).

La solución más efectiva se obtiene cuando el grupo de instrucciones que se repite aparece una sola vez,
pero con la capacidad de ser invocado desde cualquier punto del programa en caso de ser necesario.

Una subrutina es un conjunto de instrucciones (subprograma) al cual se tiene acceso desde cualquier punto
del programa principal.

La acción de pasar desde el programa principal a la subrutina se denomina “llamada a subrutina” y se utiliza
la instrucción call.

La acción de volver al programa principal después de realizar las tareas determinadas por la subrutina se
llama “retorno de la subrutina” y se realiza mediante la instrucción return. La instrucción return es siempre
la última instrucción de una subrutina.

Cuando una subrutina llama a otra subrutina se produce la situación conocida como “anidamiento de
subrutinas”, es decir que hay subrutinas anidadas unas dentro de otras. Cada call sucesivo sin que
intervenga un return produce un nivel de anidamiento adicional, lo que se puede observar en la siguiente
figura:

Profesor Ing. Jorge Pantano 33


Aplicaciones de electrónica digital

Cuando una señal externa se aplica en la línea RB0/INT, esta detecta su flanco creciente o decreciente
dependiendo del bit 6 del registro OPTION (INTEDG), un 1 detecta flanco creciente y un 0 detecta flanco
decreciente.

El procedimiento que sigue el micro es el siguiente: si está ejecutando una instrucción, termina de ejecutarla,
lee la bandera del habilitador global bit7 del registro INTCON, GIE. Si la encuentra activada, significa que
las interrupciones están habilitadas. Luego detecta si la bandera indicadora de interrupción esta activada
(INTF) (se pone en uno cuando ocurre), si lo está entonces ejecuta la rutina de interrupción. Luego de
deshabilitar GIE para evitar reconocer nuevas interrupciones, el contenido del program counter se almacena
en la pila y salta a la dirección 4 de memoria de programa (Vector de interrupciones).

Para retornar de una rutina de interrupción se utiliza la instrucción RETFIE (retorna y habilita GIE).

;*************************************************************************************
;ENCABEZADO
;*************************************************************************************
;PALABRA DE CONFIGURACION Y DECLARACION DE VARIABLES
;*************************************************************************************
------- -----------
ORG 0
goto Inicio ;Vector de Reset
;**************************************************************************************
ORG 4
goto RSI ; Rutina de servicio de Interrupción
;**************************************************************************************
;Configuraciones
;**************************************************************************************
Inicio bsf STATUS,RP0
------ ------------------
bcf STATUS,RP0
bsf INTCON,GIE ;Se activan las interrupciones en general
bsf INTCON,INTE ;Se habilita la interrupción externa INT en RB0
;**************************************************************************************
;Rutina principal
;**************************************************************************************
Programa -------- ------------------
-------- ------------------
goto Programa
;**************************************************************************************
;Rutina de servicio de interrupción
;**************************************************************************************
RSI bcf INTCON,GIE ;Deshabilita las interrupciones
movwf AUX ;Salvar el contexto
--------- ----------------
--------- ----------------
Movf AUX,w ;Recuperar el contexto
bcf INTCON,INTF ;Borrar la Bandera
retfie ;Retorna colocando un 1 en GIE
;***************************************************************************************
END ;Fin del ensamblado

Profesor Ing. Jorge Pantano 34

You might also like