Está en la página 1de 125

Ing. Horacio D.

Vallejo
Vallejo

Precio en: Arg


Arg entina: $15
México $60 M.N.
Venezuela: $4,500.00
Colombia: $18.000
Otros
Otros Países:
Países: U$S12
Microcontroladores PIC

EDITORIAL
QUARK
Con el aval de

Autor: Ing. Horacio D. Vallejo


Colaboración: Federico Prado
Egon Strauss
Alberto Picerno
Editado por:
EDITORIAL QUA RK S.R.L. ISBN 987-922789-1
Herrera 761/63 (1295) Buenos Aires, Argentina
Tel./fax: (0054-11) 4301-8804

Director: Horacio D. Vallejo


Impresión: Imprenta Rosgal - abril 2002
Queda hecho el depósito que previene la ley 11723
Distribución en Argentina: Capital: Distribuidora Cancellaro e Hijo SH, Gutenberg 3258, Buenos Aires - Interior:
Distribuidora Bertrán S.A.C., Av. Vélez Sarsfield 1950, Buenos Aires
Distribución en Uruguay: Berriel y Martínez, Paraná 750, Montevideo.
Distribución en México: Pernas y Cía., S.A. de C.V., Calle Poniente 134 Nº 650, Col. Ind. Vallejo, Delegación
Azcapotzalco, CP 02300, México DF, Tel.: 55 87 44 55, FAX: 53 68 50 25, email: pernascia@pernascia.com.mx
Distribución en otros países: Colombia: Proespind Ltda. - Cra. 54 Nº 171-21, Depto. Cundinamarca, Bogotá D.C. -
Tel.: 091 526 4208, Fax.: 091 679 5415, Uruguay: Amexi, Paraná 750, Tel.: 209-4709, Chile: Tel.: 01221-3356, Pa-
raguay: Tel.: 621-698, Costa Rica: (506) 250-86-42, Ecuador: (593) 445-17-49, El Salvador: (503) 260-71-
51, Guatemala: (502) 361-17-50, Honduras: (504) 557-91-52, Puerto Rico: (787) 764-89-09, Rep. Domini-
cana: (809) 684-88-44, España: (93) 429-32-72

Representante exclusivo para todo el mundo: Centro Japonés de Información Electrónica, Norte 2 Nº 4, Col. Hogares Mexi-
canos Ecatepec, Edo. de México. - Director: Atsúo Kitaura - Tel.: (0155) 5787-1779 - www.centrojapones.com
Solicite información al (005411)4301-8804 o por Internet a: www.webelectronica.com.ar
(Los compradores de esta edición tienen acceso a información adicional con el password: pic2)

La editorial no se responsabiliza por el contenido del material firmado. Todos los productos o marcas que se mencionan son a los efectos
de prestar un servicio al lector, y no entrañan responsabilidad de nuestra parte. Está prohibida la reproducción total o parcial del material
contenido en esta publicación, así como la industrialización y/o comercialización de los circuitos o ideas que aparecen en los menciona-
dos textos, bajo pena de sanciones legales, salvo mediante autorización por escrito de la editorial.
El Registro INTCON .......................................27
Indice PCL y PCLATH ...............................................28
STACK (PILA) .................................................28
Cap tulo 1 Registros INDF y FSR ....................................29
Arquitectura de un PIC PORTS I/O......................................................30
Registros PORTA y TRISA .............................30
Introducci n ......................................................5 Registros PORTB y TRISB.............................32
Caracter sticas del PIC .....................................5 M dulo Temporizador TIMER0 .......................34
Caracter sticas Perif ricas................................5 Prescaler (Divisor de Frecuencia) ..................35
Caracter sticas Especiales del Interrupci n de Timer0....................................36
Microcontrolador ...............................................6 Memoria de Datos EEPROM..........................36
Patas del PIC....................................................6 Lectura de la Memoria de
Resumen del Dispositivo ..................................9 Datos de EEPROM.........................................38
Ficha Did ctica ...............................................10 Escritura de la Memoria de
Lo que Debe Saber Datos EEPROM..............................................39
Sobre los PICs................................................13 Verificaci n de Escritura .................................40
a) El Procesador es segmentado La CPU del PIC ..............................................42
tipo "pipe line" .................................................13 Bits de Configuraci n......................................43
b) El Procesador es de tipo RISC ..................14 Configuraciones del Oscilador........................43
c) Poseen una arquitectura Oscilador de Cristal o
tipo Harvard ....................................................14 Resonador de Cer mica.................................44
d) Son de arquitectura ortogonal basada Oscilador RC...................................................44
en banco de registros .....................................15 Reset...............................................................44
Palabras de Configuraci n Reset de Encendido .......................................47
e Identificaci n................................................18 Temporizador de Arranque del
Organizaci n de la Memoria...........................19 Oscilador (OST)..............................................48
Organizaci n de la Memoria Temporizador de Encendido
de Programas .................................................19 (PWRT) ...........................................................48
Organizaci n de la Memoria El Perro Guardi n (WDT) ...............................48
de Datos..........................................................19 Interrupciones del Micro .................................49
Los Registros del PIC.....................................20 Interrupci n Externa (INT) ..............................51
Archivo de Registro de Interrupci n por Desborde
Uso General....................................................20 del TMR0 ........................................................51
Registros de Funciones Interrupci n por Cambio de
Especiales (SFR)............................................21 Estado en las patas RB7 y RB4 .....................51
Registro de Status ..........................................23 Interrupci n por Finalizaci n de la Escritura
Registro OPTION_REG..................................25 en la EEPROM de datos ................................51

2 Microcontroladores PIC
Indice

Cap tulo 2 MOVF.....................................................81


Manejo de las Instrucciones MOVWF .................................................82
de un PIC NOP .......................................................83
RETFIE ..................................................83
Introducci n ....................................................53 RETLW ...................................................84
Instrucci n: SUMA ..........................................54 RETURN ................................................85
C digo de la instrucci n ADDWf ....................55 RLF ........................................................85
El Set de Instrucciones RRF........................................................86
del 16X84........................................................56 SLEEP....................................................87
ADDLW...................................................59 SUBLW...................................................88
ADDWF ..................................................60 SUBWF ..................................................90
ANDLW...................................................61 SWAPF...................................................92
ANDWF ..................................................62 XORLW ..................................................93
BCF ........................................................63 XORWF ..................................................94
BSF ........................................................64 Palabras de Configuraci n
BTFSC ...................................................65 e Identificaci n...............................................96
BTFSS....................................................67
CALL ......................................................68
CLRF......................................................69 Cap tulo 3
CLRW.....................................................70 Aprendiendo a Programar
CLRWDT ................................................71
COMF.....................................................72 Circuito de un Entrenador...............................97
DECF .....................................................73 Encendido Intermitente
DECFSZ.................................................74 de un Led......................................................100
GOTO.....................................................75 Secuenciador de 4 Canales .........................108
INCF.......................................................76 Generador de Se ales de Audio...................112
INCFSZ ..................................................77 Los Formatos de los Archivos.......................115
IORLW....................................................78 Secuenciador de 8 Canales..........................115
IORWF ...................................................79 Compilaci n de un Programa .......................118
MOVLW ..................................................80 Carga del Programa en un PIC ....................121

Dedico este libro a todos los que trabajan por una Argentina mejor, a los que creen que
es posible cambiar las cosas desde el trabajo y el esfuerzo colectivo, a los que creen
que las respuestas est n en casa... en esta hermosa y bendita Am rica Latina.
Dedico este libro a quienes saben construir en paz...
Dedico este libro a quienes integran Editorial Quark, Imprenta Rosgal y Centro Japon s
de Informaci n Electr nica.
Horacio Daniel Vallejo

Microcontroladores PIC 3
Microcontroladores PICs

Pr logo:
Los microcontroladores de la empresa Microchip, los PIC , est n ocupando un lugar
de privilegio dentro de la industria electr nica, gracias a la facilidad de implementar
programas con un set reducido de instrucciones y a la importancia que poseen sus ca-
racter sticas.
Cuando en 1998 publiqu el primer art culo sobre estos circuitos integrados, no cre
que su divulgacii n llegar a tan lejos; sin embargo, cuatro a os despu s debo recono-
cer que trabajar con estos chips es un placer del que no se deben privar los amantes
de la electr nica.
Hace algo m s de un a o Editorial Quark public el primer libro sobre este tema titu-
lado: Todo Sobre PICs , texto que trata sobre las caracter sticas fundamentales de es-
tos dispositivos y qu es necesario para editar programas, simularlos y cargarlos en la
memoria de los integrados. Dicho libro fue el punto de partida de una serie que conti-
n a con el presente tomo y muy pronto continuar con Sistemas y Dispositivos con
PICs , el tercer libro de una obra que vaya a saber en qu tomo va a culminar.
Todo Sobre PICs (que tambi n fue el primer texto publicado por Editorial Quark en for-
ma simult nea en varios pa ses de Am rica Latina) es el libro que debe leer todo aqu l
que se inicia en esta disciplina, mientras que Microcontroladores PICs persigue ense-
ar al lector a construir programas para armar sus propios dispositivos. ste es tam-
bi n un texto b sico dado que utilizamos estructuras muy sencillas para realizar los pri-
meros programas. Somos conscientes que para que alguien pueda trabajar con un dis-
positivo primero debe conocerlo y por ello en el cap tulo 1 hablamos sobre los diferen-
tes bloques que integran a los PIC, bas ndonos en la familia 16X54/84 (que fue el
componente que tomamos como referencia en el primer libro). De esta manera Ud. de-
be saber qu es y c mo se emplea la memoria de datos, la memoria de programas, el
perro guardi n, el registro STATUS, etc.
Una vez que tiene conocimientos sobre los recursos con que cuenta, en el cap tulo 2
presentamos las 35 instrucciones del set RISC de esta familia, dando ejemplos de uso
en cada caso. Por ello, es probable que cuando lea algunos temas del cap tulo 1 (co-
mo verificaci n de un dato escrito en la memoria) precise conocer c mo se manejan
determinadas instrucciones. Dicho de otra forma, si al leer un punto en particular no
entiende alg n concepto, contin e la lectura y, seguramente, m s adelante compren-
der lo que hemos querido decir.
Por ltimo, en el cap tulo 3 damos ejemplos de programaci n sobre circuitos reales ,
utilizando algunos temas escritos por el Ing. Picerno en Saber Electr nica, modifica-
dos convenientemente para que aprenda mientras se ejercita .
Estoy convencido que este texto es mejor que el primero, pero no caben dudas que,
si Ud. no sabe nada sobre microcontroladores, precisar leer el libro Todo Sobre PICs.

Ing. Horacio D. Vallejo

4 Microcontroladores PICs
Arquitectura de un PIC

ARQUITECTURA
DE UN PIC

Introducci n

El microcontrolador PIC16F84A de la marca Microchip es del tipo de 8 bits con


EEPROM tipo flash reforzado encapsulado de 18 patas. El elevado rendimiento de
este microprocesador de dise o avanzado permite realizar una gran cantidad de
funciones y prestaciones como veremos a continuaci n.

Caracter sticas del PIC

Esta familia de microcontroladores PIC se destaca por las siguientes prestacio-


nes especiales:
• S lo se necesitan 35 instrucciones de una sola palabra para usarlo.
• Todas las instrucciones son de un solo ciclo con excepci n de las ramificacio-
nes del programa que son de dos ciclos.
• La velocidad de funcionamiento es de DC a 20MHz en la entrada del clock y de
DC a 200 ns (nanosegundos) en el ciclo de instrucciones.
• La memoria del programa tiene capacidad para 1024 palabras (1kB).
• La memoria RAM de datos es de 68 bytes.
• La memoria de datos EEPROM es de 64 bytes.
• Las palabras de instrucciones tienen una extensi n de 14 bits.
• Los bytes de datos tienen una extensi n de 8 bits.
• Posee 15 registros de hardware de funciones especiales.
• Tiene una Pila de hardware de ocho niveles.
• Procesa modos de acceso directo, indirecto y relativo.
• Tiene cuatro fuentes de interrupciones:
-Pata externa RB0/INT
-Exceso del temporizador TMR0
-Interrupci n al cambio PORTB<7:4>
-Al completar la escritura del EEPROM de datos.

Caracter sticas Perif ricas


• 13 patas I/O con control individual de direcci n.
• Fuente de alta corriente para excitaci n directa de LED«s:

Microcontroladores PIC 5
Arquitectura de un PIC

-25 mA m ximo de sink ( nodo) por pata


-25 mA m ximo de source (c todo) por pata.
• Temporizador/contador de 8 bits TMR0 con preescaler (divisor de frecuencia)
programable de 8 bits.

Caracter sticas Especiales del Microcontrolador


• Memoria de programa de 1000 ciclos de escritura/borrado de flash reforzado.
• Memoria de datos EEPROM de 1.000.000 de ciclos de borrado/escritura t pica.
• Retenci n de datos de EEPROM de >40 a os.
• Programaci n en serie dentro del circuito (ICSP = In Circuit Serial Program-
ming) mediante dos patas.
• Power-on Reset (POR), Power-up Timer (PWRT), Oscillator Start-up Timer
(OST).
• Watchdog Timer (WDT) con su propio oscilador RC incorporado en el chip pa-
ra un funcionamiento confiable.
• Protecci n de c digos.
• Modo SLEEP para economizar consumo.
• Opciones seleccionables de oscilador.
• Tecnolog a CMOS con Flash reforzado y EEPROM.
• Tecnolog a de baja potencia y alta velocidad.
• Dise o est tico completo.
• Rango amplio de tensiones de funcionamiento:
-Comercial: 2,0 Volt a 5,5 Volt
-Industrial: 2,0 Volt a 5,5 Volt.
• Consumo muy bajo:
- < 2mA t pico a 5 Volt, 4MHz
- 15 A t pico a 2 Volt, 32kHz
- < 0,5 A t pico de corriente en reposo a 2 Volt.

Patas del PIC

El microcontrolador PIC16C84 es un chip que como puede apreciarse en la figu-


ra 1, dispone de 18 patas.
La funci n que cumple cada una de ellas es la siguiente:

Patas 1, 2, 3 17 y 18 - RA0-RA4/TOCK1 : Es el PORT A. Corresponden a 5 l -


neas bidireccionales de E/S. Es capaz de entregar niveles TTL cuando la tensi n de
alimentaci n aplicada en VDD es de 5V – 5%. El pin RA4, si se programa como sa-

6 Microcontroladores PIC
Arquitectura de un PIC

Figura 1

lida es de colector abierto. Como entrada puede programarse en funcionamiento


normal o como entrada del contador/temporizador TMR0.
______
Pata 4 - MLCR / Vpp: Es una pata de m ltiples aplicaciones, es la entrada de
Reset si est a nivel bajo y tambi n es la habilitaci n de la tensi n de programaci n
cuando se est programando el dispositivo. Cuando su tensi n es la de VDD el PIC
funciona normalmente.

Patas 5 y 14 - VSS y VDD: Son respectivamente las patas de masa y alimenta-


ci n. La tensi n de alimentaci n de un PIC est comprendida entre 2V y 6V aunque
se recomienda no sobrepasar los 5,5V.
Dependiendo de la letra que posea al final, el PIC ser la tensi n admisible. Los
modelos que contienen las letras C, F o CR admiten tensiones de alimentaci n com-
prendidas entre 4V y 4,5V como m nimo hasta 5,5V a 6V como m ximo. Los mode-
los que contienen las letras LC, LF o LCR admiten desde 2V a 6V.

Patas 6, 7, 8, 9, 10, 11, 12, 13 - RB0-RB7: Es el PORT B. Corresponden a ocho


l neas bidireccionales de E/S. Pueden manejar niveles TTL cuando la tensi n de ali-
mentaci n aplicada en VDD es de 5V – 5%. RB0 puede programarse adem s como
entrada de interrupciones externas INT. Los pines RB4 a RB7 pueden programarse
para responder a interrupciones por cambio de estado. Las patas RB6 y RB7 se co-
rresponden con las l neas de entrada de reloj y entrada de datos respectivamente,
cuando est en modo programaci n del integrado.

Patas 15 y 16 - OSC1/CLKIN y OSC2/CLKOUT: Corresponden a los pines de la


entrada externa de reloj y salida de oscilador a cristal respectivamente. Los distintos
elementos de la familia 16X84X, dependiendo de la nomenclatura que utilizan tienen

Microcontroladores PIC 7
Arquitectura de un PIC

distintas caracter sticas de frecuencia m xima de funcionamiento, tipo de oscilador


utilizado para generar frecuencias de reloj y margen de la tensi n de alimentaci n.
Los microcontroladores PIC, permiten cuatro tipos de osciladores externos para
aplicarles la frecuencia de funcionamiento. Durante el proceso de grabaci n, antes
de introducir el programa en memoria, debe indicarse el tipo de oscilador empleado
en los bits FSOC1 y FSOC2 de la Palabra de Configuraci n. Los tipos de oscilado-
res que pueden utilizar los PIC16X54/84 son:

* Oscilador de cristal o resonador de alta velocidad "HS"(High Speed Crystal/Re-


sonator): Es un oscilador con una frecuencia comprendida entre 4MHz y 20MHz (fi-
gura 2).
* Oscilador o resonador cer mico "XT" (Crystal/Resonator): Es un oscilador es-
t ndar que permite una frecuencia de clock m xima de 4MHz.
* Oscilador a cristal o resonador cer mico de baja potencia "LP" (Low Power
Crystal): Se trata de un oscilador de bajo consumo construido con un cristal de cuar-
zo o un resonador dise ado para trabajar con frecuencias comprendidas entre
30kHz y 200kHz.
* Oscilador RC (resistencia capacitor): Tambi n es posible construir un oscilador
mediante la colocaci n de una resistencia y un capacitor externo. Se trata de un os-
cilador de bajo costo.
Su circuito de aplicaci n es el que se muestra en la figura 3. Posee baja preci-
si n la cual depende de la estabilidad de la red RC, pero es f cil de construir y de
bajo precio lo que lo hace interesante para muchas aplicaciones. La resistencia de-
be tener un valor comprendido entre 5k‰ y 10k‰.

Figura 2
Figura 3

El circuito que opera con un cristal o un resonador se muestra en la figura 2 y de-


pende de los valores de C1, C2 y del cristal para el buen funcionamiento del mismo.
Se recomienda ver la tabla de datos del fabricante, aunque para los PIC16X54/84
los capacitores pueden ser del orden de los 27pF para casi todo el rango de frecuen-
cias.
En la figura 3 se muestra un oscilador construido a partir de una celda RC.

8 Microcontroladores PIC
Arquitectura de un PIC

Resumen del Dispositivo


El PIC16F84A, utilizado en muchas aplicaciones y que ha servido de base para
la elaboraci n del primer texto de esta serie titulado: Todo Sobre PICs , pertene-
ce a la familia de rango medio de los microcontroladores PIC. Un diagrama en blo-
ques se encuentra en la figura 4.

Figura 4

Microcontroladores PIC 9
Arquitectura de un PIC

Ficha Did ctica


Antes de avanzar sobre la estructura interna de un PIC, vamos a realizar el pri-
mer resumen mediante una ficha t cnica que contiene la descripci n interna del cir-
cuito integrado.

Los circuitos integrados programables (PIC) de Microchip son microcontrolado-


res con una estructura interna como la mostrada en la figura 4.
Existe un grupo de bloques dedicados a mejorar el funcionamiento pero sin in-
fluir directamente en el flujo de señales. Vemos un temporizador de encendido, un
temporizador de arranque del oscilador de CLOCK, un circuito de reset y un circui-
to llamado de vigilancia o WATCHDOG. Los dos primeros bloques procuran un
arranque ordenado para no producir una carga al mismo tiempo sobre la fuente.
El circuito interno de reset se encarga de volver a “cero” el funcionamiento del cir-
cuito cuando sea requerido. Por último, existe un circuito con un nombre curioso, si
el lector sabe algo de inglés habrá traducido el nombre literalmente como “perro
guardián”. Su función es estar vigilante el máximo tiempo que tarda el microproce-
sador en completar su programa (o mejor sería decir, la derivación más larga de
su programa) y en caso de superarse ese tiempo, provocar un reset automático por-
que el microprocesador se quedó trabado en alguna parte de su programa. Tam-
bién se dice que el microprocesador se quedó colgado o congelado.
Este bloque de circuitos no trabaja independientemente sino que requiere cone-
xiones al exterior y al interior del dispositivo. Por ejemplo, no siempre son utiliza-
dos y es el programa quien determina su utilización y además ajusta sus paráme-
tros. Esto se realiza a través del bloque de control o decodificador de instruccio-
nes.
Analicemos ahora la sección de arriba a la izquierda en donde observamos la
memoria de programa, el contador de programa, el registro de instrucciones y la
pila o STACK de 8 niveles.
Cuando hablamos de registros nos referimos a pequeñas unidades de memoria
transitoria, construida por lo general con un registro de desplazamiento. Son me-
morias volátiles que se utilizan para guardar información por un tiempo mínimo con
el fin de realizar una operación compleja de varios pasos.
El contador de programa es el responsable de que el microprocesador vaya
analizando las instrucciones en orden ascendente. El guarda el número de instruc-
ción en el STACK y la instrucción misma le pasa registro de instrucciones desde
donde se envía al resto del microprocesador.
El STACK es, en realidad, una pila de registros (en nuestro ejemplo hay 8) de-
bido a que el programa puede tener derivaciones (en la jerga LOOPS, rulos o sub-
programas). Cuando se termina de ejecutar un loop se debe volver al mismo pun-
to del programa en donde se había producido la bifurcación y eso es posible por-
que ese número de instrucción quedó guardado en uno de los registros de la pila.
Es común que un loop tenga, a su vez, un loop secundario y cuando se ejecuta ese
loop secundario se debe volver al mismo punto del loop primario, eso se consigue

10 Microcontroladores PIC
Arquitectura de un PIC

guardando ese número de instrucción del loop secundario en otro registro de la


pila.
Analicemos ahora la sección inferior derecha. En ese sector se ubican los blo-
ques responsables de efectuar operaciones matemáticas y lógicas binarias; recor-
demos que el nombre ALU proviene de Aritmetic Logic Unite (unidad arimética y ló-
gica). En este sector es imprescindible utilizar un registro ya que una operación arit-
mética o lógica siempre se efectúa entre dos números. Los números binarios que de-
ben procesarse se toman de la memoria de datos, el primero se acumula en el re-
gistro de trabajo o registro W (de Work = trabajo) el segundo es el presente en el
instante en que se invoca la memoria de datos.
Como las operaciones pueden ser encadenadas (cuando el resultado sirve co-
mo operando de la siguiente operación, tal como el caso de un producto) el regis-
tro W tiene un retorno a la ALU.
Vemos además que la ALU está comandada por el bloque MUX (MUltipleXa-
dor). En efecto, la ALU requiere que se le envíen números para procesar que le lle-
guen desde la memoria de datos pero antes se la debe predisponer para que efec-
túe la operación requerida (comparación, rotación de dígitos, etc.).
El registro de estado o estatus colabora durante las operaciones matemáticas.
Piense cómo opera Ud. para realizar una resta: primero ubica el primer núme-
ro, luego el segundo y después comienza a analizar los bits menos significativos
(las unidades), pero si el número de arriba es menor que el número de abajo, en-
tonces toma prestado de la columna de las decenas, luego debe recordar esto por-
que el número de arriba en la columna de las decenas se redujo en una unidad.
En realidad, aunque se trate de una operación entre dos números su ejecución
requiere guardar lo que se llama acarreo en otro registro y este no es otra cosa
más que el registro STATUS.
En resumen, las características sobresalientes de los PICs son las siguientes:

Denominación: PIC1XXXX.
Longitud de palabra: 14 bits.
Memoria: EEPROM. Desde 512bytes de ROM y 32bytes de RAM a 4kB de
ROM y 256bytes de RAM.
Interface I/O: 13 patas seleccionables de entrada/salida en los modelos están-
dar.
Arquitectura: Von Neumann (Instrucciones y datos juntos). La mayoría de las ins-
trucciones se ejecutan en un ciclo. Pero posee un set de sólo 35 instrucciones de ti-
po RISC (Reduced Instruction Set Computer).
Alimentación: 4 a 6V.
Encapsulado: Múltiples versiones, lo normal es DIP de 18 patas.
Fácil de programar, fácil de cargar, extremadamente confiable, económico. Se
encuentra gran cantidad de software y hardware sin cargo.
Ideal para Aplicaciones en servicio de equipos, diseños y construcción de "cir-
cuitos integrados a medida".

Microcontroladores PIC 11
Arquitectura de un PIC

La memoria de programa contiene palabras de 1kB, lo que permite la formaci n


de 1024 instrucciones, ya que cada palabra del programa posee el mismo ancho que
cada instrucci n. La memoria de datos RAM contiene 68 bytes. La memoria de da-
tos EEPROM contiene 64 bytes.
Adem s existen 13 patas de I/O que se pueden configurar para el usuario en for-
ma individual. Algunas patas son multiplexadas con otras funciones del dispositivo
(tal como vimos anteriormente). Estas funciones incluyen:

• Interrupciones externas.
• Cambios en la interrupci n de PORTB.
• Entrada de clock Timer0.

La Tabla 1 muestra las funciones de las patas del dispositivo con las descripcio-
nes y detalles de cada una.

12 Microcontroladores PIC
Arquitectura de un PIC

Lo que Debe Saber Sobre los PICs


El PIC16X84 al igual que los dem s miembros de su familia, se caracterizan por-
que:

a) El Procesador es segmentado tipo "pipe-line": Lo que significa que aplica


la t cnica de segmentaci n que permite al procesador realizar simult neamente la
ejecuci n de una instrucci n y la b squeda del c digo de la siguiente instrucci n.
Esto permite que se pueda ejecutar una instrucci n en un ciclo. (Cada ciclo de ins-
trucci n son cuatro ciclos de reloj).
Es decir, la mayor a de las instrucciones se realizan en un ciclo de contador de
programa (ciclo de instrucci n) excepto las instrucciones de salto que necesitan dos
ciclos para ejecutarla.
Se determina el ciclo de instrucci n dividiendo por cuatro la frecuencia del osci-
lador, elegida para el funcionamiento del microcontrolador tal como se observa en la
figura 5.
Es decir, la se al que proviene del oscilador externo, conectado a los pines
OSC1/CLKIN y OSC2/CLKOUT del microcontrolador, se divide en cuatro ciclos, ob-
teni ndose as la se al requerida por el procesador interno para realizar las opera-

Figura 5

Microcontroladores PIC 13
Arquitectura de un PIC

ciones. De esta manera se puede realizar la b squeda y ejecuci n de la instrucci n.


El reloj de instrucci n es el ciclo interno que posee el microcontrolador para cro-
nometrar el tiempo de ejecuci n de las instruciones.
Los pulsos entrantes del reloj son divididos por 4, generando diferentes se ales
denominadas Q1, Q2, Q3 y Q4. El estado Q1 hace incrementar el contador de pro-
grama, Q2 y Q3, se encargan de la decodificaci n y ejecuci n de la instrucci n y por
ltimo, Q4 es la fase de b squeda de la instrucci n. El c digo se almacena en el re-
gistro de instrucciones.
b) El procesador es de tipo RISC: Esto implica que el P puede operar con un
juego de instrucciones m nimo (35 instrucciones). Las CPU«s atendiendo al tipo de
instrucciones que utilizan pueden clasificarse en:

• CISC: (Complex Instruction Set Computer). Procesadores de juego de ins-


trucciones complejo, que disponen de un elevado n mero de instrucciones (unas
80), algunas de ellas complejas y potentes, pero que requieren muchos ciclos de
m quina para ejecutar las instrucciones m s poderosas.
• RISC: (Reduced Instruction Set Computer). Controladores que manejan un
juego de instrucciones reducido, en los que la cantidad de instrucciones es m nima
(en nuestro caso 35). Las instrucciones son muy simples y suelen ejecutarse en un
ciclo m quina. Adem s los RISC deben tener una estructura pipeline (vea nueva-
mente la figura 1) y ejecutan todas las instrucciones a la misma velocidad.
• SISC: (Specific Instriction Set Computer). Computadoras que manejan un
set de instrucciones espec fico.

c) Poseen una arquitectura tipo Harvard: Para la construcci n de microproce-


sadores existen b sicamente dos tipos de arquitecturas, una en la que los datos y
la memoria del programa poseen la misma direcci n (denominada Von Neumann) y
otra en la que existe un BUS de comunicaci n independiente para la memoria de da-
tos y la memoria de programa (arquitectura Harvard).
La mayor a de los microprocesadores tradicionales se basan en la estructura ti-
po Von Neumann (figura 6), que se caracteriza por disponer de una nica memoria

Figura 6

14 Microcontroladores PIC
Arquitectura de un PIC

Figura 7

principal en la que se almacenan los datos y las instrucciones, teniendo en cuenta


que existe un sistema de BUS de acceso formado por:
• Bus de datos
• Bus de direcciones
• Bus de control

El modelo Harvard, representado en la figura 7, dispone de dos memorias:


• Memoria de datos
• Memoria de Programa

En los procesadores basados en esta arquitectura cada memoria dispone de su


respectivo bus, lo que permite, que la CPU pueda acceder de forma independiente
y simult nea a la memoria de datos y a la de programa (instrucciones). Como los bu-
ses son independientes stos pueden tener distintos contenidos en la misma direc-
ci n .
d) Son de arquitectura ortogonal basada en banco de registros: Esto signi-
fica que cualquier instrucci n puede utilizar cualquier elemento de la arquitectura co-
mo fuente o destino. Adem s todos los elementos del sistema (temporizadores,
puertos de entrada/salida, posiciones de memoria, etc.), est n implementados f si-
camente como registros (de ah el nombre banco de registros ). Al tener manejo de
banco de registros, la ALU (Unidad Aritm tico-L gica) efect a sus operaciones con
dos operandos, uno que proviene del registro W (Work -que en otras CPUs recibe
el nombre de Acumulador-), y el otro que se encuentra en cualquier otro registro del
P. En la figura 8 vemos el diagrama que indica c mo se ejecuta una instrucci n, la
ALU recibe datos del registro de trabajo y un registro MPX y el resultado puede ir a
cualquier registro o al registro W.
El PIC 16X54/84 posee caracter sticas importantes que lo hace til para el dise-
o de circuitos generales. Entre las caracter sticas m s importantes podemos resal-
tar las siguientes:
• Memoria de programa EEPROM de 1Kx14 bits
• Memoria de datos dividida en 2 reas:

Microcontroladores PIC 15
Arquitectura de un PIC

rea RAM formada por 22 registros de prop sito espec fico (SFR) y
36 de prop sito general (GPR).
rea EEPROM formada por 64 bytes.
• ALU de 8 bits y registro de trabajo W del que normalmente recibe un operando
que puede ser cualquier registro, memoria, puerto de Entrada/Salida o el propio c -
digo de instrucci n.
• Varios canales para conectar al bus de datos: PortA de 5 bits <RA0:RA4> ,
PortB de 8 bits <RB0:RB7>, Temporizador con Preescaler TMR0, etc.
• Contador de programa de 13 bit (lo que en teor a permitir a direccionar 4kB de
memoria, aunque el 16X84 solo dispone de 1kB de memoria implementada).
• Pila de 8 niveles.

Figura 8

La arquitectura del PIC16X84 se mantiene para todos los microcontroladores de


esta subfamilia, diferenci ndose unos de otros por las siguientes caracter sticas:

• PIC 16F84: La memoria de programa es de lk, las palabras son de l4 bits, pe-
ro de tipo Flash. La memoria de datos RAM tiene 68 registros de tama o byte de
prop sito general, en lugar de 36.
• PIC16CR84: La memoria de programa es de 1k con palabras de 14 bits tipo
ROM y la de datos tiene iguales caracter sticas que el PIC16F84.
• PIC16F83: La memoria de programa es de 512 palabras de 14 bits y la RAM
de datos tiene 36 bytes de registros de prop sito general.
• PIC16CR83: Es igual que el PIC16F83, pero la memoria de instrucciones es de
tipo ROM, o sea, s lo grabable durante el proceso de fabricaci n para ser utilizados
con fines espec ficos (circuito integrado a medida).

La caracter stica m s importante del PIC16C84 es que su memoria de programa


es del tipo EEPROM y en el caso del PIC16F84 la principal caracter stica es que su

16 Microcontroladores PIC
Arquitectura de un PIC

memoria es del tipo flash, por lo dem s, otros dispositivos de esta familia disponen
de m s memoria, tienen m s perif ricos, etc.
Los microcontroladores de la gama media disponen de un Contador de Progra-
ma (PC CP) de 13 bits, cuyos bits de menor peso corresponden a los 8 bits del re-
gistro PCL, implementado en la posici n de memoria RAM 02h (y duplicado en la
posici n 82h),y los cinco bit de mayor peso del CP corresponden con los 5 bits de
menor peso del registro PCLATCH, implementado en la posici n de memoria RAM
0Ah (y duplicado en la posici n 8Ah), lo que le permite direccionar hasta 8k x 14 bits
dividido en p ginas de 2k x 14 bits. El PIC16C84 dispone de 1k x14 bits de memo-
ria implementada, desde la posici n 0000h hasta la 03FFh, los 3 bit de mayor peso
del CP no se utilizan, as pues la direcci n 20h, 320h, 420h, A20h,1420h, etc. se
considera como la misma (figura 9).

Figura 9

Un Reset provoca que se pongan a Figura 10


cero todos los bits del los registros PCL
(parte baja del PC) y PCLATCH, forzan-
do que la direcci n de inicio sea la
0000h. El vector de reset se almacena en
la direcci n 0000h, mientras que el vec-
tor de interrupci n est en la direcci n
0004h (figura 10).
La memoria de programa de usuario
propiamente dicha, comienza en la posi-
ci n 0005h y llega hasta la 03FFh.
La pila es una zona de memoria, que
se encuentra separada tanto de la me-
moria de programa como de la de datos.
Tiene una estructura LIFO (Last In First
Out), lo que significa que el ltimo dato
que se guarda es el primero que sale.

Microcontroladores PIC 17
Arquitectura de un PIC

Tiene 8 niveles con una longitud de 13 bits cada uno. Su funcionamiento es como el
de un buffer circular, de tal forma que el valor que se obtiene al realizar nueve des-
plazamientos, es igual al primer desplazamiento. La nica manera de cargar la Pila
es a trav s de la instrucci n CALL (llamada a subrutina) o por una interrupci n que
hacen que con cada una de ellas, se cargue el contenido del PC en el valor supe-
rior de la Pila. Para recuperar el contenido de la Pila en el PC hay que ejecutar una
instrucci n RETURN, RETLW o RETFIE (vuelta del programa de atenci n a una su-
brutina o interrupci n).

Palabras de Configuraci n e Identificaci n


Los PIC de la gama media disponen de una palabra de configuraci n de 14 bits
que se escribe durante el proceso de grabaci n del dispositivo y que debe hacerse
de acuerdo con el sistema en el que se va a insertar. Dichos bits ocupan la posici n
reservada de memoria de programa 2007h. La estructura de la palabra de configu-
raci n es la mostrada en la figura 11.

Figura 11

Bit 4: CP, bit de configuraci n de la protecci n


1= Protecci n de c digo desactivado
0= Protecci n de c digo activado

Bit 3: PWRTE, activaci n del temporizador "Power-Up"


1= Desactivado
0= Activado

Bit 2: WDTE, bit de configuraci n habilitaci n del Watchdog (WDT)


1: WDT activado
0: WDT desactivado

Bit 1 y Bit 0: FOSC<1:0>, tipo de oscilador empleado


11: Oscilador RC
10: Oscilador HS ( 8 - 20MHz)
01: Oscilador XT ( 100 KHz- 4MHz)
00: Oscilador LP (Bajo consumo 32- 200Hz)

18 Microcontroladores PIC
Arquitectura de un PIC

Adem s dispone de cuatro posiciones de memoria de programa ubicadas en las


direcciones <2000h:2003h>, reservadas para las Palabras de Identificaci n ID. Es-
tas palabras que se escriben durante el proceso de grabaci n, s lo emplean los 4
bits de menos peso y se utilizan por el programador para indicar el c digo del dis-
positivo, el n mero de serie, la versi n del programa, etc.

Organizaci n de la Memoria
En el PIC16F84A existen dos bloques de memoria. Estos son la memoria del pro-
grama y la memoria de datos. Cada bloque posee su propio bus, de tal forma que el
acceso a cada uno puede producirse durante el mismo ciclo del oscilador.
La memoria de datos puede dividirse m s a n en la RAM de fines generales y
los Registros de Funciones Especiales (SFR).
El rea de la memoria de datos contiene tambi n los datos de la memoria EE-
PROM. Esta memoria no est directamente introducida en la memoria de datos, si
no es registrada en forma indirecta. Esto significa que un puntero indirecto de direc-
ciones especifica la direcci n de la memoria de datos EEPROM para escribir y leer.
Los 64 bytes de la memoria de datos EEPROM poseen el rango de direcciones de
0h a 3Fh. M s detalles sobre la memoria EEPROM veremos en otro apartado.

Organizaci n de la Memoria de Programas.


El PIC16FXX posee un contador de programas de 13 bits capaz de direccionar
un espacio de memoria de programas de 8k x 14. Para el Pic16F84A, los primeros
1k x 14 (0000h-03FFh) est n f sicamente implementados como vimos en la figura
10. Tal como se muestra, el acceso a una locaci n por encima de la direcci n f sica-
mente implementada, causar un plegado. Por ejemplo, las locaciones 20h, 420h,
820h, C20h, 1020h,1420h, 1820h y 1C20h tendr n la misma instrucci n.
El vector de reset est en 000h y el vector de interrupt en 0004h.
Nota: Como puede observar, estamos repitiendo algunos conceptos; esto lo ha-
cemos porque tratamos de ver un tema desde distintos puntos de vista con el obje-
to de facilitar el aprendizaje del lector.

Organizaci n de la Memoria de Datos.


La memoria de datos est repartida en dos reas. El primero es el rea de Re-
gistros de Funciones especiales (SFR), mientras que el segundo es el Registro de
Fines Generales (GPR). Los registros SFR controlan el funcionamiento del disposi-
tivo. Partes de la memoria de datos est n colocados en bancos. Esto es v lido tan-
to para el rea de SFR como para el rea GPR. El rea de GPR es apilado para per-
mitir m s que 116 bytes de RAM de uso general. Los reas de apilados del SFR se

Microcontroladores PIC 19
Arquitectura de un PIC

destinan a los registros que controlan


las funciones perif ricas. El apilado re-
quiere el uso de bits de control para la
selecci n de bancos. Estos bits de con-
trol se encuentran en el registro de STA-
TUS. La figura 12 muestra la organiza-
ci n del mapa de datos de la memoria.
Las instrucciones MOVWF y MOVF
permiten mover valores del registro W
hasta cualquier locaci n en el archivo
de registros ( F ) y viceversa.
Se puede acceder a la memoria de
datos entera en forma directa usando la
direcci n absoluta de cada registro o en
forma indirecta mediante el Registro de
Selecci n de Archivos (FSR). El direc- Fig. 12
cionamiento indirecto usa el bit RP0 pa-
ra acceder a las reas apiladas de la
memoria de datos.
La memoria de datos est dividida
en dos bancos que contienen los regis-
tros de uso general y los registros de
funciones especiales. El Banco 0 es se-
leccionado eliminando el bit RP0 (STA-
TUS<5>). El ajuste del bit RP0 seleccio-
na el Banco 1. Cada Banco se extiende
hasta 7Fh (128 bytes). Las primeras do-
ce locaciones de cada Banco est n re-
servadas para los Registros de Funcio-
nes Especiales (SFR). El resto son Re-
gistros de Uso general implementados como RAM.

Los Registros del PIC


Archivo de Registro de Uso General.
Cada Registro de Uso general (GPR) tiene un ancho de 8 bits y se accede en for-
ma directa o indirecta mediante el FSR, como se explica m s adelante.
Las direcciones GPR en el banco 1 est n conectados con direcciones en el Ban-
co 0. Como ejemplo, la direcci n de la locaci n 0Ch o 8Ch, llamar el mismo GPR.

20 Microcontroladores PIC
Arquitectura de un PIC

Registros de Funciones Especiales (SFR).


Los Registros de Funciones especiales de la Figura 13 son usados por la CPU y
las funciones Perif ricas para controlar el funcionamiento del dispositivo. Estos re-
gistros son RAM Est ticos (si bien mantenemos la figura en ingl s para preservar el
formato dado por los manuales de Microchip, tambi n brindamos la versi n en cas-
tellano).
Figura 13.A

Microcontroladores PIC 21
Arquitectura de un PIC

Figura 13.B

22 Microcontroladores PIC
Arquitectura de un PIC

Los Registros de Funciones Especiales pueden clasificarse en dos grupos:

a) n cleo y
b) perif rico.

Aquellos asociados con las funciones del n cleo se describen en esta Secci n.
Los relacionados con el funcionamiento de las caracter sticas perif ricas se descri-
ben en la Secci n respectiva.

Leyendas de la figura 13 A y B:
x = desconocido,
u = sin cambio,
- = sin implementar, leer como cero
q = valor depende de las condiciones.

Nota:
1. El byte superior del contador de programa no es directamente accesible.
PCLATH es un registro esclavo para PC<12:8>. El contenido de PCLATH puede ser
transferido al byte superior del contador de programa, pero el contenido de
PC<12:8> no es transferido nunca a PCLATH.
2. Los bits de Status TO y PD del registro de STATUS no son afectados por el
reset de MCLR.
3. Otros resets que no son POWER UP incluyen: reset externo por MCLR y el re-
set del temporizador de watchdog.
4. En todos los resets del dispositivo, estas patas son configuradas como entra-
das.
5. Este es el valor que se encontrar en el latch de la salida del port.

Registro de Status
El registro del STATUS contiene el status aritm tico de la ALU, el status de reset
y el bit selector de bancos para la memoria de datos.
Como en todo registro, el registro de STATUS puede ser el destino de cualquier
instrucci n. Si el registro de STATUS es el destino de una instrucci n que afecta los
bits Z, DC o C, entonces la escritura de estos tres bits es desactivado. Estos bits son
ajustados o anulados en concordancia con la l gica del dispositivo. Adem s, los bits
TO y PD (la notaci n TO significa que el bit est activo con 1 o lo que es lo mis-
mo: TO = negado de TO) no pueden ser escritos. Por lo tanto, el resultado de una
instrucci n con el registro de STATUS como destino, puede ser diferente al previsto.
Por ejemplo, CLRF STATUS anular los tres bits superiores y ajustar el bit Z.
Esto dejar el registro de STATUS como 000u u1uu (donde u queda sin cambio).
S lo las instrucciones BCF, BSF, SWAPF y MOVWF deben ser usados para al-

Microcontroladores PIC 23
Arquitectura de un PIC

terar el registro STATUS, como veremos en el cap tulo dedicado al Set de Instruc-
ciones, debido a que estas instrucciones no afectan ning n bit de status.

Notas:
1. Los bits IRP y RP1 (STATUS<:6>) no se usan en el PIC16F84A y deben ser
programados como anulados. El uso de estos bits como bits R/W de uso general, no
es recomendado, debido a que puede afectar la compatibilidad para arriba con pro-
ductos futuros.
2. Los bits C y DC funcionan como bits de BORROW (BORROW es el negado
de BORROW), en operaciones de resta. Ver ejemplos en las instrucciones de
SUBLW y SUBWF del cap tulo de Set de Instrucciones.
3. Cuando el registro de STATUS es el destino para una instrucci n que afecta
los bits Z, DC o C, entonces se impide la escritura de estos tres bits. El bit espec fi-
co ser actualizado en concordancia con la l gica del dispositivo.
En la Figura 14 vemos aspectos del registro de STATUS.

Figura 14

Veamos qu significado y qu valor puede tener cada bit del registro STATUS:

Bit 7, IRP: Bit de Selecci n de Banco de Registro, usado para direccionamiento


indirecto. El bit IRP no es usado por el PIC16F84A. Mantenga IRP desactivado.
Bit 6-5, RP1:RP0: Bits de Selecci n de Banco de Registro, usado para direccio-
namiento directo.
00 = Banco 0 (00h — 7Fh)
01 = Banco 1 (80h — FFh)
Cada Banco posee 128 bytes. En el PIC16F84A se usa solo RP0. Mantenga.
RP1 se mantendr desactivado.

Bit 4, TO : Bit de Time out (fin de tiempo).


1 = Despu s de Encendido, instrucci n CLRWDT, o instrucci n SLEEP (to-
ma el estado 1 ).

24 Microcontroladores PIC
Arquitectura de un PIC

0 = Cuando est en 0 es porque sucedi un Time out WDT (perro guar-


di n).

Bit 3, PD: Bit de Power Down.


1 = Despu s de Power up o por la instrucci n CLRWDT.
0 = Al ejecutar la instrucci n SLEEP.

Bit 2, Z: Bit cero.


1 = El resultado de una operaci n aritm tica o l gica es cero.
0 = El resultado de una operaci n aritm tica o l gica no es cero.

Bit 1, DC: Bit de llevar o prestar en las instrucciones ADDWF y ADDLW. Para
prestar la polaridad es invertida.
1 = Cuando ocurre un exceso en el resultado del 4… bit de menos peso. Aca-
rreo en la suma.
0 = Cuando no ocurre un exceso en el resultado del 4… bit de menos peso.
No hay acarreo en la suma (en la resta es lo contrario).

Bit 0, C: Bit de carry/borrow (llevar/prestar) para las instrucciones ADDWF y


ADDLW.
1 = Cuando ocurre un exceso en el resultado del bit m s significativo. Aca-
rreo en la suma y no en la resta.
0 = Cuando no ocurre un exceso en el resultado del bit m s significativo.
Acarreo en la resta y no en la suma.

Nota: Para BORROW (prestar d gitos) se invierte la polaridad. Una resta se eje-
cuta al sumar el complemento de dos del segundo operando. Para instrucciones de
rotaci n (RRF, RLF), este bit es cargado con el bit de orden superior o inferior del
registro de fuente.
Recuerde que:
_________ ___ ___
BORROW = BORROW TO = TO PD = PD

Registro OPTION_REG.
Ocupa la posici n la 81h del banco de registro 1. Es recomendable darle otro
nombre por ejemplo "OPTION" en el programa ensamblador, para que el programa
ensamblador no d mensajes de error, ya que en los PIC de la gama baja existe la
instrucci n OPTION.
El registro OPTION_REG (o simplemente registro OPTION) es un registro para
escribir y leer que contiene varios bits de control para configurar el prescaler
TMR0/WDT, el interrupt INT externo, el TMR0 y el pull-up d bil de PORTB.

Microcontroladores PIC 25
Arquitectura de un PIC

Nota:
Cuando el prescaler es asignado a WDT (PSA = 1), TMR0 tiene una asignaci n
de prescalador de 1:1.
En la figura 15 vemos el Registro de OPTION_REG (direcci n 81h).

Figura 15

bit 7, RPBU : Resistencia Pull-up, Puerto B, habilita el bit


1: Desactivadas
0: Activadas

bit 6, INTEDG: Flanco activo para el control de interrupciones


1: Con flanco Ascendente
0: Con flanco Descendente

bit 5, TOCS: Fuente de Reloj para TMR0


1: Pulsos introducidos a trav s de RA4/T0CK1 (Contador)
0: Pulsos de reloj interno Fosc/4 (Temporizador)

bit 4, TOSE: Tipo de flanco en TOCK1


1: Incremento de TMR0 cada flanco descendente
0: Incremento de TMR0 cada flanco ascendente

bit 3, PSA: Bit de asignaci n del prescaler divisor de frecuencia


1: El divisor de frecuencia se asigna al WDT
0: El divisor de frecuencia se asigna al TMR0

bit 2-0, PS2:PSO: Rango con el que act a el divisor de frecuencia, ste procede
de acuerdo con la siguiente tabla:

26 Microcontroladores PIC
Arquitectura de un PIC

El Registro INTCON
El registro INTCON es un registro de lectura y escritura que contiene los diferen-
tes bits de activaci n de todas las fuentes de interrupci n. Sus detalles se encuen-
tran en la figura 16.

Figura 16

Las siglas de esta figura significan lo siguiente:


R = Bit Legible
W = Bit Escribible
U = Bit sin implementar, leer como cero
- X = valor en reset POR.

Cada bit posee el significado y toma el valor que describimos a continuaci n:

Bit 7, GIE: Bit Global Interrupt Enable.


1 = Activa todos los Interrupt sin m scara.
0 = Desactiva todos los Interrupt.

Bit 6, EIIE: Bit EE Write Complete Interrupt Enable.


1 = Activa el EE Write Complete Interrupt.
0 = Desactiva el EE Write Complete Interrupt.

Bit 5, T0IE: Bit de TMR0 Overflow Interrupt Enable.

Microcontroladores PIC 27
Arquitectura de un PIC

1 = Activa el TMR0 Interrupt.


0 = Desactiva el TMR0 Interrupt.

Bit 4, INTE: Bit de Interrupt Enable RB0/INT.


1 = Activa el Interrupt RB0/INT.
0 = Desactiva el Interrupt RB0/INT.

Bit 3, RBIE: Bit de RB Port Change Interrupt Enable.


1 = Activa el RB Port Change Interrupt.
0 = Desactiva el RB Port Change Interrupt.

Bit 2, T0IF: Bit de TMR0 Overflow Interrupt Flag.


1 = TMR0 tiene exceso y debe ser limpiado en software.
0 = TMR0 no tiene exceso.

Bit 1, INTF: Bit de RB0/INT Interrupt Flag.


1 = Ocurri un RB0/INT Interrupt.
0 = No ocurri un RB0/INT Interrupt.

Bit 0, RBIF: Bit de RB Port Change Interrupt Flag.


1 = Cuando por lo menos una de las patas de RB7 a RB4 cambi (debe ser
limpiado en software).
0 = Ninguna de las patas RB7:RB4 cambi .

PCL y PCLATH
El contador de programas (PC de program counter , tambi n denominado CP en
este texto) especifica la direcci n de la instrucci n a buscar para la ejecuci n. El an-
cho del PC es de 13 bits. El byte bajo se denomina Registro PCL. Este Registro es
legible y escribible. El byte alto se denomina Registro PCH. Este Registro contiene
PC<12:8> bits y no es legible ni escribible en forma directa. Todas las actualizacio-
nes del Registro PCH se canalizan a trav s del Registro PCLATH.

STACK (PILA)
La pila permite que ocurra una combinaci n de hasta 8 llamadas de programa e
interrupciones. La pila contiene la direcci n de retorno de esta rama de la ejecuci n
de programas.
Los dispositivos de rango medio poseen una pila de hardware de una profundi-
dad de 8 niveles por 13 bits de ancho. El espacio de la pila no es parte de ning n
programa ni de espacio de datos y el puntero de la pila no es legible ni escribible. El
contador PC ( CP) es colocado a la pila v a PUSH cuando una instrucci n CALL es
ejecutada o cuando una orden de interrupt produce una ramificaci n. La pila ejecu-

28 Microcontroladores PIC
Arquitectura de un PIC

ta la orden POP cuando se ejecutan las rdenes RETURN, RETLW o RETFIE.


PCLATH no se modifica cuando la pila ejecuta PUSH o POP.
Despu s de ejecutar ocho veces la orden PUSH, la novena sobrescribe el valor
que fuera almacenado del primer PUSH. El d cimo PUSH sobrescribe el segundo
PUSH y as sucesivamente.

REGISTROS INDF y FSR


El registro INDF no es un registro f sico. Dirigirse a INDF en realidad produce la
direcci n del registro que est contenido en el registro FSR. FSR es un puntero. Es-
to se denomina Direccionamiento Indirecto.

EJEMPLOS:
1: Direccionamiento Indirecto.
• El archivo de registro 05 contiene el valor 10h.
• El archivo de registro 06 contiene el valor 0Ah.
• Cargue el valor 05 al registro FSR.
• La lectura del registro INDF devuelve el valor de 10h.
• Incremente el valor del registro INDF por uno (FSR = 06).
• La lectura del registro INDF devuelve ahora el valor de 0Ah.
La lectura indirecta de INDF mismo (FSR = 0), producir 00h. Escribir al registro
indirectamente resulta en una no-operaci n, si bien el bit de STATUS puede quedar
afectado.
Un programa simple para desactivar las locaciones 20h-2Fh del RAM, usando el
direccionamiento indirecto, puede verse en el siguiente ejemplo

Movlw 0x22 ; cargo al registro W con el n mero 22


; en hexadecimal

Movwf FSR ; transfiero el contenido de W al registro FSR

PROX Clrf INDF ; borro el contenido del registro INDF

Incf FSR ; incremento en una unidad el contenido


; del registro FSR

Btfss FSR,4 ; que el CP salte una unidad si el bit 4


; del FSR es 1

Goto PROX ; si el bit 4 de FSR = 0, entonces vuelva


; a PROX

Una direcci n efectiva de 9 bits se obtiene por la concatenaci n del registro FSR
de ocho bits con el bit IRP (STATUS<7>), como vemos en la figura 17.

Microcontroladores PIC 29
Arquitectura de un PIC

Sin embargo, IRP no es usado en el PIC16F84A.

Figura 17

PORTS I/O
Algunas patas de ports I/O est n multiplexadas con una funci n alternativa para
las prestaciones perif ricas del dispositivo. En general, cuando se activa un perif -
rico, esta pata no debe usarse como pata I/O de uso general.

Registros PORTA y TRISA


PORTA es un puerto bidireccional de un ancho de 5 bits. El registro de direccio-
nes de datos correspondiente es TRISA. Ajustar el bit de TRISA a 1 , har de la pa-
ta correspondiente de PORTA una entrada, lo que significa que el driver de salida
correspondiente adquiere un modo de alta impedancia. Desactivar un bit de TRISA
(= 0) convierte la pata correspondiente de PORTA en salida, lo que significa que el
contenido del latch de salida se encuentra en la pata seleccionada.
NOTA: En un Reset de Fuente (POWER RESET), estas patas son configuradas
como entradas y leen como 0 .
En la lectura, el registro de PORTA lee el status de las patas, mientras que al es-
cribir, se escribe en el latch del port.
Un latch o cerrojo es un circuito que permite retener datos en una posici n de
preparaci n hasta que sea pedido, generalmente por medio de otro circuito.
Todas las operaciones de escritura son del tipo de lectura-modificaci n-escritu-
ra . Esto significa que escribir a un port implica que las patas del port son le das, es-

30 Microcontroladores PIC
Arquitectura de un PIC

te valor es modificado, y despu s escrito al latch del port. La pata RA4 es multiple-
xada con el temporizador, entrada Timer0 de la entrada del m dulo del clock y se
transforma en la pata RA4/T0CKI. Esta pata RA4/T0CKI es la entrada de un dispa-
rador Schmitt y posee una salida de colector abierto. Las dem s patas de port RA
poseen niveles de entrada TTL y son drivers completos del tipo CMOS. En la figura
18 vemos el diagrama en bloques de una de las patas RA3 a RA0.
Para inicializar el PORTA, podemos realizar la siguiente rutina:
CLRF PORTA ; borro el contenido del registro PORTA

BSF STATUS, RPO ; pone a 1 el bit RPO del registro STATUS


MOVLW B 0000 1111 ; cargo a W con el n mero 0x0F

MOVWF TRISA ; selecciono a las patas RA3 a RA0 como salidas


; y la pata RA4 como entrada.

Figura 18 Figura 19

En el ejemplo del programa, las dos primeras instrucciones no tienen nada que
ver con la definici n de las patas del puerto A, en realidad la inicializaci n comienza
con la tercera instrucci n o l nea de programa. En la figura 19 se observa el diagra-
ma de la pata RA4.
Una s ntesis de la funci n que cumple cada pata del PORT se muestra en la si-
guiente tabla:

Microcontroladores PIC 31
Arquitectura de un PIC

Registros PORTB y TRISB


PORTB es un port bidireccional con un ancho de 8 bits. El registro de direccio-
nes de datos correspondiente es TRISB. Si se ajusta el bit TRISB = 1, la pata
PORTB correspondiente se transforma en entrada, quiere decir que coloca el driver
de salida correspondiente en el modo de alta impedancia.
Limpiar el bit TRISB (= 0), transforma la pata correspondiente de PORTB en sa-
lida, quiere decir que el contenido del latch de salida aparece en la pata selecciona-
da.
Para inicializar el PORTB podemos ejecutar la siguiente sentencia:
MOVLW B 0010 1111 ; cargo a W con el n mero 0x0F
MOVWF TRISB ; selecciono las patas RB0 a RB3 y RB5 como salidas,
; mientras que las patas RB4, RB6 y RB7
; ser n entradas.

Cada una de las patas de PORTB posee un resistor de polarizaci n interno. Un


bit de control nico puede activar todos los resistores. Se realiza esto limpiando el
bit RBPU (OPTION<7>).
Este circuito es desactivado autom ticamente cuando la pata del port es configu-
rada como salida. Estos circuitos son desactivados en un reset de encendido.
Cuatro de las patas de PORTB, RB7:RB4, poseen una caracter stica de interrupt
al cambiar. Solo las patas configuradas como entradas pueden producir este inte-
rrupt.
Esto significa que toda pata RB7 a RB4 configurada como salida est excluida de
la comparaci n de interrupt al cambiar. Las patas de entrada de RB7 a RB4, se com-
paran con el valor anterior asentado en el latch de la ltima lectura de PORTB. Las
salidas de desequilibrio de RB7 a RB4 son combinadas en una funci n l gica OR
para generar el cambio del RB Port con el bit de indicaci n RBIF (INTCON<0>) co-
mo flag.

32 Microcontroladores PIC
Arquitectura de un PIC

Esta interrupci n puede despertar el dispositivo de SLEEP. El usuario puede lim-


piar el interrupt en la rutina de service en la siguiente manera:

a) Toda lectura o escritura de PORTB. Esto termina con la condici n de desequi-


librio.
b) Limpie el bit del flag RBIF.

Una condici n de desequilibrio har ajustar el bit de flag RBIF. La lectura de


PORTB termina con la condici n de desequilibrio y permite la limpieza del bit RBIF.
La prestaci n de interrumpir al cambiar es recomendada para operaciones de des-
pertar al oprimir una tecla y para operaciones donde PORTB solo es usado para la
prestaci n de interrupt al cambiar. No se recomienda el escrutinio (polling) de
PORTB mientras se usa la prestaci n de interrupt al cambio. En la figura 20 se pue-
de observar el diagrama en bloque correspondiente al sistema de patas RB4 a RB7,
mientras que la figura 21 muestra lo propio para las patas RB0 a RB3.
Figura 20 Figura 21

En la siguiente tabla vemos las funciones de PORTB.

Microcontroladores PIC 33
Arquitectura de un PIC

M dulo Temporizador TIMER0


El m dulo temporizador/contador posee las siguientes prestaciones:

• Temporizador/contador de 8 bits.
• Legible y escribible.
• Selector de clock interno o externo.
• Prescalador de 8 bits programable por software.
• Interrupt por exceso de FFh a 00h.

En la figura 22 vemos un diagrama en bloques simplificado del temporizador.

Figura 22

El temporizador TIMER0 puede funcionar como temporizador o como contador.


El modo de temporizador se selecciona limpiando el bit T0CS (OPTION-
_REG<5>). En el modo de temporizador, el m dulo Timer0 incrementa cada ciclo de
instrucciones sin divisi n de frecuencia. Si se escribe en el registro TMR0, el incre-
mento es inhibido durante los siguientes ciclos de instrucciones. El usuario puede
evitar eso escribiendo un valor ajustado al registro TMR0.

34 Microcontroladores PIC
Arquitectura de un PIC

El modo de contador se selecciona al ajustar el bit T0CS (OPTION_REG<5>). En


el modo de contador, el m dulo Timer0 incrementa en el flanco ascendente o des-
cendente de la pata RA4/T0CKI. El flanco ascendente es determinado por el bit Ti-
mer Source Edge Select, T0SE (OPTION_REG<4>). Limpiando el bit T0SE selec-
ciona el borde ascendente.
Cuando se usa una entrada de clock externo en el Timer0, se deben cumplir cier-
tos requisitos para que el clock externo pueda ser sincronizado con la fase del clock
interno (Tosc). Adem s existe un retardo en el incremento real del Timer0 despu s
de la sincronizaci n.

Prescaler (Divisor de Frecuencia)


Se dispone de un contador de 8 bits como prescaler en el m dulo Timer0, o co-
mo post escalador para el temporizador Watchdog, respectivamente. En la Figura 23
vemos este esquema.

Figura 23

Para mayor simplicidad, nos referimos a este contador como prescaler. Observe
que s lo existe un divisor que es compartido mutuamente en forma exclusiva por el
m dulo del Temporizador y el Temporizador del Watchdog. De esta manera, una
asignaci n del prescaler para el m dulo del temporizador significa que no hay divi-
sor para el Temporizador del Watchdog y viceversa.

El prescaler no es legible ni escribible.


Los bits PSA y PS2:PS0 (OPTION_REG<3:0>) determinan la asignaci n y la ta-

Microcontroladores PIC 35
Arquitectura de un PIC

sa de la divisi n. Al limpiar el bit PSA se asignar el prescaler al m dulo del Timer0.


Cuando ste es asignado al m dulo Timer0, los valores de divisi n son selecciona-
bles en 1:2, 1:4,..... 1:256.
El ajuste del bit PSA asignar el prescaler al Temporizador Watchdog (WDT).
Cuando el prescaler es asignado a WDT, los valores de divisi n son seleccionables
en 1:1, 1:2, ..... 1:128.
Cuando est asignado al m dulo Timer0, todas las instrucciones escritas al re-
gistro TMR0, como por ejemplo: CLRF 1, MOVWF 1, BSF 1,x ...y otros, limpiar n el
prescaler. Cuando est asignado al WDT, una instrucci n CLRWDT limpiar el pres-
caler junto con WDT.

NOTA: Escribir a TMR0 cuando el prescaler est asignado a Timer0, limpiar el


conteo del prescaler, pero no modificar su asignaci n.
Cabe aclarar que la asignaci n del prescaler est completamente bajo el control
del software y por lo tanto puede ser cambiado durante la ejecuci n del programa.
NOTA: Para evitar un RESET no intencional del dispositivo, es necesario ejecu-
tar una secuencia de instrucciones espec ficas cuando se cambia la asignaci n del
prescaler del Timer0 a WDT. Esta secuencia debe ser seguida a n cuando WDT es-
t inactivo.

Interrupci n de Timer0
La interrupci n de TMR0 se genera cuando el registro TMR0 excede su capaci-
dad de FFh a 00h. Este exceso ajusta el bit T0IF (INTCON<2>). La interrupci n pue-
de ser enmascarada limpiando el bit T0IE (INTCON<5>). El bit T0IF se limpia por
software por la rutina de service del m dulo Timer0, antes de reactivar esta interrup-
ci n. La interrupci n TMR0 no puede despertar al procesador de SLEEP, debido a
que el temporizador est desconectado durante SLEEP.
En la siguiente tabla vemos los registros asociados con el Timer.

Memoria de Datos EEPROM


La memoria de datos EEPROM se puede leer y escribir durante el funcionamien-
to normal del P, para el rango completo de Vdd. Esta memoria no est ordenada

36 Microcontroladores PIC
Arquitectura de un PIC

en forma de mapa directamente en el espacio de los archivos del registro sino que
es direccionada indirectamente mediante los Registros de Funciones Especiales
(SFR). Existen cuatro SFR usados para leer y escribir en esta memoria. Estos regis-
tros son:

• EECON1
• EECON2 (este registro no est implementado f sicamente)
• EEDATA
• EEADR

EEDATA contiene los datos de 8 bits para leer y escribir, y EEADR contiene las
direcciones de las locaciones del EEPROM que son accedidos. Los dispositivos
PIC16F84A poseen 64 bytes de datos de EEPROM con un rango de direcciones que
abarca de 0h a 3Fh.
La memoria de datos EEPROM permite leer y escribir bytes. Una escritura de by-
te borra autom ticamente la locaci n y escribe los datos nuevos (borra antes de es-
cribir). La memoria de datos EEPROM est preparada para ciclos elevados de leer
y escribir. El tiempo de escribir es controlado por un temporizador incorporado en el
chip. El tiempo de escritura puede variar con la tensi n y temperatura y tambi n en-
tre una unidad y otra. Para l mites exactos s rvase referir a las especificaciones de
corriente alterna.
Cuando el dispositivo posee protecci n codificada, la unidad CPU puede conti-
nuar de leer y escribir los datos en la memoria del EEPROM. El programador del dis-
positivo no tiene m s acceso a la memoria.
En la figura 24 vemos el registro EECON1 en su direcci n 88h.

Figura 24

Las siglas de esta figura tienen el siguiente significado:


R = Bit Legible W = Bit Escribible
S = Bit Ajustable U = Sin Implementar, lea como cero,
-n = Valor de acuerdo al Reset POR (donde n puede ser x, o).
El significado y estado de los bits de la memoria son los siguientes:

Bits 7, 6 y 5: Sin Implementar, lea como cero.

Bit 4, EEIF: Bit indicador de EEPROM Write Operation Interrupt (FLAG).


1 = La operaci n de escritura est cumplida, debe ser borrado en el software.

Microcontroladores PIC 37
Arquitectura de un PIC

0 = La operaci n de escribir no est cumplida o no empez a n.

Bit 3, WRERR: Bit indicador de Error en EEPROM.


1 = Una operaci n de escribir termin en forma prematura. Causado
por un RESET MCLR o un RESET WDT durante el funcionamiento normal.
0 = La operaci n de escribir est terminada.

Bit 2, WREN: Bit de Activar la Escritura.


1 = Permite ciclos de escritura.
0 = Inhibe la escritura al EEPROM.

Bit 1, WR: Bit de Control de Escritura.


1 = Inicia un ciclo de escritura. El bit es anulado por hardware una
vez terminada la operaci n. El bit WR s lo puede ser ajustado
por software, pero no borrado.
0 = El ciclo de escritura al EEPROM est completo.

Bit 0, RD: Bit de Control de Lectura.


1 = Inicia una lectura del EEPROM. La lectura ocupa s lo un ciclo.
RD es borrado con hardware. El bit RD s lo puede ser ajustado
por software, pero no borrado.
0 = No comienza una lectura del EEPROM.

Lectura de la Memoria de Datos de EEPROM


Para leer una locaci n de memoria de datos, el usuario debe escribir la direcci n
al registro EEADR y despu s ajustar el bit de control RD (EECON1<0>). El dato es-
t disponible en el siguiente ciclo en el registro EEDATA y por lo tanto puede ser le -
do en la instrucci n siguiente. EEDATA conservar este valor hasta otra lectura o
hasta que sea escrito por el usuario durante una operaci n de escribir.

Ejemplo:
Lectura de EEPROM de Datos. Veamos como podr a ser la secuencia de un pro-
grama para leer una locaci n de memoria:

BCF STATUS, RPO ; pone a cero el bit 5 (RPO) del registro STATUS,
; dicho bit se usa para direccionamiento directo y,
; en este caso, elegimos el banco 0

MOVLW 0x20 ; cargo al registro W con la direcci n de la memoria


; de datos que voy a leer

MOVWF EEADR ; muevo el contenido del registro W al registro


; EEADR que es el registro de direccionamiento de
; la EEPROM, dicho de otra manera, estoy
; realizando el direccionamiento para leer

38 Microcontroladores PIC
Arquitectura de un PIC

BSF STATUS, RPO ; pone a uno el bit 5 (RPO) del registro STATUS,
; dicho bit se usa para direccionamiento directo y,
; en este caso, elegimos el banco 1

BSF EECON1, RD ; pone a uno el bit 0 (RD) de control de lectura del


; registro de la memoria de datos (EECON1), esto
; significa que se inicia la lectura del dato
; contenido en la direcci n que hemos
; cargado en EEADR

BCF STATUS, RPO ; pone a cero el bit 5 (RPO) del registro STATUS,
; dicho bit se usa para direccionamiento directo y,
; en este caso, elegimos el banco 0

MOVF EEDATA, W ; como en la instrucci n anterior dijimos que


; har amos un direccionamiento directo y EEDATA
; es el registro de datos donde est la informaci n
; le da, ahora, con la instrucci n MOVF hemos
; cargado al registro de trabajo con el dato le do
; de la memoria de datos.

Escritura de la Memoria de Datos EEPROM


Para escribir una locaci n de memoria de datos EEPROM, el usuario debe escri-
bir la direcci n primero al registro EEADR y los datos al registro EEDATA. Despu s
el usuario debe seguir una secuencia espec fica para iniciar la escritura de cada by-
te. Cabe aclarar que si deseo leer o escribir una direcci n de memoria tambi n es
posible nombrar una variable , tema que analizaremos m s adelante.

Ejemplo
Escritura de EEPROM de Datos. Veamos c mo podr a ser la secuencia de un
programa para escribir una locaci n de memoria:

BSF STATUS, RPO ; pone a uno el bit 5 (RPO) del registro STATUS,
; dicho bit se usa para direccionamiento directo y,
; en este caso, elegimos el banco 1
MOVLW 0x18 ; cargo al registro de trabajo con la direcci n
; de la memoria donde escribir el dato

MOVWF EEADR ; en la direcci n de registro de escritura


; coloco la direcci n donde escribir el dato

MOVLW 0x12 ; cargo a W con el n mero 12 en hexadecimal que


; ser el dato que voy a escribir en la posici n 18h

MOVWF EEDATA ; escribimos el dato en EEDATA

Microcontroladores PIC 39
Arquitectura de un PIC

BSF EECON1,WREN ; solicito el permiso de escritura y


; comienza la secuencia de escritura

MOVLW 0x55 ; cargo a W con 55h


Secuencia requerida para realizar la escritura

MOVWF EECON2 ; se escribe el dato 12h en EECON2

MOVLW 0xAA ; cargo a W con AAh

MOVWF EECON2 ; se escribe AAh en EECON2

BSF EECON1, WR ; comienza la escritura

WI BTFSC EECON1,WR ; espera a que termine la escritura

GOTO WI ;
BCF STATUS,R0 ; selecci n del banco 0

La escritura no se inicia si las secuencias arriba mencionadas no se cumplen


exactamente para cada byte. Escribir 55h a EECON2, escribir AAh a EECON2, des-
pu s ajustar el bit WR. Recomendamos especialmente desactivar las interrupciones
durante este segmento del c digo.
Adem s, el bit WREN en EECON1 debe ser ajustado para activar la escritura.
Este mecanismo impide la escritura accidental al EEPROM de datos debido a ines-
peradas ejecuciones del c digo, por ejemplo por programas perdidos. El usuario de-
be mantener el bit WREN limpio en todo momento, excepto cuando est actualizan-
do EEPROM: el bit WREN no se limpia con hardware.
Despu s de haber iniciado una secuencia de escritura, la limpieza del bit WREN
no afectar el ciclo de escritura. El bit WR no podr ser ajustado hasta que el bit
WREN est ajustado.
Al completar el ciclo de escritura, el bit WR es limpiado por el hardware y el bit
indicador de EE Write Complete Interrupt (EEIF) tambi n se ajusta. EEIF debe ser
limpiado por software.

Verificaci n de Escritura
De acuerdo a la aplicaci n, la pr ctica de buena programaci n puede indicar que
los datos escritos a la EEPROM de Datos deben ser verificados. Este procedimien-
to debe ser usado cuando un bit de la EEPROM est muy cerca de su l mite espe-
cificado. Generalmente una falla de la EEPROM consiste en un bit que fue escrito
como 0 , pero se lee como 1 , debido a problemas.
Para verificar un dato escrito, debemos primero leer la posici n de memoria gra-
bada (si tomamos el ejemplo de reci n deber amos leer el dato contenido en la di-
recci n 22h); posteriormente deber amos cargar al registro W con el dato que espe-
ramos encontrar, realizar una resta entre el dato le do (en EEDATA) y el contenido

40 Microcontroladores PIC
Arquitectura de un PIC

de W, luego por medio del flag Z del registro de STATUS, nos fijamos si la diferen-
cia es cero; si esto ocurre, el programa continuar normalmente. Hay muchas for-
mas de hacer este proceso, pero una alternativa ser a:

BCF STATUS, RPO ; pone a cero el bit 5 (RPO) del registro STATUS,
; dicho bit se usa para direccionamiento directo y,
; en este caso, elegimos el banco 0

MOVLW 0x22 ; cargo al registro W con la direcci n de la memoria


; de datos que voy a leer, en este caso 22h

MOVWF EEADR ; muevo el contenido del registro W al registro


; EEADR que es el registro de direccionamiento de
; la EEPROM, dicho de otra manera, estoy
; realizando el direccionamiento para leer

BSF STATUS, RPO ; pone a uno el bit 5 (RPO) del registro STATUS,
; dicho bit se usa para direccionamiento directo y,
; en este caso, elegimos el banco 1

BSF EECON1, RD ; pone a uno el bit 0 (RD) de control de lectura del


; registro de la memoria de datos (EECON1), esto
; significa que se inicia la lectura del dato
; contenido en la direcci n que hemos
; cargado en EEADR, en EEDATA tendr el
; n mero 15h (si est todo bien), si hubo un error
; de escritura no habr ese valor

BCF STATUS, RPO ; pone a cero el bit 5 (RPO) del registro STATUS,
; dicho bit se usa para direccionamiento directo y,
; en este caso, elegimos el banco 0

MOVLW 0x15 ; cargo a W con 15h

SUBWF EEDATA, W ; resto el contenido de EEDATA con el de W

BTFSS STATUS, Z ; si el flag Z del STATUS es 1 es porque el


; resultado de la resta es cero (est todo bien),
; luego, la siguiente instrucci n se ignora y el
; programa contin a normalmente. Si Z = 0,
; entonces se ejecuta la pr xima instrucci n

GOTO ERROR ; el programa ir a una etiqueta que ejecuta una


; rutina que indica que hubo error.

MOVLW ........ ; el programa contin a normalmente

Microcontroladores PIC 41
Arquitectura de un PIC

En la pr xima tabla vemos los Registros y Bits asociados con la EEPROM de Da-
tos.

La CPU del PIC


Un microcontrolador se diferencia de otros tipos de procesadores por tener cir-
cuitos especiales para atender las necesidades de ciertas aplicaciones en tiempo
real. El PIC16F84A, por ejemplo, posee una cantidad importante de este tipo de
prestaciones cuyo prop sito es aumentar al m ximo la confiabilidad del sistema, mi-
nimizar los costos por la eliminaci n de componentes externos, proveer modos ope-
rativo de econom a del consumo y ofrecer una buena protecci n de c digos. Estas
prestaciones son:

• Selecci n del oscilador.


• Reset
-Reset al Encender (POR)
-Temporizador de encendido (PWRT)
-Temporizador de arranque del Oscilador
• Interrupciones
• Temporizador Watchdog (WDT perro guardi n).
• Sleep (modo de operaci n en bajo consumo)
• Protector de C digos.
• Locaciones de Identificaci n (ID).
• Programaci n en serie (en la confecci n del programa).

El PIC16F84A posee un temporizador Watchdog que puede ser desactivado so-


lamente mediante bits de configuraci n. Para mayor confiabilidad funciona con su
propio oscilador RC. Existen dos temporizadores que ofrecen el retardo necesario al
aplicar alimentaci n al PIC. Uno es el Temporizador de arranque del oscilador (Os-
cillator Start-up Timer = OST), cuya funci n es la de mantener el chip en Reset has-
ta que el oscilador a cristal se estabiliza. El otro es el Temporizador de Encendido

42 Microcontroladores PIC
Arquitectura de un PIC

(Power-up Timer = PWRT) que provee un retardo fijo de 72ms (valor nominal) al apli-
car tensi n VDD nicamente. Este dise o mantiene el dispositivo en Reset durante
el tiempo de estabilizaci n de la fuente de alimentaci n. Con estos dos temporiza-
dores incorporados, la mayor a de las aplicaciones no necesita circuitos de Reset
externos.
El modo de SLEEP ofrece una forma de apagado de muy bajo consumo. El
usuario puede despertar desde SLEEP mediante un Reset externo, fin de tiempo del
Temporizador de Watchdog o una Interrupci n. Se proveen varias opciones para los
osciladores para poder adaptar el componente a diferentes aplicaciones. La opci n
de oscilador RC ahorra costos del sistema aunque no es estable, mientras que la
opci n con cristal ahorra consumo, es muy estable pero es m s costosa. Como vi-
mos, en la palabra de configuraci n del PIC se debe decir qu tipo de oscilador se
va a emplear.

Bits de Configuraci n
Tal como vimos anteriormente en este cap tulo, los bits de configuraci n pueden
ser programados para leer 0 o quedar sin programaci n para leer 1 y de esta ma-
nera seleccionar diferentes configuraciones del dispositivo. Estos bits se encuentran
en la locaci n de memoria del programa 2007h.
A continuaci n vemos otro aspecto de la palabra de configuraci n:

Las referencias son las siguientes:


R = bit que puede ser le do
P = bit programable
u = sin cambio
Ya hemos hablado de la funci n que cumple cada bit. La direcci n 2007h est
fuera del espacio de la memoria del programa de usuario y pertenece al espacio de
la memoria de test especial y configuraci n (2000h — 3FFFh). Este espacio s lo es
accesible durante la programaci n.

Configuraciones del Oscilador


Tipos de Osciladores
El PIC16F84A puede funcionar con cuatro modos diferentes de oscilador. El
usuario puede programar dos bits de configuraci n (FOSC1 y FOSC0) para selec-
cionar uno de estos cuatro modos:

Microcontroladores PIC 43
Arquitectura de un PIC

• LP = Cristal de Baja Potencia


• XT = Cristal o Resonador
• HS = Cristal o Resonador de Alta Velocidad
• RC = Oscilador RC

Oscilador de Cristal o Resonador de Cer mica


En los modos XT, LP o HS se conecta un cristal o resonador cer mico a las pa-
tas OSC1/CLKIN y OSC2/CLKOUT para establecer la oscilaci n de acuerdo a la fi-
gura 2 de este cap tulo.
El dise o del oscilador del PIC16F84A requiere el uso de un cristal de corte pa-
ralelo. El uso de un cristal de corte serie puede dar oscilaciones con una frecuencia
fuera del rango especificado por el fabricante del cristal. En los modos XT, LP o HP,
el dispositivo permite la conexi n de una fuente externa para excitar la pata
OSC1/CLKIN, como vemos en la figura 25.

Figura 25

Oscilador RC
Para aplicaciones insensibles a variaciones temporales, el uso de la opci n de
oscilador RC ofrece ventajas adicionales. La frecuencia del oscilador RC es una fun-
ci n de la tensi n de la fuente, del valor de Rext, del valor de Cext y de la tempera-
tura de funcionamiento. Adem s de estos par metros, tambi n puede haber una va-
riaci n de la frecuencia del oscilador debido a las variaciones normales de los par -
metros del proceso. Adem s, las diferencias en las capacidades de conductores del
dispositivo puede introducir variaciones, especialmente con valores muy bajos de
Cext. El usuario debe tomar en cuenta asimismo variaciones debido a las toleran-
cias de los componentes externos R y C usados. La figura 3 de este cap tulo, mues-
tra c mo conectar una combinaci n RC al PIC16F84A.

Reset
El PIC16F84A distingue entre varios tipos de reset.

• Reset al encender (Power-on Reset POR).


• Reset MCLR durante el funcionamiento normal.
• Reset MCLR durante SLEEP.
• Reset WDT durante el funcionamiento normal.
• Reset WDT de despertar durante SLEEP.

44 Microcontroladores PIC
Arquitectura de un PIC

Nota: La notaci n MCLR implica que el reset se activa con un 0 (negado), es


decir:
_____
MCLR = MCLR

La figura 26 muestra un diagrama en bloques simplificado del circuito de reset in-


corporado en el chip. El paso de reset MCLR posee un filtro de ruido para ignorar
pulsos peque os. Las especificaciones el ctricas fijan los requisitos del ancho de
pulso necesario para la pata MCLR .
Figura 26

Algunos registros no son afectados por ninguna condici n de reset, su status es


desconocido en un reset POR y sin cambios en cualquier otro reset. La mayor a de
los dem s registros se colocan en un estado de reset en resets POR, MCLR o
WDR durante el funcionamiento normal y en un reset MCLR durante SLEEP. No son
afectados por un reset WDT durante SLEEP debido a que este reset es visto como
resumen del funcionamiento normal. En la siguiente tabla vemos la descripci n de
condiciones de reset para el contador de programas PC y el registro de STATUS.

Microcontroladores PIC 45
Arquitectura de un PIC

Leyenda:
u = sin cambios,
x = desconocido.

Nota 1. Cuando el Despertar (volver de SLEEP) se debe a una Interrupci n y


el bit GIE es ajustado, el contador PC se carga con el vector de interrupt (0004h).
La siguiente tabla brinda una descripci n completa de los estado de reset para
todos los registros:

Leyenda:
u = sin cambios
x = desconocido
- = bit sin implementar, le do como 0,
q = valor depende las condiciones.
Notas 1: Uno o m s bits de INTCON ser n afectados para causar despertar.
Nota 2: Cuando el despertar se debe a un interrupt y el bit GIE es ajustado, el
contador PC se carga con el vector de interrupt (0004h).

46 Microcontroladores PIC
Arquitectura de un PIC

Nota 3: Los valores para cada condici n espec fica est n listados en la tabla de
condiciones de reset para el contador de programas PC y el registro de STATUS.
Nota 4. En todo reset del dispositivo, estas patas son configurados como entra-
das.
Nota 5: Este es el valor que se encuentra en el latch del port de salida.

Los bits TO y PD son ajustados o limpiados en forma diferente en diferentes si-


tuaciones de reset. Estos bits se usan en software para determinar la naturaleza del
reset.

Reset de Encendido (POR)


Un pulso de reset de encendido se genera en el chip cuando se detecta una ele-
vaci n de VDD en el rango de 1,2 a 1,7 Volt. Para aprovechar el POR, solo debe co-
nectar la pata MCLR directamente o a trav s de un resistor a VDD. Esto elimina los
componentes RC externos que se necesitan generalmente para crear un reset de
encendido. Se necesita un tiempo de crecimiento m nimo para VDD para que fun-
cione correctamente. Las especificaciones respectivas surgen de las Especificacio-
nes El ctricas.
Cuando el dispositivo comienza su funcionamiento normal al salir de la condici n
de reset, es necesario asegurar los par metros (tensi n, frecuencia, temperatura,
etc) en sus valores normales para garantizar el funcionamiento. Si estas condicio-
nes no son cumplidas, el dispositivo debe mantenerse en reset hasta que se norma-
lice. En la Figura 27 vemos un circuito de RESET de encendido externo para una
aplicaci n lenta de VDD.

Figura 27

El reset de encendido (POR) no produce un reset interno cuando VDD cae.


Sobre el circuito de la figura anterior, debemos decir lo siguiente:

1. El circuito de Power-on Reset (externo) s lo es necesario cuando la tasa de


crecimiento de VDD es demasiado lenta. El diodo D ayuda a descargar el capacitor
r pidamente al apagar el equipo.
2. El resistor R < 40 k‰ es recomendado para estar seguro que la ca da de ten-
si n sobre R no exceda 0,2 volt. La m xima corriente de fuga sobre la pata MCLR

Microcontroladores PIC 47
Arquitectura de un PIC

est especificada en 5 A. Una ca da de tensi n mayor producir la degradaci n del


nivel de Vih en la pata MCLR .
3. El resistor R1 = 100‰ a 1000‰ limita toda corriente que circula en MCLR des-
de un capacitor externo C en el supuesto que haya una ruptura de MCLR debido a
ESD o EOS.

Temporizador de Arranque del Oscilador (OST)


El OST (Oscillator Start-up Timer = OST) tiene la funci n de mantener el chip en
Reset hasta que el oscilador a cristal se estabiliza y entra en funciones en los mo-
dos XT, LP y HS del oscilador.

Temporizador de Encendido (PWRT)


El PWRT (Power-up Timer) es un circuito interno que provee un retardo fijo de
72ms (valor nominal) al aplicar tensi n VDD nicamente. Este dise o mantiene el
dispositivo en Reset durante el tiempo de estabilizaci n de la fuente de alimentaci n.
Con estos dos temporizadores incorporados, la mayor a de las aplicaciones no ne-
cesitan circuitos de Reset externos.

El Perro Guardi n (WDT)


Se trata de un contador de 8 bits que act a como temporizador y tiene el objeti-
vo de generar un reset a todo el sistema cuando se desborda su valor. Su control de
tiempos es independiente del oscilador principal y se basa en una red RC. La tem-
porizaci n nominal con la que se halla programado el Perro guardi n es de 18ms,
pero puede aumentarse utilizando el Divisor de frecuencia, con el cual, trabajando
en el rango mayor, puede alcanzar hasta 2,3 segundos.
Para evitar que se desborde el WDT y genere un reset, hay que recargar o re-
frescar su cuenta antes de que llegue a completarse. Este refresco, que en realidad
consiste en ponerlo a 0 para iniciar la temporizaci n, se consigue por software con
las instrucciones CLRWDT y SLEEP. El dise ador debe analizar el programa de tra-
bajo y situar alguna de estas dos instrucciones en sitios estrat gicos por los que pa-
sa el flujo de control antes que transcurra el tiempo que controla el Perro Guardi n.
De esta manera, si el programa se cuelga (bucle infinito, espera de acontecimien-
to que no se produce, etc.), no se refresca a tiempo al Perro guardi n y se produce
una reinicializaci n.
La instrucci n CLRWDT borra simplemente el valor de WDT, reiniciando la cuen-
ta. Sin embargo, la instrucci n SLEEP, adem s de borrar el WDT, detiene a todo el
sistema entrando en un modo de trabajo en el que el consumo es m nimo (modo de
Reposo o de bajo consumo). Si no se desactiva al Perro guardi n cuando se entra

48 Microcontroladores PIC
Arquitectura de un PIC

en el modo de Reposo, al acabar su conteo provocar un reset y se saldr de dicho


modo. Otra forma de salir del modo de Reposo es activando la patita MCLR . Como
hemos visto, para desactivar al Perro Guardi n, hay que poner un 0 en el bit 2
(WDTE) de la Palabra de configuraci n.
Existe la posibilidad de que el Divisor de frecuencia opere con el TMR0 o con el
WDT, seg n el valor que tenga el bit PSA. Los impulsos de conteo pasan por el Di-
visor antes de aplicarse al TMR0 (prescaler). Por el contrario, los impulsos pasan pri-
mero por el WDT y luego por el Divisor (Post-divisor).

Interrupciones del Micro


Las interrupciones son el mecanismo m s importante para la conexi n del mi-
crocontrolador con el mundo exterior, sincronizando la ejecuci n de programas con
acontecimientos externos.
Las interrupciones son una especie de subrutinas de las cuales se diferencian
en los procedimientos que las ponen en marcha. Por otra parte las subrutinas se eje-
cutan cada vez que en el programa aparece una instrucci n CALL, mientras que las
interrupciones se ponen en marcha al aparecer en cualquier instante un evento ex-
terno al programa, es decir por un mecanismo de hardware. El PIC16X84/PIC, por
ejemplo, dispone de 4 posibles fuentes de interrupci n:
1. Activaci n del pin RB0/INT
2. Desborde del temporizador TMR0
3. Cambio de estado en una de las 4 patas de m s peso (RB7:RB4) del PORTB
4. Finalizaci n de la escritura en la EEPROM de datos.

Cuando se produce alguno de estos estados, se origina una petici n de interrup-


ci n, que si se acepta, guarda el valor del contador de programa (PC CP) actual
en la Pila, pone a cero el bit GIE (Global Interrupt Enable), lo que prohibe cualquier
otra interrupci n y se carga el PC con el valor 0004H , que es la posici n del vector
de interrupci n, y comienza a ejecutarse el programa de atenci n a la interrupci n
que se encuentra a partir de esta direcci n.
Una interrupci n est controlada mediante dos bit. Uno de ellos act a como se-
alizador o flag que indica si se ha producido o no la interrupci n, y la otra funciona
como bit de permiso o inhibici n de la interrupci n en s .

Los bits de control que se encuentran en el registro INTCON (0Bh 8Bh) habili-
tan y configuran las interrupciones.

Para que se pueda producir una interrupci n por alguna de estas fuentes, el bit

Microcontroladores PIC 49
Arquitectura de un PIC

correspondiente debe estar en 1 , mientras que los bits se alizadores o flags que
est n en los registros INTCON y EEDATA (08h) informan si se ha producido la inte-
rrupci n cuando stos se ponen a 1 . Cualquiera de las interrupciones tambi n pue-
de sacar al procesador del modo de reposo SLEEP.
El bit GIE (Global Interrupt Enable) es el de activaci n global del permiso de in-
terrupci n, y se borra autom ticamente cuando aparece una interrupci n, con el ob-
jeto de evitar que se produzca otra interrupci n mientras se est atendiendo a la pri-
mera. Cuando por programa se retorna de la interrupci n con una instrucci n RET-
FIE, el bit GIE se vuelve a activar poni ndose a 1. Para el resto de los flags o bits
indicadores de interrupci n, no est previsto mecanismo de puesta a cero, por lo que
es el programa de atenci n a la interrupci n el que debe realizar el tratamiento de la
correspondiente interrupci n y adem s, el que debe poner el o los flags de indica-
ci n de interrupci n a 0. De no ser as , no se podr salir de la rutina de atenci n a
la interrupci n.
Esta familia de PICs posee un vector de interrupci n en la direcci n 0004h; esto
quiere decir que, sea cual sea la fuente de la interrupci n, el PC se carga con 0004h.
Por lo tanto, el programa de atenci n a la interrupci n debe encargarse de compro-
bar el estado de cada uno de los flags para saber cu l es la fuente de interrupci n
y actuar seg n el caso.
Si se necesita preservar alg n otro registro adem s del PC, cuando se atiende
una interrupci n, debe ser el propio programa de atenci n a la interrupci n el que se
encargue de salvar su estado al inicio de la rutina y de devolverlos al final del mis-
mo, de igual modo que se hac a en las subrutinas.
Por lo dicho, el P debe realizar determinados procesos autom ticamente mien-
tras que otros se ejecutan por programa, estos procesos son:

1. Cuando se activa una interrupci n, el flag correspondiente se activa. Si el bit


de permiso correspondiente est en 1 y el bit de habilitaci n de todas las interrup-
ciones (GIE) est en 1 , se produce la interrupci n.
2. Para evitar que se produzca otra interrupci n mientras se est atendiendo a
otra anterior, el bit GIE se pone en 0 .
3. El valor del PC se guarda en la PILA
4. El PC se carga con el valor 0004h, que es el vector de interrupciones
5. El programador, debe comenzar la rutina de atenci n a la interrupci n con un
salto a la posici n de memoria donde se encuentra el programa de atenci n a dicha
interrupci n, seguidamente se guardan todos los registros que puedan ser modifica-
dos por sta, luego si est n habilitadas varias v as de interrupci n, se debe verificar
el valor de los flag para determinar la causa de la interrupci n.
6. La rutina de interrupci n lleva al programa a la subrutina correspondiente.
7. Antes de retornar al programa principal se deben reestablecer los valores que
ten an los registros antes de producirse la interrupci n y se deben borrar por softwa-
re los flags que indican las fuentes de las interrupciones.

50 Microcontroladores PIC
Arquitectura de un PIC

8. Cuando se llega a la ltima instrucci n de la rutina de interrupci n, RETURN,


se carga el PC con el valor que se guard inicialmente en la PILA y el bit GIE se po-
ne autom ticamente en 1 .

Interrupci n Externa (INT)


La fuente de interrupciones INT es sumamente importante para atender eventos
externos en tiempo real. Cuando en la l nea RB0/INT se hace una petici n de inte-
rrupci n, entonces, de forma autom tica, el bit INTF del registro INTCON se pone
en 1 y si el bit GIE=1. Luego se pone en marcha el mecanismo de atenci n a la in-
terrupci n. Mediante el bit INTDEG del registro OPTION, se puede seleccionar el
flanco activo de RBO/INT, ya que con esta puesta en 1 el flanco activo es el de su-
bida y cuando est en 0 el flanco activo es el de bajada.
El programa de atenci n a la interrupci n antes de regresar al programa princi-
pal debe borrar el flag INTF, para que no se repita el proceso de atenci n a la inte-
rrupci n cuando se ejecuta la instrucci n de retorno de interrupci n RETFIE.

Interrupci n por Desborde del TMR0


Para activar la interrupci n del TMR0, los bit T0IE y GIE del registro INTCON de-
ben estar en 1 ; bajo estas condiciones cuando el temporizador TMR0 se desborda
al pasar de FFh a 00h, se activa el flag TOIF del registro INTCON.
Si no se carga de nuevo TMR0 cuando se desborda, ste sigue contando desde
00h hasta FFh. Este registro puede escribirse o leerse en cualquier momento, pero
hay que tener en cuenta que al escribir sobre l, se pierden dos ciclos de reloj para
mantener el sincronismo.
Cuando se carga el registro TMR0 con un valor XXh, ste cuenta FFh-XXh im-
pulsos y el tiempo que tarda en hacerlo viene dado por la expresi n:

Temporizaci n = 4 . Tosc . (256 —N10). Rango del Divisor de Frecuencia

Interrupci n por Cambio de Estado en las patas RB7 y RB4


Para activar la interrupci n por cambio de nivel en las patas RB4 y RB7, los bits
RBIE y GIE del registro INTCON deben estar a 1 . Cuando esto es as y se produ-
ce un cambio de nivel en cualquiera de los pines RB4 RB7, se activa el flag RBIF
del registro INTCON. Este tipo de interrupciones est especialmente pensada para
el control de un teclado matricial 4 x 4 de 16 teclas.

Interrupci n por Finalizaci n de la Escritura en la EEPROM de Datos


El rea de EEPROM dispone de 64 bytes donde se pueden almacenar datos que
no se pierden al desconectar la alimentaci n. La memoria EEPROM no est mapea-

Microcontroladores PIC 51
Arquitectura de un PIC

da en la zona de memoria de datos donde se encuentran los registros SFR y GPR.


Para poder leerla y escribirla durante el funcionamiento normal del microcontrolador
hay que utilizar los registros especiales EEDATA, EEADR, EECON1 y EECON2, tal
como ya hemos visto. Recuerde que el Registro EEADR, se encuentra en la posi-
ci n de memoria 09h del banco 0, en l se carga directamente la direcci n a la que
acceden de la EEPROM de datos. Las 64 posiciones de un byte ocupan las direc-
ciones de un mapa que comienza en la posici n 00h y termina en la 3Fh, por eso
los 2 bits de m s peso del registro EEADR siempre valen 0.
Los bit RD y WR indican respectivamente lectura o escritura. No hay que poner-
los a 0 s lo a 1. Se borran autom ticamente cuando la operaci n de lectura ha sido
completada.
El registro EECON2 no est implementado f sicamente, por lo que es imposible
leerlo (si se intenta leer, todos sus bits se ponen a 0). Se emplea como dispositivo
de seguridad durante el proceso de escritura de la EEPROM, para evitar las interfe-
rencias en el tiempo que precisa su desarrollo. La seguridad se consigue escribien-
do los valores concretos 55h y AAh. Un ciclo de escritura en una posici n EEPROM
de datos tiene una duraci n de 10 ms, que es un tiempo muy grande para la veloci-
dad del procesador.

******************************************************

52 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

MANEJO DE LAS
INSTRUCCIONES DE UN PIC
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 per-
fectamente delimitadas, que el procesador interpreta para cumplir una or-
den deseada, quedando establecidas las variables que se modifican.
Dicho de otra forma, las instrucciones poseen un formato de acuerdo a
un sistema de codificaci n. El formato cambia de acuerdo con la operaci n
que se va a realizar.
Cada instrucci n, para la l nea baja de los PICs tipo 16C5X, consiste en
una palabra de 12 bits que codifica en un solo bloque, la orden, el opera-
dor y la ubicaci n del resultado o el salto (en caso de que lo hubiere). En
los microcontroladores PICs tipo 16X84 cada instrucci n tiene una longitud
de 14 bits.
Los bits que act an como datos de la memoria EPROM se reciben en el
decodificador de instrucciones, y operan con el contador de programa y el
registro de trabajo W, para acceder a lugares espec ficos del microcontro-
lador, tales como la ALU, posiciones de memoria, registros, etc.
Como sabemos, los PICs 16X84, entre otros, manejan un set reducido
de instrucciones (35 instrucciones en lo que se denomina RISC) que pre-
sentan una codificaci n muy particular llamada formato de la instrucci n .
Cada instrucci n posee su formato y es totalmente definido por MICRO-
CHIP.
En la figura 1 de la p gina siguiente 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 contenido de un registro cuya direcci n est de-
terminada por el operador f .
En esta figura, en primer lugar se observa la sintaxis , es decir, la for-
ma en que el programador escribir la instrucci n en el lenguaje entendi-
ble por el operador (el programa en .asm). La codificaci n es el formato de
la palabra que define la instrucci n y que veremos en detalle luego. Note
que para que se complete la instrucci n se necesita una sola palabra y un
solo ciclo del contador de programas.

Microcontroladores PIC 53
Manejo de las Instrucciones de un PIC

Figura 1

Como veremos, el resultado de la operaci n se guarda en un sitio defi-


nido por el programador (dependiendo de qu estado tome el bit d ) y que
esta instrucci n modifica los bits C, DC y Z del registro de estado (STA-
TUS).
Esto quiere decir que cuando coloco la instrucci n:

ADDWF f,d

El ensamblador generar el c digo:

0001 11df ffff

En este c digo, los seis bits de mayor peso (bits 6 al 11 en la figura 2)


definen la operaci n que va a realizar la instrucci n de acuerdo a lo reque-
rido por el programador. Aqu se define una orden que el PIC interpreta y
ejecuta sobre un operando determinado, cuya direcci n la busca seg n lo

54 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

indicado por los 5 bits menos significativos (bits 0 al 4 en la figura 2).

Figura 2

El bit 5 es un c digo de reconocimiento de destino y determina en qu


lugar se va a alojar el resultado de la operaci n. Si este bit es 0 el desti-
no de la operaci n ser 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 .
Los cinco bits de menor peso en el formato de la instrucci n represen-
tan la direcci n donde est guardado el operando (f), que est en la me-
moria de datos y por tener cinco bits s lo podemos direccionar una de las
32 posiciones de memoria de datos.
La mayor a de las instrucciones se realizan en un ciclo de contador de
programa (ciclo de instrucci n) excepto las instrucciones de salto que ne-
cesitan dos ciclos para ejecutarla.
Se determina el ciclo de instrucci n dividiendo por cuatro la frecuencia
del oscilador, elegida para el funcionamiento del microcontrolador tal como
se observa en la figura 3.
Es decir, la se al que proviene del oscilador externo, conectado a los pi-
nes OSC1/CLKIN y OSC2/CLKOUT del microcontrolador, se divide en cua-

Microcontroladores PIC 55
Manejo de las Instrucciones de un PIC

tro ciclos, obteni ndose as la se al requerida por el procesador interno pa-


ra realizar las operaciones. De esta manera se puede realizar la b squeda
y ejecuci n de la instrucci n.
El reloj de instrucci n es el ciclo interno que posee el microcontrolador
para cronometrar el tiempo de ejecuci n de las instruciones.
Los pulsos entrantes del reloj son divididos por 4, generando diferentes
se ales denominadas Q1, Q2, Q3 y Q4. El estado Q1 hace incrementar el
contador de programa, Q2 y Q3, se encargan de la decodificaci n y ejecu-
ci n de la instrucci n y por ltimo, Q4 es la fase de b squeda de la instruc-
ci n. El c digo se almacena en el registro de instrucciones.

Figura 3

El Set de Instrucciones del 16X84


Vimos c mo es la estructura de una instrucci n, raz n por la cual le re-
comendamos que lea nuevamente el comienzo de este cap tulo si no en-
tiende lo que a continuaci n expresaremos.

56 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Los c digos (denominados mnem nicos) que simbolizan un conjunto de


instrucciones, representan la tarea que debe hacer el microcontrolador una
vez que las analice en funci n del operando.
Un mnem nico ayuda a recordar el significado que tiene la instrucci n.
Para poder analizar al conjunto de instrucciones que conforman el set
RISC, se los suele agrupar teniendo en cuenta el tipo de operaci n que
realizan, as es com n que se las presente bajo cuatro posibles formas, a
saber:

1. Instrucciones orientadas a registros.


2. Instrucciones orientadas a bits.
3. Instrucciones con literales.
4. Instrucciones de control y especiales.

Figura 4

Microcontroladores PIC 57
Manejo de las Instrucciones de un PIC

Figura 5

En la figura 4 vemos un cuadro donde se reproducen las instrucciones


orientadas a registros, la figura 5 muestra las operaciones orientadas a bits
y la figura 6 nos permite conocer cu les son las instrucciones con literales
y de control.

Figura 6

Sobre las notas a las que hacemos referencia en dichas figuras, debe
tener en cuenta lo siguiente:
Nota 1. Al modificar un registro de entrada/salida (E/S) con una opera-

58 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

ci n sobre l mismo (por ejemplo MOVF PORTB,1), el valor utilizado es el


que se encuentre presente en las patas del PORTB. Por ejemplo, si el bies-
table tiene un "1" para una pata configurada como entrada y se pone a ni-
vel bajo desde el exterior, el dato se volver a escribir como un "0".
Nota 2. Si se ejecuta esta instrucci n sobre el TMR0 y d=1, ser borra-
do el divisor de frecuencia (preescaler), si est asignado al TMR0.
Nota 3. Si se modifica el Contador de Programa (PC CP) o es verda-
dera una condici n de prueba, la instrucci n requiere dos ciclos de m qui-
na. El segundo ciclo se ejecuta como un NOP .
Veamos a continuaci n, c mo deben emplearse cada una de estas ins-
trucciones:

C Se pone a 1 si se produce un acarreo desde el bit de mayor peso.


DC Se pone a 1 si se genera un acarreo del bit 3 al bit 4.
Z Se pone a 1 si el resultado de la operaci n es cero.

Microcontroladores PIC 59
Manejo de las Instrucciones de un PIC

EJEMPLO:
Queremos sumar el contenido del registro de trabajo con el n mero 10
expresado en hexadecimal, la instrucci n ser :

ADDLW H«10«
La notaci n H«10« significa que el n mero est expresado en hexadeci-
mal. Si la notaci n fuese D«10« significa que el n mero est expresado en
decimal y si fuese B«10« entonces el n mero est en notaci n binaria.
Volviendo a nuestro ejemplo:
Si antes de la instrucci n ten a en cada registro:
W = 21h (21h significa que el n mero est expresado en hexadecimal,
que es lo mismo que 0010 0001 b —expresado en binario-)
Al ejecutarse la instrucci n, se sumar n ambos n meros y el resultado
se guarda en el registro W, es decir:
W = 21 h + 10 h = 31 h (en hexadecimal),
W = 0001 0000 b + 0001 0000 b = 0010 0000 b (en binario)

60 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

C Se pone a 1 si se produce un acarreo desde el bit de mayor peso.


DC Se pone a 1 si se genera un acarreo del bit 3 al bit 4.
Z Se pone a 1 si el resultado de la operaci n es cero.
EJEMPLO:
Supongamos querer sumar el contenido del registro de trabajo con el
contenido de un registro llamado REG, y queremos guardar el resultado en
el registro de trabajo, la notaci n ser :
ADDWF REG,0
Si antes de la instrucci n W = 10 h y REG = 21 h, el resultado de la su-
ma ser 31 h que se guardar en el registro de trabajo, es decir, luego de
la suma el contenido de los registros ser :
W = 31 h REG = 21 h
Note que el contenido del registro REG no se modific luego de la ope-
raci n. Si la instrucci n hubiese sido:
ADDWF REG,1
Entonces el resultado se hubiese guardado en REG, por lo tanto, luego
de la operaci n el contenido de los registros ser a:

W = 10 h REG = 31 h

Microcontroladores PIC 61
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la operaci n es cero.


EJEMPLO:
Supongamos querer hacer la funci n l gica AND entre el n mero 0001 0010 b
que est almacenado en el registro de trabajo y el n mero 0011 1001 b. La ins-
trucci n ser :

ANDLW B«00111001«

Luego, antes de la instrucci n ten amos:

W = 0001 0010 b

Se realiza la operaci n:

(0001 0010) AND (0011 1001) = 0001 0000

Luego de la instrucci n, en W tendremos:

W = 0001 0000 b

62 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la operaci n es cero


EJEMPLO:
Queremos realizar la operaci n AND entre el n mero 0001 1110 b que
est almacenado en el registro ST y el n mero 1001 0110 b que est alma-
cenado en el registro de trabajo, la instrucci n ser :

ANDWF ST,1
Antes de ejecutarse la instrucci n tenemos:
W = 1001 0110 b ST = 0001 1110 b
Se realizar la operaci n:
(1001 0110) AND (0001 1110) = 0001 0110
Es decir que en los registros, luego de ejecutada la instrucci n tendremos:
W = 1001 0110 b (no ha cambiado)
ST = 0001 0110 (se ha almacenado el resultado).

Microcontroladores PIC 63
Manejo de las Instrucciones de un PIC

EJEMPLO:
Queremos poner a 0 el bit N… 5 del registro DESC, luego la instrucci n
ser :

BCF DESC, 5

Si antes de la instrucci n el registro DESC ten a:

DESC = 1111 0111 b

Al ejecutarse la instrucci n, el registro queda con el valor:

DESC = 1110 0111 b

Nota: Recuerde que el bit menos significativo es el cero y el m s signi-


ficativo es el 7, es decir, los ocho bits de un registro se numeran de 0 a 7.

64 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

EJEMPLO:
Queremos poner a 1 el bit N… 0 del registro DESC, luego la instrucci n ser :

BSF DESC, 0

Si antes de la instrucci n el registro DESC ten a:

DESC = 1111 0111 b

Al ejecutarse la instrucci n, el registro queda con el valor:

DESC = 1111 0110 b

Microcontroladores PIC 65
Manejo de las Instrucciones de un PIC

EJEMPLO:

RUTINA BTFSC REG,2


GOTO DEC
GOTO SIM

Bien, aqu hemos introducido algunas variables a saber:


RUTINA es una etiqueta, de modo tal que cuando alguna instrucci n ha-
ga que el contador de programa apunte a dicha etiqueta, entonces se eje-
cutar la instrucci n BTFSC.
REG es un registro que yo deb a haber postulado con anterioridad en el
programa.
DEC y SIM son etiquetas, de modo que cuando el contador de progra-
ma est apuntando a la l nea:

GOTO DEC

Entonces el programa se seguir ejecutando desde la l nea donde est


la etiqueta DEC.
Si antes de la instrucci n el contador de programa (PC CP) est en la
l nea donde se encuentra la etiqueta RUTINA, entonces se ejecutar la ins-
trucci n BTFSC. Al ejecutarse, si el BIT 2 del registro REG es igual a cero,
el contador de programa saltar una l nea e ir a ejecutar la instrucci n:

GOTO SIM

Por ltimo, note que en esta instrucci n tenemos tres columnas y es la


forma en que, en general, vamos a escribir un programa en lenguaje de
usuario (editar un programa). En la primera columna se colocan las etique-
tas , en la segunda columna se escribe siempre la instrucci n y en la ter-
cera columna se escribe el operando de la instrucci n. Normalmente va
una cuarta columna precedida del signo ; (punto y coma) que se utiliza pa-
ra escribir observaciones que no ser n tenidas en cuenta por el compilador
o el ensamblador que convertir al programa que estaba en lenguaje de
usuario en un programa en lenguaje de m quina (para los PICS es un len-
guaje hexadecimal o .hex).
La misma instrucci n de nuestro ejemplo la podr amos escribir de la si-
guiente manera:
RUTINA BTFSC REG,2 ;comienzo de una rutina

66 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

La cuarta columna no ser tenida en cuenta dado que est precedida


del signo ;

EJEMPLO:

RUTINA BTFSS REG,0


GOTO DEC
GOTO SIM

Igual que en el caso anterior hemos introducido algunas variables a sa-


ber:
RUTINA es una etiqueta, de modo tal que cuando alguna instrucci n ha-
ga que el contador de programa apunte a dicha etiqueta, entonces se eje-
cutar la instrucci n BTFSS.
REG es un registro que yo deb a haber postulado con anterioridad en el
programa.

Microcontroladores PIC 67
Manejo de las Instrucciones de un PIC

DEC y SIM son etiquetas, de modo que cuando el contador de progra-


ma est apuntando a la l nea:

GOTO DEC

Entonces el programa se seguir ejecutando desde la l nea donde est


la etiqueta DEC.
Si antes de la instrucci n el contador de programa PC est en la l nea
donde se encuentra la etiqueta RUTINA, entonces se ejecutar la instruc-
ci n BTFSS. Al ejecutarse, si el BIT 0 del registro REG es igual a uno, el
contador de programa saltar una l nea e ir a ejecutar la instrucci n:

GOTO SIM

EJEMPLO:
DIV CALL RUTIN

68 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

En la l nea DIV se encuentra la instrucci n CALL. Cuando el PC apunta


a esta l nea, autom ticamente va a ejecutar un programa que se encuen-
tra en la l nea que posee la etiqueta RUTIN. Cuando termina de ejecutar-
se la subrutina, se vuelve al programa principal a la l nea siguiente a DIV
(se dice DIV+1).

Z Se pone a 1 si el resultado de la operaci n es cero.

EJEMPLO:
CLRF REG
Si antes de la instrucci n:
REG = 5A h
Al ejecutarse:
REG = 00 h
flag Z = 1

Microcontroladores PIC 69
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la operaci n es cero.

EJEMPLO:
CLRW

Si antes de la instrucci n:

W= 0011 1111 b

Al ejecutarse:

W = 00
flag Z = 1

En definitiva, es una instrucci n que se utiliza cuando debemos asegu-


rarnos que el contenido del registro de trabajo es igual a 0 .

70 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Cuando se ejecutan las instrucciones CLRWDT o SLEEP, T0# se pone


a 1. Se pone a 0 si el temporizador Watchdog se desborda.

PD# se pone a 1 cuando se ejecuta la instrucci n CLRWDT o SLEEP.

EJEMPLO:
CLRWDT
Si antes de ejecutarse la instrucci n:
WDT = 0000 0100 b
Al ejecutarse:
WDT = 0000 0000 b
Preescaler WDT = 0
bit de estado T0 = 1
bit de estado PD = 1

Microcontroladores PIC 71
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la operaci n es cero.

EJEMPLO:

COMF DIS,0

Realiza el complemento del n mero almacenado en el registro DIS y


guarda el resultado en el registro W. Si antes de la instrucci n:

DIS = 0011 1110 b


W = 0000 0000 b

Al ejecutarse:
DIS = 0011 1110 b
W = 1100 0001 b
flag Z = 0

72 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la operaci n es cero.

EJEMPLO:

DECF SINT,1

Cuando el PC llega a esta l nea, se decrementa el contenido del regis-


tro SINT y en dicho registro se guarda el resultado. El registro de trabajo
no interviene para nada. Si antes de la instrucci n:

SINT = 0011 0111 b


Z=0

Al ejecutarse:

SINT = 0011 0110 b


Z=0

Microcontroladores PIC 73
Manejo de las Instrucciones de un PIC

EJEMPLO:

TEMP DECFSZ DEL,1


GOTO TEMP
CLRF REG

Con estas l neas de programa estamos realizando una temporizac n ,


consumiendo ciclos de reloj. Cuando el PC se ubica en la l nea TEMP, se
decrementa el contenido del registro DEL. Supongamos que el registro
DEL estaba cargado con el n mero 50 expresado en notaci n decimal, al
ejecutarse la instrucci n, ahora el contenido de dicho registro ser 49 (dis-
tinto de cero) por lo tanto el PC se ubicar en la siguiente l nea (GOTO
TEMP). Cuando esto ocurre, la instrucci n est enviando al PC nuevamen-
te a la etiqueta TEMP, con lo cual se volver a decrementar el contenido
del registro DEL que ahora tendr cargado el n mero 48. Este ciclo se re-
pite constantemente hasta que en el registro DEL se encuentre el n mero

74 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

00 en cuyo caso el CP saltar una l nea y ejecutar la siguiente instrucci n


que en este caso es CLRF REG.

EJEMPLO:
GOTO TEMP

Al ejecutarse la instrucci n, el contador de programa se dirige a la direc-


ci n donde se encuentra la etiqueta TEMP.

Microcontroladores PIC 75
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la operaci n es cero al haber desbor-


damiento.

EJEMPLO:
INCF REG,1

Cuando el PC llega a esta instrucci n se incrementa el contenido del re-


gistro REG y el resultado se guarda en el mismo registro, en este caso el
registro de trabajo no interviene para nada. Si antes de la instrucci n:

REG = FF h
flag Z = 0

Al ejecutarse:
REG = 00 (FF h +1 h = 00 h)
flag Z = 1

76 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

EJEMPLO:

ABA INCFSZ DEN,1


GOTO ABA
GOTO SIGA

Para entender c mo es que si incrementamos un n mero en alg n mo-


mento ste puede llegar a cero, hay que decir que cuando se llega a la ca-
pacidad m xima de un registro, el pr ximo incremento har que ste se co-
loque en cero (en todos sus bits) produci ndose un desborde.
Si el registro DEN ten a el n mero:
DEN = 0111 0001 b
Al ejecutarse la instrucci n INCFSZ:

Microcontroladores PIC 77
Manejo de las Instrucciones de un PIC

DEN = 0111 0010 b (se increment en una unidad)

Entonces el PC va a la direcci n GOTO ABA lo que hace que se vuelva


a incrementar nuevamente el contenido de DEN. Este ciclo se repite hasta
que el contenido de DEN sea cero en cuyo caso el PC salta una instruc-
ci n y ejecutar la l nea GOTO SIGA (SIGA es el nombre que le hemos da-
do a otra variable o registro).

Z Se pone a 1 si el resultado de la operaci n es cero

EJEMPLO:
IORLW 0x32

Esto quiere decir que se realiza la operaci n OR entre el contenido del


registro de trabajo y el n mero 32 expresado en hexadecimal, luego:

32 h = 0011 0010 b

78 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Si en W est almacenado el n mero:

W = 0001 1110 b, luego de la instrucci n, en el registro de trabajo se al-


macenar el resultado es decir:

W = 0010 1100 b

Z Se pone a 1 si el resultado de la operaci n es cero.

EJEMPLO:
IORWF RES,1

Si antes de la instrucci n:

RES = 13 h = 0001 0011 b


W = 91 h = 1001 0001 b

Microcontroladores PIC 79
Manejo de las Instrucciones de un PIC

Al ejecutarse la instrucci n:

RES = 0001 0011 b OR 1001 0001 b = 1001 0011 b = 93 h

El contenido del registro de trabajo no se altera.

EJEMPLO:
MOVLW 0x50

Al ejecutarse la instrucci n, en el registro de trabajo tendremos:

W = 50 h

La instrucci n MOVLW suele emplearse en la construcci n de las deno-


minadas tablas que se construyen mediante la comparaci n de n meros.
En ese caso se carga directamente en el registro de trabajo el n mero de
referencia que se comparar con cantidades almacenadas en memoria
(datos) mediante una instrucci n posterior.

80 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la operaci n es cero.

EJEMPLO:
MOVF SER,0
Si el contenido del registro SER es:
SER = 12 h
Luego de ejecutarse la instrucci n se tendr :

W = 12 h
SER = 12 h
Note que en este caso si el operando hubiese sido SER,1, entonces el
propio contenido del registro se hubiese cargado en el mismo registro, lo
que se emplea para corroborar que realmente esa posici n de memoria tie-
ne el dato esperado.

Microcontroladores PIC 81
Manejo de las Instrucciones de un PIC

EJEMPLO:
MOVWF DIR

En este caso se carga al registro DIR con el contenido del registro de


trabajo (W). Si antes de la instrucci n:

W = 4C h

Al ejecutarse:

DIR = 4C h
W = 4C h

MOVWF es una de las instrucciones m s empleadas para la construc-


ci n de programas dado que suele ser el medio empleado para cargar da-
tos en posiciones de memoria RAM. Para que tenga una idea, es muy co-
m n encontrar la siguiente secuencia:

MOVLW d 22
MOVWF DIR

82 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Aqu hemos cargado al registro DIR con el n mero 22 expresado en de-


cimal.

EJEMPLO:
NOP

Microcontroladores PIC 83
Manejo de las Instrucciones de un PIC

EJEMPLO:
RETFIE

Al ejecutarse esta instrucci n el contador de programa se dirige a la di-


recci n cargada en la posici n m s alta de la pila y el bit GIE se pone a 1
con el objeto de habilitar nuevamente la posibilidad de interrupci n.

EJEMPLO:
RETLW k
Como es l gico, esta instrucci n est ligada con las subrutinas, dado
que nos indica que sta ha terminado y el retorno inmediato con la carga
en el registro de trabajo W de un n mero que est expresado en la siguien-
te columna de la instrucci n. Adem s carga al CP con el valor que previa-
mente almacen en la PILA (STACK).
Esta instrucci n tarda dos ciclos de instrucci n.

84 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Siempre W debe regresar con un literal (muchas veces ese literal es ce-
ro). Muchas veces es til esta instrucci n, especialmente cuando desea-
mos regresar al programa principal con alg n valor obtenido de la subruti-
na.

Esta instrucci n no amerita ejemplo alguno, dado que cuando sta se


ejecuta, se vuelve al programa principal a una direcci n que est almace-
nada en el STACK.

Microcontroladores PIC 85
Manejo de las Instrucciones de un PIC

EJEMPLO:
RLF REG,0

Si antes de la instrucci n:

REG = 1110 0110 b


flag C = 0

Como d = 0 el resultado se guardar en W.


Al ejecutarse la instrucci n:

REG = 1110 0110 b


W = 1100 1100 b
flag C = 1

86 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

EJEMPLO:
RRF REG,0

Si antes de la instrucci n:

REG1 = 1110 0110 b


flag C = 1

Como d = 0 el resultado se guardar en W.


Al ejecutarse la instrucci n:

REG = 1110 0110 b


W = 0111 0011 b
flag C = 0

Microcontroladores PIC 87
Manejo de las Instrucciones de un PIC

TO Se pone a 1 al ejecutar la instrucci n SLEEP o CLRWDT.


PD Se pone a 0 al ejecutar la instrucci n SLEEP.

Es una instrucci n muy usada en programas almacenados en los micro-


procesadores empleados en controles remoto. Normalmente el circuito es-
t en modo SLEEP mientras no se detecte la acci n de una tecla, pero
cuando no hay ninguna orden, vuelve a este estado.

88 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la operaci n es cero.


DC Se pone a 1 si se genera un acarreo del bit 3 al grupo de 4 bits superior.
C Se pone a 1 si se genera un acarreo del bit de mayor peso.

EJEMPLO:
SUBLW 0x 05

a) Si antes de la instrucci n:

W = 01 h

Al ejecutarse la instrucci n:

W = (05 — 01) = 04
flag C = 1 ; el resultado es positivo

b) Si antes de la instrucci n: W = 05 h

Al ejecutarse la instrucci n: W = (05 — 05) = 00 h

flag C = 1 ; el resultado es cero


flag Z = 1

Microcontroladores PIC 89
Manejo de las Instrucciones de un PIC

c) Si antes de la instrucci n. W = 07 h

Al ejecutarse: W = (05 — 07) = FE h

flag C = 0 ; el resultado es negativo.

Z Se pone a 1 si el resultado de la operaci n es cero.


DC Se pone a 1 si se genera un acarreo del bit 3 al grupo de 4 bits superior.
C Se pone a 1 si se genera un acarreo del bit de mayor peso.
Tenga presente que el complemento a 2 de un registro (sustraendo),
equivale a restar dicho registro de 256 (255+1). Si el resultado se lo debe-
mos sumar a otro registro (minuendo), si el minuendo (que lo vamos a su-
mar), es mayor o igual que el sustraendo (que se lo restamos a 256), el re-
sultado ser mayor que 255 y por ende se producir un desborde u over-
flow con lo que C="1". Esto quiere decir que si C=1 entonces el reultado de
la resta es positivo.

90 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

Para el acarreo decimal, el bit DC se colocar en "1" cuando el valor del


nibble menos significativo (desde el bit 0 al 3) del registro W, sea menor
que el nibble menos significativo del registro REG (registro fuente).

EJEMPLO:
SUBWF REG,1

a) Si antes de la instrucci n:

REG = 04 h
W = 02 h

Al ejecutarse la instrucci n:

REG = (04 — 02) = 02h


W = 02 h
flag C = 1 ; el resultado es positivo

b) Si antes de la instrucci n:

REG = 04 h
W = 04 h

Al ejecutarse la instrucci n:

REG = (04 — 04) = 00h


W = 04 h
flag C = 1 ; el resultado es cero
flag Z = 1 ; el resultado es cero

c) Si antes de la instrucci n:

REG = 0100 0110 b (70 en decimal)


W = 1110 0000 b (224 en decimal)
Aqu ocurre un caso especial, veamos por qu . La operaci n es la si-
guiente:
¥ Se realiza el complemento a 2 del sustraendo (complemento a 2 de W)
¥ Se suma el contenido de REG con dicho complemento a 2 de W.
¥ El resultado de esta adici n, ser el resultado de la resta.

Microcontroladores PIC 91
Manejo de las Instrucciones de un PIC

Registro w 1110 0000


Complemento a 1 0001 1111
Sumando 1 + 1
Resultado 0010 0000 (complemento a 2 del
contenido de W = 32
en decimal)

Ahora debemos sumar 32 m s 70 que es el contenido de REG, el resul-


tado ser :

32 + 70 = 102

¥ El resultado no excede de 255, por lo que no hay bit de acarreo y en


consecuencia "C" es igual a 0 (lo que indica resultado negativo).
Cuando el minuendo sea menor que el sustraendo, el n mero que de-
bemos restar de 256, es mayor que el que habr que sumar (REG), por lo
tanto no habr desbordamiento y el bit Carry C ser siempre igual a "0".
El acarreo decimal DC se ha colocado en 1, ya que el valor del pack me-
nos significativo (del bit 0 al 3), del registro de trabajo W (es 0000) y es me-
nor que el del registro REG (registro fuente, es 0110). Por ltimo el bit Z es
0, ya que el resultado de la operaci n no es cero.
Como consecuencia de un resultado negativo, el registro Reg permane-
ce inalterable y en el registro W estar el resultado de la operaci n:

W = 0010 0110 b (decimal 102)


REG = 0100 0110 b (decimal 70)
Flaf C = 1
Flag DC = 0
Flag Z = 0

92 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

EJEMPLO:
SWAPF INDI,0

Si antes de la instrucci n:

INDI = 1010 0101 h

Como d=0 el resultado se almacenar en W, luego de la ejecuci n de la


instrucci n tendremos:

INDI = 1010 0101 b


W = 0101 1010 b

Microcontroladores PIC 93
Manejo de las Instrucciones de un PIC

Z Se pone a 1 si el resultado de la ltima operaci n es cero.

EJEMPLO:
XORLW B 0011 1000

Si antes de la instrucci n:

W = 1011 0101 b

Al ejecutarse la instrucci n:

W = 1011 0101 b ⊕ 0011 1000 b = 1000 1101

94 Microcontroladores PIC
Manejo de las Instrucciones de un PIC

EJEMPLO:
XORWF REG,1

Si antes de la instrucci n:

REG = 0011 1000 b


W = 1011 0101 b

Como d=1, el resultado se almacena en REG


Al ejecutarse la instrucci n:

REG = 1011 0101 b ⊕ 0011 1000 b = 1000 1101


W = 1011 0101 b

**************************************************

Nota 1:
En las instrucciones CALL y GOTO los 11 <10:0> bits de menos peso
corresponden al c digo de operaci n, mientras que los 2 bit de mayor pe-
so <12:11> los suministran respectivamente los bit 4 y 3 del registro
PCLATH que realmente apuntan a una de las 4 p ginas del mapa de me-
moria que puede direccionar el PC.

Microcontroladores PIC 95
Manejo de las Instrucciones de un PIC

Palabras de Configuraci n
e Identificaci n
Los PIC de la gama media disponen de una palabra de configuraci n de
14 bits que se escribe durante el proceso de grabaci n del dispositivo y que
debe hacerse de acuerdo con el sistema en el que se va a insertar. Dichos
bits ocupan la posici n reservada de memoria de programa 2007h. La es-
tructura de la palabra de configuraci n es la siguiente:

Bit 4: CP, bit de configuraci n de protecci n de c digo


1= Protecci n de c digo desactivado
0= Protecci n de c digo activado

Bit 3: PWRTE, Activaci n del temporizador "Power-Up"


1= Desactivado
0= Activado

Bit 2: bit de configuraci n habilitaci n del Watchdog (WDT)


1: WDT activado
0: WDT desactivado

Bit 1 y Bit 0: FOSC<1:0>, tipo de oscilador empleado


11: Oscilador RC
10: Oscilador HS ( 8 - 20MHz)
01: Oscilador XT ( 100 KHz- 4MHz)
00: Oscilador LP (Bajo consumo 32- 200Hz)

**************************************************************

96 Microcontroladores PIC
Aprendiendo a Programar

Aprendiendo a Programar
Introducci n
Hace aproximadamente tres a os, comenzamos a mostrar c mo se deben
escribir programas en nuestra querida revista Saber Electr nica; fue as que
tanto Federico Prado, el Ing. Alberto Picerno y este autor hemos escrito art cu-
los con la explicaci n de programas sencillos que le permitan aprender a utili-
zar las instrucciones del PIC 16X84.
En este cap tulo utilizaremos la misma t cnica comenzando desde el princi-
pio, bas ndonos en prototipos reales.

Circuito de un Entrenador
En Saber Electr nica hemos desarrollado un entrenador para aprender a
programar y cargar PICs, este entrenador se muestra en la figura 1.

Figura 1

Microcontroladores PIC 97
Aprendiendo a Programar

Sea el programa:

; Primer programa de pr ctica

List p = 16C84 ; voy a utilizar el PIC16C84


ptob equ 0x06 ; inicializo la variable ptob en
; la direcci n 06h
Reset org h0 ; comienza el programa
Inicio movlw h0 ; cargo a W con 0
tris ptob ; mando el contenido de W a ptob
movlw h 0f ; cargo a W con el n mero binario 15
ciclo nop ; rutina nula
goto ciclo ; vaya a ciclo

El programa comienza con un (;), por lo tanto, lo que sigue en el rengl n es


tomado como un comentario. Los signos = forman un resalte para indicar el ini-
cio del programa y ayudan a darle una distribuci n agradable a la vista.
El programa se lista en cuatro columnas; la primera sirve para colocar las
variables que utilizaremos como registros y las etiquetas que son ubicacio-
nes del programa ad nde se debe ir cuando el operando de una instrucci n as
lo requiera. En la segunda columna se coloca la instrucci n y en la tercera el
operando de la instrucci n. La cuarta columna siempre va precedida de (;) y se
utiliza para colocar observaciones que le sirvan al programador como gu a pa-
ra saber qu quiso hacer o qu funci n cumple esa sentencia, obviamente, al
compilar esa instrucci n, las observaciones no son tenidas en cuenta.

List p = 16C84
Es el encabezado del programa que le indica al ensamblador qu tipo de
PIC se est utilizando para que ste pueda reconocer qu set de instrucci n de-
be utilizar.

ptob equ 06
Nombr a la variable ptob y la coloqu en la direcci n 06 de la RAM, esta
direcci n est reservada para el PUERTO B , es decir, ratifico que ptob es el re-
gistro del PORT B. Cuando, m s adelante, deba enviar informaci n al puerto b,
s lo debo mencionar ptob.

Reset org 0
Significa que al realizarse el reset, el programa comienza por la posici n 0
de la memoria del programa. Pero de inmediato pasa a la posici n 1 que tiene

98 Microcontroladores PIC
Aprendiendo a Programar

escrita la siguiente sentencia:

Inicio movlw 0
Con esto se carga el registro w con el hexadecimal 0 (es decir el binario
00000000)

tris ptob
Esta instrucci n env a la informaci n del registro W al puerto B para indicar-
le que todos sus pines son de salida (si se hubiera cargado el binario 11111111
todos los pines ser an de entrada y si se hubiera cargado 11001010 algunos se-
r an entradas y otros salidas).

movlw 0f
Carga el registro W con el hexadecimal 15 que equivale al binario 00001111 y

movlw ptob
Env a el valor cargado al puerto "B" que producir un estado alto en RB0,
RB1, RB2 y RB3 y un estado bajo en RB4, RB5, RB6 y RB7. La informaci n del
puerto pasa al buffer que lleva las patas 15, 16, 17 y 18 de un PIC16C84 a ma-
sa encendiendo los leds D7, D8, D9 Y D10.

Ciclo nop
Realiza una rutina nula, es decir, que no efect a operaci n alguna.

goto ciclo
Env a el programa hacia la etiqueta "ciclo". Las dos ltimas operaciones
hacen que al ejecutarse un programa, ste se quede en un lazo que se llama
loop cerrado .
La nica manera de salir de este loop es pulsando RESET. Entonces se ob-
serva que los leds se apagan hasta que se suelta el pulsador y el programa co-
mienza nuevamente por la etiqueta RESET.
Obviamente, este programa debe ser editado en un utilitario adecuado
(MPLAB, por ejemplo) y luego debe ser compilado (utilizando el MPASM o el
mismo MPLAB) para obtener el archivo .hex que me permitir cargar el PIC que
deber colocar en el circuito de la figura 1 para verificar que realmente hace
lo que estamos diciendo.
Para cargar el PIC con el programa .hex se utiliza un prototipo adecuado
(cargador de PICs) que consiste en un circuito que es manejado por un progra-
ma para permitir la carga. Todo este proceso se explica con total claridad en el
primer texto de esta serie, titulado: Todo Sobre PICs .

Microcontroladores PIC 99
Aprendiendo a Programar

En la figura 2 se puede observar un dia-


grama de flujo que refleja el funcionamien-
to del programa que acabamos de explicar.

Cu nto tardan en encenderse los


leds luego de soltar el bot n de reset?
Si se observa el circuito, se ver un
cristal de clock de 4MHz (0,25 S de per o-
do); como internamente existe un divisor
x4 cada operaci n se realizar en 0,25 x 4
= 1 S. Si contamos las sentencias hasta
llegar a cargar el puerto B, veremos que
hay 5 (cinco renglones de programa); por
lo tanto, la demora es de 5 S.

Fig. 2

Encendido Intermitente
de un Led
Si Ud. no quiere armar el entrenador completo (que sirve para un sinf n de
aplicaciones que se ense an en el Curso: Todo Sobre PICs , que est en ven-
ta en varios pa ses de Am rica a trav s de la red de distribuidores de Editorial
Quark y Centro Ja-
pon s - vea en Inter- Fig. 3
net la direcci n:
www.webelectroni-
ca.com.ar) le propo-
nemos que arme s -
lo lo imprescindible
para encender los
leds seg n el circuito
de la figura 3; un cir-
cuito tan simple que
no requiere plaque-
ta, puede armarse ti-
po ara a sobre la
mesa de trabajo,

100 Microcontroladores PIC


Aprendiendo a Programar

porque no es algo para mostrar sino para aprender. Observe que los leds est n
conectados directamente al puerto B predispuesto como de salida por el pro-
grama. En efecto, el puerto de salida admite perfectamente los 3mA que toma
cada led al conectarlos con resistores en serie de 1k5. Como nica precauci n
para el armado debe utilizar un z calo de 18 patas para el PIC. Las conexiones
de X1, C1 y C2 deben ser lo m s cortas posibles. Si usted repara TV y video-
grabadores seguramente tendr cristales de 3,58MHz (de PALN o NTSC o in-
clusive de PALM). Puede utilizarlos sin mayor inconveniente pero recuerde que
los tiempos calculados estar n afectados de un coeficiente igual a 3,58/4.
Nuestro programa va a hacer uso de lo que se llama una subrutina. Una su-
brutina es como un segundo programa anexo al principal. El programa principal
va a la subrutina a trav s de una instrucci n "CALL" que no hab amos emplea-
do hasta ahora.
Esta instrucci n salta del paso del programa donde se encuentra, a la su-
brutina y cuando se ejecuta por completo vuelve al mismo punto del programa
en donde se hab a producido el salto.
Una subrutina debe estar siempre dirigida a una etiqueta para que el salto
se realice con un destino bien determinado. Por lo general, las subrutinas se es-
criben a continuaci n del programa principal, pero esto es simplemente una
costumbre, bien podr an ubicarse en otro lugar como el principio. Recuerde que
todo comienza cuando se pulsa reset o cuando se enciende el equipo y, en ese
momento, se ejecuta lo indicado con la etiqueta reset y se salta al rengl n si-
guiente. Cuando termina una subrutina, se debe colocar una referencia "RE-
TURN", que significa retornar al siguiente rengl n del programa principal don-
de est la invocaci n a la subrutina.
Otra instrucci n nueva que no hab amos utilizado es "decfsz" que siempre
va acompa ada de un n mero hexadecimal. Esta instrucci n se utiliza para
programar retardos. Por ejemplo, si su paso del programa fuera:

CONST equ 06
decfsz CONST

En el encabezado se declara que la variable CONST estar en la direcci n


06 luego, al ejecutarse la instrucci n el contenido de la variable CONST se ha
decrementado en una unidad.
Esto parece m s una complicaci n sin sentido, pero no es as ; en un pro-
grama bien estructurado los cambios se realizan en el encabezado y, adem s,
muchas veces es necesario cambiar solidariamente varios operandos y el m -
todo propuesto lo logra f cilmente.
Tambi n vamos a utilizar una instrucci n de doble uso y que forma parte de

Microcontroladores PIC 101


Aprendiendo a Programar

una subrutina (generalmente la cierra). Se trata de "retlw" que debe ir acompa-


ado de un literal (n mero hexadecimal). Esta operaci n carga el registro w con
el literal que lo acompa a y retorna al programa principal todo en un solo ren-
gl n. Su funcionamiento se apreciar mejor cuando veamos el programa de
aplicaci n pero es equivalente a:

movlw 0x12 ; cargo a W con el n mero 12h


return

A esta altura Ud. debe recordar unas cuantas sentencias y todav a faltan
unas cuantas m s (recuerde todo lo visto en el cap tulo 2). Como ayuda para
que no deba estudiar todas las sentencias de memoria le decimos que lo me-
jor es relacionarlas con palabras comunes del idioma ingl s. Por ejemplo "equ"
proviene de "equal" que significa igual. En la figura 4 le damos una tabla con
m s ayudas.

Fig. 4

Para dise ar un programa usted debe tener en claro la funci n del proyec-
to. En nuestro caso queremos que al encender la fuente el led conectado a RB0
se encienda y apague con un tiempo que pueda modificarse f cilmente para al-
terar el programa. Al apretar el pulsador de reset se debe apagar el led y al sol-
tarlo se encender luego de un retardo y continuar alternando per odos de en-
cendido y apagado.

102 Microcontroladores PIC


Aprendiendo a Programar

El programa completo lo vamos a dividir en dos partes: un programa princi-


pal y una subrutina que llamamos retardar . Los hacemos as porque casi to-
dos los programas incluyen retardo y el dise o de esa subrutina lo podemos
emplear posteriormente y nos ahorraremos trabajo.
Un programa debe estar estructurado en forma clara, se deben diferenciar
claramente los distintos sectores y esto se hace no s lo para que sea agrada-
ble a la vista, sino para facilitar los futuros cambios.
La primera secci n es el t tulo y la declaraci n de qu PIC se va a utilizar.
La segunda es el encabezado en donde se le da nombre a los literales (n me-
ros hexadecimales) m s importantes. La tercera es el programa principal y la
cuarta las subrutinas:

;===========================================================
; Secuenciador de encendido de un led
list p=16C84 ;micro PIC16C84
;===========================================================
portb equ 06 ;el puerto b se ubica en la dirección de
;memoria RAM06
reg1 equ 0c ;asignación de los registros donde se cargan los
reg2 equ 0d ;diferentes literales
reg3 equ 0e ;
grueso equ 40 ;al literal 40 lo llamamos grueso
medio equ 40 ;al literal 40 lo llamamos medio
fino equ 50 ;al literal 50 lo llamamos fino
;===========================================================
reset org 0 ;un reset envía a la posición 00 de la memoria
;de programa.
Goto comienzo ;reenvío al comienzo del programa
;===========================================================

Analicemos el encabezado, las primeras l neas hasta la etiqueta portb ya


las conocemos del programa anterior (aqu empleamos portb en lugar de ptob).
Luego tenemos tres sentencias que le dan nombre reg1, reg2 y reg3 a tres re-
gistros de uso general, ubicados en las posiciones de memoria RAM destina-
das a los registros. Recuerde que las primeras 12 posiciones de memoria has-
ta 0B est n ocupadas por registros fijos. A partir de 0C se ubican los registros
de prop sitos generales de los cuales usaremos 3, a saber: 0C, 0D y 0E (que
son los registros que hemos denominado reg1, reg2 y reg3).
En esos registros volcamos inicialmente los literales 30, 40 y 50 que nom-
bramos como grueso , medio y fino . Esto se realiza en las tres ltimas sen-
tencias del encabezado que son aquellas que Ud. debe variar si desea que el

Microcontroladores PIC 103


Aprendiendo a Programar

ritmo de encendido se haga m s lento o m s r pido. Desde luego que estas


tres sentencias no son imprescindibles pero si no se usan, luego habr a que
buscar dentro de la subrutina para cambiar los literales. Trabajando de esta ma-
nera es m s f cil introducir cambios porque los hacemos desde el encabezado.
La secci n principal del programa es muy similar a la utilizada en el primer
programa para encender permanentemente un led:

reset org 0 ;un reset envía el programa a la posición 0


goto comenzar ;se envía el control al comienzo
comenzar movlw 00 ;se carga w con 00
tris ptob ;se programa el puerto b como salida
ppal movlw 01 ;se carga w con 01
movwf ptob ;se descarga w en el puerto b para
;encender el led conectado RB0
call demora ;se mantiene el led encendido por
;un intervalo de tiempo
movlw 00 ;se carga w con 00
movwf ptob ;se descarga w en el puerto b para
;apagar el led de RB0
call demora ;se mantiene el led apagado por
;un intervalo de tiempo
goto ppal ;continua el programa en el principio
;hasta realizar un reset

Siempre se comienza a analizar el programa observando qu ocurre al rea-


lizar un reset. En este caso, vemos que todo comienza en la posici n 00 de la
memoria de programa. En la siguiente posici n se env a el control del progra-
ma a la posici n comenzar , en donde se predispone el puerto b para operar
como salida. Luego, comienza el programa principal en el etiqueta ppal, en don-
de se carga el registro w con el n mero hexadecimal 01. Cuando este n mero
se descarga en el puerto b se enciende el led conectado en RB0.
Ahora se env a el control a la subrutina demora porque pretendemos que
el led quede encendido algo menos de un segundo. Cuando se cumpla ese
tiempo volver el control desde demora continuando por la carga de w con el
hexadecimal 00. Al descargar w en el punto b se produce el apagado de led
conectado en RB0.
Nuevamente el control pasa a la subrutina demora, en donde se queda por
algo menos de 1 segundo antes de volver al programa principal. Cuando vuel-
ve es enviado de inmediato al comienzo de ppal con un nuevo encendido de
RB0 y as permanentemente hasta que se opere el reset.
Es el turno de platicar sobre la subrutina demora. Esta subrutina es m s
complicada que el programa principal. Lo que ocurre es que la dise amos pa-

104 Microcontroladores PIC


Aprendiendo a Programar

ra uso general, ya que la vamos a aplicar en una infinidad de programas. En


principio, la demora la vamos a poder variar con tres n meros hexadecimales
que fueron definidos en el encabezamiento como grueso , medio y fino por-
que operan de ese modo sobre el retardo final:

demora movlw grueso ;recarga w con el número hexadecimal


;“grueso” es decir, con 30
movwf reg1 ;se vuelca “grueso” en el registro
;reg 1
dem3 movlw medio ;se carga w con el número hexadecimal
;“medio” es decir con 40
movwf reg2 ;se vuelca "medio" en el registro
;reg2.
dem2 movlw fino ;se carga w con el número hexadecimal "fino"
;es decir con 50.
movwf reg3 ;se vuelca "fino" en el registro reg3.
dem1 decfsz reg3 ;se decrementa el registro reg3 en una unidad
;y si el resultado es cero se salta a la siguiente
;instrucción, si no se sigue decrementando.
goto dem1 ;retorno a la frecuencia etiqueta dem1.
decfsz reg2 ;idem con reg2.
goto dem2 ;retorno a la etiqueta dem2.
decfsz reg3 ;idem con reg1.
goto dem1 ;retorno a la etiqueta dem3.
retlw 0 ;se carga w con 0 y se retorna al programa
;principal
end

La subrutina comienza cargando los registros de uso general con los n me-
ros hexadecimales declarados en el encabezado. Luego que los tres registros
especiales est n cargados con los hexadecimales 30, 40 y 50 se comienza a
decrementar el registro 3 de a una unidad; mientras el registro tenga un n me-
ro mayor o igual a 1 se contin a este proceso, pero al llegar a cero se salta a
la siguiente sentencia que justamente es un "goto". Es como si el control retor-
nara y fuera a dem1 tantas veces como lo indica el n mero hexadecimal carga-
do en el registro 1. Luego la subrutina pasa a la siguiente sentencia que co-
mienza a decrementar el n mero cargado en reg2, s lo que el "goto" es a la eti-
queta dem2 que es anterior a la dem1, es decir, que se vuelve a pasar por
"dem1" a hacer todo el primer decremento del n mero guardado en "reg3" y re-
ci n despu s se hace el siguiente decremento en el registro "reg2". Cuando
"reg2" llega a cero se produce el primer decremento de "reg3" y para que se
produzca el segundo tienen que decrementarse a cero "reg2". En una palabra,
que la subrutina da much simas vueltas sobre "dem 1", muchas sobre "dem2"

Microcontroladores PIC 105


Aprendiendo a Programar

y pocas sobre "dem3". Finalmente cuando "reg3" llega a cero, se pasa retlw
que reenv a el control al programa principal justo en la sentencia que invoc a
la subrutina pero antes de retornar lleva el registro w a cero. El programa ter-
mina en "end" que no puede considerarse como una sentencia, ya que no rea-
liza ninguna tarea; sin embargo, su existencia es imprescindible para que el
programador de PICs d por terminada su tarea. Cuando no se coloca el pro-
grama ensamblador emite un mensaje de error.
Tenga en cuenta que le estamos ense ando a programar , es decir, a utili-
zar las instrucciones del set del PIC. Si Ud. es programador, estos ejemplos le
van a parecer muy torpes, dado que el experto sabe c mo utilizar rutinas que
permitan hacer lo mismo con menos esfuerzo de programaci n. Ud. est apren-
diendo como cuando comenz a sumar y en aquella oportunidad seguramente
le costaba entender que 1 + 1 es igual a dos, aunque hoy le parezca un ejem-
plo muy burdo.
Volviendo a nuestro programa, sabemos que la subrutina "demora" tiene
una cierta duraci n. Con un m nimo conocimiento de matem ticas podemos
calcular ese retardo en funci n de los n meros hexadecimales que hallamos
elegido.
Tomemos primero el "loop" (rulo) m s interno de la subrutina; mientras no se
cumpla que "reg 3" = 0 se consume un ciclo de instrucci n por vuelta (gen ri-
camente podemos decir que todas las sentencias consumen un ciclo salvo las
de salto como la "goto" que consume dos).

N mero de ciclos "reg 3" = 3 x "grueso"


= 3 x 80 (ya que 50 Hex = 80 decimal)
= 240 ciclos de instrucci n

Para calcular la demora de los dos loops siguientes es conveniente realizar


un diagrama de los mismos tal como el mostrado en la figura 5.
Ahora vemos que el loop intermedio dura 2 + 1 + 1 + 1 = 5 ciclos de instruc-
ci n a los cuales se les suman los 240 ciclos del loop m s interno. En total se-
r an 5 + 240 = 245. Pero este loop es recorrido hasta que el hexadecimal 40
(equivalente al decimal 64) se anule:

n mero de ciclos "reg 2" = 245 x medio


= 245 x 64
= 15.860 ciclos de instrucci n.

El loop m s externo dura 2 + 1 + 1 + 1 = 5 ciclos de instrucci n a los cuales


se les suman los 15.860.

106 Microcontroladores PIC


Aprendiendo a Programar

Fig. 5

Pero este loop es recorrido hasta que el hexadecimal 40 (equivalente al de-


cimal 64) se anule:

n mero de ciclos "reg 1" = 15.860 x fino Fig. 6


= 15.860 x 64
= 1.015.040 ciclos de instrucci n.

Nos quedar an 1 + 1 ciclos al comien-


zo de la subrutina y 2 ciclos al final para
llegar a un valor de 1.015.044 ciclos de
instrucci n.
La duraci n de un ciclo de instrucci n
depende del cristal utilizado. Si usamos
un cristal de 4MHz cada ciclo de instruc-
ci n dura 1 s y tendr amos una demora
de 1,015 seg.
El led estar a encendido casi un se-
gundo y apagado otro tanto.
El funcionamiento del programa princi-
pal y la subrutina de demora pueden re-
presentarse en un diagrama de flujo co-
mo el mostrado en la figura 6 para el pro-
grama principal.

Microcontroladores PIC 107


Aprendiendo a Programar

Secuenciador de 4 Canales Fig. 7

Elegimos trabajar con cuatro leds para


que usted pueda entender el tema con
m s facilidad. Pero todo lo que veremos
puede aplicarse a un secuenciador de 8
leds. Nuestro dispositivo enciende cuatro
leds en secuencia de manera que nunca
est n encendidos todos al mismo tiempo.
En el ejemplo anterior vimos primero el
programa y luego el diagrama de flujo. En
realidad el m todo es el inverso. Un dia-
grama de flujo permite visualizar el funcio-
namiento de un programa y por lo tanto
debe efectuarse previamente.
Por ejemplo, en la figura 7 puede ver el
diagrama de flujo correspondiente a la ru-
tina demora del programa que permite el
encendido intermitente de un led.
El programa es la interpretaci n del
diagrama de flujo; en el programa se plas-
man los detalles que no tiene el diagrama
de flujo. Para construir el programa de
nuestro secuencial, nos basamos en el
diagrama de flujo de la figura 8.
Fig. 8
Observe que luego de iniciado, el pro-
ceso no se detiene jam s, ya que termina-
da la secuencia, vuelve a comenzar. Ob-
viamente, la aplicaci n de un reset apaga-
r todos los leds mientras se mantenga el
reset pulsado.
En este programa se van a utilizar nue-
vas instrucciones que debemos detallar.
Entre otras utilizamos la instrucci n movf
que se acompa a con un doble operando.
Es una sentencia que sirve para realizar
transferencias en el contenido de cual-
quier registro nombrado como primer ope-
rando al registro W.
Otra instrucci n nueva es rlf, cuya fun-

108 Microcontroladores PIC


Aprendiendo a Programar

ci n es desplazar el contenido de un registro nombrado como operando. El con-


tenido se desplaza hacia la izquierda y el primer bit vuelve a ingresar como l-
timo.
Finalmente se utiliza tambi n la instrucci n btfss que incluye dos operan-
dos; el primer operando indica en qu registro se realiza la operaci n y el se-
gundo que posici n del registro se analiza (en que bit, del bit 0 al bit 7). La ope-
raci n consiste en analizar la posici n siguiente a la nombrada como segundo
operando. Por ejemplo:

btfss rot,4

Aqu se analiza el estado de 5 bit (bit 4, dado que el primer bit o bit menos
significativo es el bit 0), si ste es cero se continua con la sentencia siguiente ,
si es 1 se saltea en la siguiente secuencia. En la figura 9 se realiza un dibujo
que explica estas ltimas instrucciones.

Fig. 9

Microcontroladores PIC 109


Aprendiendo a Programar

Imag nese a movf como si volcara el contenido de un balde en otro, se lo


asimila a un transvasamiento. La sentencia rlf la puede imaginar como si apre-
tara un registro con el dedo puesto por la derecha del mismo; el bit que se cae
por la izquierda lo toma con la mano y lo pone por la derecha donde qued un
espacio vac o.
Vea a btfss como si estuviera con la mano sobre el quinto bit. Si esa posi-
ci n esta fr a, mande el control de programa al rengl n siguiente. Si est calien-
te, saltee el que sigue y mande el control al posterior a ste.
Bien, el programa del secuenciador es en realidad una modificaci n del pro-
grama de encendido y apagado de un led. Como vemos, los programas dif cil-
mente se inicien desde cero siempre se utilizan otros programas que se modi-
fican y adem s se utilizan subrutinas completas como la "demora":

; SECUENCIADOR

list P=16C84 ;el dispositivo usa el 16C84


;-------------------------------------------------------------------------------------------
ptob equ 06 ;el puerto f se ubica en 06 de la RAM.
Rot equ 0d ;al registro ubicado 0d se lo llama est.
Reg1 equ 0e ;al registro ubicado en 0e se lo llama reg1
reg2 equ 0f ;al registro ubicado en 0f se lo llama reg1
reg3 equ 10 ;al registro ubicado en 10 se lo llama reg3
grueso equ 00 ;se asignan nombres a los literales.
medio equ 40 ;se asignan nombres a los literales.
fino equ 50 ;se asignan nombres a los literales.
;-------------------------------------------------------------------------------------------
reset org 0 ;reset en dirección 00h
goto comenzar ;se lleva el control a comienzo
comenzar movlw 00 ;se carga w con 00h
tris ptob ;se programa el puerto "b" como salida.
ppal movlw 01 se carga w con 01h
movwf rot ;se descarga w en el registro rot
;preparándolo para la rotación.
sec movf rot,0 ;el contenido de rot pasa a w
movwf ptob ;enciende el led conectado donde indica w
call demora ;se mantiene encendido el led.
rlf rot ;se mueven los bits de "rot".
btfss rot,4 ;se comprueba el 5º bit.
goto sec ;si el 5º bit es cero se reenvía a sec.
goto ppal ;si el 5º bit es uno se reenvía a ppal para
;comenzar una nueva secuencia.

110 Microcontroladores PIC


Aprendiendo a Programar

demora movlw grueso ;recarga w con el número hexadecimal


;“grueso” es decir, con 30
movwf reg1 ;se vuelca “grueso” en el registro
;reg 1
dem3 movlw medio ;se carga w con el número hexadecimal
;“medio” es decir con 40
movwf reg2 ;se vuelca "medio" en el registro
;reg2.
dem2 movlw fino ;se carga w con el número hexadecimal
;"fino" es decir con 50.
movwf reg3 ;se vuelca "fino" en el registro reg3.
dem1 decfsz reg3 ;se decrementa el registro reg3 en una
;unidad y si el resultado es cero se salta a
;la siguiente instrucción, si no se sigue
;decrementando.
goto dem1 ;retorno a la frecuencia etiqueta dem1.
decfsz reg2 ;idem con reg2.
goto dem2 ;retorno a la etiqueta dem2.
decfsz reg3 ;idem con reg1.
goto dem1 ;retorno a la etiqueta dem3.
retlw 0 ;se carga w con 0 y se retorna al
;programa principal.
end

Todo comienza cargando el registro w con el hexadecimal 01, es decir que


el registro se llenar con el binario correspondiente 00000001. Este contenido
se transvasa a "rot" y luego devuelta a "w", desde donde se lo env a al puerto
"b" para encender el ltimo led. Ahora el control del programa se env a a demo-
ra para que el led permanezca encendido cerca de 1 segundo. A continuaci n
se produce la rotaci n de los bits de "rot" con lo cual queda cargado con el bi-
nario 00000010. Ahora se comprueba el estado del quinto bit; como es 0 se
reenv a el control a "sec , se carga "w" con el contenido de "rot" se transvasa
"rot" a "w" y luego se env a "w" al "ptob", entonces el segundo led se enciende
y as sucesivamente, hasta que se enciende el cuarto led. En ese momento, al
hacer la rotaci n se lleva el quinto bit a 1, momento en que se saltea el goto
"sec", se hace un goto a ppal y comienza una nueva secuencia.
Si lo analizamos globalmente, lo nico que hace el programa es cargar el
puerto w con los binarios 00000001; 00000010; 00000100; 00001000 y realizar
un cambio cada segundo aproximadamente.
Sugerimos que cambie inicialmente la subrutina demora para que la se-
cuencia sea m s r pida. Luego lo invitamos a realizar un cambio mayor, que

Microcontroladores PIC 111


Aprendiendo a Programar

implique secuenciar 8 leds en lugar de 4, y por ltimo lo invitamos a construir


una guirnalda para un arbolito de navidad. Lo nico que se modifica en este ca-
so es que con el sistema simplificado, se requiere manejar un solo led. Para
manejar una cantidad mayor, le sugerimos el circuito de la figura 10.

Fig. 10

Generador de Se ales de Audio


El programa que reci n vimos puede utilizarse para generar se ales de au-
dio con forma de escalera, que son el medio id neo para comprobar la lineali-
dad de los amplificadores de potencia de audio. En efecto, una escalera de 8
escalones de 1kHz de frecuencia aproximada, nos permite probar si la amplifi-
caci n es lineal. Basta con usar un osciloscopio y medir si los 8 escalones ge-
nerados son id nticos.
En funci n del escal n deformado, se puede luego determinar en qu parte
del amplificador se encuentra la falla. Por ejemplo, los escalones centrales se
deforman cuando falla el circuito de corriente vac o. Una falla en los escalones
extremos significa que no funcionan correctamente los circuitos de boostrap. (fi-

112 Microcontroladores PIC


Aprendiendo a Programar

gura 11). Esta forma de onda es tambi n ideal para controlar la respuesta en
frecuencia del amplificador de potencia, sin necesidad de realizar varias medi-
ciones con un oscilador de audio. Un amplificador sobrecompensado en fre-
cuencia (realce de agudos) producir sobreimpulsos en los escalones y uno
subcompensado (falta de agudos) redondear los frentes (figura 12).

Fig. 11

Fig. 12

La fabricaci n de un generador escalera nos da motivo para estudiar el ma-


nejo de llaves anal gicas con un PIC. Esta es una de las utilidades m s impor-
tantes del PIC y se usa en una gran cantidad de aplicaciones. Por ejemplo, un
uso frecuente es la codificaci n y decodificaci n de se ales de TV. En este pro-
yecto usaremos dos llaves CD4066 para conmutar 8 valores de tensi n de sa-
lida, que forman una se al escalera de 8 pelda os y 3,5V de amplitud pico a pi-
co. El circuito se muestra en la figura 13.
Los resistores R15 a R23 forman cada pelda o de la escalera y su valor de-
be ser sumamente exacto. Si no puede conseguir resistores al 1%, los debe
conseguir con resistores en paralelo medidos con un buen t ster digital. Una

Microcontroladores PIC 113


Aprendiendo a Programar

Fig. 13

vez armada la serie y con CI1 fuera del z calo se deben controlar las tensio-
nes continuas en las uniones de los resistores con un t ster digital.
Los resistores R6 a R9 y R11 a R14 se utilizan como reparadores para fa-
cilitar el service. En el uso normal no cumplen funci n especial alguna.
El reset es autom tico al encender la fuente de 5V a trav s de R10 y C3 que
demoran el crecimiento de la tensi n sobre el terminal 4 (MCLR ).
El puerto A se conecta con resistores de 1k‰ a los +5 V para evitar capta-
ciones espurias. La salida de se al en escalera se produce sobre la conexi n
com n de salida de las llaves anal gicas y se aten a con el fin de reducir la im-
pedancia de salida mediante R24 y RV1. La tensi n de salida m xima es de
100mV pap aproximadamente. La nica modificaci n que requiere el progra-
ma es la modificaci n de las constantes literales para que cada escal n dure
12 S. (8 escalones duraran 8 x 125 = 1000 S = 1mS).
Si repasamos la secci n de la subrutina demora del art culo anterior vere-
mos que cada instrucci n simple demora 1 S y que el loop definido con "FI-
NO" dura 3 x FINO S. En nuestro caso, debemos buscar un n mero hexade-
cimal cuyo equivalente anal gico sea 125.
Lo m s simple es recurrir al tanteo, usando hexadecimales que terminen en
cero; sabiendo que el hexadecimal 10 corresponde al anal gico 16, podemos
deducir que el anal gico 20 corresponde al 32, el 30 al 48 y as sucesivamen-

114 Microcontroladores PIC


Aprendiendo a Programar

te, ir multiplicando el hexadecimal x 1,6. Si 3 x FINO = 125 S implica que FI-


NO = 125/3 = 41,6 anal gico, que dividido por 1,6 es 26. Aproximamos al he-
xadecimal 30, ya que con ste tendremos que el loop "FINO" demorar 3 x 30
Hex = 3 x 48 = 144 S. La frecuencia obtenida ser de F = 1/(144 x 8) = 868Hz
que se aproxima a la buscada. Si desea mayor precisi n ajuste el literal "FI-
NO".
Sintetizando: el programa debe variarse haciendo que fino valga 30 y me-
dio y grueso sean ambos iguales a 00.

Piense que el circuito propuesto puede tener muchas posibilidades de mo-


dificarse a voluntad y adaptarse a otros usos. Por ejemplo, si en lugar de co-
nectar las entradas de las llaves a tensiones continuas, las aplican a se ales
alternas provenientes de 8 osciladores sinusoidales, se puede hacer un barre-
dor de audio. Si reduce la frecuencia de repetici n puede construir un genera-
dor musical de acordes de 8 notas, similares a los utilizados como bocina mu-
sical en autom viles y etc., etc., etc. Piense en otras posibilidades m s.

Los Formatos de los Archivos


Mencionamos el programa MPASM, que es un ensamblador que transforma
el programa dise ado por nosotros en un idioma hexadecimal correspondiente
al PIC. El programa generado a mano (el que escribe el programador, en base
a las pautas dadas en este cap tulo) tienen una extensi n ASM (de ASEM-
BLER" o ensamblador) y cuando lo aplic bamos al MPASM se generaban tres
archivos con terminaciones diferentes .err donde se encuentran los mensajes
de error, si se cometi un error de sintaxis al escribir el archivo .asm;
.asm un archi-
vo .lst con los renglones numerados para ubicar en cual se produce el error y
el m s importante, el archivo .hex que contiene los datos que supuestamente
entiende el microprocesador.
En realidad del microprocesador no entiende el archivo con terminaci n
.hex.
.hex El necesita otro programa que transforma el .hex en un lenguaje binario
de datos en serie que es lo nico que entiende el microprocesador PIC, sto es
lo que hace un PROGRAMADOR o cargador de PICs.

Secuenciador de 8 Canales
Veamos un programa diferente al propuesto para rotar el encendido de 4
leds. Este programa sirve para encender 8 leds en sucesi n de la figura 3 y con
algunos cambios para excitar las llaves anal gicas del generador de escalera
que acabamos de analizar:

Microcontroladores PIC 115


Aprendiendo a Programar

En la primera sentencia se observa la declaraci n del microprocesador utili-


zado. Como puede observar en lugar de utilizar el 16C84, como lo hicimos has-
ta ahora, utilizamos el 16F84. La diferencia entre ambos radica en el tipo de
memoria utilizada. El 16F84 contiene una memoria m s r pida del tipo EE-
PROM FLASH que se puede reescribir un mill n de veces. El almacenamiento
de esta informaci n est garantizado por el fabricante por un lapso mayor a 40
a os con el dispositivo sin alimentaci n. El 16C84 es totalmente similar, pero
contiene una memoria EEPROM com n, de acceso m s lento y con menores
garant as de mantenimiento de la informaci n grabada. Tambi n se puede uti-
lizar el 16F83 similar al 16F84 pero con la mitad de capacidad de memoria y por
lo tanto m s barato. Cualquiera de los tres integrados puede alimentarse con
tensiones de 4 a 6V.
En el sector entre l neas punteadas, se declara donde se van a ubicar 3 va-
riables que utiliza el programa, llamadas ptob, j y k. Aqu se puede observar que
la posici n de memoria puede declararse de diferentes modos. En el primer
rengl n s lo escribimos 06. Cuando no se coloca el n mero entre acentos, ni
se coloca una letra adelante, se interpreta que se trata de un n mero hexade-
cimal. Es decir que el programa ensamblador (el MPASM) interpreta un n me-
ro "por defecto" como si fuera hexadecimal.
En el segundo y tercer rengl n se utiliza un criterio diferente. La letra H sig-
nifica que el n mero entre acentos ser hexadecimal; en este caso particular se
utilizar n las posiciones de memoria 1F y 1E para guardar a las variables j y k.
En la carpeta reset se ubica la parte del programa que se ejecuta s lo cuan-

116 Microcontroladores PIC


Aprendiendo a Programar

do se presiona el pulsador de reset. Se trata de 5 renglones o sentencias de las


cuales la primera ubica el control en la posici n de memoria de programa cero.
En la segunda se carga el registro de trabajo w con el n mero cero. Observe
que en este caso utilizamos otra notaci n diferente; la letra B indica que a con-
tinuaci n se colocar un n mero binario de 8 d gitos (el PIC empleado s lo
puede manejar hasta 8 bits). En la siguiente sentencia se vuelca el contenido
del registro de trabajo en ptob, que en el copete se declar ubicado en la posi-
ci n de memoria 06. Esta posici n de memoria controla la disposici n del puer-
to "B" como de salida (aclaramos que el uso del comando TRIS generar un
mensaje de precauci n pero que por ahora no debemos tener en cuenta).
En la sentencia 4 de la carpeta "reset", se vuelve a cargar el registro de tra-
bajo con el binario "00000001"; esto no implica que se realice ninguna modifi-
caci n en la disposici n de puertos, ya que una vez cargada la posici n de me-
moria, sta no se modificar hasta que se produzca un reset. El registro w se
utiliza para cargar informaci n nueva y ubicarla luego donde se desea. Por
ejemplo, en la sentencia 5 se descarga w en el puerto de salida B, que con
TRIS se declar como de salida. Esto significa que se va a encender el led ubi-
cado en la pata 6 del mismo (B0). Aqu termina la carpeta reset y no se volve-
r a ella hasta que se oprima reset o se desconecte y reconecte al microproce-
sador.
La siguiente carpeta se llama "mciclo" y comienza con el comando "rlf" uti-
lizado para mover posteriormente el bit puesto en uno del puerto B, una posi-
ci n hacia la izquierda. De cualquier modo al ejecutar rlf no se producir toda-
v a el cambio de estado en las salidas. En la segunda sentencia de la carpeta
"mciclo" se carga el registro de trabajo, pero ahora utilizamos otra notaci n di-
ferente. La letra D indica que vamos a cargar un n mero decimal y luego entre
acentos decimos que ese n mero ser el 50 (esto es adecuado para usar el mi-
croprocesador como generador de onda en escalera, pero debe cambiarse por
500 si se va a utilizar como secuenciador; como vemos este n mero determina
la duraci n de los escalones o el tiempo de encendido de cada led). En la ter-
cera sentencia se descarga el n mero 50 en la variable "j" que antes se de-
clar ubicada en la posici n de memoria 1F.
Aqu empieza la carpeta "jciclo" de una sola sentencia, en donde el mismo
n mero 50 se vuelca en la variable "k" que antes se declar ubicada en la po-
sici n de memoria 1E.
La siguiente carpeta llamada "kciclo" se utilizar para decrementar estos n -
meros 50 ubicados en 1F y en 1E de modo de establecer una demora necesa-
ria para que los escalones o el encendido de los leds dure el valor que noso-
tros impongamos.
La primer sentencia de la carpeta "kciclo", decrementa k en una unidad. El

Microcontroladores PIC 117


Aprendiendo a Programar

comando "decfsz" es del tipo condicional; si el valor de k es superior a cero (1


a 50 en nuestro caso), el control del programa va a la sentencia siguiente que
es incondicional y reenv a el control de programa a la carpeta "kciclo". Cuan-
do k llega al valor cero, env a el control a la sentencia posterior a "goto", ob-
viando el bucle "kciclo". En una palabra que los dos primeros renglones de la
carpeta "kciclo" decrementan el n mero 50 hasta cero y como cada sentencia
dura 1 seg, ya que estamos usando un cristal de 4MHz, podemos calcular que
este bucle del programa dura 100 seg.
En la tercera sentencia se decrementa la variable "j", del mismo modo que
se hiciera con "k" pero se retorna a la carpeta "jciclo" para generar un nuevo bu-
cle de 100 seg. Esto implica que los dos bucles tienen una duraci n de 100 x
100 seg, es decir: 10.000 seg o 10mseg (con 500, cada bucle dura 1000 seg
y el producto es 1.000.000 de seg o 1seg). Transcurrido este tiempo el con-
trol pasa a la quinta sentencia de la carpeta "kciclo" que es una sentencia in-
condicional goto que env a el control a la carpeta "mciclo". Reci n en este mo-
mento se produce la rotaci n de ptob, se apaga el primer led y se enciende el
siguiente por otro lapso de tiempo de 1seg.
El programa ir cambiando el binario acumulado en el puerto B, correr el 1
a la izquierda hasta que salga del registro y vuelva a ingresar por la derecha.

Compilaci n de un Programa
Cuando uno tiene escrito el programa con el edit del DOS, debe verificarlo
exhaustivamente, controlar el encolumnado y los errores de sintaxis antes del
punto y coma separador. De cualquier modo siempre se puede deslizar un error
que provocar una falla en el programa. Si usted trabaja correctamente, el pro-
grama ensamblador MPASM le avisar de los errores y le dar algunas adver-
tencias tiles sobre el uso de algunas sentencias.
Para ver c mo funciona sto, volvamos a escribir el programa del secuen-
cial de 8 canales modific ndolo de modo que presente algunos errores:

118 Microcontroladores PIC


Aprendiendo a Programar

A continuaci n se abri el MPASM y se ejecut el archivo modificado con inten-


ci n de obtener el archivo HEX que requiere el programador de pics. Pero si lo so-
licitamos se pueden generar los archivos .err y .lst que ser n de gran utilidad para
encontrar errores de tipeo (si no sabe c mo se realiza este proceso, lea el texto: To-
do Sobre PICs , de
Editorial Quark).
Veamos c mo
se produce la lim-
pieza de un progra-
ma con errores. Al
ejecutar el archivo
con F10 del
MPASM, el ensam-
blador ofrece un re-
sultado como el in-
dicado en la figura
14.
Luego se mues- Fig. 14
tra la pantalla grafi-
cada en la figura 15
donde se indican 5
errores y 6 precau-
ciones, adem s de
la indicaci n de la
cantidad de l neas
totales ensambla-
das (30 en este ca-
so). Ahora se de-
ben encontrar las l -
neas con errores y
para eso se debe
Fig. 15

Microcontroladores PIC 119


Aprendiendo a Programar

editar el archivo .ERR con el mismo editor de DOS que estamos utilizando.
Por cada error o advertencia hay una l nea de respuesta que comienza con
"WARNING" (advertencia) o ERROR (error) y un n mero de c digo por el que se
pueden obtener m s detalles sobre el error o la advertencia, luego el nombre de ar-
chivo analizado con el rbol de directorios correspondiente y el n mero de l nea que
contiene el error o advertencia. Luego un separador dos puntos y el tipo de error o
advertencia. Los mensajes de advertencia no impiden el desarrollo de la posterior
programaci n, pero los mensajes de error s . Vamos a atender primero los mensajes
de error y luego los de advertencia. No es necesario numerar las l neas de progra-
ma a mano, y a veces no es conveniente, porque la falta de un separador (punto y
coma) puede generar l neas fantasmas y confundirnos. Es preferible editar el archi-
vo .lst (en nuestro caso SECU8NO.LST) que tiene al mismo tiempo los mensajes de
error y el n mero de l nea. Ver figura 16.
En la primera columna se marcan los errores o precauciones y la localizaci n y
valor de las variables. En la segunda, el n mero de l nea y a continuaci n la l nea de
programa. El primer error lo tenemos indicado antes de la l nea 00005: y nos indica
que las variables o s m-
bolos LA y VARIABLE
no est n definidos pre-
viamente y que se pro-
duzco un cambio de
operador. Mirando la l -
nea se observa que el
nico problema es que
falta el separador de
comentarios y el en-
samblador confundi el
comentario con una
sentencia.
El siguiente error
est en la l nea 12 y
nos indica que el error
se produce despu s de
la primera columna, en-
tre par ntesis se en-
cuentra el argumento u
orden equivalente
(molw por movlw). En la
l nea 22 est el siguien-
te error y consiste en la Fig. 16

120 Microcontroladores PIC


Aprendiendo a Programar

orden GOTO escrita como GORO. Veamos ahora los mensajes de advertencia. El
primero est en la primer l nea y se produce porque esta l nea est dirigida al pro-
gramador y no puede ser entendida por el ensamblador.
Se puede dejar sin inconvenientes. La siguiente est en la l nea 12 y seguramen-
te va a desaparecer cuando se corrija la orden movlw. Luego pasamos a la l nea 13
en donde est la orden TRIS; ocurre que en los microprocesadores m s modernos
esta orden se modifica por otra m s compleja; por ahora se puede seguir usando
TRIS para programar los puertos si se usa el 16C84 o el 16F84. La siguiente precau-
ci n est en la l nea 18 y se debe a que el decimal 50000 est fuera del rango ad-
mitido por el microprocesador. Esta precauci n debe ser considerada modificando el
valor por uno menor. La siguiente precauci n est en la l nea 22 y se corregir al
reemplazar GORO por GOTO. Al corregir los errores y agregar el separador, el
MPASM va a reportar s lo dos advertencias. Una en la l nea 1 por la declaraci n del
microprocesador dirigida al programador de PICs y la otra es la referida a la orden
TRIS que puede ser ignorado por el momento.

Carga del Programa en un PIC


Para programar un PIC se deben conectar varias de sus patas en una disposi-
ci n determinada que hace accesible su memoria para recibir datos serie desde el
puerto paralelo de su PC. El puerto paralelo de la PC, en donde usted conecta habi-
tualmente la impresora, tiene varias v as de conexi n, cuyo estado puede modificar-
se por medio de un programa adecuado.
Con un programa adecuado como el NOPP Ud. podr a variar el estado de la pa-
ta 14 del puerto paralelo de la PC en una r pida sucesi n que se corresponda con
la informaci n serie necesaria para cargar el PIC. En una palabra que cada hilo de
un puerto paralelo puede transformarse en un puerto serie. Cabe aclarar que este
programa, de la empresa Gernsback, puede bajarlo de Internet de la direcci n:
ftp://ftp.gernsback.com/pub/EN/noppp.zip
En el momento de grabar un PIC se lo debe disponer seg n lo indicado en la fi-
gura 17. Las conexiones de fuente y las se ales deben ser aplicadas seg n una se-
cuencia predeterminada que debe respetarse invariablemente:

A) El primer paso es colocar el PIC en el z calo del programador con se ales y fuentes
a potencial de masa.
B) Levantar la tensi n de fuente VDD a un potencial de 5V – 0,2V por la pata 14 (VDD).
C) Levantar la tensi n de fuente VPP a un potencial de 13V – 0,3V por la pata 4 (MCLR
NEGADO).

Microcontroladores PIC 121


Aprendiendo a Programar

Fig. 17

D) Esperar en esas condiciones un tiempo superior a 1mS.


E) Posicionar el primer dato en la pata 13 (RB7) con un potencial alto (mayor a 4V) o ba-
jo (menor a 1V).
F) Cuando la pata 12 (RB6) pase a un estado alto, superior a 4V, el dato se carga en la
memoria.
G) Continuar cargando los datos con el mismo criterio a un ritmo tal que el dato est pre-
sente por lo menos durante 100nS.
H) Cuando todos los datos fueron cargados se debe esperar 1 segundo.
I) Desconectar la fuente de 13V.
J) Desconectar la fuente de 5V.
K) Retirar el micro grabado.

Por sobre todas la cosas, debe respetarse el criterio de no sacar un PIC de su


z calo con las fuentes conectadas porque puede desprogramarse o, peor a n, da-
arse definitivamente. Tambi n es muy importante respetar las tensiones de fuente
y no demorar la llegada de datos, luego conectar VPP (porque podr an cargarse da-
tos falsos por interferencias electromagn ticas).
Como usted puede observar de la descripci n anterior la entrada RB6 es utiliza-
da como clock y la RB7 como entrada de datos en una cl sica operaci n de transfe-
rencia de datos en serie. Hay un tiempo entre el momento en que MCLR (MCLR NE-
GADO) sale de la condici n de reset hasta que aparece el primer dato o el primer
pulso de clock. Tambi n hay un tiempo m nimo para la permanencia de un dato en
la entrada (la representaci n usada para un dato significa que el mismo puede ser
alto o bajo, depende del bit que se est grabando). Lo que no hay es un tiempo m -
ximo pero evidentemente cuando mayor es este tiempo m s lenta ser la carga del
programa.
El tiempo m s adecuado depende de factores tales como el largo del cable utili-
zado para conectar el programador a la PC. Si el cable es largo, los pulsos tienden
a deformarse y atenuarse, sobre todo cuando son de corta duraci n (100nS equiva-

122 Microcontroladores PIC


Aprendiendo a Programar

len a una frecuencia de 10MHz). Para evitar problemas todos los programadores tra-
bajan a velocidades inferiores a la m xima, sobre todo considerando que la capaci-
dad de memoria no es muy grande y para el uso casero no son imprescindibles gran-
des velocidades de grabaci n.
Luego de grabar un PIC se puede verificar que su programa haya sido correcta-
mente grabado. Esto se realiza utilizando la misma pata 13 del PIC (RB7) que, co-
mo sabemos, es de I/O (Input/Output ; entrada/salida).
La transformaci n del modo de escritura a lectura no requiere cambios de hard-
ware; es decir que vale lo indicado en la figura 17. El micro detecta los primeros bit
emitidos para saber si debe grabar o leer y luego transforma RB7 en puerto de sali-
da para poder leer los datos grabados. As contin a todo hasta el final de la lectura
de datos.
La mejor prueba para saber si la grabaci n es exitosa consiste en modificar la
tensi n de la fuente VDD desde 4 a 6V. Primero se debe realizar una verificaci n a
5V exactos, luego se debe pasar a 6V y realizar una nueva verificaci n; por ltimo
ubicar la fuente en 4V y realizar la ltima prueba.
Esta verificaci n es sumamente importante porque un PIC mal grabado puede
presentar fallas en su funcionamiento o peor a n puede funcionar correctamente al
principio pero borrarse en pocos d as.
Vamos ahora a adaptar nuestro programador para que funcione con el software
NOPP.
Las diferencias entre un programador y otro muchas veces se deben a la utiliza-
ci n de diferentes patas del puerto paralelo de la PC. En efecto el software del pro-
gramador puede elegir diferentes patas para utilizarlas como entradas y salidas de
datos serie. Tambi n es posible que se utilicen otras patas para generar las tensio-
nes de control de fuentes y, por ltimo, algunos software s lo controlan la fuente
VPP; que es justamente el caso que nos ocupa. Por ltimo los programadores m s
completos utilizan una fuente regulada que puede ajustarse entre 4 y 6V para com-
probar la efectiva grabaci n de los datos.
En la figura 18 realizamos dos modificaciones. Por un lado agregamos la llave
LL1 para operar la fuente de 5V a mano. Cuando la llave est cerrada Q1 conduce
y el micro est alimentado con 5V por la pata 14. La acci n de la llave se controla
por el encendido del led verde. Por lo tanto, usted debe colocar el PIC en el z calo
o retirarlo s lo cuando el led verde est apagado.
Con referencia a la fuente agregamos un regulador LM317 en lugar del 78L5 que
tiene la posibilidad de poder programar su tensi n de salida. En efecto el preset RV1
en un extremo debe ajustar la salida en 4V y en el otro lo debe ajustar en 6V.
Tanto la secci n de fuente como el volt metro necesitan ajustes a realizar con un
t ster digital. La fuente requiere el ajuste de R21. Comience colocando resistores de
1k‰; luego debe variar ambos valores hasta que la salida cambie entre los l mites

Microcontroladores PIC 123


Aprendiendo a Programar

Fig. 18

especificados de 4 y 6V. En el volt metro se deben ajustar los resistores de 27 y 22k‰


para que el led se encienda en el rango de 4,8 a 5,2V.
Con referencia a los cambios en el puerto paralelo preferimos modificar el cable
de conexi n dejando el conector de la plaqueta sin modificaciones.
Observe que si la plaqueta est desconectada o la fuente est apagada el soft-
ware NOPP reconoce este estado a trav s de la pata 5 de la ficha DB9 que est a
potencial alto por medio de R9 y aborta la operaci n de carga.
El transistor Q2 que controla la fuente VPP se maneja a trav s de CI1 desde la
pata 1 de la ficha DB9. Pero la fuente de 5V deber manejarse a mano por interme-
dio de la llave LL1.
***************************************************
Con este tema damos por finalizada esta obra que complementa al texto: Todo
Sobre PICs que puede conseguir a trav s de la red de distribuidores de Editorial
Quark y Centro Japon s. Aclaramos que en estos momentos estamos elaborando el
tercer texto de la serie que explica la construcci n y programaci n de Sistemas con
PICs para que Ud. pueda construir instrumentos electr nicos, codificadores y deco-
dificadores de se ales de TV, aut matas programables, emuladores y un sinf n de
dispositivos. ✪

124 Microcontroladores PIC

También podría gustarte