Curso de Pic (Saber Electronica)
Curso de Pic (Saber Electronica)
Curso de Pic (Saber Electronica)
Estudiantes y Aficionados
Para un buen aprendizaje práctico, este manual se complementa con un CD y un video que le enseñan los fundamentos sobre mi
crocontroladores PIC y lo guían paso a paso para que arme su propio cargador universal y aprenda a realizar sus primeros programas.
Presentando este manual en cualquiera de nuestros distribuidores autorizados en América Latina (búsque el más cerca de su zona en
www.webelectronica.com.ar) puede adquirirlos a precio promocional. El costo del CD + el video (presentando este manual) es el si
guiente: Argentina: $20; México: $150; Otros Países: U$S18.
En Argentina llame al: (011) 4301-8804. En México llame al: (0155) 5787-1779
Bases Generales
Sepa qué es un PIC, cómo se compone y para qué puede utilizarlo.
Fig. 3
un temporizador de arranque del oscilador de CLOCK, un (unidad arimética y lógica). En este sector es imprescin
circuito de reset y un circuito llamado de vigilancia o dible utilizar un registro ya que una operación aritmética
WATCHDOG. Los dos primeros bloques procuran un o lógica siempre se efectúa entre dos números. Los nú
arranque ordenado para no producir una carga al mismo meros binarios que deben procesarse se toman de la me
tiempo sobre la fuente. Por último, existe un circuito con moria de datos, el primero se acumula en el registro de
un nombre curioso: “perro guardián”. Su función es estar trabajo o registro W (de Work = trabajo) el segundo es el
vigilante el máximo de tiempo que tarda el microprocesa presente en el instante en que se invoca la memoria de
dor en completar su programa (o mejor sería decir, la de datos. Como las operaciones pueden ser encadenadas
rivación más larga de su programa) y en caso de superar (cuando el resultado sirve como operando de la siguien
se ese tiempo, provocar un reset automático porque el te operación, tal como el caso de un producto) el registro
microprocesador se quedó trabado en alguna parte de su W tiene un retorno a la ALU.
programa. También se dice que el microprocesador se Vemos además que la ALU está comandada por el
quedó colgado o congelado. bloque MUX (MUltipleXador). En efecto, la ALU requiere
Este bloque de circuitos no trabaja independiente que se le envíen números para procesar que le lleguen
mente sino que requiere conexiones al exterior y al inte desde la memoria de datos, pero antes se la debe predis
rior del dispositivo. Por ejemplo, no siempre son utilizados poner para que efectúe la operación requerida (compara
y es el programa quien determina su utilización y además ción, rotación de dígitos, etc.).
ajusta sus parámetros. Esto se realiza a través del bloque El registro de estado o estatus colabora durante las
de control o decodificador de instrucciones. operaciones matemáticas. Piense cómo opera Ud. para
Analicemos ahora la sección de arriba a la izquierda realizar una resta: primero ubica el primer número, luego
en donde observamos la memoria de programa, el conta el segundo y después comienza a analizar los bits menos
dor de programa, el registro de instrucciones y la pila o significativos (las unidades), pero si el número de arriba
STACK de 8 niveles. Cuando hablamos de registros nos es menor que el número de abajo, entonces toma presta
referimos a pequeñas unidades de memoria transitoria, do de la columna de las decenas, luego debe recordar es-
construida por lo general con un registro de desplaza to porque el número de arriba en la columna de las dece
miento como los analizados en “el rey micro”. Son memo nas se redujo en una unidad. En realidad, aunque se tra
rias volátiles que se utilizan para guardar información por te de una operación entre dos números su ejecución re
un tiempo mínimo, con el fin de realizar una operación quiere guardar lo que se llama acarreo en otro registro y
compleja de varios pasos. éste no es otra cosa más que el registro STATUS.
El contador de programa es el responsable de que el El PIC16C84 contiene además de todo lo visto una
microprocesador vaya analizando las instrucciones en or- memoria RAM de registros que puede ser llamada desde
den ascendente. Este guarda el número de instrucción en el registro de instrucción a través de un multiplexador de
el STACK y la instrucción misma la pasa al registro de ins direcciones. Esta sección sólo se utiliza en desarrollos
trucciones desde donde se envía al resto del microproce avanzados. Ahora bien, un microcontrolador sin programa
sador. El STACK es, en realidad, una pila de registros (en no sabe hacer nada, es como un niño recién nacido; tie-
nuestro ejemplo hay 8), debido a que el programa puede ne algunos reflejos condicionados como el de succión
tener derivaciones (en la jerga LOOPS, rulos o subpro que le permite alimentarse pero no sabe hacer más que
gramas). Cuando se termina de ejecutar un loop se debe eso. Nosotros deberemos enseñarle a realizar acciones y
volver al mismo punto del programa en donde se había lo vamos a hacer como a un bebé, paso a paso. Su capa
producido la bifurcación y eso es posible porque ese nú cidad de aprendizaje es enorme y sumamente variada. Le
mero de instrucción quedó guardado en uno de los regis vamos a enseñar a llorar a intervalos regulares, a encen
tros de la pila. Es común que un loop tenga, a su vez, un der luces, a sumar, a restar, etc.
loop secundario y cuando se ejecuta ese loop secundario Enseñarle significa programarlo y eso se realiza con
se debe volver al mismo punto del loop primario, eso se una plaqueta de programación que depende de cada
consigue con guardar ese número de instrucción del loop marca y modelo de microcontrolador. Antiguamente los
secundario en otro registro de la pila. microprocesadores tenían una ventanita transparente y
Analicemos ahora la sección inferior derecha. En ese era necesario exponerlos a la luz ultravioleta para borrar
sector se ubican los bloques responsables de efectuar su memoria e introducir un programa nuevo. Actualmente
operaciones matemáticas y lógicas binarias; recordemos cuentan con memorias que no tienen este requisito. Bas
que el nombre ALU proviene de Aritmetic Logic Unite ta con cargarlos con un programa para que se borre el
provee un retardo al
Figura encendido o posterior
11 al pulsado de reset
porque C1 se cargará
lentamente a través
de R1 con una cons
tante de tiempo de
Fig. 10 22kΩ x 10µF =
220mS.
El resistor R3 limi
ta la corriente de
descarga de C1 a
El Reset valores compatibles con sus características de corriente
de pico máxima.
El PIC “se resetea” cuando la pata 4 (MCLR negada) D1 descarga a C1 cuando la tensión de fuente decae
se pone a potencial bajo. Para simplificar el circuito de re para permitir un reset inmediato cuando la fuente se apa
set el PIC posee un temporizador interno que permite ga y se enciende en rápida sucesión. R2 limita la corrien
realizar un reset automático cuando se aplica tensión de te de reset, tomada desde el microprocesador. Este se
5V. En estos casos el circuito externo de reset sólo impli gundo sistema se suele utilizar cuando se requiere un re
ca el uso de un resistor de 10kΩ entre la pata 4 y fuente seteado remoto a través de varios metros de cable que
tal como se muestra en la figura 11. podrían captar zumbido (C1 reduce la impedancia del cir
En muchos circuitos es necesario realizar un reset cuito de reset).
manual y para ello
existen dos posi
bilidades, una es Fig. 12
utilizar sólo el
temporizador in
terno (por progra
ma) y la otra es
agregar una cons
tante de tiempo
exterior como se
muestra en la fi
gura 12. En el se
gundo circuito C1
programa en un lenguaje entendible por el usuario, nor moria de programa del PIC. También se puede emplear
malmente conocido como “assembler”. Los PIC basan su cualquier otro cargador, hasta iuncluso se podrían cargar
programación en un set reducido de instrucciones que los datos manualmente, tal como veremos oportuname
permiten editar el programa generando un archivo con nte. Todos los programas cargadores precisarán de un
extensión “asm”. circuito “eléctrico” o hardware para poder realizar la fun
Existen programas que se encargan de “traducir” el ción de carga.
programa escrito en lenguaje assembler (asm) a progra
ma escrito en lenguaje de máquina (hex); a estos progra
mas se los denomina traductores o ensambladores. LOS CARGADORES DE PICS
Por lo tanto, para escribir un programa y cargarlo en
un PIC precisamos: Dijimos que un cargador de PIC debe poseer por un
lado el circuito que permita cargar el programa desde una
• Un utilitario o programa que nos permita escribir el computadora (hardware) y el programa que permita ma
juego de sentencias a cargar en la memoria de programa nejar a dicho circuito para realizar la operación de carga
del PIC. Este utilitario es un “editor” y como ejemplo tene (software). El circuito debe ser muy simple.
mos el MPLAB. Vamos a suponer que no tenemos un dispositivo pro
• Un utilitario o programa que nos permita “traducir” el gramador a nuestra disposición; es decir que deberemos
programa escrito en assembler a lenguaje de máquina armar también un dispositivo programador de nuestros
para que podamos cargarlo en el PIC. A ese programa se PICs que se conecte al puerto paralelo de una PC (el
lo denomina “ensamblador” y como ejemplo tenemos al puerto de impresora).
MPASM. Nuestra intención es que construya un dispositivo pa
• Un utilitario para “cargar” el archivo que tiene el pro- ra programar PIC que sea muy sencillo de modo que se
grama en lenguaje de máquina (archivo con extensión pueda armar en el mismo protoboard y que se conectará
hex) en la memoria del PIC. A estos programas se los de- a la PC por intermedio de una manguera.
nomina “cargadores” y como ejemplo tenemos al NOPPP, Como todos sabemos, un dispositivo para una PC
al PIC PRO y a tantos otros, muchos de los cuales men (hardware), siempre necesita un programa que lo contro
cionaremos más adelante. le (software). Nuestra intención es que Ud. no compre na
da más que lo imprescindible; así que vamos a usar un
Pero también existen otros utilitarios que permiten “si software gratuito llamado NOPPP que puede bajarse por
mular” y “emular” un programa para ver cómo se compor Internet. Ud puede bajar este programa, el MPLAB, el
ta antes de cargarlo en el PIC. MPASM y otros programas y utilitarios, siguiendo los pa-
El simulador permite detectar errores en el programa sos dados en la página de contenidos especiales de Sa
(el MPLAB permite simular) para poder corregirlos. El ber Electrónica y, lo que es más importante, en forma to
emulador permite que “una computadora se comporte co talmente GRATUITA.
mo PIC” siendo las patas del puerto, las correspondientes Para ello diríjase a: www.webelectronica.com.ar (si
a las del PIC. no tiene Internet o no sabe cómo se hace, lleve este es
Esto quiere decir que si queremos hacer circuitos con crito a cualquier cybercafé y pídale al encargado que le
PICs, para poder predisponerlo adecuadamente precisa baje los programas). Haga doble click sobre el ícono
remos: password y luego digite la clave aiwa15.
Recuerde que cuando decimos “programar” nos esta
• Programa MPLAB: Para editar (escribir) un progra mos refiriendo a diseñar un programa para un PIC y a la
ma en lenguaje assembler y así generar el archivo con persona que realizó ese trabajo la llamamos “programa
extensión asm. El MPLAB también me permite “simular” dor”; cuando decimos “cargar” nos estaremos refiriendo a
el funcionamiento del programa para detectar errores y llenar con datos la memoria de un PIC y el dispositivo que
corregirlos. realiza esta función lo llamaremos “cargador de PICs”.
• Programa MPASM: Para “ensamblar” o convertir el Aunque parezca increíble nuestro amplio idioma no tiene
archivo asm en archivo hex con el objeto de cargarlo en una palabra precisa que diferenciara a la acción del apa
el PIC. rato y se suscitaban graves confusiones al leer, por algo
• Programa NOPPP: O cualquier otro cargador que tan simple. En realidad, sí estaba acuñado un término
permita ingresar el archivo con extensión hex en la me- práctico para el dispositivo: “quemador de PICs”, pero el
mismo sólo se puede aplicar a aquellos PICs que sólo se féricos tienen diferentes opciones: el clock puede ser a
pueden grabar una sola vez. Por otro lado, el término se cristal cuando se requiera precisión, o a RC (como en
puede confundir con un dispositivo que funcionando mal nuestro caso) cuando sólo se requiere que la secuencia
quema a los PICs en lugar de cargarlos, tal como el au- de encendido tenga un tiempo aproximado. En cuanto al
tor mencionará con respecto a un programador comer reset, éste puede ser externo con un pulsador o interno y
cial. automático, cada vez que se conecta la alimentación de
Navegando por Internet es posible encontrar gran 5V.
cantidad de programas cargadores de PICs, nosotros ha Una vez definidas estas cosas se puede dibujar el cir-
remos referencia a los cargadores:
* Cargador NOPPP
* Cargador PROPIC
* Cargador Universal de PICs y EEPROM
* Cargador PIC800
* Cargador PP84
NOPPP es un programa de uso libre ampliamente di cuito completo, tal como lo mostramos en la figura 13.
fundido que sirve para cargar PICs del tipo 16C84, 16F83 Observemos primero la sección periférica imprescin
y 16F84, pero también se dán otros cargadores con sus dible. El clock está generado por un oscilador RC realiza
respectivos programas, que sirven para otros componen do con el PIC, R1 y C1 (elegidos para obtener una se
tes. cuencia completa que dure un segundo aproximadamen
PICPRO es un programador avanzado en relación te), en tanto que el reset se realiza en forma automática,
con el NOPPP y sirve para ser montado cuando no se cada vez que se enciende el equipo, por intermedio de
quieren correr riesgos con la PC que se está utilizando R6. Nuestro circuito de aplicación no puede ser más sen
para cargar PICs y cuando se desea tener un trabajo li cillo, sólo utilizamos cuatro LEDs sobre las patas RA0 a
bre de errores (el NOPPP es un programa para aprendi RA3 (puerto “A” tomado parcialmente) y sus correspon
zaje). dientes resistores de pull up (resistores a fuente). Nada
El Programador Universal sirve para programar: más simple y fácil de armar en un panel protoboard.
12C508, 12C509, 12C67X, 16C55X, 16C61, 16C62X,
16C71, 16C71X, 16C8X, 16F8X, 16F873/4/6/7, ¿Qué ocurriría si compro los componentes, los armo
16C73/74/76/77. También programa memorias EEPROM y pruebo directamente el circuito?
de la serie 24LCXX. No va a funcionar porque como el PIC no está instrui
PIC800 es un programador para 16C84, 16F84, do para realizar ninguna función y los LEDs van a perma
16F873/74/76/77. necer todos encendidos. El PIC tiene una memoria inter-
PP84 es un programador sencillo del tipo NOPPP de na que debe cargarse con números binarios de 8 dígitos;
buenas prestaciones. exactamente tiene 48 posiciones de memoria (numera
das desde el 0 hasta el 2F en números hexadecimales),
Un circuito con PIC siempre se compone de dos sec en donde se le indicará qué tarea debe realizar o qué da
ciones. El circuito del dispositivo deseado y los necesa tos fijos debe cargar para ejecutar esas tareas.
rios componentes periféricos imprescindibles para que el En nuestro caso activar transistores internos en algu
PIC funcione, a saber clock y reset (la primer sección nas patas del puerto “A” (predispuestas como salidas) de
cambia con cada proyecto, en tanto que la segunda pue modo de generar cortocircuitos momentáneos a masa en
de ser común a muchos proyectos). Ambos circuitos peri forma secuencial.
El dispositivo con un zócalo para conectar el PIC e mo es un hardware que deberemos usar más adelante
instruirlo (cargarle los datos en la memoria de program- para programar otros PICs conviene armarlo en forma
na) se llama genéricamente “Programador de PICs”, pe más definitiva utilizando una plaqueta de circuito impreso
ro nosotros en este artículo convenimos en llamarlo “Car o una plaqueta ojalillada. Si Ud. sólo desea armar el cir
gador de PICs” y es como un apéndice de nuestra PC, cuito de este artículo puede armar tanto el cargador co
conectado con un cable al puerto paralelo de la misma. mo el circuito de aplicación en dos lugares distintos del
Si la PC tiene dos puertos paralelos de salida se usa mismo protoboard.
rá uno para la impresora y el otro para nuestro programa El PIC, como una memoria, tiene una pata que pre-
dor, si sólo tiene uno, se desconectará provisoriamente la dispone el dispositivo para leer o para escribir. Si la pata
impresora para conectar el programador, o mejor aún, se 4 del PIC está a un potencial comprendido entre 13 y 14
conectarán ambos dispositivos a través de una caja se V, el PIC está preparado para escribir los datos que pro
lectora que se consigue en los negocios de computado vienen de la PC. Si la pata 4 está por debajo de 6V, el dis
ras y se usa para conectar dos impresoras a la misma positivo está previsto para ser leído. Los datos a leer o es
PC. cribir se ponen/obtienen de la pata 13 del PIC con la pa-
Si Ud. tiene un mínimo conocimiento sobre computa ta 12 del mismo que opera como clock.
doras, sabrá que un dispositivo conectado a la PC es to Aquellos que conocen el proceso de carga de datos
talmente inútil si no está acompañado de un programa en una memoria serie, no tendrán mayores inconvenien
instalado en el disco rígido de la misma. En algunos ca- te en entender la frase anterior. Para aquellos que no co
sos se necesitan dos programas, a saber: el driver del nocen el proceso explicamos lo siguiente:
dispositivo y un programa de aplicación que utilice dicho Un PIC se lee/escribe accediendo a las diferentes po
dispositivo. En el caso de dispositivos que se conectan en siciones de memoria por la misma pata por la que se ob-
el puerto paralelo, el programa driver no es necesario tienen/ingresan los datos (la pata 13). La señal primero
porque dicho puerto ya está debidamente habilitado para elige la posición de memoria a ser leída/escrita, y luego
usar la impresora. Lo que sí se requiere obligatoriamen que esa posición está accesible se escriben/leen los da
te, es un software de aplicación del programador que tos. El clock que se coloca en la pata 12 sirve para indi
suele proveerlo el fabricante del mismo. car en qué momento se debe transferir la información.
Programadores y software de aplicación de los mis- Los datos pueden estar sobre la pata 13 todo el tiempo
mos hay muchos. Algunos son muy simples y económi que Ud. desee, ya que no serán ni leídos ni escritos por
cos (tan económicos que muchos se entregan gratuita la PC hasta que se produzca un cambio de estado (de al
mente por Internet, es decir que el autor regala el softwa to para bajo) en la pata 12.
re y da las explicaciones para armar el hardware) y otros En la figura 14 mostramos las formas de señal indica-
son muy complejos y caros. La diferencia entre unos y Fig. 14
otros suele ser la posibilidad de aceptar más tipos de
PICs (además del 16C84 y 16F84 existen muchos otros)
e inclusive microprocesadores o memorias de otras mar-
cas. También se diferencian en la velocidad a la cual car-
gan el PIC; los hay de alta productividad que trabajan con
un elevado flujo de datos y otros más lentos que sólo sir
ven para tareas de aprendizaje.
En nuestro caso vamos a trabajar con un software
que se llama NOPPP, que es absolutamente gratuito y se
puede bajar desde Internet. Este software está previsto
para ser usado sólo con los PIC16C84, PIC16C83 y
PIC16F84 que son los más utilizados.
Con respecto al hardware, Ud. puede usar el que pro-
pone el autor del software que es muy sencillo o usar otro
que le propongo yo más adelante y que tiene algunas
ventajas con respecto a una mejor forma de los pulsos de
programación. El NOPPP es suficientemente sencillo co
mo para implementarlo en un panel protoboard, pero co
perfectamente predeterminada que debe respetarse a ul del programa, el PIC analiza su predisposición y si el
tranza. Las predisposiciones son tres y las vamos a ana Watchdog timer (literalmente perro guardián) está habili
lizar por orden: tado provoca un reset programado. En los programas
más simples y donde se producen loops infinitos a propó
a) La prohibición de lectura. El PIC se programa pe sito (de los que sólo se sale tocando un pulsador), se
ro el programa no puede ser leído. Cada tanto aparece in suele dejar el perro guardián desconectado para evitar un
formación en Internet sobre alguna empresa dedicada a funcionamiento errático. Cada cargador de programas
leer PICs protegidos, sin embargo, aún no he conseguido tiene un software diferente y esto implica que las predis
leer ningún PIC protegido. Aclaremos que el programa posiciones anteriores, también llamadas fusibles de pre
protegido no se puede leer, pero el PIC se puede volver disposición se accionen con sentencias diferentes que
a grabar. El autor escuchó también una especie que dice serán explicadas más adelante.
que el PIC16Fxx fue creado por una supuesta filtración
en el secreto del programa de los PIC16Cxx, pero el au-
tor no tiene pruebas de la certeza de esta noticia. EL CARGADOR NOPPP
b) Habilitación del timer de reset. En el pinup del
PIC se puede observar que la pata llamada MCLR nega El NOPPP es un software para un cargador muy sim
do (4) tiene un doble uso. En principio sirve para predis ple y efectivo. Realmente no tiene defectos importantes y
poner el PIC en grabación o lectura, como ya fuera co nos permite cargar los PIC 16C83, 16C84 y 16F84 en for
mentado; pero cuando su tensión cae por debajo de 1V, ma muy económica ya que el hardware correspondiente
el PIC se resetea y comienza la lectura del programa por sólo requiere dos diodos rápidos de señal, un BC548 y 4
el principio. Este tipo de reset se llama reset a pulsador y resistores, además de una fuente regulada doble de 13 y
se utiliza para provocar alguna acción como, por ejemplo, 5V y un conector para el puerto paralelo de la PC. Más
comenzar una secuencia de encendidos de LEDS o en adelante veremos el circuito completo pero para entender
cender un LED por un tiempo predeterminado. Este mo el funcionamiento del cargador de programas nada mejor
do de funcionamiento requiere una acción externa de re que el circuito simplificado de la figura 16. A propósito, el
set (apretar un pulsador). La misma acción de reset se nombre del software proviene de las iniciales de NO Pie
puede conseguir en forma automática cada vez que se ce Programer Pic, es decir: programador para PIC sin pie
conecta la fuente de 5V. Este modo de trabajar sólo re zas en alusión a los muy pocos componentes que requie
quiere que la pata MCLR (pata 4) esté permanentemen re. Las patas de comunicación con el puerto paralelo de
te conectada a 5V (con un puente o un resistor de 1kΩ) y la PC están indicadas como 1J1, 2J1, etc, ya con J1 de
que el PIC esté predispuesto con el Power-up Timer en signamos al conector de entrada y el número inicial indi-
ON (temporizador de encendido conectado). Cuando el
temporizador está habilitado, luego de conectar la fuente
de 5V, comienza un conteo interno (que dura 72ms) du Fig. 16
rante el cual el PIC pone todas sus compuertas internas
en cero (reset) y recién después comienza a efectuar los
pasos que le indica el programa. A propósito, el nombre
MCLR proviene de MASTER CLEAR (literalmente, lim
piador maestro).
c) Circuito de vigilancia (perro guardián). En reali
dad el PIC tiene un reset extra que opera luego de un
cierto tiempo si no se realiza la operación final del progra
ma. Es como una especie de rutina automática de des
congelamiento que opera en caso de falla del programa.
Eventualmente puede ingresar algún pulso de energía al
sistema que envíe al programa a un loop (rizo) eterno
(una derivación o camino cerrado sobre sí mismo). Una
vez que el programa ingresó en ese camino no puede sa
lir de él salvo que se produzca un reset. Si pasa un tiem
po considerable sin que se llegue a la última sentencia
garse completo.
Ahora que conoce
mos el funcionamiento
del cargador de progra
mas NOPPP vamos a
completar el circuito
con una fuente de ali
mentación y el conec
tor para PC (figura 17).
Observe que las
fuentes están confor
madas por dos regula
dores de 5 y de 12V
Fig. 17 pero, como necesita
mos un regulador de
13V, realizamos una
ca a qué pata se dirige el cable (también incluimos el co pequeña modificación en el regulador de 12V; agregando
lor del mismo). Los datos (oscilando de 0 o 5V) ingresan los diodos D1 y D2 la tensión de salida se incrementa a
en sucesión por el cable 14J1 y, atravesando el resistor un valor de 13,2V. El otro cambio importante es el agre
R2, llegan a la pata 13 del PIC. La pata 13 perteneciente gado de capacitores de filtro que, como Ud. observa,
al puerto “B” se comporta como una pata de entrada de siempre se ubican de a dos: un electrolítico para filtrar las
datos en tanto el cable 2J1 se encuentra en el estado ba- bajas frecuencias y un cerámico disco para las altas fre
jo es decir que la pata 4 Vpp está a un potencial de 13V cuencias.
aproximadamente. Por último se agrega un conector del tipo DB21 ma
Al mismo tiempo, el cable 17J1 se manda a potencial cho para conectar el dispositivo directamente a la salida
de masa para que los datos entrantes no salgan a su vez de la impresora de una PC. En el circuito dibujamos el co
por el cable 11J1; de este modo, el diodo D1 no permite nector visto por el lado de las patas de conexiones y el
que el potencial del cable supere la tensión de barrera del código de colores de cable adecuado para usar un cable
diodo (es decir que el diodo D1 opera como una llave). plano de 5 hilos (negro, marrón, rojo, naranja y amarillo)
Como ya sabemos los datos deben ser validados por me al cual se le retuerce por encima otro de color blanco que
dio de un cambio de estado de la señal de clock que in opera como masa y blindaje. Todo este circuito es suma
gresa desde la PC por el cable 1J1. mente sencillo y si Ud. sólo quiere conocer los PICs me
Fórmese una imagen mental del flujo de datos. Pien diante este manual técnico, pero no se va dedicar a tra
se en la PC como si bombeara datos al PIC por el cable bajar permanentemente con ellos, puede armarlo en un
14J1; el PIC, para no inflarse, los devuelve por el cable módulo de armado sin soldaduras (protoboard) junto con
11J1. En realidad, los datos ingresan por la pata 13 del el circuito de un destellador rítmico (figura 18).
PIC y se instalan en la memoria; pero a continuación, el
programa de carga verifica que el dato esté en la posición
de memoria correspondiente y si así ocurre, se habilita la
carga del siguiente dato. La secuencia es tal que:
B) se graba,
Fig. 19
Fig. 22
Fig. 23
El Set de Instrucciones
INTRODUCCIÓN
Una instrucción es un comando, parte del programa,
que se le aplica al PIC para que lo interprete y ejecute su
cumplimiento. La instrucción se compone de una serie de
bits presentada en secciones o posiciones perfectamen
te delimitadas, que el procesador interpreta para cumplir
una orden deseada, quedando establecidas las variables
que se modifican.
Dicho de otra forma, las instrucciones poseen un for-
mato de acuerdo a un sistema de codificación. El forma-
to cambia de acuerdo con la operación que se va a rea
lizar.
Cada instrucción, para la línea baja de los PICs tipo
16C5X, consiste en una palabra de 12 bits que codifica Figura 24
en un solo bloque, la orden, el operador y la ubicación del
resultado o el salto (en caso de que lo hubiere). En los programas.
microcontroladores PICs tipo 16X84 cada instrucción tie- Como veremos, el resultado de la operación se guar-
ne una longitud de 14 bits. da en un sitio definido por el programador (dependiendo
Los bits que actúan como datos de la memoria de qué estado tome el bit “d”) y que esta instrucción mo
EPROM se reciben en el decodificador de instrucciones, difica los bits C, DC y Z del registro de estado (STATUS).
y operan con el contador de programa y el registro de tra Esto quiere decir que cuando coloco la instrucción:
bajo W, para acceder a lugares específicos del microcon ADDWF f,d
trolador, tales como la ALU, posiciones de memoria, re
gistros, etc. El ensamblador generará el código:
Como sabemos, los PICs 16X84, entre otros, mane- 0001 11df ffff
jan un set reducido de instrucciones (35 instrucciones en En este código, los seis bits de mayor peso (bits 6 al
lo que se denomina RISC) que presentan una codifica 11 en la figura 25) definen la operación que va a realizar
ción muy particular llamada “formato de la instrucción”. la instrucción de acuerdo a lo requerido por el programa-
Cada instrucción posee su formato y es total-
mente definido por MICROCHIP.
En la figura 24 podemos apreciar “la sintaxis” de
una instrucción del set. Se trata de la instrucción que
suma el contenido del registro de trabajo con el con
tenido de un registro cuya dirección está determina
da por el operador “f”. En esta figura, en primer lugar
se observa la “sintaxis”, es decir, la forma en que el
programador escribirá la instrucción en el lenguaje
“entendible por el operador” (el programa en .asm).
La codificación es el formato de la palabra que defi
ne la instrucción y que veremos en detalle luego. No
te que para que se complete la instrucción se nece Figura 25
sita una sola palabra y un solo ciclo del contador de
dor. Aquí se define una orden que el PIC interpreta y eje Los pulsos entrantes del reloj son divididos por 4, ge
cuta sobre un operando determinado, cuya dirección la nerando diferentes señales denominadas Q1, Q2, Q3 y
busca según lo indicado por los 5 bits menos significati Q4. El estado Q1 hace incrementar el contador de progra
vos (bits 0 al 4 en la figura 25). ma, Q2 y Q3, se encargan de la decodificación y ejecu
El bit 5 es un código de reconocimiento de destino y ción de la instrucción y por último, Q4 es la fase de bús
determina en qué lugar se va a alojar el resultado de la queda de la instrucción. El código se almacena en el re
operación. Si este bit es “0” el destino de la operación se gistro de instrucciones.
rá puesto en el registro de trabajo (W). Si el bit “d” es
puesto a “1” el destino será el de la posición de memoria
definido por “f”. EL SET DE INSTRUCCIONES DEL 16X84
Los cinco bits de menor peso en el formato de la ins
trucción representan la dirección donde está guardado el Vimos cómo es la estructura de una instrucción, ra
operando (f), que está en la memoria de datos y por te zón por la cual le recomendamos que lea nuevamente el
ner cinco bits sólo podemos direccionar una de las 32 po comienzo de este capítulo si no entiende lo que a conti
siciones de memoria de datos. nuación expresaremos.
La mayoría de las instrucciones se realizan en un ci Los códigos (denominados mnemónicos) que simbo
clo de contador de programa (ciclo de instrucción) excep lizan un conjunto de instrucciones, representan la tarea
to las instrucciones de salto que necesitan dos ciclos pa que debe hacer el microcontrolador una vez que las ana-
ra ejecutarla. Se determina el ciclo de instrucción divi lice en función del operando.
diendo por cuatro la frecuencia del oscilador, elegida pa Un mnemónico ayuda a recordar el significado que
ra el funcionamiento del microcontrolador tal como se ob tiene la instrucción.
serva en la figura 26. Para poder analizar al conjunto de instrucciones que
Es decir, la señal que proviene del oscilador externo, conforman el set RISC, se los suele agrupar teniendo en
conectado a los pines OSC1/CLKIN y OSC2/CLKOUT del cuenta el tipo de operación que realizan, así es común
microcontrolador, se divide en cuatro ciclos, obteniéndo que se las presente bajo cuatro posibles formas, a saber:
se así la señal requerida por el procesador interno para
realizar las operaciones. De esta manera se puede reali 1. Instrucciones orientadas a registros.
zar la búsqueda y ejecución de la instrucción. 2. Instrucciones orientadas a bits.
El reloj de instrucción es el ciclo interno que posee el 3. Instrucciones con literales.
microcontrolador para cronometrar el tiempo de ejecución 4. Instrucciones de control y especiales.
de las instrucciones.
En la figura 27 vemos un cuadro
donde se reproducen las instruccio
nes orientadas a registros, la figura
28 muestra las operaciones orienta
das a bits y la figura 29 nos permite
conocer cuáles son las instrucciones
con literales y de control.
Sobre las notas a las que hace
mos referencia en dichas figuras, de-
be tener en cuenta lo siguiente:
Nota 1. Al modificar un registro
de entrada/salida (E/S) con una
operación sobre él mismo (por ejem
plo MOVF PORTB,1), el valor utiliza
do es el que se encuentre presente
en las patas del PORTB. Por ejem
plo, si el biestable tiene un "1" para
una pata configurada como entrada
Figura 26
y se pone a nivel bajo desde el exte-
rior, el dato se volverá a escribir como un "0". Nota 3. Si se modifica el Contador de Programa (PC
Nota 2. Si se ejecuta esta instrucción sobre el TMR0 ó CP) o es verdadera una condición de prueba, la instruc
y d=1, será borrado el divisor de frecuencia (preescaler), ción requiere dos ciclos de máquina. El segundo ciclo se
si está asignado al TMR0. ejecuta como un NOPPP.
Figura 27
Figura 28
Figura 29
Programación de PICs
CIRCUITO DE UN Figura 30
ENTRENADOR
En Saber Electrónica hemos
desarrollado un “entrenador” para
aprender a programar y cargar
PICs, este entrenador se muestra
en la figura 30.
Antes de dar los primeros
ejemplos es conveniente tener en
cuenta los siguientes conceptos:
ptob equ 06
4) Un programa siempre “debería” comenzar con la Nombré a la variable ptob y la coloqué en la dirección
últimas operaciones hacen que al ejecutarse un progra los dos bits menos significativos
ma, éste se quede en un lazo que se llama “loop cerra del port B (figura 32)
do”.
La única manera de salir de este loop es pulsando list p=16f84
Figura 32
Figura 33
En la figura 33 se observa el programa correspon algún momento le diré al programa que vaya hacia
diente a un secuenciador de 8 canales que hemos esa dirección.
editado en el programa MPLAB.
kloop decfsz k,f
list p=16f84
goto kloop
include <p16f84.inc>
Ahora doy la instrucción para que se decremente
__CONFIG _RC_OSC & _WDT_OFF & _PWRTE_ON
el contenido de la variable k y si ese contenido es “0”
Este juego de sentencias indica que se va a utili entonces que salte una instrucción; sino es “0” enton
zar el PIC 16F84, se pide que se carguen las librerías ces mando al contador de programa a la etiqueta
del PIC y se configura al programa para trabajar con kloop para que se haga un nuevo decremento. Es de
clock RC, el temporizador WDT apagado y el tempori cir, estoy haciendo un lazo cerrado para “perder tiem
zador libre activo. po”
Figura 34
34
INTRODUCCIÓN MP40000.EXE
MP40000.WO2
MP40000.WO3
http//www.microchip.com/10/Tools
hacer. Luego de instalarlos, ejecute MPLAB.EXE o clique que pueden ser resistidos por el simulador. Clique 16F84
el ícono MPLAB para iniciar el sistema. y luego presione el botón "Reset". De este modo se ini
Aparecerá el escritorio del MPLAB (figura 36). ciará el simulador, y debería aparecer en la barra de es
tado "16F84" y "Sim". Se encuentra así en el modo simu
lador para el 16F84.
Figura 37 Figura 39
Figura 41
Figura 40
fijo estándar para los archivos de proyectos en el MPLAB. Nota: Como puede ver, hay una cantidad de filas y
El prefijo del nombre de archivo del proyecto, en este columnas en este diálogo.
caso "tutor84", será el prefijo por defecto de muchos de Cada fila usualmente corresponde a un "cambio",
los archivos que el MPLAB usará o creará para esta guía. aquellos elementos que se establecen en la línea de co
Clique "Aceptar (OK)" para que aparezca el diálogo Pro mando cuando se invoca una herramienta. De hecho, la
yecto MPLAB. Este diálogo puede parecer confuso, pero configuración de estos cambios se refleja en la ventana
en realidad es muy simple. "Línea de Comando (comand line)", próxima al margen
Nota: El simulador, los programadores y los sistemas inferior de la pantalla. Esta es la línea de comando que se
emuladores que operan con el MPLAB usan un archivo usará cuando se invoque el MPASM desde el MPLAB. Por
hex creado por el ensamble, la compilación y/o el “linking” el momento, puede usar las configuraciones por defecto,
del código fuente. Algunas herramientas diferentes pue pero cuando ya sepa construir una aplicación, probable-
den crear archivos hex, al tener en cuenta que estas he mente deseará cambiar algunas.
rramientas formarán parte de cada proyecto. Al clicar el botón "Aceptar (OK)", aplicará estas con
Los proyectos le dan la flexibilidad para describir có figuraciones, y retornará al diálogo "Editar Proyecto
mo se construirá la aplicación y qué herramientas se usa (Edit Project)", con el ícono (botón) "Agrega Nodo (Add
rán para crear el archivo .hex. Obviamente, en la guía Node)" disponible. Presione el botón "Agregar Nodo".
nos ocuparemos de todos estos detalles. Aparecerá el diálogo de exploración de Windows están
El diálogo "Editar Proyecto" será semejante al mos dar, con el mismo directorio usado para el proyecto. Ingre
trado en la figura 40. se el nombre de archivo: tutor84.asm y presione "Acep
Advierta que el nombre del archivo de destino ya ha tar". Retornará al diálogo "Editar Proyecto", donde po
sido completado. Ya conoce el modo de desarrollo que drá ver "tutor84.asm" añadido debajo del archivo hex,
configuramos previamente y asume que usaremos la se que indica que es un nodo concurrente. Al presionar
rie de herramientas de lenguaje Microchip. En la ventana "Aceptar", retornará al escritorio MPLAB con un archivo
"Archivos de Proyecto (Files proyect)", encontrará tu de código fuente abierto y aún sin nombre.
tor84. [hex]. Al destacar este nombre, se podrá utilizar el
ícono "Propiedades del Nodo (Node Properties)". Se- Cómo Crear un nuevo Archivo Fuente Simple
guidamente debe indicarle al MPLAB cómo crear el archi Clique dentro del espacio en blanco de la ventana de
vo hex. Hágalo clicando el botón "Propiedades del Nodo". archivo creada. Seguramente se llamará "Sin título (Un-
titled)". De este modo accederá al "foco" de la ventana. ya está listo para escribir el código que almacenará en el
Use la opción de menú "Archivo>Guardar como...", y PIC para que cumpla una función determinada.
guarde el archivo vacío como tutor84.asm. Cuando abra
el diálogo de exploración estándar, encontrará su ubica Ingresar el Código Fuente
ción en el directorio del proyecto. Ingrese el nombre de ar Use el mouse para ubicar el cursor al comienzo de la
chivo y presione "Aceptar". Vea la figura 42. ventana de archivo vacío tutor84.asm, e ingrese el texto
de la tabla 1, exactamente como está escrito en cada lí
nea. No debe ingresar los comentarios (los textos que si
Figura 42 guen a cada punto y coma).
Este código es un programa muy simple que incre
menta un contador y lo "resetea" a un valor predetermina
do cuando el contador vuelve a cero.
proceso de ensamble, aparecerá la ventana "Resulta - La línea del código fuente en esta dirección será destaca
dos de Constr ucción (Build Results" (figura 43): da con una barra oscura. También advertirá que en la ba-
rra de estado, la PC se establecerá en 0x00.
Use el ítem de menú "Debug>Ejecutar>Paso (De-
bug>Run>step)" (figura 44). Al hacerlo, el contador del
programa avanzará hasta la siguiente ubicación de ins
trucción. La barra oscura seguirá el código fuente y el
contador del programa desplegado en la barra de estado
Figura 43 avanzará hasta "4".
Cuando ejecute el ítem de menú "Debug>Ejecutar-
>Paso", advierta la aparición de un texto en el lado dere
Ha ingresado intencionalmente al menos “un error” si cho del ítem de menú que dirá "F7". El mismo equivale a
ingresó el código tal como lo hemos escrito en el paso an "tecla de función siete" en su teclado. Muchas funciones
terior. El último "goto" en el programa refiere a un rótulo del MPLAB se asignan a "teclas-especiales". Estas teclas
inexistente llamado "bug". Dado que este rótulo no ha si- cumplen la misma función que los ítems de menú a los
do definido previamente, el lenguaje ensamblador infor cuales corresponden. Presione F7 varias veces y verá có
mará el error. También podría relevar otros errores. mo el contador del programa y la barra avanzan a través
Haga un doble click sobre el mensaje de error. De del programa.
este modo ubicará el cursor en la línea que contiene el Ejecute el ítem de menú "Debug>Ejecutar>Ejecutar
error en el código fuente. Cambie "bug" por "start". Use la (Debug>Run>Run)" o presione F9 para inciar la ejecu
ventana "Resultados de construcción (Build Results)" ción del programa desde la la ubicación actual del conta
para hacer una búsqueda de errores, y reparar los que dor. Los colores de la barra de estado cambiarán, para in
aparecieran en el código fuente. Reensamble el archivo dicar que el programa está ejecutando las instrucciones.
ejecutando la función de menú "Proyecto>Construir to- Ninguno de los campos de la barra de estado se actuali
do". Este procedimiento puede demandar un par de re zará mientras el programa esté en ejecución.
peticiones. Detenga el programa ejecutando el ítem de menú
Nota: Cuando reconstruya un proyecto, todos sus ar "Debug>Run>Halt (detener)" o presionando F5. La ba
chivos fuente serán guardados en el disco. rra de estado volverá a su color original, y el contador del
Luego de reparar todos los problemas en el código programa y otras informaciones de su estado serán ac
fuente, la ventana "Resultados de construcción" mostrará tualizadas.
el mensaje "Construcción completada exitosamente Nota: Otra manera de ejecutar funciones es usar la
(Build completed successfully)". Ya ha completado un barra de herramientas ubicada en el margen superior de
proyecto que puede ejecutarse usando el simulador. la pantalla. Si ubica el cursor sobre los ítems de la barra
de herramientas, podrá ver el nombre de su función en la
Ejecución de su Programa barra de estado. El botón de la izquierda es un botón es
Use "Debug>Ejecutar>Reset (Debug>Run>Re- tándar "cambiar barra de herramientas (change tool
set)" para iniciar el sistema. El contador del programa se bar)" que le permite desplegar las barras de herramien
reseteará a cero, que es el vector de reset en el 16F84. tas disponibles. Estas pueden ser personalizadas, como
podrá advertirlo en la sección "Algunas Sugerencias" al fi
nal de esta guía. En la barra de herramientas de Debug,
la luz verde es equivalente a F9 (Ejecución) y la luz roja
equivale a F5 (Detención).
Hasta aquí, aprendió a instalar el programa y crear un
amar” Dimos un ejem
archivo para “aprender a prog r amar”.
plo de programación y ya sabemos cómo “correr el pro -
g r ama en la PC” para saber si todo está bien, antes de
escribir dicho programa en nuestro PIC. Sin embargo,
cuando los programas son más largos, es posible come
ter errores que pueden ser evitados. A continuación expli
Figura 44 camos el procedimiento.
Abrir Otras Ventanas Para Watch Symbol)" (figura 45). Tipee "c1" en la caja de nom
el Seguimiento de Errores bre de símbolo para que la lista se despliegue hasta el
Hay muchas maneras de visualizar el programa y su símbolo deseado. Selecciónelo, presione el botón "Agre
ejecución usando el MPLAB. Por ejemplo, este programa gar (Add)", y luego el botón "Cerrar (Close)". Aparece
está destinado a incrementar un contador temporario pe rá en su escritorio MPLAB una ventana de observación
ro, ¿cómo puede asegurarse que se está produciendo di- que mostrará el valor actual del valor "c1" del contador
cho incremento? Una manera es abrir e inspeccionar una temporario.
ventana de registro de archivo. Puede hacerlo ejecutando Presione F7 varias veces para advertir cómo se ac
el ítem de menú "Ventana>registros de archivo (Win- tualiza la ventana de observación mientras el valor del
dow>File Register)". Aparecerá una pequeña ventana contador se incrementa. Si dejó la ventana de registro de
con todos los registros de archivo o el RAM del 16F84. archivo abierta, la misma también será actualizada (mue
Presione F7 (ejecute instrucción por instrucción, si va una de ellas para que pueda ver las dos en la panta
piensa anularlo) varias veces, y observe la actualización lla).
de valores en la ventana de registro de archivo. Hemos Puede guardar la ventana de observación y sus con
colocado la variable del contador en la ubicación de direc figuraciones al ejecutar el ítem "Guardar observación
ción 0x0C. Mientras el contador temporario se incremen (Save Watch)" debajo del botón del sistema, ubicado en
te, este incremento se reflejará en la ventana de registro el ángulo superior izquierdo de la ventana de observa
de archivo. Los registros de archivo cambian de color ción. Al clicar este botón, se desplegará un menú en cas
cuando su valor cambia, de modo que los cambios pue cada. Seleccione "Guardar observación" y aparecerá el
dan advertirse fácilmente en la inspección. De todos mo- diálogo de exploración estándar ubicado en el directorio
dos, en muchos programas complejos, varios valores del proyecto. Elija algún nombre arbitrario y presione
pueden cambiar, así resultará más difícil focalizar las va "Aceptar (OK)".
riables que le interesan. Usando una ventana de observa Si no nombra la ventana de observación, el MPLAB lo
ción especial, este problema puede solucionarse. hará por usted. La ubicación y el estado en la pantalla de
Ahora, ya sabemos mejor qué es lo que estamos ha la ventana abierta o cerrada serán guardados con el pro
ciendo: yecto, de modo que la próxima vez que abra su proyecto,
sus ventanas de observación aparecerán restauradas.
Prog r amamos algo que incrementa en “1” cada Nota: También puede editar ventanas de observación
vez que viene una señal” y podemos ver ificar lo vir - luego de crearlas. Use el botón del sistema y seleccione
tualmente, antes de prog r amar el PIC. "Agregar Observación (Add Watch)" para que aparez
ca un diálogo mediante el cual podrá agregar más ítems.
Creación de una Ventana de Observación Con la tecla "Ins" podrá hacer lo mismo. Si desea borrar
un ítem, selecciónelo y presione la tecla Suprimir (Dele
Ejecute el ítem de menú "Ventana>Nueva ventana te); la observación referida desaparecerá de la ventana.
de observación (Window>New Watch Window)". Apa Puede seleccionar "Editar observación (Edit Watch)"
recerá el diálogo "Agregar Símbolo de Observación (Add en el menú del sistema para cambiar el modo en el cual
se muestra el ítem (en hex, binario, como una variable de
16-bit en vez de 8-bit, etc.).
ERRORES MPASM - Si el MPASM le da un error, haga MENUES DESACTIVADOS - Si encuentra menúes desacti
un doble click sobre el error en la ventana de error para ir vados (opacados), verifique que no haya ingresado el mo
al error en el código fuente. Si tiene múltiples errores, do "sólo Editor (Editor Only)".
siempre elija el primer error —generalmente un error cau Si está seguro de que ha realizado correctamente la
sa errores subsiguientes y al reparar el primero corregirá configuración, intente salir del MPLAB y reinicie el progra
los restantes. ma. ✪
Importante: Este manual se complementa con bibliografía sobre reparación de equipos sin cargo. Por ser comprador de esta edi
ción, Ud. tiene acceso a información y programas GRATIS. Para acceder a los mismos, vaya a nuestro sitio:www.webelectronica-
.com.ar. Luego haga click en el ícono password y digite la clave: aiwa15
ISBN: 987-9227-92-1
Editorial Quark SRL - Herrera 761, (1295) Bs. As. Argentina - Director: Horacio D. Vallejo - Tel.: (005411) 4301-8804
En Internet: www.webelectronica.com.ar - Impresión: Talleres Gráficos Conforti, Bs. As. - octubre de 2002.
Distribución en Argentina: Capital - Carlos Cancellaro e Hijos SH, Gutenberg 3258, Capital - Interior: Bertrán S.A.C., Av. Vélez Sarsfield 1950, Capital