Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microcontroladores PIC Vallejo
Microcontroladores PIC Vallejo
Vallejo
Vallejo
Microcontroladores PIC
EDITORIAL
QUARK
Precio en:
Arg
Arg entina: $15
Mxico $60 M.N.
Venezuela: $4,500.00
Colombia: $18.000
Otros
Otros Pases:
Pases: U$S12
Con el aval de
Autor:
Colaboracin:
Editado por:
ISBN 987-922789-1
Representante exclusivo para todo el mundo: Centro Japons de Informacin Electrnica, Norte 2 N 4, Col. Hogares Mexicanos Ecatepec, Edo. de Mxico. - Director: Atso Kitaura - Tel.: (0155) 5787-1779 - www.centrojapones.com
Solicite informacin al (005411)4301-8804 o por Internet a: www.webelectronica.com.ar
(Los compradores de esta edicin tienen acceso a informacin 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 entraan responsabilidad de nuestra parte. Est prohibida la reproduccin total o parcial del material
contenido en esta publicacin, as como la industrializacin y/o comercializacin de los circuitos o ideas que aparecen en los mencionados textos, bajo pena de sanciones legales, salvo mediante autorizacin por escrito de la editorial.
Indice
Cap tulo 1
Arquitectura de un PIC
Introducci n ......................................................5
Caracter sticas del PIC .....................................5
Caracter sticas Perif ricas................................5
Caracter sticas Especiales del
Microcontrolador ...............................................6
Patas del PIC....................................................6
Resumen del Dispositivo ..................................9
Ficha Did ctica ...............................................10
Lo que Debe Saber
Sobre los PICs................................................13
a) El Procesador es segmentado
tipo "pipe line" .................................................13
b) El Procesador es de tipo RISC ..................14
c) Poseen una arquitectura
tipo Harvard ....................................................14
d) Son de arquitectura ortogonal basada
en banco de registros .....................................15
Palabras de Configuraci n
e Identificaci n................................................18
Organizaci n de la Memoria...........................19
Organizaci n de la Memoria
de Programas .................................................19
Organizaci n de la Memoria
de Datos..........................................................19
Los Registros del PIC.....................................20
Archivo de Registro de
Uso General....................................................20
Registros de Funciones
Especiales (SFR)............................................21
Registro de Status ..........................................23
Registro OPTION_REG..................................25
Microcontroladores PIC
Indice
Cap tulo 2
Manejo de las Instrucciones
de un PIC
Introducci n ....................................................53
Instrucci n: SUMA ..........................................54
C digo de la instrucci n ADDWf ....................55
El Set de Instrucciones
del 16X84........................................................56
ADDLW...................................................59
ADDWF ..................................................60
ANDLW...................................................61
ANDWF ..................................................62
BCF ........................................................63
BSF ........................................................64
BTFSC ...................................................65
BTFSS....................................................67
CALL ......................................................68
CLRF......................................................69
CLRW.....................................................70
CLRWDT ................................................71
COMF.....................................................72
DECF .....................................................73
DECFSZ.................................................74
GOTO.....................................................75
INCF.......................................................76
INCFSZ ..................................................77
IORLW....................................................78
IORWF ...................................................79
MOVLW ..................................................80
MOVF.....................................................81
MOVWF .................................................82
NOP .......................................................83
RETFIE ..................................................83
RETLW ...................................................84
RETURN ................................................85
RLF ........................................................85
RRF........................................................86
SLEEP....................................................87
SUBLW...................................................88
SUBWF ..................................................90
SWAPF...................................................92
XORLW ..................................................93
XORWF ..................................................94
Palabras de Configuraci n
e Identificaci n...............................................96
Cap tulo 3
Aprendiendo a Programar
Circuito de un Entrenador...............................97
Encendido Intermitente
de un Led......................................................100
Secuenciador de 4 Canales .........................108
Generador de Se ales de Audio...................112
Los Formatos de los Archivos.......................115
Secuenciador de 8 Canales..........................115
Compilaci n de un Programa .......................118
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
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 caracter 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 reconocer 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 titulado: Todo Sobre PICs , texto que trata sobre las caracter sticas fundamentales de estos 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 contin 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 forma 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 ensear al lector a construir programas para armar sus propios dispositivos. ste es tambi n un texto b sico dado que utilizamos estructuras muy sencillas para realizar los primeros programas. Somos conscientes que para que alguien pueda trabajar con un dispositivo primero debe conocerlo y por ello en el cap tulo 1 hablamos sobre los diferentes 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. debe 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 (como 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 comprender 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, modificados 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
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 prestaciones 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 ramificaciones 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 LEDs:
Microcontroladores PIC
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 Programming) 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 para 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 figura 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-
Microcontroladores PIC
Arquitectura de un PIC
Figura 1
Microcontroladores PIC
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 osciladores que pueden utilizar los PIC16X54/84 son:
* Oscilador de cristal o resonador de alta velocidad "HS"(High Speed Crystal/Resonator): Es un oscilador con una frecuencia comprendida entre 4MHz y 20MHz (figura 2).
* Oscilador o resonador cer mico "XT" (Crystal/Resonator): Es un oscilador est 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 cuarzo 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 oscilador de bajo costo.
Su circuito de aplicaci n es el que se muestra en la figura 3. Posee baja precisi 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 debe 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 depende 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 frecuencias.
En la figura 3 se muestra un oscilador construido a partir de una celda RC.
Microcontroladores PIC
Arquitectura de un PIC
Microcontroladores PIC
Arquitectura de un PIC
Ficha Did ctica
Antes de avanzar sobre la estructura interna de un PIC, vamos a realizar el primer resumen mediante una ficha t cnica que contiene la descripci n interna del circuito integrado.
Los circuitos integrados programables (PIC) de Microchip son microcontroladores con una estructura interna como la mostrada en la figura 4.
Existe un grupo de bloques dedicados a mejorar el funcionamiento pero sin influir directamente en el flujo de seales. Vemos un temporizador de encendido, un
temporizador de arranque del oscilador de CLOCK, un circuito de reset y un circuito 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 circuito cuando sea requerido. Por ltimo, existe un circuito con un nombre curioso, si
el lector sabe algo de ingls habr traducido el nombre literalmente como perro
guardin. Su funcin es estar vigilante el mximo tiempo que tarda el microprocesador en completar su programa (o mejor sera decir, la derivacin ms larga de
su programa) y en caso de superarse ese tiempo, provocar un reset automtico porque el microprocesador se qued trabado en alguna parte de su programa. Tambin se dice que el microprocesador se qued colgado o congelado.
Este bloque de circuitos no trabaja independientemente sino que requiere conexiones al exterior y al interior del dispositivo. Por ejemplo, no siempre son utilizados y es el programa quien determina su utilizacin y adems ajusta sus parmetros. Esto se realiza a travs del bloque de control o decodificador de instrucciones.
Analicemos ahora la seccin 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 pequeas unidades de memoria
transitoria, construida por lo general con un registro de desplazamiento. Son memorias voltiles que se utilizan para guardar informacin por un tiempo mnimo con
el fin de realizar una operacin 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 nmero de instruccin en el STACK y la instruccin misma le pasa registro de instrucciones desde
donde se enva al resto del microprocesador.
El STACK es, en realidad, una pila de registros (en nuestro ejemplo hay 8) debido a que el programa puede tener derivaciones (en la jerga LOOPS, rulos o subprogramas). Cuando se termina de ejecutar un loop se debe volver al mismo punto del programa en donde se haba producido la bifurcacin y eso es posible porque ese nmero de instruccin qued guardado en uno de los registros de la pila.
Es comn 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 nmero de instruccin del loop secundario en otro registro de la
pila.
Analicemos ahora la seccin inferior derecha. En ese sector se ubican los bloques responsables de efectuar operaciones matemticas y lgicas binarias; recordemos que el nombre ALU proviene de Aritmetic Logic Unite (unidad arimtica y lgica). En este sector es imprescindible utilizar un registro ya que una operacin aritmtica o lgica siempre se efecta entre dos nmeros. Los nmeros binarios que deben procesarse se toman de la memoria de datos, el primero se acumula en el registro 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 como operando de la siguiente operacin, tal como el caso de un producto) el registro W tiene un retorno a la ALU.
Vemos adems que la ALU est comandada por el bloque MUX (MUltipleXador). En efecto, la ALU requiere que se le enven nmeros para procesar que le lleguen desde la memoria de datos pero antes se la debe predisponer para que efecte la operacin requerida (comparacin, rotacin de dgitos, etc.).
El registro de estado o estatus colabora durante las operaciones matemticas.
Piense cmo opera Ud. para realizar una resta: primero ubica el primer nmero, luego el segundo y despus comienza a analizar los bits menos significativos
(las unidades), pero si el nmero de arriba es menor que el nmero de abajo, entonces toma prestado de la columna de las decenas, luego debe recordar esto porque el nmero de arriba en la columna de las decenas se redujo en una unidad.
En realidad, aunque se trate de una operacin entre dos nmeros su ejecucin
requiere guardar lo que se llama acarreo en otro registro y este no es otra cosa
ms que el registro STATUS.
En resumen, las caractersticas sobresalientes de los PICs son las siguientes:
Denominacin: 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 estndar.
Arquitectura: Von Neumann (Instrucciones y datos juntos). La mayora de las instrucciones se ejecutan en un ciclo. Pero posee un set de slo 35 instrucciones de tipo RISC (Reduced Instruction Set Computer).
Alimentacin: 4 a 6V.
Encapsulado: Mltiples versiones, lo normal es DIP de 18 patas.
Fcil de programar, fcil de cargar, extremadamente confiable, econmico. Se
encuentra gran cantidad de software y hardware sin cargo.
Ideal para Aplicaciones en servicio de equipos, diseos y construccin de "circuitos 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 datos EEPROM contiene 64 bytes.
Adem s existen 13 patas de I/O que se pueden configurar para el usuario en forma 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 descripciones y detalles de cada una.
12
Microcontroladores PIC
Arquitectura de un PIC
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 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 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 registro 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 CPUs atendiendo al tipo de
instrucciones que utilizan pueden clasificarse en:
CISC: (Complex Instruction Set Computer). Procesadores de juego de instrucciones 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 nuevamente 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 microprocesadores 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 datos y la memoria de programa (arquitectura Harvard).
La mayor a de los microprocesadores tradicionales se basan en la estructura tipo Von Neumann (figura 6), que se caracteriza por disponer de una nica memoria
Figura 6
14
Microcontroladores PIC
Arquitectura de un PIC
Figura 7
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
PIC 16F84: La memoria de programa es de lk, las palabras son de l4 bits, pero 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 Programa (PC CP) de 13 bits, cuyos bits de menor peso corresponden a los 8 bits del registro 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 memoria 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
Microcontroladores PIC
Figura 10
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 desplazamientos, 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 superior 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 subrutina o interrupci n).
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. Estas 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 dispositivo, 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 programa 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 EEPROM. 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 direcciones 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.
Microcontroladores PIC
19
Arquitectura de un PIC
destinan a los registros que controlan
las funciones perif ricas. El apilado requiere el uso de bits de control para la
selecci n de bancos. Estos bits de control se encuentran en el registro de STATUS. La figura 12 muestra la organizaci 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 para acceder a las reas apiladas de la
memoria de datos.
La memoria de datos est dividida
en dos bancos que contienen los registros de uso general y los registros de
funciones especiales. El Banco 0 es seleccionado eliminando el bit RP0 (STATUS<5>). El ajuste del bit RP0 selecciona el Banco 1. Cada Banco se extiende
hasta 7Fh (128 bytes). Las primeras doce locaciones de cada Banco est n reservadas para los Registros de Funciones Especiales (SFR). El resto son Registros de Uso general implementados como RAM.
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 registros 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 castellano).
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 describen 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 reset del temporizador de watchdog.
4. En todos los resets del dispositivo, estas patas son configuradas como entradas.
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 mismo: 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 Instrucciones, 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 productos 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 fico 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 direccionamiento 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 (toma el estado 1 ).
24
Microcontroladores PIC
Arquitectura de un PIC
0 = Cuando est en 0 es porque sucedi un Time out WDT (perro guardi 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. Acarreo 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. Acarreo 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 ejecuta 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
26
Microcontroladores PIC
Arquitectura de un PIC
El Registro INTCON
El registro INTCON es un registro de lectura y escritura que contiene los diferentes bits de activaci n de todas las fuentes de interrupci n. Sus detalles se encuentran en la figura 16.
Figura 16
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 ancho 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 actualizaciones 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 profundidad 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.
PROX
Movlw
0x22
Movwf
FSR
Clrf
INDF
Incf
FSR
Btfss
FSR,4
Goto
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.
30
Microcontroladores PIC
Arquitectura de un PIC
te valor es modificado, y despu s escrito al latch del port. La pata RA4 es multiplexada 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 disparador 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
BSF
MOVLW
B 0000 1111
MOVWF
TRISA
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 diagrama de la pata RA4.
Una s ntesis de la funci n que cumple cada pata del PORT se muestra en la siguiente tabla:
Microcontroladores PIC
31
Arquitectura de un PIC
B 0010 1111
TRISB
32
Microcontroladores PIC
Arquitectura de un PIC
Esta interrupci n puede despertar el dispositivo de SLEEP. El usuario puede limpiar 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 desequilibrio.
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 despertar 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 puede 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
Microcontroladores PIC
33
Arquitectura de un PIC
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 descendente de la pata RA4/T0CKI. El flanco ascendente es determinado por el bit Timer Source Edge Select, T0SE (OPTION_REG<4>). Limpiando el bit T0SE selecciona el borde ascendente.
Cuando se usa una entrada de clock externo en el Timer0, se deben cumplir ciertos 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 como 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 divisor 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 seleccionables 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 registro 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 prescaler 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 ejecutar 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 est inactivo.
Interrupci n de Timer0
La interrupci n de TMR0 se genera cuando el registro TMR0 excede su capacidad de FFh a 00h. Este exceso ajusta el bit T0IF (INTCON<2>). La interrupci n puede 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 interrupci 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.
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 registros 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 byte borra autom ticamente la locaci n y escribe los datos nuevos (borra antes de escribir). 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 entre 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 continuar de leer y escribir los datos en la memoria del EEPROM. El programador del dispositivo no tiene m s acceso a la memoria.
En la figura 24 vemos el registro EECON1 en su direcci n 88h.
Figura 24
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.
38
BCF
STATUS, RPO
MOVLW
0x20
MOVWF
EEADR
Microcontroladores PIC
Arquitectura de un PIC
BSF
STATUS, RPO
BSF
EECON1, RD
BCF
STATUS, RPO
MOVF
EEDATA, W
STATUS, RPO
MOVLW
0x18
MOVWF
EEADR
MOVLW
0x12
MOVWF
EEDATA
Microcontroladores PIC
39
Arquitectura de un PIC
WI
BSF
EECON1,WREN
MOVLW
0x55
MOVWF
EECON2
MOVLW
0xAA
MOVWF
EECON2
BSF
EECON1, WR
; comienza la escritura
BTFSC
EECON1,WR
GOTO
WI
BCF
STATUS,R0
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 procedimiento debe ser usado cuando un bit de la EEPROM est muy cerca de su l mite especificado. 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 grabada (si tomamos el ejemplo de reci n deber amos leer el dato contenido en la direcci n 22h); posteriormente deber amos cargar al registro W con el dato que esperamos 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 diferencia es cero; si esto ocurre, el programa continuar normalmente. Hay muchas formas de hacer este proceso, pero una alternativa ser a:
BCF
STATUS, RPO
MOVLW
0x22
MOVWF
EEADR
BSF
STATUS, RPO
BSF
EECON1, RD
BCF
STATUS, RPO
MOVLW
0x15
SUBWF
EEDATA, W
BTFSS
STATUS, Z
GOTO
ERROR
MOVLW
........
Microcontroladores PIC
41
Arquitectura de un PIC
En la pr xima tabla vemos los Registros y Bits asociados con la EEPROM de Datos.
42
Microcontroladores PIC
Arquitectura de un PIC
(Power-up Timer = PWRT) 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 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 vimos, 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 manera 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:
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 patas OSC1/CLKIN y OSC2/CLKOUT para establecer la oscilaci n de acuerdo a la figura 2 de este cap tulo.
El dise o del oscilador del PIC16F84A requiere el uso de un cristal de corte paralelo. 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 funci n de la tensi n de la fuente, del valor de Rext, del valor de Cext y de la temperatura de funcionamiento. Adem s de estos par metros, tambi n puede haber una variaci 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 tolerancias de los componentes externos R y C usados. La figura 3 de este cap tulo, muestra 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 incorporado 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
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 entradas.
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 situaciones de reset. Estos bits se usan en software para determinar la naturaleza del
reset.
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 desde un capacitor externo C en el supuesto que haya una ruptura de MCLR debido a
ESD o EOS.
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 Divisor antes de aplicarse al TMR0 (prescaler). Por el contrario, los impulsos pasan primero por el WDT y luego por el Divisor (Post-divisor).
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 interrupci n cuando stos se ponen a 1 . Cualquiera de las interrupciones tambi n puede sacar al procesador del modo de reposo SLEEP.
El bit GIE (Global Interrupt Enable) es el de activaci n global del permiso de interrupci n, y se borra autom ticamente cuando aparece una interrupci n, con el objeto de evitar que se produzca otra interrupci n mientras se est atendiendo a la primera. Cuando por programa se retorna de la interrupci n con una instrucci n RETFIE, 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 indicaci 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 comprobar 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 mismo, de igual modo que se hac a en las subrutinas.
Por lo dicho, el P debe realizar determinados procesos autom ticamente mientras 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 interrupciones (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 modificados 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 software 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 pone autom ticamente en 1 .
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 posici 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 direcciones de un mapa que comienza en la posici n 00h y termina en la 3Fh, por eso
los 2 bits de m s peso del registro EEADR siempre valen 0.
Los bit RD y WR indican respectivamente lectura o escritura. No hay que ponerlos a 0 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 interferencias en el tiempo que precisa su desarrollo. La seguridad se consigue escribiendo 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 velocidad del procesador.
******************************************************
52
Microcontroladores 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 perfectamente delimitadas, que el procesador interpreta para cumplir una orden deseada, quedando establecidas las variables que se modifican.
Dicho de otra forma, las instrucciones poseen un 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 operador 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 microcontrolador, 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 presentan una codificaci n muy particular llamada formato de la instrucci n .
Cada instrucci n posee su formato y es totalmente definido por MICROCHIP.
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 determinada por el operador f .
En esta figura, en primer lugar se observa la sintaxis , es decir, la forma en que el programador escribir la instrucci n en el lenguaje entendible por el operador (el programa en .asm). La codificaci n es el formato de
la palabra que 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
Figura 1
Como veremos, el resultado de la operaci n se guarda en un sitio definido 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 (STATUS).
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 requerido 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
Figura 2
Microcontroladores PIC
55
Figura 3
56
Microcontroladores PIC
Instrucciones
Instrucciones
Instrucciones
Instrucciones
orientadas a registros.
orientadas a bits.
con literales.
de control y especiales.
Figura 4
Microcontroladores PIC
57
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
Microcontroladores PIC
59
60
Microcontroladores PIC
REG,0
Si antes de la instrucci n W = 10 h y REG = 21 h, el resultado de la suma 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 operaci n. Si la instrucci n hubiese sido:
ADDWF
REG,1
REG = 31 h
Microcontroladores PIC
61
B00111001
62
Microcontroladores PIC
ST,1
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
EJEMPLO:
Queremos poner a 0 el bit N 5 del registro DESC, luego la instrucci n
ser :
BCF
DESC, 5
64
Microcontroladores PIC
EJEMPLO:
Queremos poner a 1 el bit N 0 del registro DESC, luego la instrucci n ser :
BSF
DESC, 0
Microcontroladores PIC
65
BTFSC
GOTO
GOTO
REG,2
DEC
SIM
DEC
SIM
66
BTFSC
REG,2
Microcontroladores PIC
EJEMPLO:
RUTINA
BTFSS
GOTO
GOTO
REG,0
DEC
SIM
Microcontroladores PIC
67
DEC
SIM
EJEMPLO:
DIV
68
CALL
RUTIN
Microcontroladores PIC
REG
Si antes de la instrucci n:
REG = 5A h
Al ejecutarse:
REG = 00 h
flag Z = 1
Microcontroladores PIC
69
70
Microcontroladores PIC
Microcontroladores PIC
71
72
Microcontroladores PIC
Microcontroladores PIC
73
EJEMPLO:
TEMP
DECFSZ
GOTO
CLRF
DEL,1
TEMP
REG
74
Microcontroladores PIC
EJEMPLO:
GOTO
TEMP
Al ejecutarse la instrucci n, el contador de programa se dirige a la direcci n donde se encuentra la etiqueta TEMP.
Microcontroladores PIC
75
REG,1
Cuando el PC llega a esta instrucci n se incrementa el contenido del registro 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
EJEMPLO:
ABA
INCFSZ
GOTO
GOTO
DEN,1
ABA
SIGA
Para entender c mo es que si incrementamos un n mero en alg n momento ste puede llegar a cero, hay que decir que cuando se llega a la capacidad m xima de un registro, el pr ximo incremento har que ste se coloque 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
0x32
78
Microcontroladores PIC
RES,1
Si antes de la instrucci n:
RES = 13 h = 0001 0011 b
W = 91 h = 1001 0001 b
Microcontroladores PIC
79
EJEMPLO:
MOVLW
0x50
80
Microcontroladores PIC
SER,0
Microcontroladores PIC
81
EJEMPLO:
MOVWF
DIR
82
d 22
DIR
Microcontroladores PIC
EJEMPLO:
NOP
Microcontroladores PIC
83
EJEMPLO:
RETLW
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 siguiente columna de la instrucci n. Adem s carga al CP con el valor que previamente almacen en la PILA (STACK).
Esta instrucci n tarda dos ciclos de instrucci n.
84
Microcontroladores PIC
Microcontroladores PIC
85
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
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
88
Microcontroladores PIC
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
90
Microcontroladores PIC
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 siguiente:
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
1110 0000
0001 1111
+
1
0010 0000 (complemento a 2 del
contenido de W = 32
en decimal)
92
Microcontroladores 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
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
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 peso <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 memoria que puede direccionar el PC.
Microcontroladores PIC
95
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 configuraci n es la siguiente:
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 culos con la explicaci n de programas sencillos que le permitan aprender a utilizar las instrucciones del PIC 16X84.
En este cap tulo utilizaremos la misma t cnica comenzando desde el principio, 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
ptob
List
equ
p = 16C84
0x06
Reset
Inicio
ciclo
org
movlw
tris
movlw
nop
goto
h0
h0
ptob
h 0f
ciclo
; comienza el programa
; cargo a W con 0
; mando el contenido de W a ptob
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 indicarle 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 ser 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 masa 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 observa que los leds se apagan hasta que se suelta el pulsador y el programa comienza 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 programa 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 diagrama de flujo que refleja el funcionamiento 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 odo); 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 venta en varios pa ses de Am rica a trav s de la red de distribuidores de Editorial
Quark y Centro Japon s - vea en InterFig. 3
net la direcci n:
www.webelectronica.com.ar) le proponemos que arme s lo lo imprescindible
para encender los
leds seg n el circuito
de la figura 3; un circuito tan simple que
no requiere plaqueta, puede armarse tipo 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 programa. 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 videograbadores seguramente tendr cristales de 3,58MHz (de PALN o NTSC o inclusive 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 subrutina 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 empleado hasta ahora.
Esta instrucci n salta del paso del programa donde se encuentra, a la subrutina 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 escriben 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 siguiente. Cuando termina una subrutina, se debe colocar una referencia "RETURN", que significa retornar al siguiente rengl n del programa principal donde 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
decfsz
06
CONST
Microcontroladores PIC
101
Aprendiendo a Programar
una subrutina (generalmente la cierra). Se trata de "retlw" que debe ir acompaado 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 rengl n. Su funcionamiento se apreciar mejor cuando veamos el programa de
aplicaci n pero es equivalente a:
movlw
return
0x12
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 mejor 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 proyecto. 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 alterar el programa. Al apretar el pulsador de reset se debe apagar el led y al soltarlo se encender luego de un retardo y continuar alternando per odos de encendido y apagado.
102
Microcontroladores PIC
Aprendiendo a Programar
El programa completo lo vamos a dividir en dos partes: un programa principal y una subrutina que llamamos retardar . Los hacemos as porque casi todos 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 agradable 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 meros 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 direccin de
;memoria RAM06
reg1
equ
0c
;asignacin 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 enva a la posicin 00 de la memoria
;de programa.
Goto
comienzo ;reenvo al comienzo del programa
;===========================================================
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 manera 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
comenzar
ppal
org
goto
movlw
tris
movlw
movwf
0
comenzar
00
ptob
01
ptob
call
demora
movlw
movwf
00
ptob
call
demora
goto
ppal
Siempre se comienza a analizar el programa observando qu ocurre al realizar 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 programa 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 donde 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 vuelve 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 porque operan de ese modo sobre el retardo final:
demora
movlw
grueso
movwf
reg1
movlw
medio
movwf
reg2
dem2
movlw
fino
dem1
movwf
decfsz
reg3
reg3
goto
decfsz
goto
decfsz
goto
retlw
dem1
reg2
dem2
reg3
dem1
0
dem3
end
La subrutina comienza cargando los registros de uso general con los n meros 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 mero 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 retornara y fuera a dem1 tantas veces como lo indica el n mero hexadecimal cargado en el registro 1. Luego la subrutina pasa a la siguiente sentencia que comienza a decrementar el n mero cargado en reg2, s lo que el "goto" es a la etiqueta 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 reci 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 termina en "end" que no puede considerarse como una sentencia, ya que no realiza ninguna tarea; sin embargo, su existencia es imprescindible para que el
programador de PICs d por terminada su tarea. Cuando no se coloca el programa ensamblador emite un mensaje de error.
Tenga en cuenta que le estamos ense ando a programar , es decir, a utilizar 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 aprendiendo 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 ejemplo 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 ricamente 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 instrucci n a los cuales se les suman los 240 ciclos del loop m s interno. En total ser 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 decimal 64) se anule:
n mero de ciclos "reg 1" = 15.860 x fino
= 15.860 x 64
= 1.015.040 ciclos de instrucci n.
Fig. 6
Microcontroladores PIC
107
Aprendiendo a Programar
Secuenciador de 4 Canales
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 diagrama de flujo permite visualizar el funcionamiento 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 rutina 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 plasman 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.
Observe que luego de iniciado, el proceso no se detiene jam s, ya que terminada la secuencia, vuelve a comenzar. Obviamente, la aplicaci n de un reset apagar todos los leds mientras se mantenga el
reset pulsado.
En este programa se van a utilizar nuevas 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 cualquier registro nombrado como primer operando al registro W.
Otra instrucci n nueva es rlf, cuya fun-
108
Fig. 7
Fig. 8
Microcontroladores PIC
Aprendiendo a Programar
ci n es desplazar el contenido de un registro nombrado como operando. El contenido se desplaza hacia la izquierda y el primer bit vuelve a ingresar como ltimo.
Finalmente se utiliza tambi n la instrucci n btfss que incluye dos operandos; el primer operando indica en qu registro se realiza la operaci n y el segundo que posici n del registro se analiza (en que bit, del bit 0 al bit 7). La operaci 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 apretara 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 posici n esta fr a, mande el control de programa al rengl n siguiente. Si est caliente, saltee el que sigue y mande el control al posterior a ste.
Bien, el programa del secuenciador es en realidad una modificaci n del programa de encendido y apagado de un led. Como vemos, los programas dif cilmente se inicien desde cero siempre se utilizan otros programas que se modifican 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 direccin 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
;preparndolo para la rotacin.
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 reenva a sec.
goto
ppal
;si el 5 bit es uno se reenva a ppal para
;comenzar una nueva secuencia.
110
Microcontroladores PIC
Aprendiendo a Programar
demora movlw
movwf
dem3 movlw
grueso
reg1
medio
movwf
reg2
dem2 movlw
fino
movwf
dem1 decfsz
reg3
reg3
goto
decfsz
goto
decfsz
goto
retlw
dem1
reg2
dem2
reg3
dem1
0
end
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 caso 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
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 mediciones con un oscilador de audio. Un amplificador sobrecompensado en frecuencia (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 manejo de llaves anal gicas con un PIC. Esta es una de las utilidades m s importantes 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 proyecto usaremos dos llaves CD4066 para conmutar 8 valores de tensi n de salida, que forman una se al escalera de 8 pelda os y 3,5V de amplitud pico a pico. El circuito se muestra en la figura 13.
Los resistores R15 a R23 forman cada pelda o de la escalera y su valor debe 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 tensiones 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 facilitar 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 captaciones 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 impedancia 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 programa 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 veremos que cada instrucci n simple demora 1 S y que el loop definido con "FINO" dura 3 x FINO S. En nuestro caso, debemos buscar un n mero hexadecimal 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 FINO = 125/3 = 41,6 anal gico, que dividido por 1,6 es 26. Aproximamos al hexadecimal 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 "FINO".
Sintetizando: el programa debe variarse haciendo que fino valga 30 y medio y grueso sean ambos iguales a 00.
Piense que el circuito propuesto puede tener muchas posibilidades de modificarse a voluntad y adaptarse a otros usos. Por ejemplo, si en lugar de conectar las entradas de las llaves a tensiones continuas, las aplican a se ales
alternas provenientes de 8 osciladores sinusoidales, se puede hacer un barredor de audio. Si reduce la frecuencia de repetici n puede construir un generador musical de acordes de 8 notas, similares a los utilizados como bocina musical 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 ASEMBLER" 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 archivo .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 utilizado. Como puede observar en lugar de utilizar el 16C84, como lo hicimos hasta 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 EEPROM 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 utilizar 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 variables 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 hexadecimal. Es decir que el programa ensamblador (el MPASM) interpreta un n mero "por defecto" como si fuera hexadecimal.
En el segundo y tercer rengl n se utiliza un criterio diferente. La letra H significa 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 continuaci 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 posici n de memoria 06. Esta posici n de memoria controla la disposici n del puerto "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 trabajo con el binario "00000001"; esto no implica que se realice ninguna modificaci n en la disposici n de puertos, ya que una vez cargada la posici n de memoria, 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 ubicado en la pata 6 del mismo (B0). Aqu termina la carpeta reset y no se volver a ella hasta que se oprima reset o se desconecte y reconecte al microprocesador.
La siguiente carpeta se llama "mciclo" y comienza con el comando "rlf" utilizado para mover posteriormente el bit puesto en uno del puerto B, una posici n hacia la izquierda. De cualquier modo al ejecutar rlf no se producir todav 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 diferente. 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 microprocesador 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 tercera sentencia se descarga el n mero 50 en la variable "j" que antes se declar 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 posici 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 necesaria para que los escalones o el encendido de los leds dure el valor que nosotros 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". Cuando k llega al valor cero, env a el control a la sentencia posterior a "goto", obviando 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 bucle 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 control pasa a la quinta sentencia de la carpeta "kciclo" que es una sentencia incondicional goto que env a el control a la carpeta "mciclo". Reci n en este momento 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 programa ensamblador MPASM le avisar de los errores y le dar algunas advertencias tiles sobre el uso de algunas sentencias.
Para ver c mo funciona sto, volvamos a escribir el programa del secuencial 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 intenci n de obtener el archivo HEX que requiere el programador de pics. Pero si lo solicitamos 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: Todo Sobre PICs , de
Editorial Quark).
Veamos c mo
se produce la limpieza de un programa con errores. Al
ejecutar el archivo
con
F10
del
MPASM, el ensamblador ofrece un resultado como el indicado en la figura
14.
Luego se muesFig. 14
tra la pantalla graficada en la figura 15
donde se indican 5
errores y 6 precauciones, adem s de
la indicaci n de la
cantidad de l neas
totales ensambladas (30 en este caso). Ahora se deben 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 archivo 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 programa 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 archivo .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 mbolos LA y VARIABLE
no est n definidos previamente y que se produzco un cambio de
operador. Mirando la l nea se observa que el
nico problema es que
falta el separador de
comentarios y el ensamblador 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, entre par ntesis se encuentra el argumento u
orden
equivalente
(molw por movlw). En la
l nea 22 est el siguienFig. 16
te error y consiste en la
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 programador y no puede ser entendida por el ensamblador.
Se puede dejar sin inconvenientes. La siguiente est en la l nea 12 y seguramente 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 precauci n est en la l nea 18 y se debe a que el decimal 50000 est fuera del rango admitido 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.
Microcontroladores PIC
121
Aprendiendo a Programar
Fig. 17
122
Microcontroladores PIC
Aprendiendo a Programar
len a una frecuencia de 10MHz). Para evitar problemas todos los programadores trabajan a velocidades inferiores a la m xima, sobre todo considerando que la capacidad de memoria no es muy grande y para el uso casero no son imprescindibles grandes velocidades de grabaci n.
Luego de grabar un PIC se puede verificar que su programa haya sido correctamente grabado. Esto se realiza utilizando la misma pata 13 del PIC (RB7) que, como sabemos, es de I/O (Input/Output ; entrada/salida).
La transformaci n del modo de escritura a lectura no requiere cambios de hardware; 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 salida 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 utilizaci n de diferentes patas del puerto paralelo de la PC. En efecto el software del programador 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 tensiones 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 comprobar 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
124
Microcontroladores PIC