Академический Документы
Профессиональный Документы
Культура Документы
Introduccin
Existen circuitos digitales que realizan funciones especficas tales como decodificadores,
multiplexores, contadores, etc. Es decir que, una vez implementados, nicamente pueden realizar
el propsito para el que fueron creados. Por lo que, si se necesita realizar otra funcin, sera
necesario rehacer el diseo e implementar un nuevo circuito.
Pongamos como ejemplo que un fabricante utiliza este tipo de circuitos digitales en sus
productos, de manera que tendra que realizar un circuito especfico para cada producto y modelo.
Sera mucho ms conveniente utilizar un dispositivo que tenga un propsito general, que no sea
necesario cambiar para uno u otro producto y modelo, sino que, mediante un programa indicarle lo
que debe realizar. A este tipo de dispositivo se le denomina microprogramable.
En esta documentacin, vamos a ver sistemas de lgica programada incluyendo ejercicios y
prcticas con microcontroladores, que junto con el resto de dispositivos microprogramables, se han
desarrollado gracias a la aparicin de la microelectrnica, al reducir el tamao de los circuitos y
abaratar el coste de las producciones en serie.
Objetivos
Sistemas
microprogramables
1.2
Sistemas
microprogramables
Microprocesadores y microcontroladores
Estos sistemas son capaces de leer, interpretar y luego ejecutar de forma secuencial las
instrucciones contenidas en un programa.
Todos los sistemas microprogramables por complejos que sean (salvo los PLDs) poseen la
estructura que se muestra en la siguiente figura.
1.3
Reloj
CPU
Memoria
Unidad de entrada/salida
Perifricos (exterior)
Reloj: Es un generador de ondas cuadradas peridicas, utilizado para que todo el sistema est
sincronizado.
Sistemas
microprogramables
1.4
Unidad Central de Proceso o CPU (Central Process Unit): Es la parte mas importante del
sistema microprogramable. Es donde se realiza la interpretacin y ejecucin de las instrucciones,
se generan todas las rdenes de control para gobernar todo el sistema y se realizan las
operaciones aritmticas y lgicas. Todo ello se realiza con los datos procedentes de la Memoria
Central o los contenidos en registros ordenadas desde la Unidad de Control. Tambin, es la
encargada de realizar todas las transferencias de datos hacia la memoria o desde esta.
Todas sus funciones se realizan en sincrona con la seal del reloj, por ello, la frecuencia del
reloj define la velocidad del sistema. Su estructura interna es compleja y si se presenta todo
integrado en un nico circuito integrado se denominada microprocesador. El uso de dichos
microprocesadores esta muy extendido y son ampliamente utilizados en sistemas tales como
ordenadores personales, controles industriales, grandes ordenadores o mainframes, etc.
Memoria Central o Interna: En este tipo de dispositivos se encuentran los datos y programas
que debe utilizar el sistema microprogramable. Existe otro tipo de memorias con las cuales no se
deben confundir, denominadas memorias de masa, que forman parte de los perifricos y se
encuentran fuera del sistema, como por ejemplo los discos duros.
Unidad de entrada/salida (interface): Este circuito permite la comunicacin del sistema
microprogramable con el exterior. Su funcin fundamental es la de adaptar las diferentes
velocidades y cdigos utilizados por los elementos externos del sistema y el interior.
Perifricos: Estrictamente hablando podramos decir que no forman parte del sistema
microprogramable. Es un conjunto de dispositivos que realizan un trabajo en el exterior del sistema.
Estos perifricos pueden ser de entrada o de salida, aunque existen algunos que realizan ambas.
Por ejemplo, en un PC los perifricos de entrada mas importantes son el teclado y el ratn y los de
salida el monitor y la impresora.
Microprocesadores
El sistema microprogramable esta dividido en diversos circuitos
integrados, denominndose al mas importante microprocesador. El
microprocesador incluye nicamente en su interior la Unidad Central de
Proceso, de ah, que se le conozca tambin como CPU.
Los microprocesadores se utilizan en aquellas aplicaciones en las que se
requieren grandes cantidades de memoria, ejecutar una gran cantidad de
programas o se prevea hacer futuras ampliaciones realizando las tareas a
una elevada velocidad. Un ejemplo de aplicacin son los ordenadores
personales.
Microcontroladores
Todo el sistema microprogramable est integrado en un nico
circuito integrado, de manera que un microcontrolador es un
circuito integrado que integra en la misma pastilla la CPU, la
Memoria Central, los puertos de E/S digitales y otros elementos.
Como desventaja su capacidad de trabajo es menor que la de los
microprocesadores. Se utiliza en aquellas aplicaciones en las que
necesitamos el uso de un pequeo procesador. Se encuentra por
todas partes, por ejemplo, los autmatas programables
industriales poseen este tipo de circuitos integrados, al que se le
han aadido sistemas de control de potencia tales como rels para poder controlar mquinaria
industrial.
Sistemas
microprogramables
1.5
Dispositivos PLDs
Los PLDs (Programmable Logic Device) son circuitos integrados que en su interior integran una
matriz de puertas lgicas cuya funcionalidad puede ser programada por el usuario. Internamente
no tienen la estructura de microprocesadores y microcontroladores pues no estn basados en una
CPU que lea un programa de una memoria. Esto significa que no pueden sustituir a los sistemas
basados en CPU en muchas aplicaciones y adems no son tan verstiles. No obstante existen
aplicaciones donde son ms adecuados que estos, como por ejemplo para resolver problemas
simples puramente combinacionales.
Hardware y software
Un sistema microprogramable esta formado por los siguientes componentes:
Hardware: Es el conjunto de circuitos electrnicos que forman el sistema microprogramable
o, dicho de otra forma, es la parte fsica del sistema.
Software: Es el conjunto de programas y aplicaciones formado por instrucciones y rutinas
que se utilizan para programar y coordinar al sistema microprogramable. Tambin se
denomina software al conjunto de lenguajes empleados para elaborar dichos programas.
Firmware: Es un "software" grabado en la estructura electrnica del sistema
microprogramable y que el usuario en principio no puede alterar. En los ordenadores
personales, la BIOS (Basic Input/Output System) utiliza firmware y contiene un grupo de
programas que sirven de intermediario entre el software y hardware.
Arquitectura de un sistema basado en CPU
En este punto veremos con mayor profundidad cuales son los bloques que componen un
sistema microprogramable basado en el uso de una CPU. Esto incluye tanto a los sistemas
basados en microprocesador como los que utilizan microcontroladores.
Sistemas
microprogramables
1.6
Sistemas
microprogramables
1.7
Acumuladores y registros
Un registro es una pequea memoria interna, donde se almacenan temporalmente los
resultados intermedios de las operaciones. Los registros estn formados por biestables colocados
de tal forma que pueden almacenar la informacin en un momento determinado. La longitud de
estos registros viene determinada por el nmero de biestables que los forman.
Existen varios registros diferentes, entre los que destacamos:
Registro acumulador.
Registro de estado.
Registros auxiliares.
Registro SP (Stack Pointer).
La pila.
Registro CP (Contador de Programa)
Registros internos.
Sistemas
microprogramables
1.8
Registro acumulador
Como hemos mencionado, en la ALU se realizan las operaciones aritmticas y lgicas con los
datos.
1.9
En la mayora de las CPU existen bits en este registro que no contiene informacin alguna y, en
general, estn a 1.
Registro de estado en el PIC16X84
A modo de ejemplo se muestra el registro de Estado (STATUS) del microcontrolador PIC16X84,
que contiene varios bits de estado de la unidad central, el estado aritmtico de la ALU, el estado
del reset y un par de bits de seleccin de pgina denominados RP1 y RP0. Ocupa la posicin 03h
del banco 0 y la 83h del banco 1.
R/W0
R/W0
R/W0
R-1 R-1
R/Wx
R/WR/W-x
x
IRP
RP1
RP0
/TO /PD
DC
bit 7
bit 6
bit 5
bit 4 bit 3
bit 2
bit 1
bit 0
IRP: Seleccin del banco en direccionamiento indirecto. Este bit junto con el de ms peso
del registro FSR sirven para determinar el banco de la memoria de datos seleccionado. En el
PIC16X84 al disponer de dos bancos no se usa y debe programarse como 0.
RP0 y RP1: Register Bank Select. Seleccin de pgina o banco de la memoria con
direccionamiento directo. Cada pgina contiene 128 bytes. Como el PIC16X84 slo tiene
dos bancos nicamente se emplea RP0 de forma que cuando vale 0 se accede al banco 0 y
cuando vale 1 se accede al banco 1. Despus de un reset, RP0 se pone automticamente a
0. RP1 debe mantenerse a 0.
TO: Time Out
1. Se pone a 1 tras conectar la alimentacin o al ejecutar CLRWDT o SLEEP.
0. Se pone a 0 por desbordamiento del Perro Guardin WDT.
PD: Power Down.
1. Se pone automticamente a 1 tras conectar la alimentacin Vdd o ejecutar
CLRWDT.
0. Se pone a 0 al ejecutar la instruccin SLEEP.
Z: Cero
1 = El resultado de una operacin aritmtica o lgica es 0.
0 = El resultado es distinto de 0.
DC (Digit Carry). Acarreo en el 4 bit de menos peso. Funciona igual que el bit de Carry
Sistemas
microprogramables
1.10
Este registro, se incrementa automticamente para obtener las instrucciones y los datos de la
memoria, ya sea de modo secuencial o de forma aleatoria.
Registros internos
Todos los microprocesadores y microcontroladores tienen registros internos que no pueden
manipularse por el usuario puesto que el sistema los utiliza de forma automtica cuando es
preciso. Estos registros son:
Registro de instrucciones (Re): En este registro se guardan los cdigos de las
instrucciones a decodificar.
Registro de direcciones (RDIR): Su misin consiste en almacenar las direcciones que se
envan por el bus de direcciones. Este registro aade un conjunto de bufferes
unidireccionales que separan las unidades internas del citado bus.
Registro de datos (RDAT): En este registro, se almacenan los datos que llegan al
microprocesador o que parten de el, a travs del bus de datos. A diferencia del registro de
direcciones, este tiene bufferes triestado bidireccionales para separar las unidades internas
del citado bus, ya que los datos pueden entrar o salir del microprocesador.
Sistemas
microprogramables
1.11
ejecutar. Siempre es una RAM puesto que se modifica durante la ejecucin de un programa,
ya que en ella se almacenan y se leen los resultados de las operaciones realizadas, as
como los datos de las operaciones intermedias requeridas.
La memoria RAM (Ramdom Access Memory, memoria de acceso aleatorio) es un tipo de
memoria que permite tanto la lectura (read) como la escritura (write). Es voltil, esto es, los
datos se pierden si deja de alimentarse.
Cuando el sistema necesita leer un dato de la memoria RAM, lo primero que hace es indicar
la posicin de memoria de donde desea obtener el dato. Dependiendo de si la operacin que
va efectuar es una lectura o una escritura, se pone a uno o a cero una seal de lectura
escritura (Read=1/Write=0). Si la operacin es de lectura, la memoria entrega el dato deseado.
Por el contario, si es de escritura, el dato se almacena en la memoria.
Sistemas
microprogramables
1.12
La limitacin de la longitud de las instrucciones por el bus de datos, que hace que el
microprocesador tenga que realizar varios accesos a memoria para buscar instrucciones
complejas.
La limitacin de la velocidad de operacin a causa del bus nico para datos e instrucciones
que no deja acceder simultneamente a unos y otras, lo cual impide superponer ambos
tiempos de acceso.
Arquitectura Harvard: Este modelo, que utilizan los microcontroladores PIC, tiene la unidad
central de proceso (CPU) conectada a dos memorias (una con las instrucciones y otra con los
datos) por medio de dos buses diferentes.
Sistemas
microprogramables
1.13
Una de las memorias contiene solamente las instrucciones del programa (Memoria de
Programa), y la otra slo almacena datos (Memoria de Datos).
Ambos buses son totalmente independientes lo que permite que la CPU pueda acceder de
forma independiente y simultnea a la memoria de datos y a la de instrucciones. Como los buses
son independientes stos pueden tener distintos contenidos en la misma direccin y tambin
distinta lngitud. Tambien la longitud de los datos y las instrucciones puede ser distinta, lo que
optimiza el uso de la memoria en general.
Para un procesador de Set de Instrucciones Reducido, o RISC (Reduced Instruccin Set
Computer), el set de instrucciones y el bus de memoria de programa pueden disearse de tal
manera que todas las instrucciones tengan una sola posicin de memoria de programa de longitud.
Adems, al ser los buses independientes, la CPU puede acceder a los datos para completar la
ejecucin de una instruccin, y al mismo tiempo leer la siguiente instruccin a ejecutar.
Ventajas de esta arquitectura:
El tamao de las instrucciones no esta relacionado con el de los datos, y por lo tanto puede
ser optimizado para que cualquier instruccin ocupe una sola posicin de memoria de
programa, logrando as mayor velocidad y menor longitud de programa.
El tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando
una mayor velocidad en cada operacin.
Tipos de memoria
En un sistema abierto como un PC, los programas se encuentran en la memoria RAM
(lectura/escritura) para posibilitar la carga de uno u otro programa desde, por ejemplo el disco duro,
segn lo desee el usuario.
ROM
OTP
EPROM
EEPRON
Flash
Sistemas
microprogramables
1.14
Memoria ROM: Su nombre corresponde a las iniciales de Read Only Memory, que significa
memoria de slo lectura. Al contrario que la memoria RAM, este tipo de memoria solo permite
la lectura (read).
En un sistema abierto como un PC su funcin es contener los datos y programas de
arranque, para que el microprocesador pueda comunicarse con el resto del sistema. En este
caso se le denomina BIOS (Basic Input/Output System), porque contiene las instrucciones
bsicas de entrada y salida. Su funcionamiento es identico al de las memorias RAM, con la
excepcin de que al ser nicamente de lectura, no precisa de la seal read/write.
Memoria OTP: La memoria de programa, que puede ser una EPROM, no dispone de
ventana para el borrado por lo que slo se puede programar una vez,
Por ltimo conveniente recordar que en un sistema abierto aunque la Memoria Central es un
elemento fundamental no est dentro del microprocesador, pero s est dentro de un
microcontrolador.
Unidad de entradas/salidas (interfaz)
Esta unidad comunica al sistema con el mundo exterior, permitiendo la introduccin y la
extraccin de informacin al sistema. Estas unidades consisten generalmente en registros que,
accionados por los buses de control y direcciones, almacenan la informacin suministrada por el
bus de datos.
Estos registros son accesibles desde el exterior por una serie de terminales para su conexin a
cualquier dispositivo que se deba accionar.
En las entradas se introduce la informacin de manera que cuando se ordena, mediante los
buses de control y de direcciones, el sistema selecciona en un instante dado cuales de esas
informaciones presentes en las entradas deben transferirse al bus de datos para su proceso.
La parte de salida, por el contrario, consiste en una serie de registros en los que el sistema
deposita el resultado de la informacin ya procesada.
Nota: Al igual que sucede en un sistema abierto con la Memoria Central, la Unidad de E/S es un
elemento que no esta en el interior del microprocesador, pero si dentro de un microcontrolador.
Sistemas
microprogramables
1.15
Sistemas
microprogramables
1.16
Sistemas
microprogramables
1.17
Hasta ahora hemos hablado de que la CPU recoge las instrucciones de la memoria. Pero como
estn compuestas estas instrucciones? Las instrucciones, como su propio nombre indica, van a
decir que se debe hacer con los datos, o con que datos se debe realizar cierta operacin.
Formato de una instruccin
Las instrucciones estn formadas por dos partes, tal y como muestra a continuacin
INSTRUCCIN
CDIGO
OPERAND
OPERACIN
O
Cdigo de operacin: Este indica a la CPU que tipo de operacin debe realizarse, como
por ejemplo, una suma, una resta o una multiplicacin.
Operando: Por el contrario, este indica con que datos se deben realizar dichas operaciones,
o bien, las direcciones de donde se deben obtener dichos datos.
El cdigo de operacin, est siempre presente en cualquier tipo de instruccin. Por el contrario,
el operando puede o no estarlo. Por ejemplo, para que la CPU detenga la ejecucin de un
programa, es suficiente con el cdigo de operacin. Sin embargo, para realizar una suma, a parte
del cdigo de operacin habr que indicar con que dato se debe sumar, ya sea explcitamente
despus del cdigo de operacin o indicando en su lugar la posicin de memoria donde se
encuentra dicho dato.
Las instrucciones se pueden clasificar segn el tipo de operacin que realicen en:
Instrucciones lgicas: Realizan las operaciones lgicas entre operandos, tales como suma
lgica, complementacin, etc.
Instrucciones aritmticas: Realizan las operaciones aritmticas, tales como la suma
aritmtica, divisin aritmtica, etc. Este tipo de operaciones se realiza entre acumuladores y
posiciones de memoria.
Instrucciones de salto: Este tipo de instrucciones corresponde a los saltos condicionales
(hacen una cosa u otra segn el resultado de ciertas operaciones) e incondicionales.
Instrucciones de transferencia de datos (entrada/ salida): Estas instrucciones "ordenan"
el paso de informacin entre distintos dispositivos del sistema.
Instrucciones de control: Controlan el desarrollo del programa, lo finaliza, inicializa, no
operacin (NOP), etc.
Lenguajes de programacin para sistemas basados en CPU
Para introducir los programas y datos en un sistema microprogramable, necesitamos de un
mtodo que sea comprensible tanto para el usuario como para el sistema. Sin embargo, no existe
un lenguaje que sea igualmente comprensible para el usuario como para el sistema. Mientras que
el primero utiliza un lenguaje complejo, el sistema nicamente opera en lenguaje binario.
Este lenguaje binario que utiliza la mquina es muy complejo de entender y, por tanto, de
programar. Por esta razn se clasifican los lenguajes en niveles segn estn mas o menos
cercanos al lenguaje de la mquina en:
Lenguaje de bajo nivel o cdigo mquina.
Lenguaje ensamblador.
Lenguaje de alto nivel.
Sistemas
microprogramables
1.18
Binario
Hex
Operando
Cdigo
Instruccin
a
1100000000011
Carga en el acumulador el dato indicado en el
3007 1100xx 0000 0111
1
operando
1111100000100
3E08 11111x
0
0000 1000
000000100100
000000
Almacena el resultado contenido en el acumulador en
0090
0010000
00
1
la direccin indicada
Nota: x representa un valor indiferente, pero se ha tomado en binario como en hexadecimal
como 0, tal y como lo hace el ensamblador MPLAB de microchip.
Este formato binario, denominado lenguaje cdigo mquina, puesto que es el que realmente
entiende el sistema, es el que debe estar en la memoria de programa para que pueda funcionar.
Se comprende, no obstante, que escribir un programa, que puede constar de cientos, miles o
millones de instrucciones, a este nivel, seria extraordinariamente penoso, sujeto a errores y muy
difcil de interpretar por una persona, una vez escrito. Sin embargo, la velocidad con que se ejecuta
es muy elevada, ya que las instrucciones son ejecutadas directamente por la mquina. Otra ventaja
de este tipo de lenguaje reside en que nos podemos meter en lo mas profundo de la mquina.
Sistemas
microprogramables
1.19
Lenguaje ensamblador
El lenguaje mquina no es muy manejable por su elevada complejidad, por lo que, para facilitar
la confeccin de programas se utiliza otro tipo de lenguaje denominado lenguaje ensamblador o
simblico.
En el lenguaje ensamblador, las instrucciones se representan por nemnicos o combinaciones
de letras que recuerdan el significado de la instruccin en ingls. As, por ejemplo, en la siguiente
tabla se representan los nemnicos utilizados para las instrucciones anteriores.
Mnemnico Hex
Operando
Cdigo
Instruccin
a
movlw 0x07 3007 1100xx 0000 0111 Carga en el acumulador el dato indicado en el operando
addlw 0x08
3E08 11111x
0000 1000
000000
Almacena el resultado contenido en el acumulador en la
001 0000
1
direccin indicada
Ademas, las direcciones en vez de figurar con su valor binario real, figuran bajo nombres
simblicos (etiquetas) que se pueden asignar de modo que recuerden su significado o la direccin
de las instrucciones.
movwf 0x10 0090
Lenguaje mquina
Etiquet Mnemnic
Operando
a
o
PC
INICIO
Cdigo+Operan
do
movlw
0x07
00000
3007 h
0
addlw
0x08
00000
3E08 h
1
movwf
RESULTAD
O
00000
0090 h
2
Notas:
PC: Direccin de la memoria de programa.
RESULTADO: El ensamblador permite sustituir valores numricos por etiquetas as RESULTADO
ser igual a 10 h.
Se comprende que, con un poco de practica, el programa en ensamblador es mucho mas fcil
Sistemas
microprogramables
1.20
Programa ensamblador
Una vez escrito el programa en lenguaje ensamblador, su conversin a lenguaje mquina puede
hacerse automticamente en un ordenador mediante un programa, al cual habr que indicarle,
entre otras cosas, la equivalencia numrica de los smbolos o etiquetas utilizados para representar
valores numricos como operandos (en el ejemplo anterior, RESULTADO), mientras que las
equivalencias numricas de las etiquetas con la posicin de cada instruccin en el programa
ensamblador se generarn automticamente (en el ejemplo anterior, INICIO).
Este proceso de traduccin a lenguaje mquina se conoce como "ensamblado" y el programa de
ordenador que lo realiza, ensamblador.
Lenguajes de alto nivel
Es el lenguaje mas cercano al usuario y, por tanto, el mas evolucionado, ya que no se basa en la
arquitectura de la mquina.
El nombre de las instrucciones y sentencias se corresponde con el nombre en ingles de la tarea
que realizan, dependiendo ahora el repertorio de instrucciones no de la CPU, sino del paquete
software con el que trabaja o del sistema operativo.
Algunos ejemplos de lenguajes de alto nivel son:
BASIC
C
JAVA
Los lenguajes de alto nivel son muy parecidos al lenguaje del usuario pero muy distinto del que
comprende la mquina. Por tanto, para ejecutarse debe ser convertido y la conversin suele
introducir bastante ms cdigo que si el programa se escribiese directamente en ensambladorpor
por lo su ejecucin es mas lenta. Ademas el programa se hace mas largo.
El inconveniente de este tipo de lenguaje es que no podemos meternos en lo mas profundo de la
mquina. Sin embargo se puede escribir la mayor parte de un programa en un lenguaje de alto
nivel, y luego aadir subrutinas realizadas en lenguaje mquina.
Proceso de programacin
Una vez escrito el programa (programa fuente) en uno de los anteriores lenguajes, este debe
"transformarse" en cdigo mquina que es lo nico que entiende el sistema microprogramable.
Para ello, disponemos de las siguientes herramientas:
Ensambladores: Se utilizan para transformar el lenguaje ensamblador a cdigo mquina.
Compiladores e interpretes: Se emplean para transformar el resto de los lenguajes a
cdigo mquina.
La diferencia entre ensambladores y compiladores con respecto a los interpretes radica en que,
el compilador y ensamblador generan el cdigo mquina de todo el programa y lo ejecutan, as que
la ejecucin es mas rpida. El interprete en cambio lee una lnea, la convierte a cdigo mquina y,
luego, la ejecuta, lee otra lnea... y as todo el programa, por ello la ejecucin es mas lenta.
Sistemas
microprogramables
1.21
Dispositivos PLDs
Como antes se indic, los PLDs (Programmable Logic Device) son circuitos integrados que en
su interior integran una matriz de puertas lgicas cuya funcionalidad puede ser programada por el
usuario. Internamente no tienen la estructura de los sistemas basados en una CPU, pero en
diversas aplicaciones pueden utilizarse con algunas ventajas sobre estos, como por ejemplo la
velocidad para resolver problemas simples puramente combinacionales frente a los
microcontroladores.
La aplicacin tpica es la de implementar diversas funciones lgicas, reduciendo con este
dispositivo todo el circuito a un nico chip y simplificando las conexiones.
En los dispositivos actuales se utilizan fundamentalmente dos tipos de estructuras
programables:
Matrices Lgicas Programables
Memorias RAM (Look-up Tables)
Matrices Lgicas Programables
Son dispositivos no voltiles y consisten en una matriz de puertas AND seguida de otra matriz
de puertas OR interconectadas a travs de fusibles. Aprovechando que cualquier funcin se puede
escribir como suma de productos, quemando los fusibles adecuados, estas permiten la
programacin de un nmero limitado de mintrminos (minterms).
Sistemas
microprogramables
1.22
PAL
PLA
EPLD
GAL
CPLD
PAL (Programmable Array Logic): Su principal caracterstica es que se pueden programar las
uniones en la matriz de puertas AND, siendo fijas las uniones en la matriz de puertas OR.
PLA (Programmable Logic Array): A diferencia de la anterior, en esta se pueden programar
tanto las uniones en la matriz de puertas AND como en la matriz de puertas OR.
EPLD (Erasable PLD): Mientras que los anteriores PLDs son bipolares (programabas por fusible
y una nica vez), estos se graban elctricamente y se borran por medio de luz ultravioleta como las
memorias EPROM. Ademas de ser borrables, su nivel de integracin es superior, permitiendo que
un solo EPLD pueda sustituir entre 20 y 25 de los anteriores.
GAL (Generic Array Logic): Se designa as a los dispositivos borrables y grabables por medios
elctricos, que han sido diseados con el objetivo de sustituir a la mayora de las PALs
manteniendo la compatibilidad terminal a terminal.
CPLD (Complex PLD): Alberga en su interior grupos de PLDs sencillos (desde 32 hasta 256) y
aade otra serie de elementos que permite la interconexin en su interior de estos grupos.
Microcontroladores
2.2
Introduccin
Desde la invencin del circuito integrado, el desarrollo constante de la electrnica digital ha dado
lugar a dispositivos cada vez ms complejos. Entre ellos los microprocesadores y los
microcontroladores.
El objetivo principal de esta prctica es que el alumno logre un entendimiento bsico de los
microcontroladores y obtenga los conocimientos necesarios para la programacin de estos
dispositivos y para el diseo de sistemas digitales y/o analgicos basados en ellos.
Se pretende explicar conceptos cuya vigencia se mantendr en un periodo mas o menos largo,
centrndose en la familia de microcontroladores PIC16, concretamente en el PIC16F84, por que
existe mucha informacin, es fcil de encontrar y barato. Limitarse a un tipo de PIC no se considera
importante, ya que si se comprende bien un microcontrolador, los dems pueden aprenderse con
facilidad partiendo del primero. Adems, el estudio de un microcontrolador particular elimina la
posibilidad de una presentacin superficial o confusa y permite enfrentarse a problemas reales en
la prctica.
Para estar al tanto de las innovaciones se recomienda que se mantenga en contacto con la
pagina web de Microchip Technology, http://www.microchip.com, solo as se podr obtener un
conocimiento completo y actualizado, tanto de los aspectos que aqu se tratan, como de los nuevos
que vayan surgiendo.
La forma de estructurar el tema responde a la experiencia de que, para quien por primera vez
estudia microcontroladores, resulta ms sencillo aprender primero lo referente a la construccin
interna del dispositivo y la arquitectura general de los microcontroladores y una vez entendido
Microcontroladores
2.3
Controlador y microcontrolador
Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de uno o varios
procesos. Por ejemplo, el controlador que regula el funcionamiento de un horno elctrico dispone
de un sensor que mide constantemente su temperatura interna y acta sobre las resistencias para
mantener la temperatura dentro del rango establecido.
Aunque el concepto de controlador ha permanecido invariable a travs del tiempo, su
implementacin fsica ha variado frecuentemente. Hace tres dcadas, los controladores
electrnicos se construan exclusivamente con componentes de lgica discreta, posteriormente se
emplearon los microprocesadores, que se rodeaban con chips de memoria y E/S sobre una tarjeta
de circuito impreso. En la actualidad, todos los elementos del controlador se han podido incluir en
un solo circuito integrado, el cual recibe el nombre de microcontrolador. Realmente consiste en un
sencillo pero completo ordenador contenido en un circuito integrado.
Un microcontrolador es un circuito integrado de alta escala de integracin que incorpora la
mayor parte de los elementos que configuran un controlador y que contiene todos los componentes
fundamentales de un ordenador, aunque de limitadas prestaciones y que se suele destinar a
gobernar una sola tarea.
En su memoria slo reside un programa que controla en funcionamiento de una tarea
determinada, sus lneas de entrada/salida se conectan a los sensores y actuadores del dispositivo
a controlar y, debido a su pequeo tamao, suele ir integrado en el propio dispositivo al que
gobierna.
Un microcontrolador dispone normalmente de los siguientes componentes:
Procesador o CPU (Unidad Central de Proceso).
Memoria RAM para contener los datos.
Memoria para el programa tipo ROM/EPROM/EEPROM/Flash.
Lneas de E/S para comunicarse con el exterior.
Diversos mdulos para el control de perifricos (temporizadores, puertos serie y paralelo,
CAD: Conversores Analgico/Digital, CDA: Conversores Digital/Analgico, etc.).
Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema.
Los productos que para su regulacin incorporan un microcontrolador disponen de las siguientes
ventajas:
Aumento de prestaciones: un mayor control sobre un determinado elemento representa
una mejora considerable en el mismo.
Aumento de la fiabilidad: al reemplazar el microcontrolador por un elevado nmero de
elementos disminuye el riesgo de averas y se precisan menos ajustes.
Microcontroladores
2.4
Microcontroladores
2.5
Microcontroladores
2.6
Microcontroladores
2.7
En cuanto a las tcnicas de fabricacin, cabe decir que prcticamente la totalidad de los
microcontroladores actuales se fabrican con tecnologa CMOS (Complementary Metal Oxide
Semiconductor). Esta tecnologa supera a las tcnicas anteriores por su bajo consumo y alta
inmunidad al ruido.
Ms adelante, en el apartado Qu microcontrolador emplear? se mostrar una tabla con las
distintas familias de algunos fabricantes con su direccin en Internet y algunos datos.
Recursos comunes
Al estar todos los microcontroladores en un solo circuito integrado, su estructura fundamental y
sus caractersticas bsicas son muy parecidas. Todos deben disponer de los bloques esenciales
Procesador, memoria de datos y de instrucciones, lneas de E/S, oscilador de reloj y mdulos
controladores de perifricos. Sin embargo, cada fabricante intenta enfatizar los recursos ms
idneos para las aplicaciones a las que se destinan preferentemente.
En este apartado se hace un recorrido de todos los recursos que se hallan en todos los
microcontroladores describiendo las diversas alternativas y opciones que pueden encontrarse
segn el modelo seleccionado.
Arquitectura bsica
Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clsica de von
Neumann, en el momento presente se impone la arquitectura Harvard.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores
2.9
La arquitectura de von Neumann se caracteriza por disponer de una sola memoria principal
donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede a travs
de un sistema de buses nico (direcciones, datos y control) mientras que la arquitectura Harvard
dispone de dos memorias independientes, una que contiene slo instrucciones y otra slo datos.
Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar
operaciones de acceso (lectura o escritura) simultneamente en ambas memorias.
Microcontroladores
2.10
Memoria
En los microcontroladores la memoria de instrucciones y datos est integrada en el propio
circuito integrado. Una parte debe ser no voltil, tipo ROM, y se destina a contener el programa de
instrucciones que gobierna la aplicacin. Otra parte de memoria ser tipo RAM, voltil, y se destina
a guardar las variables y los datos.
Hay dos peculiaridades que diferencian a los microcontroladores de los PC's:
No existen sistemas de almacenamiento masivo como disco duro o disquetes.
Como el microcontrolador slo se destina a una tarea en la memoria de programa, slo hay
que almacenar un nico programa de trabajo.
La memoria de datos (RAM) en estos dispositivos es de poca capacidad pues slo debe
contener las variables y los cambios de informacin que se produzcan en el transcurso del
programa. Por otra parte, como slo existe un programa activo, no se requiere guardar una copia
del mismo en la RAM pues se ejecuta directamente desde la memoria de programa (ROM).
El usuario de PC est habituados a manejar Megabytes de memoria, pero los diseadores con
microcontroladores trabajan con capacidades de memoria de programa de 512 bytes, 1K, 2K
(hasta unos 64K) y de RAM de 20 bytes, 68 bytes, 512 bytes (hasta unos 4K).
Segn el tipo de memoria de programa que dispongan los microcontroladores, la aplicacin y
utilizacin de los mismos es diferente. Se describen las cinco versiones de memoria no voltil que
se pueden encontrar en los microcontroladores del mercado:
1. ROM con mscara
Es una memoria no voltil de slo lectura cuyo contenido se graba durante la
fabricacin del chip.
Mscara viene de la forma cmo se fabrican los circuitos integrados. Estos se fabrican
en obleas que contienen varias decenas de chips. Estas obleas se obtienen a partir de
procesos fotoqumicos, donde se impregnan capas de silicio y oxido de silicio, y segn
convenga, se erosionan al exponerlos a la luz. Como no todos los puntos han de ser
erosionados, se sita entre la luz y la oblea una mscara con agujeros, de manera que
donde deba incidir la luz, esta pasar. Con varios procesos similares pero ms
complicados se consigue fabricar los transistores y diodos que componen un circuito
integrado.
El elevado coste del diseo de la mscara slo hace aconsejable el empleo de los
microcontroladores con este tipo de memoria cuando se precisan cantidades superiores
a varios miles de unidades.
2. OTP
El microcontrolador contiene una memoria no voltil de slo lectura "programable una
sola vez" por el usuario. OTP (One Time Programmable). Es el usuario quien puede
escribir el programa en el chip mediante un sencillo grabador controlado por un
programa desde un PC. La versin OTP es recomendable cuando es muy corto el ciclo
de diseo del producto, o bien, en la construccin de prototipos y series muy pequeas.
Microcontroladores
2.11
3 EPROM
Los microcontroladores que disponen de memoria EPROM (Erasable Programmable
Read OnIy Memory) pueden borrarse y grabarse muchas veces. La grabacin se realiza,
como en el caso de los OTP, con un grabador gobernado desde un PC. Si,
posteriormente, se desea borrar el contenido, disponen de una ventana de cristal en su
superficie por la que se somete a la EPROM a rayos ultravioleta durante varios minutos.
Las cpsulas son de material cermico y son ms caros que los microcontroladores con
memoria OTP que estn hechos con material plstico. Hoy da se utilizan poco, siendo
sustituidas por memorias EEPROM o Flash.
4 EEPROM
Se trata de memorias de slo lectura, programables y borrables elctricamente
EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la
programacin como el borrado, se realizan elctricamente desde el propio grabador y
bajo el control programado de un PC. Es muy cmoda y rpida la operacin de grabado
y la de borrado. No disponen de ventana de cristal en la superficie.
Los microcontroladores dotados de memoria EEPROM una vez instalados en el
circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho
circuito. Para ello se usan "grabadores en circuito" que confieren una gran flexibilidad y
rapidez a la hora de realizar modificaciones en el programa de trabajo.
El nmero de veces que puede grabarse y borrarse una memoria EEPROM es finito,
por lo que no es recomendable una reprogramacin continua. Hoy da estn siendo
sustituidas por memorias de tipo Flash.
Se va extendiendo en los fabricantes la tendencia de incluir una pequea zona de
memoria EEPROM en los circuitos programables para guardar y modificar
cmodamente una serie de parmetros que adecuan el dispositivo a las condiciones del
entorno.
Este tipo de memoria es relativamente lenta.
5 FLASH
Se trata de una memoria no voltil, de bajo consumo, que se puede escribir y borrar.
Funciona como una ROM y una RAM pero consume menos y es ms pequea.
A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es ms
rpida y de mayor densidad que la EEPROM.
La alternativa FLASH est recomendada frente a la EEPROM cuando se precisa gran
cantidad de memoria de programa no voltil. Es ms veloz y tolera ms ciclos de
escritura/borrado. Son idneas para la enseanza y la Ingeniera de diseo.
Las memorias EEPROM y FLASH son muy tiles al permitir que los microcontroladores que las
incorporan puedan ser reprogramados "en circuito", es decir, sin tener que sacar el circuito
integrado de la tarjeta. As, un dispositivo con este tipo de memoria incorporado al control del motor
de un automvil permite que pueda modificarse el programa durante la rutina de mantenimiento
peridico, compensando los desgastes y otros factores tales como la compresin, la instalacin de
nuevas piezas, etc. La reprogramacin del microcontrolador puede convertirse en una labor
rutinaria dentro de la puesta a punto.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores
2.12
Temporizadores o "Timers".
Perro guardin o "Watchdog".
Proteccin ante fallo de alimentacin o "Brownout".
Estado de reposo o de bajo consumo.
Conversor A/D.
Conversor D/A.
Comparador analgico.
Modulador de anchura de impulsos o PWM.
Puertos de comunicacin.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores
2.13
Temporizadores o "Timers"
Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la cuenta de
acontecimientos que suceden en el exterior (contadores).
Para la medida de tiempos se carga un registro con el valor adecuado y a continuacin dicho
valor se va incrementando o decrementando al ritmo de los impulsos de reloj o algn mltiplo hasta
que se desborde y llegue a 0, momento en el que se produce un aviso.
Cuando se desean contar acontecimientos que se materializan por cambios de nivel o flancos en
alguna de las patillas del microcontrolador, el mencionado registro se va incrementando o
decrementando al ritmo de dichos impulsos.
Perro guardin o "Watchdog"
Cuando un ordenador personal se bloquea por un fallo del software u otra causa, se pulsa el
botn del reset y se reinicializa el sistema.
En la mayora de los casos y a diferencia de un ordenador personal, un microcontrolador
funciona sin el control de un supervisor y de forma continuada las 24 horas del da y 365 das al
ao. El Perro guardin consiste en un temporizador que, cuando se desborda y pasa por 0,
provoca un reset automticamente en el sistema.
Se debe disear el programa de trabajo que controla la tarea de forma que refresque o inicialice
al Perro guardin antes de que provoque el reset. Si falla el programa o se bloquea, el programa
no refrescar al Perro guardin y, al completar su temporizacin, provocar el reset del sistema.
Proteccin ante fallo de alimentacin o "Brownout"
Se trata de un circuito que resetea al microcontrolador cuando el voltaje de alimentacin (VDD)
es inferior a un voltaje mnimo ("brownout"). Mientras el voltaje de alimentacin sea inferior al de
brownout el dispositivo se mantiene reseteado, comenzando a funcionar normalmente cuando
sobrepasa dicho valor. Esto es muy til para evitar datos errneos por transiciones y ruidos en la
lnea de alimentacin.
Estado de reposo de bajo consumo
Son abundantes las situaciones reales de trabajo en que el microcontrolador debe esperar, sin
hacer nada, a que se produzca algn acontecimiento externo que le ponga de nuevo en
funcionamiento. Para ahorrar energa, (factor clave en los aparatos porttiles), los
microcontroladores disponen de una instruccin especial (SLEEP en los PIC), que les pasa al
estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son mnimos. En
dicho estado se detiene el reloj principal y se "congelan" sus circuitos asociados, quedando sumido
en un profundo "sueo" el microcontrolador. Al activarse una interrupcin ocasionada por el
acontecimiento esperado, el microcontrolador se despierta y reanuda su trabajo. Para hacernos
una idea, esta funcin es parecida a la opcin de Suspender en el men para apagar el equipo (en
aquellos PCs con administracin avanzada de energa).
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores
2.14
Tanto el I2C en televisores, como el Bus CAN en automviles, fueron diseados para simplificar
la circuitera que supone un bus paralelo de 8 lneas dentro de un televisor, as como para librar de
la carga que supone una cantidad ingente de cables en un vehculo.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores
2.15
Herramientas de desarrollo
Las herramientas de desarrollo estn formadas por un conjunto de programas e interfaces que
permiten realizar los proyectos de la forma ms eficiente posible.
Las principales herramientas de ayuda al desarrollo de sistemas basados en microcontroladores
se describen a continuacin
Ensamblador. La programacin en lenguaje ensamblador puede resultar un tanto ardua para el
principiante, pero permite desarrollar programas muy eficientes, ya que otorga al programador el
dominio absoluto del sistema. Los fabricantes suelen proporcionar el programa ensamblador de
forma gratuita y en cualquier caso siempre se puede encontrar una versin gratuita para los
microcontroladores ms populares.
Compilador. La programacin en un lenguaje de alto nivel (como C o Basic) permite disminuir el
tiempo de desarrollo de un producto y si adems est familiarizado con C o Basic es una buena
opcin. No obstante, cuando el compilador convierta el cdigo del programa a un lenguaje
ensamblado, cada lnea de cdigo del programa en lenguaje de alto nivel habr generado
bastantes ms lneas de cdigo en lenguaje ensamblador, normalmente en una relacin de uno a
tres. Esto significa que para utilizar un lenguaje de alto nivel necesitaremos un microcontrolador
con una capacidad de memoria relativamente grande.
Si el programa que estamos desarrollando necesita utilizar nmeros con decimales, o con
notacin cientfica o se utilizan operaciones complejas, como pueden ser las trigonomtricas, es
casi obligado utilizar un lenguaje de alto nivel. Pero si lo que se va a hacer es manipular bits en
registros, entradas, salidas y clculos sencillos, el lenguaje ensamblado es la mejor opcin.
Las versiones ms potentes de compiladores suelen ser muy caras, aunque para los
microcontroladores ms populares pueden encontrarse versiones demo limitadas e incluso
compiladores gratuitos.
Como compilador gratuito puede utilizarse el compilador C GNU, que es un compilador C de
cdigo abierto tan bueno como los compiladores C comerciales pero que sin embargo tiene un
proceso de instalacin que no es sencillo. Adems hay que comprobar que arquitecturas de
microcontrolador soporta. Algunas de las cuales son MSP430 de TI, AVR de Atmel y HC11 de
Motorola, (ver www.gnu.org y www.fsf.org). Tambin puede conseguirse un compilador C GNU en
binario ya construido. Por ejemplo para la arquitectura ARM puede conseguirse un compilador C
GNU binario para win32 desde www.gnuarm.com, que trabaja con lnea de comandos e incluye un
depurador de cdigo. Para obtener un entorno de desarrollo (IDE) para windows que pueda
utilizarse con el conjunto de herramientas GNU puede utilizarse la aplicacin VIDE, que puede
conseguirse en www.objectcentral.com/vide.htm.
Simulador. Se trata de software que es capaz de ejecutar en un PC programas realizados para
el microcontrolador. Los simuladores permiten tener un control absoluto sobre la ejecucin de un
programa, siendo ideales para la depuracin de los mismos. Su gran inconveniente es que es difcil
simular la entrada y salida de datos del microcontrolador. Tampoco cuentan con los posibles ruidos
en las entradas, pero, al menos, permiten el paso fsico de la implementacin de un modo ms
seguro y menos costoso, puesto que ahorraremos en grabaciones de chips para la prueba in-situ.
Placas de evaluacin. Se trata de pequeos sistemas con un microcontrolador ya montado y
que suelen conectarse a un PC desde el que se cargan los programas que se ejecutan en el
microcontrolador. Las placas suelen incluir visualizadores LCD, teclados, LEDs, fcil acceso a los
pines de E/S, etc. Pueden incluir un programa de control o sistema operativo que recibe el nombre
de programa monitor. El programa monitor de algunas placas de evaluacin, aparte de permitir
cargar programas y datos en la memoria del microcontrolador, puede permitir en cualquier
momento realizar ejecucin paso a paso, monitorizar el estado del microcontrolador o modificar los
valores almacenados los registros o en la memoria.
Microcontroladores
2.16
Qu microcontrolador emplear?
Elegir un tipo o familia de microcontroladores
A la hora de decidirse en terminos generales sobre que tipo o familia de microcontroladores
emplear hay que tener en cuenta varios factores, como por ejemplo:
Experiencia previa
Documentacin existente
Herramientas de desarrollo disponibles y su precio
Precio del microcontrolador
gran o mediana escala de dispositivos que utilizan un microcontrolador, una diferencia de precio en
el mismo de algunos cntimos es importante (el consumidor deber pagar adems el coste del
empaquetado, el de los otros componentes, el diseo del hardware y el desarrollo del software).
Elegir un modelo concreto de microcontrolador
Una vez se decida que tipo o familia de microcontroladores se van a emplear hay que elegir el
modelo de microcontrolador concreto para la aplicacin y resulta imprescindible analizar los
requisitos de la aplicacin:
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores
2.8
pasa al modo normal y ejecuta las operaciones necesarias. De esta manera la duracin de
la batera puede llegar casi a la vida de la misma puesto que en modo de bajo consumo un
microcontrolador puede reducir 1000 veces sus necesidades de corriente comparndolo con
el modo normal.
Memoria: Para determinar las necesidades de memoria de nuestra aplicacin debemos
separarla en memoria voltil (RAM), memoria no voltil (ROM, Flash, etc.) y memoria no
voltil modificable (EEPROM). Este ltimo tipo de memoria puede ser til para incluir
informacin especfica de la aplicacin como un nmero de serie o parmetros de
calibracin.
El tipo de memoria a emplear vendr determinado por el volumen de ventas previsto del
producto: de menor a mayor volumen ser conveniente emplear Flash, EEPROM, OTP y
ROM. Los dos primeros tipos han sido pensados y diseados para ser utilizados en etapas
de desarrollo o en pequeas series, para una produccin en masa a pequea escala es
preferible utilizar el tipo OTP (que puede programarse como los dos tipos anteriores pero no
se puede borrar y es normalmente ms barato). El ltimo tipo, ROM, necesita ser
programado mediante una mscara por el frabicante de manera que slo es prctico para
cuando se necesiten varios miles de dispositivos idnticos. Tambin debemos tener en
cuenta que no siempre hay versiones con diferentes tipos de memoria para un modelo de
microcontrolador en particular.
En cuanto a la cantidad de memoria necesaria puede ser necesario realizar una versin
preliminar de la aplicacin y a partir de ella hacer una estimacin de cunta memoria voltil y
no voltil es necesaria y si es conveniente disponer de memoria no voltil modificable.
Ancho de palabra: El criterio de diseo debe ser seleccionar el microcontrolador de menor
ancho de palabra que satisfaga los requerimientos de la aplicacin. Los modelos de 4 bits
han desaparecido prcticamente del mercado de manera que utilizar un microcontrolador de
8 bits supone la mejor eleccin si el programa a desarrollar slo controla unas pocas
entradas y salidas y no utiliza clculos complejos ni accede a grandes bases de datos.
Tambin resultan perfectos si el ancho de los datos es de un byte. Los microcontroladores
de 16 y 32 bits, debern utilizarse si se realizan clculos matemticos o cientficos, una
gestin de Entrada/Salida potente o si se necesita un espacio de direccionamiento muy
elevado. Si una aplicacin necesita un microcontrolador con ms de 8 bits, es recomendable
utilizar microcontroladores de 32 bits frente a los de 16 bits dada la poca diferencia de precio
que actualmente existe entre ellos. Si la velocidad no es crtica tambin puede acudirse a la
utilizacin de libreras para manejar los datos de alta precisin, que resulta una alternativa
ms barata y quiz suficiente.
Disponibilidad: Hay pocas cosas ms frustrantes que elegir para el desarrollo de un diseo
un componente electrnico y despus de haberlo terminado comprobar que no est
disponible en las tiendas de electrnica de tu ciudad. No obstante hoy es muy fcil realizar
compras por medio de catlogos por correo o a travs de Internet, incluso pueden solicitarse
componentes directamente al fabricante. El problema est en el nmero de dispositivos que
se deben pedir. El fabricante slo nos atender si se solicitan cantidades realmente grandes,
aparte de los problemas sobre licencias, permisos o aduanas que puedan surgir. La venta
por catlogo mediante correo o por Internet dentro del pas resulta muy interesante apenas
se compre el suficiente material como para amortizar los gastos de transporte. Las compras
desde Espaa (mi caso) con otros paises de la Unin Europea como Alemania, Italia o Reino
Unido no representan ningn problema. Ms problemtico resulta comprar en Estados
Unidos o en otros paises que estn fuera de la Unin. (Recuerdo los problemas que tuvimos
con la aduana al comprar hace unos aos una placa de desarrollo para el 8051 por correo
en Israel). Teniendo en cuenta todo lo dicho resulta fundamental comprobar si existe un
distribuidor que disponga de los componentes necesarios en su almacen (y en el
encapsulado correcto) antes de comenzar el diseo. Tambin debemos considerar que
cuanto ms popular sea el microcontrolador que elijamos menos problemas vamos a tener
en este aspecto.
Diseo del circuito y de la PCB: La seleccin de un microcontrolador concreto
condicionar el diseo del circuito de manera que debe tenerse en cuenta que quiz usar un
microcontrolador barato encarezca el resto de componentes del diseo. Tampoco debemos
olvidarnos del encapsulado, podramos elegir un determinado modelo de microcontrolador y
luego encontrarnos que en lugar de venir con el tradicional encapsulado DIL slo est
disponible en encapsulados PLCC o PGA, si bien siempre podremos utilizar un zcalo
adecuado. Tampoco se podra trabajar manualmente con encapsulados BGA.
Afortunadamente, de momento, estos problemas se dn slo con los ltimos modelos de
microcontroladores con muchas patillas.
En cuanto al diseo de la placa de circuito impreso (PCB) a no ser que el esquema sea
simple o se afine mucho en el mismo ser necesario el uso de puentes (su uso est mal
visto) o de placas de c.i. de doble cara. Si se utilizan componentes SMD conviene saber que
la primera generacin de componentes SMD tiene una separacin de terminales de 1,27
milmetros que todava pueden soldarse manualmente con paciencia y una punta fina pero
los ltimos circuitos SMD tienen una separacin de 0,64 milmetros paro lo cual es necesario
utilizar mquinas de soldadura.
Fabricantes y modelos de microcontroladores
A continuacin se muestra una relacin de algunos fabricantes y modelos de microcontroladores
incluyendo su direccin en Internet, si es CISC o RISC, el nmero de bits del bus de datos y el
ncleo del que deriva (8051, ARM, etc) as como si est disponible un IDE gratuito:
FABRICANTE
FAMILIA
ARQUITECTURA
IDE
ADUC8xx
ADUC7xx
AT89xxx
prog.
independientes
TS87xxx
CISC 8 bits
prog.
independientes
AVR
RISC 8 bits
AVR studio
AT91xxx
RISC 16 bits
ARM7/9
EP73xxx
EP93xxx
C8051F
HC08
Code Warrior
HC11
HC12
CISC 16 bits
HCS12
CISC 16 bits
Code Warrior
HC16
CISC 16 bits
Atmel www.atmel.com
Fujitsu www.fujitsu.com
Infineon www.infineon.com
Intel www.intel.com
Microchip www.microchip.com
NS (NATIONAL SEMICONDUCTOR)
www.national.com
56800
CISC 16 bits
68K
CISC 32 bits
68000
ColdFire
CISC 32 bits
MAC7100
F2MC-8
CISC 8 bits
F2MC-16
CISC 16 bits
FR
RISC 32 bits
C5xxx
C8xxx
C16xxx
CISC 16 bits
XC16xxx
CISC 16 bits
TCxxx
CISC 32 bits
MCS251
MCS96/296
CISC 16 bits
DS80Cxxx
DS83Cxxx
DS89Cxxx
MAXQ
RISC 16 bits
PIC
RISC 8 bits
10,12,14,16,17,18
MPLAB
dsPIC
RISC 16 bits
MPLAB
COP8xxx
CISC 8 bits
Webench
CR16Cxxx
CISC 16 bits
CP3000
RISC 16 bits
P8xxx
CISC 16 bits
Rabbit Semiconductor
www.rabbitsemiconductor.com
Rabbit2000
CISC 8 bits
Rabbit3000
CISC 8 bits
Renesas www.renesas.com
740
CISC 8 bits
H8
CISC 16 bits
HEW
H8S
CISC 16 bits
HEW
M16C
CISC 16 bits
7700
CISC 16 bits
ST (SGS-THOMSON) www.stm.com
Toshiba chips.toshiba.com
Ubicom (Scenix) www.ubicom.com
Zilog www.zilog.com
H8SX
CISC 32 bits
Super H
CISC 32 bits
HEW
ST5
CISC 8 bits
Visual FIVE
ST6
CISC 8 bits
ST7
CISC 8 bits
STVD 7
ST9
CISC 8 bits
STVD 9
ST9
CISC 16 bits
STVD 9
ST10
CISC 16 bits
ARM7
MSC12xxx
MSP430
CISC 16 bits
Eclipse
TMS470
870
CISC 8 bits
900/900H
CISC 16 bits
900/900H
CISC 32 bits
SXxx
RISC 8 bits
Z8xxx
Z8Encore!
eZ80Aclaim
Microcontroladores
2.17
Facilidad de uso.
Gran cantidad de informacin disponible en libros, revistas e Internet.
Herramientas de desarrollo muy asequibles.
Bajo precio y fcil disponibilidad.
En muchos casos la eleccin de una versin adecuada de PIC es la mejor solucin para resolver
un problema. Otras familias de microcontroladores son ms eficaces en aplicaciones concretas,
especialmente si predomina una caracterstica especial.
Dentro de los PIC, quiz el modelo con mayor disponibilidad (en el ao 2005) para utilizarlo en
montajes y prcticas y del que existe mayor informacin es el PIC16F84A. Si bien es cierto que hoy
puede sustituirse por otros modelos con mas prestaciones (recursos por hardware como puertos
serie RS232 o salidas PWM) siendo incluso ms baratos (como el PIC....) no por ello deja de ser
ideal para comenzar:
Microcontroladores
2.18
Oscilador RC
C1 de 20pF como
mnimo
5K R1 100K
Resea histrica sobre los PIC
En 1965, la empresa GI cre una divisin de microelectrnica, GI Microelectronics Divisin. En
1975 dise un chip destinado a controlar E/S: el PIC (Peripheral Interface Controller) con una
arquitectura en la que se basan los modelos actuales. GI Microelectronics Divisin se convirti en
la empresa subsidiaria GI Microelectronics Inc. y en 1985 en una empresa independiente, la
Arizona Microchip Technology.
Microchip cuenta con factoras principal en Chandler y Tempe, Arizona. Tambin cuenta con
centros de ensamblaje y ensayos en Taiwan y Tailandia. Para tener una idea de su alta produccin,
hay que tener en cuenta que produce millnes de unidades por semana.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores PIC
3.2
Prcticamente todos los PIC se caracterizan por poseer unos mismos recursos mnimos.
Modelos de arquitectura cerrada y de arquitectura abierta.
Diversidad de modelos de microcontroladores.
Amplio margen de alimentacin y corrientes de salida elevadas.
Herramientas de soporte potentes y econmicas.
Microcontroladores PIC
3.3
Versin OTP . ("One Time Programmable") "Programable una sola vez". Slo se puede
grabar una vez por el usuario sin la posibilidad de borrar lo que se graba. Resulta mucho
ms econmica en la implementacin de prototipos y pequeas series.
Versin QTP. Es el propio fabricante el que se encarga de grabar el cdigo en todos los
chips que configuran pedidos medianos y grandes.
Versin SQTP. El fabricante solo graba unas pocas posiciones de cdigo para labores de
identificacin, numero de serie, palabra clave, checksum, etc.
Los modelos con memoria OTP slo pueden ser grabados una vez por el usuario.
Puesto que los datos y operandos que manejan las instrucciones son de 8 bits, la longitud de las
palabras de la memoria de datos tiene ese tamao.
2 Ciclos
Bsqueda
1
1 Ciclo
2 Ciclos
1 Ciclo
Ejecuta 1
Bsqueda
2
Ejecuta 2
Bsqueda
3
4. MOVLW
03h
Ejecuta 3
Bsqueda
4
NOP
Bs 1 SUB Eje 1 SUB
Microcontroladores PIC
3.4
Microcontroladores PIC
3.5
7. Prcticamente todos los PIC se caracterizan por poseer unos mismos recursos mnimos:
Sistema POR ( POWER ON RESET).
Todos los PIC tienen la facultad de generar una autoreinicializacin o
autoreset al conectarles la alimentacin.
Perro guardin, (Watchdog)
Existe un temporizador que produce un reset automticamente si no es
recargado antes de que pase un tiempo prefijado. As se evita que el
sistema se quede "colgado" puesto que dada esa situacin el programa no
recargara dicho temporizador y se generara un reset.
Cdigo de proteccin.
Cuando se procede a realizar la grabacin del programa, puede protegerse
para evitar su lectura. Tambin disponen de posiciones reservadas para
registrar nmeros de serie, cdigos de identificacin, prueba, etc.
Modo de reposo (bajo consumo o SLEEP).
Ejecutando una instruccin (SLEEP), el CPU y el oscilador principal se
detienen y se reduce notablemente el consumo.
Modo de reposo (bajo consumo o SLEEP).
8. Modelos de arquitectura cerrada y de arquitectura abierta.
Entre los fabricantes de microcontroladores hay dos tendencias para resolver las demandas de
los usuarios:
1. Microcontroladores de arquitectura cerrada.
Cada modelo se construye con una determinada CPU, cierta capacidad de memoria
de datos, cierto tipo y capacidad de memoria de instrucciones, un nmero de E/S y un
Microcontroladores PIC
3.6
por una interrupcin 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
instruccin RETURN, RETLW o RETFIE (vuelta del programa de atencin a una subrutina o
interrupcin).
No se dispone de ningn flag (identificador o bandera) que indique un desbordamiento de la
Pila.
Microcontroladores PIC
3.7
Microcontroladores PIC
3.8
Tipos de PIC
Para resolver aplicaciones sencillas se precisan pocos recursos; en cambio, las aplicaciones
grandes requieren numerosos y potentes. Siguiendo esta filosofa, Microchip construye diversos
modelos de microcontroladores orientados a cubrir, las necesidades de cada proyecto. As, hay
disponibles microcontroladores sencillos y baratos para atender las aplicaciones simples y otros
complejos y ms costosos para las de mucha envergadura.
La mayora de los sistemas de control incrustados requieren CPU, memoria de datos, memoria
de instrucciones, lneas de E/S, y diversas funciones auxiliares como temporizadores,
comunicacin serie y otras. La capacidad y el tipo de las memorias, el nmero de lneas de E/S y el
de temporizadores, as como circuitos auxiliares, son parmetros que dependen exclusivamente de
la aplicacin y varan mucho de una situacin a otra. Quizs se pueda considerar la decisin ms
importante del proyecto la eleccin del modelo de microcontrolador. Para adaptarse de forma
ptima a las necesidades de los usuarios, Microchip ofrece diversos tipos de microcontroladores de
8 bits.
La mejor manera de mantenerse informado sobre los PIC es mediante la pgina del fabricante,
www.microchip.com, en ella se mantiene la informacin actualizada de todos los dispositivos en
produccin, se pueden buscar segn varios criterios y se ofrecen en formtato PDF (en ingls y
chino) las hojas de caractersticas de los dispositivos. Aproximadamente, cada seis meses aparece
un dispositivo nuevo.
Pueden tomarse diversas maneras de clasificar los PIC y ninguna puede considerarse definitiva,
debido a la rpida evolucin de estos dispositivos. A continuacin se presentan distintas formas de
clasificar a los PIC, segn diversos aspectos:
Familia de productos
PIC10
PIC12
PIC14
PIC16
PIC17
PIC18
Tipo de memoria
FLASH
OTP
ROM
Nmero de patillas E/S
4 - 17 patillas
18 - 27 patillas
28 - 44 patillas
45 - 80 patillas
Tamao de memoria (bytes)
0.5K - 1K
2K - 4K
8K - 16K
24K -32K
48K - 64K
96K - 128K
Microcontroladores PIC
3.9
Aunque slo tienen 8 patillas, pueden destinar hasta 6 como lneas de E/S para los perifricos al
disponer de un oscilador interno R-C, lo cual es una de su principales caractersticas.
Los modelos 12C5xx tienen instrucciones de 12 bits; mientras que los 12C6xx tienen
instrucciones de 14 bits. Los modelos 12F6xx poseen memoria Flash para el programa y EEPROM
para los datos.
Se trata de una serie recursos limitados, pero con una buena relacin coste/prestaciones.
Disponen de 18, 20 o 28 patillas y pueden alimentarse a partir de una tensin de 2,5 V, lo que les
hace ideales en las aplicaciones que funcionan con pilas teniendo en cuenta su bajo consumo
(menos de 2 mA a 5 V y 4 MHz). Tienen un repertorio de 33 instrucciones cuyo formato consta de
12 bits. No admiten ningn tipo de interrupcin y la Pila slo dispone de dos niveles. Poseen
memoria de programa tipo OTP (16C5X) o ROM (16CR5X).
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores PIC
3.10
En esta gama sus componentes aaden nuevas prestaciones a las que posean los de gamas
inferiores, hacindoles ms adecuados en las aplicaciones complejas. Admiten interrupciones,
poseen comparadores de magnitudes analgicas, convertidores A/D, puertos serie y diversos
temporizadores.
El repertorio de instrucciones es de 35, de 14 bits cada una y compatible con gamas inferiores.
Sus distintos modelos contienen todos los recursos que se precisan en las aplicaciones de
microcontroladores de 8 bits. Tambin dispone de interrupciones y una Pila de 8 niveles que
permite el anidamiento de subrutinas.
El temporizador TMR1 que hay en algunos PIC de esta gama tiene un circuito oscilador que
puede trabajar asncronamente y que puede incrementarse aunque el microcontrolador se halle en
el modo de reposo (sleep), posibilitando la implementacin de un reloj en tiempo real. Las lneas de
E/S presentan una carga pull-up activada por software.
PIC14000
Dentro de esta gama se encuentra el PIC14000, que soporta el diseo de controladores
inteligentes para cargadores de bateras, pilas pequeas, fuentes de alimentacin ininterrumpibles
y cualquier sistema de adquisicin y procesamiento de seales que requiera gestin de la energa
de alimentacin. Los PIC14000 admiten cualquier tecnologa de las bateras como Li-Ion, NiMH,
NiCd, Ph y Zinc.
PIC17CXXX con instrucciones de 16 bits
Se alcanzan las 58 instrucciones de 16 bits en el repertorio y sus modelos disponen de un
sistema de gestin de interrupciones vectorizadas muy potente. Tambin incluyen variados
controladores de perifricos, puertas de comunicacin serie y paralelo con elementos externos, un
multiplicador hardware de gran velocidad y mayores capacidades de memoria, que alcanza los 8 k
palabras en la memoria de instrucciones y 454 bytes en la memoria de datos.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Microcontroladores PIC
3.11
Status
PIC10F
200
Budget Memo
Byt
ary
ry
es
Price
Type
In
$0.55
Producti
on
Stand
ard
Flash
Wor
ds
384 256
EEPR
OM
RA
Data
M
Memor
y
I/O
AD
Pin
C
s
Max
Timer .
Compara
s/WD Spe
tors
T
ed
MHz
16
1-8bit 20
016bit
1-
WDT
PIC10F
202
In
Producti $0.65
on
Stand
ard
Flash
PIC10F
204
In
Producti $0.65
on
Stand
ard
Flash
PIC10F
206
In
Producti $0.74
on
Stand
ard
Flash
768 512
384 256
768 512
24
16
24
1-8bit
016bit
1WDT
1-8bit
016bit
1WDT
1-8bit
016bit
1WDT
Familia PIC12
18 dispositivos (noviembre 2004)
La informacin de los precios est recogida de la pgina web de Microchip (noviembre de 2004).
Est expresada en dlares de Estados Unidos, y slo pretende dar una idea del coste de los
dispositivos (Budgetary Price=Precio Presupuestario) y no reflejar el precio final que depender del
representante local o distribuidor de Microchip y del volumen de compra y los descuentos a aplicar.
Me
EEP
Budg mor By
ROM R
Statu
Wor
etary y
te
Data A
s
ds
Price Typ s
Mem M
e
ory
PIC12C508
PIC12C508A
In
Prod
uctio
n
In
Prod
uctio
n
$1.4
4
$0.9
6
OT
P
OT
P
76 512
0
8 x12
76 512
0
8 x12
I/
O A
P D
in C
s
Tim
Comp
U
OpA ers
arator
S
mps /W
s
B
DT
0/
10
25 6 - 0
Bi
t
25 6 0
Ma
x.
Sp
ee
d
M
Hz
No
08bit
1N
16
on 4
bit
e
1W
DT
No
18bit
0N
16
on 4
bit
e
1W
DT
PIC12C509
PIC12C509A
PIC12C671
PIC12C672
PIC12CE518
PIC12CE519
In
Prod
uctio
n
In
Prod
uctio
n
In
Prod
uctio
n
In
Prod
uctio
n
In
Prod
uctio
n
In
Prod
uctio
n
$1.6
0
$0.9
9
$1.7
5
$1.7
5
$1.1
7
$1.2
8
OT
P
OT
P
OT
P
OT
P
OT
P
OT
P
102
15
4x1 0
36
2
102
15
4x1 0
36
2
102
17
4x1 0
92
4
204
35
8x1 0
84
4
76 512
16
8 x12
102
15
4x1 16
36
2
0/
10
41 6 - 0
Bi
t
41 6 0
4/
12
86
0
8
Bi
t
4/
12
86
0
8
Bi
t
0/
10
25 6 - 0
Bi
t
41 6 0
No
08bit
1N
16
on 4
bit
e
1W
DT
No
18bit
0N
16
on 4
bit
e
1W
DT
No
08bit
1N
16
on 10
bit
e
1W
DT
No
18bit
0N
16
on 10
bit
e
1W
DT
No
08bit
1N
16
on 4
bit
e
1W
DT
No
08bit
1N
16
on 4
bit
e
1W
DT
PIC12CE673
PIC12CE674
PIC12CR509A
PIC12F508
PIC12F509
In
Prod
uctio
n
In
Prod
uctio
n
In
Prod
uctio
n
In
Prod
uctio
n
In
Prod
uctio
n
$2.0
5
$2.0
5
OT
P
OT
P
Call
for
RO
pricin M
g
$0.8
5
$0.8
7
102
17
4x1 16
92
4
204
35
8x1 16
84
4
102
15
4x1 0
36
2
Sta
nda
76
rd
512 0
8
Flas
h
Sta
nda
15 102
rd
0
36 4
Flas
h
4/
10
12
6 - 0
8
Bi
t
4/
12
86
0
8
Bi
t
41 6 0
25 6 0
41 6 0
No
08bit
1N
16
on 10
bit
e
1W
DT
No
18bit
0N
16
on 10
bit
e
1W
DT
No
18bit
0N
16
on 4
bit
e
1W
DT
No
18bit
0N
16
on
bit
e
1W
DT
No
18bit
0N
16
on
bit
e
1W
DT
Timers/ USB
WDT
4.3
Ma
x.
Sp
ee
d
ory
P
I
C
1 Future
2 Produc
F t
5
1
0
Call
for
pricin
g
Stan
dard 153 10
Flas 6
24
h
P
I
C
Stan
10
1 In
dard 179 24
2 Produc $1.02
Flas 2
x1
F tion
h
4
6
2
9
P
I
C
Stan
1 In
dard 179 10
2 Produc $1.20
Flas 2
24
F tion
h
6
3
5
P
I
C
Stan
10
1 In
dard 179 24
2 Produc $1.26
Flas 2
x1
F tion
h
4
6
7
5
P
I
C
Stan
20
1 In
dard 358 48
2 Produc $1.47
Flas 4
x1
F tion
h
4
6
8
3
n
s
41 6 0
M
Hz
No
1-8bit
0-16bit
1-WDT
None
No
1-8bit
1-16bit
1-WDT
None
None
None
128
64 6 0
128
0/
10
64 6
1
Bit
No
1-8bit
1-16bit
1-WDT
128
4/
10
64 6
1
Bit
No
1-8bit
1-16bit
1-WDT
256
4/
12
10
6
1
8
Bit
No
20
20
Familia PIC14
1 dispositivo (noviembre 2004)
La informacin de los precios est recogida de la pgina web de Microchip (noviembre de 2004).
Est expresada en dlares de Estados Unidos, y slo pretende dar una idea del coste de los
dispositivos (Budgetary Price=Precio Presupuestario) y no reflejar el precio final que depender del
representante local o distribuidor de Microchip y del volumen de compra y los descuentos a aplicar.
Status
Budgetar Memor
y Price
y Type
In
PIC1400
Productio $7.21
0
n
OTP
Byte
s
Words
EEPRO
M Data
Memory
I/O
RAM Pin
s
ADC
7168
4096x1
4
192
0/8
2
SLAC
20
Comparator OpAm
s
s
No
Familia PIC16
133 dispositivos (noviembre 2004)
La informacin de los precios est recogida de la pgina web de Microchip (noviembre de 2004).
Est expresada en dlares de Estados Unidos, y slo pretende dar una idea del coste de los
dispositivos (Budgetary Price=Precio Presupuestario) y no reflejar el precio final que depender del
representante local o distribuidor de Microchip y del volumen de compra y los descuentos a aplicar.
Status
P
I
C
1 In
6 Producti
C on
4
3
2
P
I
C
1 In
6 Producti
C on
4
3
3
P In
I Producti
C on
1
Words
EEPRO
M Data
Memory
I/O
RAM Pin
s
ADC
2048x1
4
128
12
Budgetar Memor
y Price
y Type
Byte
s
$2.76
OTP
3584
$2.59
OTP
2048x1
3584
4
$1.25
OTP
1536 1024x1
2
128
4/8Bit
72
12
No
1-8bit
0-16b
1-WD
No
1-8bit
0-16b
1-WD
No
1-8bit
0-16b
1-WD
6
C
5
0
5
P
I
C
1 End of
6 Life
C
5
2
Call for
pricing
OTP
No
0-8bit
0-16b
0-WD
P
I
C
In
1
Producti
6
on
C
5
4
$2.48
OTP
768
512x12
25
12
No
0-8bit
1-16b
1-WD
P
I
C
1 In
6 Producti
C on
5
4
A
$2.48
OTP
768
512x12
25
12
No
0-8bit
1-16b
1-WD
P
I
C
1
End of
6
Life
C
5
4
B
Call for
pricing
OTP
No
P
I
C
1 In
6 Producti
C on
5
4
C
$1.40
OTP
768
512x12
25
12
No
1-8bit
0-16b
0-WD
P
I
C
In
1
Producti
6
on
C
5
5
$3.05
OTP
768
512x12
24
20
No
0-8bit
1-16b
1-WD
P
I
C
1 In
6 Producti
C on
5
5
4
$2.50
OTP
896
512x14
80
13
No
1-8bit
0-16b
1-WD
P
I
C
1 In
6 Producti
C on
5
5
8
$3.27
OTP
3584
2048x1
4
128
13
No
1-8bit
0-16b
1-WD
No
1-8bit
0-16b
1-WD
P
I
C
1 In
6 Producti
C on
5
5
A
$1.72
OTP
768
512x12
24
Status
PIC16C56
PIC16C56A In
$1.58
Productio
4.6
Byte
s
Words
EEPRO
M Data
Memory
I/O
RAM Pin
s
ADC
Comparator OpA
s
s
OTP
1536
1024x1
2
25
12
No
OTP
1536 1024x1
2
25
12
No
Budgetar Memor
y Price
y Type
In
Productio $3.17
n
20
n
In
Productio $3.88
n
OTP
3072
2048x1
2
72
20
No
In
PIC16C57C Productio $1.99
n
OTP
3072
2048x1
2
72
20
No
OTP
No
OTP
3072
73
12
No
OTP
No
PIC16C57
PIC16C58A
End of
Life
Call for
pricing
In
PIC16C58B Productio $1.67
n
Call for
pricing
2048x1
2
PIC16C62
End of
Life
PIC16C620
In
Productio $3.06
n
OTP
896
512x14
80
13
0/10
2
-Bit
No
PIC16C620
A
In
Productio $1.37
n
OTP
896
512x14
96
13
No
PIC16C621
In
Productio $3.45
n
OTP
1792
1024x1
4
80
13
No
PIC16C621
A
In
Productio $1.54
n
OTP
1792
1024x1
4
96
13
No
PIC16C622
In
Productio $3.96
n
OTP
3584
2048x1
4
128
13
No
PIC16C622
A
In
Productio $1.73
n
OTP
3584
2048x1
4
128
13
No
Bud
geta
ry
Pric
Me By Wo E
mor te rds E
y
s
P
Typ
R
RA
M
4.7
M
ax
.
S
PIC16
C62A
PIC16
C62B
PIC16
C63
PIC16
C63A
PIC16
C64
20
In
$4.3 OT 35 48
Produ
0
P
84 x1
ction
4
20
In
$2.6 OT 35 48
Produ
8
P
84 x1
ction
4
40
In
$5.1 OT 71 96
Produ
7
P
68 x1
ction
4
40
In
$3.2 OT 71 96
Produ
7
P
68 x1
ction
4
End
Call OT 0
of Life for
P
prici
ng
O
M
D
at
a
M
e
m
or
y
pe
ed
M
H
z
128 22 0
128 22 0
192 22 0
No
18bit
216bi No
t
ne
1WD
T
USART
I2C
Compati
ble/SPI
Serial
Port
20
No
28bit
116bi No
t
ne
1WD
T
I2C
Compati
ble/SPI
20
No
18bit
216bi No
t
ne
1WD
T
USART
I2C
Compati
ble/SPI
Serial
Port
20
18bit
216bi No
t
ne
1WD
T
USART
I2C
Compati
ble/SPI
20
0No
8bit ne
016bi
t
0WD
USART
I2C
Compati
ble/SPI
Serial
Port
192 22 0
No
No
PIC16
C642
PIC16
C64A
PIC16
C65
PIC16
C65A
PIC16
C65B
PIC16
C66
40
In
$3.8 OT 71 96
Produ
6
P
68 x1
ction
4
20
In
$4.8 OT 35 48
Produ
2
P
84 x1
ction
4
Call
End
for
OT
0
of Life prici P
ng
40
In
$6.4 OT 71 96
Produ
4
P
68 x1
ction
4
40
In
$3.6 OT 71 96
Produ
6
P
68 x1
ction
4
In
$4.7 OT 14 81
Produ 6
P
33 92
ction
6 x1
4
176 22 0
128 33 0
192 33 0
No
08bit
116bi No
t
ne
1WD
T
No
18bit
216bi No
t
ne
1WD
T
USART
I2C
Compati
ble/SPI
Serial
Port
No
08bit
016bi No
t
ne
0WD
T
USART
I2C
Compati
ble/SPI
Serial
Port
No
18bit
216bi No
t
ne
1WD
T
USART
I2C
Compati
ble/SPI
Serial
Port
20
28bit
116bi No
t
ne
1WD
T
USART
I2C
Compati
ble/SPI
20
192 33 0
No
368 22 0
No
2No
8bit ne
116bi
t
1WD
20
USART
I2C
Compati
ble/SPI
20
20
PIC16
C662
40
In
$4.2 OT 71 96
Produ
3
P
68 x1
ction
4
176 33 0
No
08bit
116bi No
t
ne
1WD
T
20
Statu
s
PIC16
C67
PIC16
C71
PIC16
C710
PIC16
C711
M
e
Budg m
Byt
etary or
es
Price y
Ty
pe
In
O
Produ $5.20 T
ction
P
In
O
Produ $3.71 T
ction
P
EE
PR
OM
Wo Dat RA
rds a
M
Me
mo
ry
81
143 92
36 x1
4
10
179 24
2
x1
4
In
O
Produ $2.03 T
ction
P
51
896 2x
14
In
$2.22 O
Produ
T
ction
P
179 10
2
24
x1
I/
A
O
D
Pi
C
ns
368 33 0
36
36
68
Familia de prod
O
Co
p
mpa
A
rato
m
rs
ps
4/
10
13 - 0
Bi
t
4/
813
0
Bi
t
13 4/ 0
10
-
Tim
Max.
ers/ US Interf
Speed
WD B
ace
MHz
T
N
o
2USA
8bit
RT
12
16bi No I C
20
t
ne Com
patib
1le/S
WD
PI
T
N
o
08bit
116bi No
t
ne
1WD
T
20
N
o
08bit
116bi No
t
ne
1WD
T
20
N
o
08bit
1-
No
ne
20
Bi
t
PIC16
C712
PIC16
C715
PIC16
C716
PIC16
C717
PIC16
C72
PIC16
C72A
In
O
Produ $1.79 T
ction
P
In
O
Produ $2.49 T
ction
P
In
O
Produ $2.00 T
ction
P
In
O
Produ $2.06 T
ction
P
10
179 24
2
x1
4
20
358 48
4
x1
4
20
358 48
4
x1
4
20
358 48
4
x1
4
In
O
Produ $4.59 T
ction
P
20
358 48
4
x1
4
In
$3.18 O
Produ
T
ction
P
358 20
4
48
x1
16bi
t
1WD
T
4/
8128 13
0
Bi
t
4/
10
128 13 - 0
Bi
t
4/
8128 13
0
Bi
t
6/
10
256 16 - 0
Bi
t
5/
10
128 22 - 0
Bi
t
128 22 5/ 0
8Bi
N
o
18bit
216bi No
t
ne
1WD
T
20
N
o
08bit
116bi No
t
ne
1WD
T
20
N
o
18bit
216bi No
t
ne
1WD
T
20
N
o
28bit
MI2C
116bi No Com
20
t
ne patib
le/S
1PI
WD
T
N
o
1USA
8bit
RT
22
16bi No I C
20
t
ne Com
patib
1le/S
WD
PI
T
N
o
28bit
1-
No I2C 20
ne Com
patib
PIC16
C73
PIC16
C73A
PIC16
C73B
PIC16
C74
Call
O
End
for
T
of Life pricin
P
g
In
O
Produ $5.65 T
ction
P
In
O
Produ $4.10 T
ction
P
Call
O
End
for
T
of Life pricin
P
g
40
716 96
8
x1
4
40
716 96
8
x1
4
16bi
t
1WD
T
N
o
0USA
8bit
RT
02
16bi No I C
t
ne Com
patib
0le/S
WD
PI
T
N
o
1USA
8bit
RT
22
16bi No I C
20
t
ne Com
patib
1le/S
WD
PI
T
N
o
2USA
8bit
RT
12
16bi No I C
20
t
ne Com
patib
1le/S
WD
PI
T
N
o
0USA
8bit
RT
02
16bi No I C
t
ne Com
patib
0le/S
WD
PI
T
5/
10
192 22 - 0
Bi
t
5/
8192 22
0
Bi
t
0/
10
- 0
Bi
t
Status
PIC16C74
5
Budgetar Memor
y Price
y Type
In
$2.86
Productio
OTP
Bytes Words
1433
6
8192x1
4
le/S
PI
4.9
EEP
ROM
Data RAM
Mem
ory
Comp Op
I/O AD
Timers/
arator Am
Pins C
WDT
s
ps
22
256
5/8 0
-Bit
No
2-8bit
1-16bit
1-WDT
PIC16C74
A
In
Productio $6.84
n
33
8/1
0- 0
Bit
No
1-8bit
2-16bit
1-WDT
OTP
PIC16C74
B
In
Productio $4.99
n
33
8/8
0
-Bit
No
2-8bit
1-16bit
1-WDT
368
22
5/1
0- 0
Bit
No
1-8bit
2-16bit
1-WDT
256
33
8/8
0
-Bit
No
2-8bit
1-16bit
1-WDT
368
33
8/1
0- 0
Bit
No
1-8bit
2-16bit
1-WDT
256
16
6/1
2- 0
Bit
No
1-8bit
2-16bit
1-WDT
4096x1
4
256
16
6/1
2- 0
Bit
No
2-8bit
1-16bit
1-WDT
7168
4096x1
4
256
22
6/1
2- 0
Bit
No
2-8bit
1-16bit
1-WDT
OTP
7168
4096x1
4
256
33
10/
12- 0
Bit
No
1-8bit
2-16bit
1-WDT
OTP
1792
1024x1
4
128
16
8/8
2
-Bit
2-8bit
Yes 1-16bit
1-WDT
OTP
3584
2048x1
4
1-8bit
Yes 1-16bit
1-WDT
OTP
OTP
7168
7168
4096x1
4
192
OTP
7168
4096x1
4
192
PIC16C76
In
Productio $5.20
n
OTP
1433
6
8192x1
4
PIC16C76
5
In
Productio $3.42
n
OTP
1433
6
8192x1
4
PIC16C77
In
Productio $5.58
n
OTP
1433
6
8192x1
4
PIC16C77
0
In
Productio $2.03
n
OTP
3584
2048x1
4
PIC16C77
1
In
Productio $2.22
n
OTP
7168
PIC16C77
3
In
Productio $4.10
n
OTP
PIC16C77
4
In
Productio $4.97
n
PIC16C78
1
In
Productio $2.92
n
PIC16C78
2
In
Productio $3.15
n
PIC16C84
End of
Life
PIC16C92
3
Call for
pricing
In
$4.21
Productio
n
4096x1
4
128
16
8/8
2
-Bit
No
176
52
No
0-8bit
0-16bit
0-WDT
1-8bit
2-16bit
1-WDT
Please
consider
device:
PIC16C9
25
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Statu
s
PIC16C
924
PIC16C
925
PIC16C
926
PIC16C
E623
Familia de produ
EE
PR
Me
O
Budg mo
W M
A
By
RA I/O
etary ry
ord Da
D
tes
M Pins
Price Typ
s
ta
C
e
Me
mo
ry
In
Produ
ction
Pleas
40
e
OT 71 96
consi $4.73
0
P
68 x1
der
4
devic
e:
PIC16
C925
40
In
OT 71 96
Produ $4.41
0
P
68 x1
ction
4
81
In
14
OT
92
Produ $4.73
33
0
P
x1
ction
6
4
17
52
6
17
52
6
33
52
6
In
$1.96 OT 89 51 12 96 13
Produ
P
6 2x 8
ction
14
Co
m
pa
rat
or
s
O
p
A
m
p
s
Tim
Inte Max.
ers/ US
rfac Speed
WD B
e
MHz
T
5/
10
- 0
Bi
t
18bit
I2C
2Co
N 16bi No mp
8
o t
ne atib
1le/
WD
SPI
T
5/
10
- 0
Bi
t
28bit
I2C
1Co
N 16bi No mp
20
o t
ne atib
1le/
WD
SPI
T
5/
10
- 0
Bi
t
28bit
I2C
1Co
N 16bi No mp
20
o t
ne atib
1le/
WD
SPI
T
N 1No
o 8bit ne
016bi
30
t
1WD
T
PIC16C
E624
PIC16C
E625
PIC16C
R54B
PIC16C
R56A
PIC16C
R57B
PIC16C
R58A
10
In
OT 17 24 12
Produ $2.19
96 13
P
92 x1 8
ction
4
20
In
OT 35 48 12 12
Produ $2.49
13
P
84 x1 8
8
ction
4
Call
End
for
RO
0
of Life pricin M
g
Call
In
for
RO 15
Produ
pricin M 36
ction
g
Call
End
for
RO
0
of Life pricin M
g
End
Call
RO 0
of Life for
M
pricin
g
25 12
18bit
0N 16bi No
o t
ne
1WD
T
30
18bit
0N 16bi No
o t
ne
1WD
T
30
08bit
0N 16bi No
o t
ne
0WD
T
18bit
0N 16bi No
o t
ne
1WD
T
08bit
0N 16bi No
o t
ne
0WD
T
N 0No
o 8bit ne
016bi
20
t
0WD
T
PIC16C
R58B
PIC16C
R62
PIC16C
R620A
Call
In
for
RO 30
Produ
pricin M 72
ction
g
Call
End
for
RO
0
of Life pricin M
g
Call
In
for
RO 89
Produ
pricin M 6
ction
g
73 12
96 13
18bit
0N 16bi No
o t
ne
1WD
T
US
AR
T
0I2C
8bit
Co
0N 16bi No mp
o t
ne atib
le/
0SPI
WD
Ser
T
ial
Por
t
18bit
0N 16bi No
o t
ne
1WD
T
Stat
us
PIC16CR In
63
Prod
uctio
n
20
20
4.11
Bud
geta Mem
Byt Word
ry
ory
es s
Pric Type
e
EEPR
I/
OM
O A
RA
Data
Pi D
M
Memo
n C
ry
s
Co
m
pa
rat
or
s
O
p
Time
Max.
A
US Interfa
rs/W
Speed
m
B
ce
DT
MHz
p
s
Call ROM 71
for
68
prici
ng
N 2No USAR 20
o 8bit ne T
1I2C
16bit
Comp
1atible/
WDT
19
2
2 0
2
SPI
Serial
Port
End
PIC16CR
of
64
Life
Call
for
ROM 0
prici
ng
In
Call
PIC16CR Prod for
71
ROM
65
uctio prici
68
n
ng
In
PIC16CR Prod
72
uctio
n
Call
for
35
ROM
prici
84
ng
In
PIC16CR Prod
83
uctio
n
Call
for
89
ROM
prici
6
ng
In
Call
PIC16CR Prod for
17
ROM
84
uctio prici
92
n
ng
In
PIC16F5 Prod $1.0
05
uctio 5
n
Stan
dard 15
Flas 36
h
PIC16F5
06
InfoData
sheets
Stan 15
dard 36
Flas
h
Futu
re
Prod
uct
Call
for
prici
ng
64
64
19
2
12
8
36
68
1024 0
72
1024 0
72
USAR
T
08bit
I2C
N 0No Comp
o 16bit ne atible/
0SPI
WDT
Serial
Port
USAR
T
28bit
I2C
N 1No Comp
20
o 16bit ne atible/
1SPI
WDT
Serial
Port
5/
2
8- 0
2
Bit
28bit
I2C
N 1No Comp
20
o 16bit ne atible/
1SPI
WDT
1
0
3
08bit
N 1No
o 16bit ne
1WDT
10
08bit
N 1No
o 16bit ne
1WDT
10
18bit
N 0No
o 16bit ne
1WDT
0 0
3
0
3
1
0
3
1
0
2
1 0
2
N 1No
o 8bit ne
016bit
1WDT
In
Stan
PIC16F5 Prod $1.2 dard 76
4
uctio 5
Flas 8
n
h
In
Stan
PIC16F5 Prod $1.6 dard 30
7
uctio 0
Flas 72
n
h
PIC16F5
9
InfoData
sheets
Futu
re
Prod
uct
Call
for
prici
ng
In
PIC16F6 Prod $1.4
27
uctio 2
n
Stan
dard 30
Flas 72
h
Stan
dard 17
Flas 92
h
In
Stan
PIC16F6 Prod $1.4 dard 17
27A
uctio 9
Flas 92
n
h
512x
0
12
2048
0
x12
2024 0
1024
128
x14
1024
128
x14
25
72
13
4
22
4
22
4
1
0
2
2
0
0
3
0
2
1
0
6
1
0
6
Status
18bit
N 0No
o 16bit ne
1WDT
20
18bit
N 0No
o 16bit ne
1WDT
20
18bit
N 0No
o 16bit ne
1WDT
18bit
N 2No USAR
20
o 16bit ne T
1WDT
28bit
N 1No AUSA
20
o 16bit ne RT
1WDT
EEPRO
Budge
I/O
Com
Memor
Word M Data
tary
Bytes
RAM Pin ADC para
y Type
s
Memor
Price
s
tors
y
PIC16F628
In
Productio $2.20
n
Standa
2048
rd
3584
x14
Flash
PIC16F628
A
In
Productio $1.61
n
Standa
2048
rd
3584
x14
Flash
128
128
224
224
16
16
4.12
Op
A Timers
USB
mp /WDT
s
1-8bit
Non
No 2-16bit
e
1-WDT
2-8bit
Non
No 1-16bit
e
1-WDT
PIC16F630
In
Productio $1.20
n
Standa
1024
rd
1792
x14
Flash
PIC16F636
In
Productio $1.38
n
Standa
2048
rd
3584
x14
Flash
256
PIC16F648
A
In
Productio $1.83
n
Standa
4096
rd
7168
x14
Flash
256
PIC16F676
In
Productio $1.38
n
Standa
1024
rd
1792
x14
Flash
128
PIC16F684
In
Productio $1.57
n
Standa
2048
rd
3584
x14
Flash
256
PIC16F688
In
Productio $1.87
n
Standa
4096
rd
7168
x14
Flash
256
PIC16F716
In
Productio $1.57
n
Standa
2048
rd
3584
x14
Flash
PIC16F72
In
Productio $2.10
n
Standa
2048
rd
3584
x14
Flash
PIC16F73
In
Productio $3.27
n
Standa
4096
rd
7168
x14
Flash
PIC16F737
In
Productio $3.35
n
Standa
4096
rd
7168
x14
Flash
In
$3.97
Productio
n
PIC16F74
12
0/10
1
-Bit
1-8bit
Non
No 1-16bit
e
1-WDT
128
12
0/10
2
-Bit
1-8bit
Non
No 1-16bit
e
1-WDT
256
16
0/10
2
-Bit
2-8bit
Non
No 1-16bit
e
1-WDT
64
12
8/10
1
-Bit
1-8bit
Non
No 1-16bit
e
1-WDT
128
12
8/10
2
-Bit
2-8bit
Non
No 1-16bit
e
1-WDT
256
12
8/10
2
-Bit
1-8bit
Non
No 1-16bit
e
1-WDT
128
13
4/10
0
-Bit
2-8bit
Non
No 1-16bit
e
1-WDT
128
22
5/8Bit
2-8bit
Non
No 1-16bit
e
1-WDT
22
5/8Bit
2-8bit
Non
No 1-16bit
e
1-WDT
11/1
2
0-Bit
1-8bit
Non
No 2-16bit
e
1-WDT
128
64
192
368
25
192
33
8/8Bit
No 2-8bit Non
1-16bit e
1-WDT
PIC16F747
In
Productio $3.85
n
Standa
4096
rd
7168
x14
Flash
368
36
14/1
2
0-Bit
Bu
S dg
Memo
W
ta eta
Byt
ry
or
tu ry
es
Type
ds
s Pri
ce
E
E
P
R
O
M
D
RA
a
M
t
a
M
e
m
o
r
y
In
P
ro
81
Stand
PIC16 d $4.
143 92
ard
0 368
F76
u 10
36 x1
Flash
ct
4
io
n
In
P
ro
81
Stand
PIC16 d $3.
143 92
ard
0 368
F767 u 89
36 x1
Flash
ct
4
io
n
2-8bit
Non
No 1-16bit
e
1-WDT
Familia de produ
C
I/
o
O
m
AD
P
pa
C
in
rat
s
or
s
O
p
A
m
p
s
Tim
ers/ US
WD B
T
Ma
x.
Sp
Interf
ee
ace
d
M
Hz
2 5/8
0
2 -Bit
18bit
2N 16b No
o it
ne
1WD
T
USA
RT
I2C
Com 20
patibl
e/SP
I
11/
2
10- 2
5
Bit
28bit
1N 16b No
o it
ne
1WD
T
USA
RT
MI2C
Com 20
patibl
e/SP
I
In
P
ro
81
Stand
PIC16 d $4.
143 92
ard
0 368
F77
u 53
36 x1
Flash
ct
4
io
n
In
P
ro
81
Stand
PIC16 d $4.
143 92
ard
0 368
F777 u 27
36 x1
Flash
ct
4
io
n
F
ut
PIC16 ur
F785 e
InfoDa P
tashe ro
ets
d
u
ct
Cal
l
Stand
2
358 20
for ard
5 128
4
48
pric Flash
6
ing
In
P
ro
10
Stand
1
PIC16 d $1.
179 24
ard
2 128
F818 u 71
2
x1
Flash
8
ct
4
io
n
In
P
ro
20
Stand
2
PIC16 d $1.
358 48
ard
5 256
F819 u 95
4
x1
Flash
6
ct
4
io
n
In
P
ro
Stand
PIC16 d $3.
ard
0
F83
u 78
Flash
ct
io
n
51
6
2x
36
4
14
3 8/8
0
3 -Bit
18bit
2N 16b No
o it
ne
1WD
T
USA
RT
MI2C
Com 20
patibl
e/SP
I
14/
3
10- 2
6
Bit
28bit
1N 16b No
o it
ne
1WD
T
USA
RT
MI2C
Com 20
patibl
e/SP
I
12/
1
10- 2
8
Bit
28bit
1Y
16b No
e
it
ne
s
1WD
T
5/1
1
0- 0
6
Bit
28bit
1N 16b No
o it
ne
1WD
T
I2C
Com
patibl 20
e/SP
I
5/1
1
0- 0
6
Bit
18bit
2N 16b No
o it
ne
1WD
T
I2C
Com
patibl 20
e/SP
I
1
0
3
08bit
1N 16b No
o it
ne
1WD
T
10
In
P
ro
Stand
PIC16 d $4.
ard
0
F84
u 39
Flash
ct
io
n
10
24 6
68
x1 4
4
In
P
ro
10
Stand
PIC16 d $3.
179 24 6
ard
68
F84A u 42
2
x1 4
Flash
ct
4
io
n
In
P
ro
40
Stand
2
PIC16 d $2.
716 96
ard
5 368
F87
u 26
8
x1
Flash
6
ct
4
io
n
In
P
ro
20
Stand
PIC16 d $2.
358 48 6
ard
128
F870 u 81
4
x1 4
Flash
ct
4
io
n
In
P
ro
20
Stand
PIC16 d $3.
358 48 6
ard
128
F871 u 08
4
x1 4
Flash
ct
4
io
n
In
P
ro
20
Stand
PIC16 d $2.
358 48 6
ard
128
F872 u 81
4
x1 4
Flash
ct
4
io
n
08bit
1N 16b No
o it
ne
1WD
T
10
18bit
0N 16b No
o it
ne
1WD
T
20
18bit
2N 16b No
o it
ne
1WD
T
AUS
ART
I2C
Com 20
patibl
e/SP
I
5/1
2
0- 0
2
Bit
18bit
2N 16b No
o it
ne
1WD
T
AUS
20
ART
8/1
3
0- 0
3
Bit
18bit
2N 16b No
o it
ne
1WD
T
AUS
20
ART
5/1
2
0- 0
2
Bit
28bit
1N 16b No
o it
ne
1WD
T
MI2C
Com
patibl 20
e/SP
I
1
0
3
1
0
3
1
0
6
EEPR
Budg Mem
OM
R
Statu
Byt Wo
etary ory
Data A
s
es rds
Price Type
Mem M
ory
PIC16
F873
In
Prod
uctio
n
In
PIC16 Prod
F873A uctio
n
PIC16
F874
In
Prod
uctio
n
In
PIC16 Prod
F874A uctio
n
PIC16
F876
$4.3
3
$3.9
8
$4.9
7
$4.3
5
In
$4.9
Prod 0
uctio
n
Pleas
Stan
71
dard
68
Flash
Stan
71
dard
68
Flash
Stan
71
dard
68
Flash
409
6x1 128
4
409
6x1 128
4
409
6x1 128
4
Stan
71
dard
68
Flash
409
6x1 128
4
Stan 14
dard 33
Flash 6
819 256
2x1
4
I/
A
O
D
Pi
C
ns
Comp
OpA
ara
mps
tors
5/
19
10
22
0
2
Bit
5/
19
10
22
2
2
Bit
8/
19
10
33
0
2
Bit
8/
19
10
33
2
2
Bit
36 22 5/ 0
8
10
Bit
Tim
ers/
WD
T
4.14
M
ax
.
S
US Interf
pe
B ace
ed
M
H
z
No
1USA
8bit
RT
216bi No I2C
20
t
ne Com
1patibl
WD
e/SPI
T
No
2AUS
8bit
ART
116bi No MI2C
20
t
ne Com
1patibl
WD
e/SPI
T
No
1USA
8bit
RT
216bi No MI2C
20
t
ne Com
1patibl
WD
e/SPI
T
No
1USA
8bit
RT
216bi No MI2C
20
t
ne Com
1patibl
WD
e/SPI
T
No
2No USA 20
8bit ne RT
1MI2C
16bi
Com
t
patibl
e
consi
der
devic
e:
PIC1
6F87
6A
In
PIC16 Prod
F876A uctio
n
PIC16
F877
In
Prod
uctio
n
In
PIC16 Prod
F877A uctio
n
PIC16
F88
PIC16
F913
InfoDat
asheet
s
In
Prod
uctio
n
Futur
e
Prod
uct
1WD
T
$4.2
9
$5.1
1
$4.6
8
$2.4
1
Stan 14
dard 33
Flash 6
Stan 14
dard 33
Flash 6
Stan 14
dard 33
Flash 6
Stan
71
dard
68
Flash
Call
Stan
for
71
dard
pricin
68
Flash
g
819
2x1 256
4
819
2x1 256
4
819
2x1 256
4
409
6x1 256
4
409
256
6
5/
36
10
22
2
8
Bit
8/
36
10
33
0
8
Bit
8/
36
10
33
2
8
Bit
7/
36
10
16
2
8
Bit
5/
25
10
25
2
6
Bit
e/SPI
No
2AUS
8bit
ART
116bi No MI2C
20
t
ne Com
1patibl
WD
e/SPI
T
No
1USA
8bit
RT
216bi No I2C
20
t
ne Com
1patibl
WD
e/SPI
T
No
2AUS
8bit
ART
116bi No MI2C
20
t
ne Com
1patibl
WD
e/SPI
T
No
2AUS
8bit
ART
116bi No I2C
20
t
ne Com
1patibl
WD
e/SPI
T
No
18bit
2AUS
16bi No ART
t
ne Serial
1Port
WD
T
PIC16
F914
InfoDat
asheet
s
PIC16
F916
InfoDat
asheet
s
PIC16
F917
InfoDat
asheet
s
Futur
e
Prod
uct
Futur
e
Prod
uct
Futur
e
Prod
uct
In
PIC16 Prod
HV540 uctio
n
Call
Stan
for
71
dard
pricin
68
Flash
g
Call
Stan 14
for
dard 33
pricin
Flash 6
g
409
256
6
819
256
2
8/
25
10
36
2
6
Bit
5/
35
10
25
2
2
Bit
No
18bit
2AUS
16bi No ART
t
ne Serial
1Port
WD
T
No
28bit
1AUS
16bi No ART
t
ne Serial
1Port
WD
T
18bit
AUS
2ART
16bi No EUS
t
ne ART
1Serial
WD
Port
T
Call
Stan 14
for
dard 33
pricin
Flash 6
g
819
256
2
8/
35
10
36
2
2
Bit
No
$1.4
0
512
0
x12
25 12 0
No
OTP
76
8
Familia PIC17
10 dispositivos (noviembre 2004)
La informacin de los precios est recogida de la pgina web de Microchip (noviembre de 2004).
Est expresada en dlares de Estados Unidos, y slo pretende dar una idea del coste de los
dispositivos (Budgetary Price=Precio Presupuestario) y no reflejar el precio final que depender del
representante local o distribuidor de Microchip y del volumen de compra y los descuentos a aplicar.
Status
Budgetary
Price
Memory
Type
Bytes Words
RAM
I/O
Pins
ADC
OpAmp Timers/
s
WDT
0/10Bit
No
0-8bit
0-16bit
0-WDT
PIC17C42
Call for
End of Life
pricing
OTP
PIC17C42A
In
$6.31
Production
OTP
4096
2048x16 232
33
0/10Bit
No
2-8bit
2-16bit
1-WDT
PIC17C43
In
OTP
8192
4096x16 454
33
0/10-
No
2-8bit
$7.11
Production
PIC17C44
In
$8.82
Production
PIC17C752
In
$9.04
Production
PIC17C756
End of Life
PIC17C756
A
33
0/10Bit
No
2-8bit
2-16bit
1-WDT
50
12/10No
Bit
2-8bit
2-16bit
1-WDT
0/10Bit
No
0-8bit
0-16bit
0-WDT
16384x1
902
6
50
12/10No
Bit
2-8bit
2-16bit
1-WDT
1638
4
8192x16 678
66
16/10No
Bit
2-8bit
2-16bit
1-WDT
OTP
3276
8
16384x1
902
6
66
16/10No
Bit
2-8bit
2-16bit
1-WDT
ROM
8192
454
33
0/10Bit
2-8bit
2-16bit
1-WDT
OTP
1638
4
OTP
1638
4
OTP
In
$9.42
Production
OTP
3276
8
PIC17C762
In
$11.22
Production
OTP
PIC17C766
In
$12.02
Production
Call for
pricing
2-16bit
1-WDT
Bit
Call for
pricing
8192x16 454
8192x16 678
No
Familia PIC18
88 dispositivos (noviembre 2004)
La informacin de los precios est recogida de la pgina web de Microchip (noviembre de 2004).
Est expresada en dlares de Estados Unidos, y slo pretende dar una idea del coste de los
dispositivos (Budgetary Price=Precio Presupuestario) y no reflejar el precio final que depender del
representante local o distribuidor de Microchip y del volumen de compra y los descuentos a aplicar.
Budget Memo
Byt Word
Status ary
ry
es s
Price
Type
PIC18C In
$5.12
242
Produc
tion
OTP
EEPRO
Com
I/O
Timer
M Data RA
AD pa
Interfa
Pi
s/
Memor M
C
rator
ce
ns
WDT
y
s
163 8192x 0
84 16
76
8
23 5/1 0
0Bit
3-8bit
116bit
1-
USAR
T
I2C
Comp
Ma
x.
Sp
ee
d
MH
z
40
WDT
In
PIC18C
Produc $5.57
252
tion
In
PIC18C
Produc $5.43
442
tion
In
PIC18C
Produc $5.87
452
tion
In
PIC18C
Produc $3.73
601
tion
In
PIC18C
Produc $8.45
658
tion
PIC18C In
$4.51
801
Produc
tion
OTP
OTP
OTP
ROMl
ess
327 16384
0
68 x16
163 8192x
256
84 16
327 16384
0
68 x16
ROMl
0
ess
15
36
76
8
15
36
15
36
OTP
327 16384
0
68 x16
15
36
OTP
15
36
ROMl 0
ess
atible/
SPI
Serial
Port
5/1
23 0- 0
Bit
USAR
T
3-8bit 2
I C
116bit Comp
atible/
1WDT SPI
Serial
Port
40
8/1
34 0- 0
Bit
USAR
T
3-8bit 2
I C
116bit Comp
atible/
1WDT SPI
Serial
Port
40
8/1
34 0- 0
Bit
USAR
T
3-8bit 2
I C
116bit Comp
atible/
1WDT SPI
Serial
Port
40
8/1
26 0- 0
Bit
1-8bit
316bit
1WDT
AUSA
RT
MI2C
Comp
atible/
SPI
SPI
25
12/
52 10- 2
Bit
USAR
T
3-8bit 2
I C
116bit Comp
atible/
1WDT SPI
Serial
Port
40
37 12/ 0
10Bit
1-8bit
316bit
1-
USAR
T
I2C
Comp
25
WDT
In
PIC18C
Produc $9.30
858
tion
OTP
In
PIC18F
Produc $2.78
1220
tion
Stand
ard
Flash
In
PIC18F
Produc $3.15
1320
tion
In
PIC18F
Produc $4.45
2220
tion
In
PIC18F
Produc $4.82
2320
tion
Stand
ard
Flash
Stand
ard
Flash
327 16384
0
68 x16
409 2048x
256
6
16
819 4096x
256
2
16
409 2048x
256
6
16
Enhan
819 4096x
ced
256
2
16
Flash
15
36
16/
68 10- 2
Bit
USAR
T
3-8bit 2
I C
116bit Comp
atible/
0WDT SPI
Serial
Port
25
6
7/1
16 0- 0
Bit
1-8bit
3EUSA
16bit
RT
1WDT
40
7/1
16 0- 0
Bit
3-8bit
1EUSA
16bit
RT
1WDT
40
10/
25 10- 2
Bit
1-8bit
316bit
1WDT
AUSA
RT
MI2C
Comp
atible/
SPI
40
10/
25 10- 2
Bit
1-8bit
316bit
1WDT
AUSA
RT
MI2C
Comp
atible/
SPI
40
25
6
51
2
51
2
Familia de
productos PIC
Stat
us
Bu
dge
Memor Byt
tary
y Type es
Pric
e
PIC18F In
$5.
2331
Prod 20
uctio
Enhan
ced
Flash
atible/
SPI
Serial
Port
EEPR
OM
I/O
Comp Timer
Wor
RA
AD
Interfac
Data
Pi
arator s/
ds
M
C
e
Memo
ns
s
WDT
ry
819 409
2
6x1
6
256
76
8
22 5/1 0
0Bit
40
4.17
Max.
Speed
MHz
1-8bit EUSAR 40
3T
16bit I2C
1WDT
Compati
ble/SPI
76
8
10/
25 10- 2
Bit
1-8bit
316bit
1WDT
EUSAR
T
MI2C
Compati
ble/SPI
76
8
5/1
23 0- 0
Bit
1-8bit
316bit
1WDT
AUSAR
T
40
MI2C
Compati
ble/SPI
76
8
10/
25 10- 2
Bit
1-8bit
316bit
1WDT
EUSAR
T
MI2C
Compati
ble/SPI
76
8
5/1
22 0- 0
Bit
1-8bit
316bit
1WDT
EUSAR
T
40
I2C
Compati
ble/SPI
64
0
5/1
21 0- 0
Bit
0-8bit
316bit
1WDT
AUSAR
T
40
MI2C
Compati
ble/SPI
10/
25 10- 2
Bit
1-8bit
316bit
1WDT
EUSAR
T
48
MI2C
Compati
ble/SPI
5/1
23 0- 0
Bit
1-8bit
316bit
1WDT
AUSAR
T
40
MI2C
Compati
ble/SPI
8/1
25 0- 0
Bit
1-8bit
316bit
1WDT
EUSAR
T
MI2C
Compati
ble/SPI
25 10/ 2
10Bit
1-8bit EUSAR
3T
16bit MI2C
n
In
PIC18F Prod $3.
2410
uctio 86
n
Standa
819
163
rd
2x1
84
Flash
6
In
PIC18F Prod $4.
242
uctio 73
n
Standa
819
163
rd
2x1
84
Flash
6
In
PIC18F Prod $4.
2420
uctio 58
n
Enhan
ced
Flash
819
163
2x1
84
6
In
PIC18F Prod $5.
2431
uctio 38
n
Enhan
ced
Flash
819
163
2x1
84
6
In
PIC18F Prod $4.
2439
uctio 73
n
Standa
614
122
rd
4x1
88
Flash
6
Futu
PIC18F re
2455
Prod
uct
Call
Enhan
for
ced
pric
Flash
ing
In
PIC18F Prod $5.
248
uctio 67
n
Futu
PIC18F re
2480
Prod
uct
Standa
819
163
rd
2x1
84
Flash
6
Call
Enhan
for
ced
pric
Flash
ing
PIC18F In
$4.
2510
Prod 39
uctio
122
245
88x
76
16
819
163
2x
84
16
256
256
256
256
256
256
256
20
48
76
8
76
8
15
36
1WDT
Compati
ble/SPI
39
68
10/
25 10- 2
Bit
1-8bit
316bit
1WDT
EUSAR
T
40
MI2C
Compati
ble/SPI
15
36
5/1
23 0- 0
Bit
1-8bit
316bit
1WDT
AUSAR
T
40
MI2C
Compati
ble/SPI
15
36
10/
25 10- 2
Bit
1-8bit
316bit
1WDT
EUSAR
T
40
MI2C
Compati
ble/SPI
39
68
10/
25 10- 2
Bit
1-8bit
316bit
1WDT
EUSAR
T
40
MI2C
Compati
ble/SPI
n
In
PIC18F Prod $4.
2515
uctio 94
n
Standa
491 245
rd
52 76
Flash
In
PIC18F Prod $5.
252
uctio 15
n
Standa
163
327
rd
84x
68
Flash
16
In
PIC18F Prod $5.
2520
uctio 11
n
Enhan
ced
Flash
163
327
84x
68
16
In
PIC18F Prod $5.
2525
uctio 59
n
Enhan
ced
Flash
245
491
76x
52
16
256
256
1024
Familia de productos
PIC
Stat
us
Bud
geta Mem
ry
ory
Pric Type
e
Byte
Words
s
EEPR
OM
RA
Data
M
Memor
y
PIC18F
2539
In
Stand
Prod $5.1
245 12288x
ard
256
uctio 5
76
16
Flash
n
PIC18F
2550
Futu
re
Prod
uct
PIC18F
258
In
$6.1 Enha
Prod 7
nced
Call
Enha
for
327 16384x
nced
256
prici
68
16
Flash
ng
327 16384x 256
68
16
I/
O
Comp
AD
Pi
arator
C
n
s
s
4.18
Max.
Timer
Interfa Spee
s/WD
ce
d
T
MHz
5/1
0- 0
Bit
0-8bit
316bit
1WDT
EUSA
RT
MI2C 40
Comp
atible/
SPI
204 2
8
5
10/
10- 2
Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C 48
Comp
atible/
SPI
153 2
6
3
5/1 0
0-
1-8bit EUSA 40
3RT
140 2
8
1
uctio
n
Flash
PIC18F
2580
Futu
re
Prod
uct
PIC18F
2585
In
Enha
Prod $6.4
491 24576x
nced
1024
uctio 4
52
16
Flash
n
PIC18F
2610
PIC18F
2620
PIC18F
2680
Call
Enha
for
327 16384 x
nced
256
prici
68
16
Flash
ng
In
Stand
Prod $5.4
655 32768x
ard
0
uctio 7
36
16
Flash
n
In
Enha
Prod $6.1
655 32768x
nced
1024
uctio 3
36
16
Flash
n
In
Enha
Prod $6.9
655 32768x
nced
1024
uctio 8
36
16
Flash
n
PIC18F
4220
In
Enha
Prod $4.9
409 2048x1
nced
256
uctio 1
6
6
Flash
n
PIC18F
4320
In
Enha
Prod $5.2
819 4096x1
nced
256
uctio 9
2
6
Flash
n
153 2
6
5
332 2
8
5
396 2
8
5
396 2
8
5
332 2
8
5
512
3
6
3
512
6
Bit
2
16bit MI C
Comp
1WDT atible/
SPI
8/1
0- 0
Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
8/1
0- 0
Bit
3-8bit
116bit
1WDT
EUSA
RT
MI2C 40
Comp
atible/
SPI
10/
10- 2
Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C 40
Comp
atible/
SPI
10/
10- 2
Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C 40
Comp
atible/
SPI
8/1
0- 0
Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C 40
Comp
atible/
SPI
13/
10- 2
Bit
1-8bit
316bit
1WDT
AUSA
RT
MI2C 40
Comp
atible/
SPI
13/
10- 2
Bit
1-8bit
316bit
1WDT
AUSA
RT
MI2C 40
Comp
atible/
SPI
PIC18F
4331
PIC18F
4410
PIC18F
442
PIC18F
4420
In
Enha
Prod $5.7
819 4096x1
nced
256
uctio 0
2
6
Flash
n
In
Stand
Prod $4.5
163 8192x1
ard
0
uctio 4
84
6
Flash
n
In
Stand
Prod $5.2
163 8192x1
ard
256
uctio 6
84
6
Flash
n
In
Enha
Prod $5.2
163 8192x1
nced
256
uctio 6
84
6
Flash
n
3
768
4
768
768
3
6
3
4
3
768
4
Status
PIC18F
4431
PIC18F
4439
EUSA
RT
I2C
40
Comp
atible/
SPI
13/
10- 2
Bit
1-8bit
816bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
8/1
0- 0
Bit
3-8bit
116bit
1WDT
AUSA
RT
MI2C 40
Comp
atible/
SPI
13/
10- 2
Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C 40
Comp
atible/
SPI
Familia de productos
PIC
Bud
geta Memo
Byt
ry
ry
es
Pric Type
e
9/1
0- 0
Bit
1-8bit
316bit
1WDT
4.1
9
Max
EEPR
.
OM
I/O
Com Timer
RA
Interfa Spe
Words Data
Pi ADC parat s/WD
M
ce
ed
Memo
ns
ors
T
MH
ry
z
In
Enhan
$5.9
163 8192x
Produc
ced
256
0
84
16
tion
Flash
In
Enhan
$5.2
122 6144x
Produc
ced
256
6
88
16
tion
Flash
76
8
64
0
34
32
9/100
Bit
1-8bit
316bit
1WDT
EUSA
RT
I2C
Comp
atible/
SPI
40
8/100
Bit
0-8bit
316bit
1WDT
AUSA
RT
MI2C
Comp
atible/
SPI
40
PIC18F
4455
PIC18F
448
PIC18F
4480
PIC18F
4510
PIC18F
4515
PIC18F
452
PIC18F
4520
PIC18F
4525
Call
Future
Enhan
for
245 12288
Produc
ced
256
prici
76
x16
t
Flash
ng
In
Enhan
$5.8
163 8192x
Produc
ced
256
1
84
16
tion
Flash
Call
Future
Enhan
for
163 8192 x
Produc
ced
256
prici
84
16
t
Flash
ng
In
Stand
$5.0
327 16384
Produc
ard
0
8
68
x16
tion
Flash
In
Stand
$5.6
491 24576
Produc
ard
0
1
52
x16
tion
Flash
In
Stand
$5.7
327 16384
Produc
ard
256
0
68
x16
tion
Flash
In
Enhan
$5.7
327 16384
Produc
ced
256
9
68
x16
tion
Flash
In
$6.3 Enhan 491 24576 1024
Produc 2
ced
52
x16
tion
Flash
20
48
76
8
76
8
15
36
39
68
15
36
34
34
36
36
36
34
13/1
2
0-Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
48
8/102
Bit
1-8bit
316bit
1WDT
AUSA
RT
MI2C
Comp
atible/
SPI
40
11/1
2
0-Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
13/1
2
0-Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
13/1
2
0-Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
40
8/100
Bit
1-8bit
316bit
1WDT
AUSA
RT
MI2C
Comp
atible/
SPI
40
13/1
2
0-Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
40
1-8bit
316bit
1-
EUSA
RT
MI2C
Comp
15
36
36
39
68
36 13/1 2
0-Bit
40
PIC18F
4539
PIC18F
4550
PIC18F
458
PIC18F
4580
In
Stand
$5.7
245 12288
Produc
ard
256
0
76
x16
tion
Flash
Call
Future
Enhan
for
327
Produc
ced
16384 256
prici
68
t
Flash
ng
In
Enhan
$6.2
327 16384
Produc
ced
256
6
68
x16
tion
Flash
Call
Future
Enhan
for
327 16384
Produc
ced
256
prici
68
x 16
t
Flash
ng
14
08
20
48
15
36
15
36
Status
PIC18F
4585
PIC18F
4610
In
Enhan
$7.1
491
Produc
ced
1
52
tion
Flash
In
$6.1 Stand
Produc 4
ard
tion
Flash
655
36
34
34
36
atible/
SPI
8/100
Bit
0-8bit
316bit
1WDT
AUSA
RT
MI2C
Comp
atible/
SPI
40
13/1
2
0-Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
48
8/102
Bit
AUSA
RT
1-8bit EUSA
3RT
16bit
MI2C
1WDT Comp
atible/
SPI
40
11/1
2
0-Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
Familia de
productos PIC
Bud
geta Memo
Byte Wor
ry
ry
s
ds
Pric Type
e
32
WDT
4.20
I/
Max
EEPRO
O
Com Time
.
RA
Interfa
M Data
Pi ADC parat rs/W
Spe
M
ce
Memory
n
ors
DT
ed
s
MHz
2457
1024
6x16
33
28
3 11/1
2
6 0-Bit
3276 0
8x16
39
68
3 13/1 2
6 0-Bit
18bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
18bit
3-
EUSA
RT
MI2C
40
40
16bit Comp
1atible/
WDT SPI
PIC18F
4620
PIC18F
4680
PIC18F
6310
PIC18F
6390
PIC18F
6410
PIC18F
6490
In
Enhan
$6.8
655
Produc
ced
5
36
tion
Flash
In
Enhan
$7.6
655
Produc
ced
6
36
tion
Flash
In
Stand
$5.1
Produc
ard
2
tion
Flash
In
Stand
$4.3
Produc
ard
1
tion
Flash
In
Stand
$5.6
Produc
ard
2
tion
Flash
In
Stand
$4.7
Produc
ard
1
tion
Flash
819
2
819
2
163
84
163
84
3276
1024
8x16
3276
1024
8x16
4096 0
4096 0
8192
0
x16
8192
0
x16
39
68
33
28
76
8
76
8
76
8
76
8
3 13/1
2
6 0-Bit
18bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
40
3 11/1
2
6 0-Bit
38bit
116bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
40
5 12/1
2
4 0-Bit
AUSA
RT
38bit EUSA
RT
116bit MI2C
1Comp
WDT atible/
SPI
40
5 12/1
2
0 0-Bit
AUSA
RT
38bit EUSA
RT
116bit MI2C
1Comp
WDT atible/
SPI
5 12/1
2
4 0-Bit
18bit
316bit
1WDT
AUSA
RT
EUSA
RT
MI2C
Comp
atible/
SPI
40
5 12/1
2
0 0-Bit
AUSA
RT
18bit EUSA
RT
316bit MI2C
1Comp
WDT atible/
SPI
40
PIC18F
6520
PIC18F
6525
PIC18F
6585
PIC18F
6620
PIC18F
6621
In
Enhan
$6.5
327
Produc
ced
2
68
tion
Flash
In
Enhan
$7.3
491
Produc
ced
3
52
tion
Flash
In
Enhan
$7.8
491
Produc
ced
7
52
tion
Flash
In
Enhan
$9.6
655
Produc
ced
5
36
tion
Flash
In
Enhan
$7.8
655
Produc
ced
7
36
tion
Flash
1638
1024
4x16
20
48
2457
1024
6x16
38
40
2457
1024
6x16
33
28
3276
1024
8
38
40
3276
1024
8x16
38
40
5 12/1
2
2 0-Bit
28bit
316bit
1WDT
2
AUSA
RT
MI2C
Comp
atible/
SPI
40
5 12/1
2
3 0-Bit
28bit
316bit
1WDT
2
EUSA
RT
MI2C
Comp
atible/
SPI
40
5 12/1
2
3 0-Bit
18bit
316bit
1WDT
EUSA
RT
MI2C
Comp
atible/
SPI
40
5 12/1
2
2 0-Bit
28bit
316bit
1WDT
2
AUSA
RT
MI2C
Comp
atible/
SPI
25
5 12/1
2
3 0-Bit
28bit
316bit
1WDT
2
EUSA
RT
MI2C
Comp
atible/
SPI
40
Familia de productos
4.21
PIC
Budg
Stat
etary
us
Price
PIC18F6 Futu Call
627
re
for
Pro pricin
Memor Byt
y Type es
EEPR
OM
I/O
Wor
RA
AD
Data
Pi
ds
M
C
Memor
ns
y
1024
39
38
Com Timer
para s/WD
tors T
58 12/1 2
0Bit
3-8bit
216bit
Max.
Interfac Spe
e
ed
MHz
2
EUSA
RT
1WDT
duct g
In
Enhan
327
PIC18F6 Pro
655
$8.44 ced
68x
680
duct
36
Flash
16
ion
Futu
PIC18F6 re
6J15
Pro
duct
Call
for
pricin
g
Standa
963 491
rd
04 52
Flash
In
Enhan
655
PIC18F6 Pro $10.7
131
ced
36x
720
duct 3
072
Flash
16
ion
Futu
PIC18F6 re
722
Pro
duct
Call
for
pricin
g
Enhan
131 655
ced
072 36
Flash
Futu
PIC18F6 re
7J10
Pro
duct
Call
for
pricin
g
Standa
131 655
rd
072 36
Flash
In
Standa
PIC18F8 Pro
819 409
$5.41 rd
310
duct
2
6
Flash
ion
In
Standa
PIC18F8 Pro
819 409
$4.65 rd
390
duct
2
6
Flash
ion
1024
1024
1024
12/1
53 02
Bit
1-8bit
316bit
1WDT
EUSA
RT
MI2C
40
Compa
tible/S
PI
16/1
54 02
Bit
2-8bit
316bit
1WDT
2
EUSA
RT
12/1
52 02
Bit
2-8bit
316bit
1WDT
2
AUSA
RT
25
MI2C
Compa
tible/S
PI
39
38
12/1
58 02
Bit
3-8bit
216bit
1WDT
2
AUSA
RT
39
38
12/1
54 02
Bit
2-8bit
316bit
1WDT
2
EUSA
RT
3-8bit
116bit
1WDT
AUSA
RT
EUSA
RT
MI2C
Compa
tible/S
PI
3-8bit
116bit
1WDT
AUSA
RT
EUSA
RT
MI2C
Compa
tible/S
PI
33
28
39
38
38
40
76
8
76
8
12/1
70 02
Bit
12/1
66 02
Bit
In
Standa
819
PIC18F8 Pro
163
$5.90 rd
2x1
410
duct
84
Flash
6
ion
In
Standa
819
PIC18F8 Pro
163
$5.14 rd
2x1
490
duct
84
Flash
6
ion
In
Enhan
163
PIC18F8 Pro
327
$6.85 ced
84x
520
duct
68
Flash
16
ion
In
Enhan
245
PIC18F8 Pro
491
$7.84 ced
76x
525
duct
52
Flash
16
ion
In
Enhan
245
PIC18F8 Pro
491
$8.25 ced
76x
585
duct
52
Flash
16
ion
1024
1024
1024
1-8bit
316bit
1WDT
AUSA
RT
EUSA
RT
40
MI2C
Compa
tible/S
PI
1-8bit
316bit
1WDT
AUSA
RT
EUSA
RT
40
MI2C
Compa
tible/S
PI
2-8bit
316bit
1WDT
2
AUSA
RT
40
MI2C
Compa
tible/S
PI
38
40
16/1
69 02
Bit
2-8bit
316bit
1WDT
2
EUSA
RT
40
MI2C
Compa
tible/S
PI
33
28
16/1
69 02
Bit
1-8bit
816bit
1WDT
EUSA
RT
SPI
76
8
76
8
20
48
12/1
70 02
Bit
12/1
66 02
Bit
16/1
68 02
Bit
Familia de
productos PIC
Bud
geta Mem
Stat
Byte Wor
ry
ory
us
s
ds
Pric Type
e
PIC18F8 In
620
Pro
EEPR
OM
RA
Data
M
Memor
y
384
0
40
4.22
I/O
Com Time
Max.
AD
Interfac
Pi
para rs/W
Speed
C
e
ns
tors DT
MHz
68 16/ 2
10
28bit
2
25
AUSAR
d
Flas
h
duct
ion
Enh
In
ance
PIC18F8 Pro $8.2
6553 3276
d
1024
621
duct 5
6
8x16
Flas
ion
h
Futu
PIC18F8 re
627
Pro
duct
Enh
Call
ance
for
9830 4915
d
1024
prici
4
2
Flas
ng
h
Enh
In
ance
PIC18F8 Pro $8.8
6553 3276
d
1024
680
duct 0
6
8x16
Flas
ion
h
Futu
PIC18F8 re
6J15
Pro
duct
Call
for
prici
ng
Stan
dard 9830 4915
0
Flas 4
2
h
Enh
In
ance
PIC18F8 Pro $10.
1310 6553
d
1024
720
duct 90
72
6x16
Flas
ion
h
Bit
T
32
16bit MI C
Compa
1WDT tible/SP
I
16/
10
69
2
Bit
28bit
316bit
1WDT
2
EUSAR
T
40
MI2C
Compa
tible/SP
I
16/
10
70
2
Bit
28bit
316bit
1WDT
2
EUSAR
T
2 MI2C
Compa
tible/SP
I
332
8
16/
10
69
2
Bit
18bit
316bit
1WDT
EUSAR
T
MI2C
40
Compa
tible/SP
I
393
8
16/
10
70
2
Bit
28bit
2
3EUSAR
16bit
T
1WDT
16/
10
68
2
Bit
28bit
316bit
1WDT
384
0
393
8
384
0
2
AUSAR
T
25
MI2C
Compa
tible/SP
I
Enh
Futu Call
ance
PIC18F8 re
for
1310 6553
d
1024
722
Pro prici
72
6
Flas
duct ng
h
393
8
16/
10
72
2
Bit
28bit
2
3EUSAR
16bit
T
1WDT
393
8
70 15/ 2
10
28bit
Bit
316bit
1El PIC16F84A
5.2
El PIC16F84A
5.3
Descripcin de patillas
Nombre
N Tipo Descripcin
OSC1/CLKIN
16 I
OSC2/CLKOU
15 O
T
Salida del oscilador a cristal. En el modo RC, es una salida con una
frecuencia de OSC1
MCLR
RA0
17 I/O
RA1
18 I/O
RA2
I/O
RA3
I/O
RA4/T0CKI
I/O
RB0/INT
I/O
RB1
I/O
RB2
I/O
RB3
I/O
RB4
10 I/O
RB5
11 I/O
RB6
12 I/O
RB7
13 I/O
Vss
Tierra de referencia
Vdd
14 P
I/P
Alimentacin
El PIC16F84A
5.4
Arquitectura interna
Las altas prestaciones de los microcontroladores PIC derivan de las caractersticas de su
arquitectura. Estn basados en una arquitectura tipo Harvard que posee buses y espacios de
memoria por separado para el programa y los datos, lo que hace que sean ms rpidos que los
microcontroladores basados en la arquitectura tradicional de Von Neuman.
Otra caracterstica es su juego de instrucciones reducido (35 instrucciones) RISC, donde la
mayora se ejecutan en un solo ciclo de reloj excepto las instrucciones de salto que necesitan dos.
Posee una ALU (Unidad Aritmtico Lgica) de 8 bits capaz de realizar operaciones de
desplazamientos, lgicas, sumas y restas. Posee un Registro de Trabajo (W) no direccionable que
Dependiendo de la instruccin ejecutada, la ALU puede afectar a los bits de Acarreo , Acarreo
Digital (DC) y Cero (Z) del Registro de Estado (STATUS).
La pila es de 8 niveles. No existe ninguna bandera que indique que est llena, por lo que ser el
programador el que deber controlar que no se produzca su desbordamiento.
Este microcontrolador posee caractersitcas especiales para reducir componentes externos con
lo que se reducen los costos y se disminuyen los consumos. Posee 4 diferentes modos de
oscilador, desde el simple circuito oscilador RC con lo que se disminuyen los costos hasta la
utilizacin de un oscilador a cristal.
En el modo SLEEP el consumo se reduce significativamente y puede despertarse al
microcontrolador utilizando tanto interrupciones internas como externas y seal de reset. Adems
posee la funcin Watchdog Timer (Perro Guardian) que protege al micro de cuelgues debido a
fallos software que produzcan bucles infinitos.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
El PIC16F84A
5.5
Memoria de programa
La memoria de programa est organizada con palabras de 14 bits con un total de 1 K, del tipo
Flash, que durante el funcionamiento es de solo lectura. Slo se ejecutar el cdigo contenido en
esta memoria, pudiendo almacenar en ella una cantidad limitada de datos como parte de la
instruccin RETLW. En una sola palabra se agrupa el cdigo de la instruccin y el operando o su
direccin.
El tipo de memoria utilizada en este microcontrolador, podr ser grabada o borrada
elctricamente a nuestro antojo desde el programador. La memoria tipo Flash tiene la caracterstica
de poderse borrar en bloques completos y no podrn borrarse posiciones concretas o especficas.
Este tipo de memoria no es voltil, es decir, no pierde los datos si se interrumpe la energa.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
El PIC16F84A
5.6
La memoria para almacenar el programa nos resultar perfecta para realizar pruebas y
experimentos, adems de para la programacin "on-board" o "in-circuit", esto es, nos permite la
programacin del dispositivo o actualizacin del programa sin necesidad de retirarlo del circuito
donde va montado.
La memoria del programa comienza en la posicin 0000h y termina en la posicin 03FFh. Esto
es 1Kbyte, es decir, 1024 bytes (210).
En la figura tambin se muestra el PC (Contador de Programa o Program Counter). Que apunta
a la direccin de memoria de la instruccin en curso y permite que el programa avance cuando se
incrementa.
Tambin se muestra la pila o stack, de 8 niveles (Nivel Pila 1 a Nivel Pila 8). Se utiliza cuando
ejecutamos un subproceso o subrutina, es decir, un conjunto de instrucciones que hemos aislado
de las dems para simplificar. En este caso el contador de programa (PC) dejar de incrementarse
y apuntar a la posicin de memoria de programa donde empieza la subrutina; en el primer nivel
de la pila se almacenar esta llamada, hasta que se acaben de ejecutar las instrucciones que
contiene, momento en el cual se seguir con las instrucciones desde donde haba sido llamada.
Por eso es necesario saber donde se qued el programa almacenndose la direccin en la pila.
Podemos hacer hasta 8 llamadas a subrutinas una dentro de otra, como si de muecas rusas se
tratase. A esto se le llaman subrutinas anidadas.
El vector de reset se encuentra en la posicin 0000h y el de interrupcin en la 0004h.
Debido a que el PIC16F84A tiene un contador de programa de 13 bit puede direccionar un
espacio de memoria de 8K x 14, sin embargo slo el primer 1K x 14 (0000h-03FFh) est
implementado fsicamente.
Tener acceso a una localizacin por encima de la direccin fsicamente implementada producir
un solapamiento. Por ejemplo, para las localizaciones 20h, 420h , 820h, C20h, 1020h, 1420h,
1820h, y 1C20h, la direccin real ser la misma, as 20h es 32d y 420h es 1056d, 1056d menos
1024d es igual a 32d, es decir, se direcciona realmente la localizacin 20h, en binario 20h es
100000b y 420h es 10000100000b, 1K se direcciona con 10 bits (2 10 = 1024) de manera que de
10000100000b si slo se tienen en cuenta 10 bits queda 0000100000b que es 20h. Con esto debe
quedar claro que despus de 3FF, al incrementarse el PC y pasar a 400, se direccionar de nuevo
la posicin 0h
Existen varias versiones de memoria de programa para los PIC16f84A:
Versin Flash. Se trata de una memoria no voltil, de bajo consumo, que se puede escribir
y borrar. A diferencia de las memoria de tipo ROM, la memoria FLASH es programable en el
circuito. Es ms rpida y de mayor densidad que la EEPROM. Esta versin es idnea para
la enseanza y la Ingeniera de diseo.
Versin OTP . ("One Time Programmable") "Programable una sola vez". Slo se puede
grabar una vez por el usuario sin la posibilidad de borrar lo que se graba. Resulta mucho
El PIC16F84A
Memoria de datos
Est organizada en dos pginas o bancos de registro, banco 0 y banco 1. Para cambiar de
pgina se utiliza un bit del registro STATUS (RP0).
Cada banco se divide a su vez en dos reas:
RFS (Registros de Funciones Especiales)
RGP (Registros de Propsito General)
En la figura siguiente nos podemos hacer una idea de cmo estn distribuidos:
5.7
El PIC16F84A
5.8
La memoria RAM as como algunos registros especiales son los mismos en los dos bancos del
mapa de memoria del PIC. La anchura de los bytes en la memoria es de 8 bis.
Para direccionar la memoria de datos se emplean dos modos de direccionamiento, el directo y el
indirecto. En el direccionamiento directo, los 7 bits de menos peso del cdigo OP de la instruccin
proporcionan la direccin en la posicin de la pgina, mientras que los bits RP1 y RP0 de STATUS
seleccionan la pgina o banco.
En el direccionamiento indirecto el operando de la instruccin hace referencia al registro IDNF,
que ocupa la posicin 00h del rea de datos. Se accede a la posicin que apunta el registro FSR
04h del banco 0. Los 7 bits de menos peso de FSR seleccionan la posicin y su bit de ms peso,
junto con el bit IRP del registro de estado, seleccionan la pgina.
Para ms informacin ver Registros del PIC16F84A.
El direccionamiento
Para el PIC solamente existen 4 modos de direccionamiento, entre los cuales, tres de ellos ya
fueron vistos de manera intuitiva cuando vimos las instrucciones. Los modos de direccionamiento
tratan sobre la forma de mover los datos de unas posiciones de memoria a otras.
Direccionamiento Inmediato
Direccionamiento Directo
Direccionamiento bit a bit
Direccionamiento Indirecto
Direccionamiento Inmediato
El dato manipulado por la instruccin se codifica con la propia instruccin. En este caso, el dato
en cuestin se denomina literal.
MOVLW k ; Coloca el literal k, que es un valor cualquiera codificado con 8 bits, en el registro
de trabajo w
Direccionamiento Directo
La memoria interna se direcciona de forma directa por medio de los 8 bits "f" contenidos en las
instrucciones que operan sobre registros. De esta manera se puede direccionar cualquier posicin
desde la 00 a la FF.
En los microcontroladores que tengan ms de un banco, antes de acceder a alguna variable que
se encuentre en la zona de los bancos de registros, el programador deber asegurarse de haber
programado los bits de seleccin de banco en el registro OPTION.
Este es el modo ms utilizado, ya que como hemos visto anteriormente, la memoria RAM est
dividida en registros especficos y en un conjunto de registros de propsito general. Este modo
consiste en codificar el nombre del o de los registros en cuestin directamente en la instruccin.
MOVWF f ; Desplaza el contenido del registro w al registro f
Direccionamiento bit a bit
Mediante este direccionamiento se manipula un bit individual en cualquier registro. Este modo de
direccionamiento no se utiliza nunca solo, sino que siempre va emparejado con el modo de
direccionamiento directo.
BCF f,b ; Pone a cero el bit nmero b del registro f
Direccionamiento Indirecto
Es el modo ms potente y utiliza los registros INDF y FSR. En el registro FSR se introduce la
direccin del registro que se quiere leer cuando se acceda a INDF.
FSR acta como puntero, es decir, el valor que guardemos en este registro ser la direccin de
una posicin de memoria. Si aumentamos o disminuimos con cualquier operacin el contenido de
FSR nos moveremos entre las posiciones de memoria.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
El PIC16F84A
5.9
El registro INDF no tiene existencia fsica, solamente est implementado en la posicin 0 como
modo de notacin. La utilidad de este registro no es otra que acceder a los datos apuntados por el
registro FSR, para poder modificarlos, etc.
Esto se ve mucho ms claro en los dos siguientes ejemplos. El primero de ellos es un pseudocdigo para acceder a la RAM, y el segundo es un algoritmo para limpiarla.
Ejemplo 1:
El registro 05 contiene el valor 10 h.
El registro 06 contiene el valor 0A h.
Cargamos el valor 05 en el registro FSR.
Ahora est apuntado el registro 05.
Si leemos el registro INDF, este
retornar el valor 10 h.
INDF 10 h
INDF 0A h
001
001
002
002
003
003
FSR
05 h
FSR
06 h
005
10 h
005
10 h
006
0A h
006
0A h
007
007
008
008
009
009
00A
00A
00B
00B
Si leemos del registro INDF de manera indirecta (con FSR apuntndolo), el valor ledo ser 00.
Si escribimos en este registro de manera indirecta, obtendremos una no-operacin, aunque el
registro estado se ver afectado.
Ejemplo 2:
Limpiar la memoria RAM desde la posicin 10 h a la 20 h.
MOVLW
0X10
; Inicializamos puntero
MOVWF
CLRF
INCF
BTFSS
GOTO
CONTINUAR
NEXT
FSR
INDF ; Limpiamos el registro apuntado
FSR ; Incrementamos el puntero
FSR,5 ; Los registros estan borrados?
NEXT ; No, limpiar siguiente
; Si, se continua con el programa
Esta memoria no emplea ningn recurso externo de alimentacin. Puede grabarse desde un
programador de PIC al igual que el cdigo de programa.
La lectura de una posicin de la memoria se obtiene en el registro EEDATA en el prximo ciclo
de reloj, si bien podra tardar algo mas.
La escritura es mucho mas lenta, tardandose del orden de unos 8 ms. Esta se controla mediante
un temporizador interno.
Resumen de caractersticas:
Cuando el dispositivo est protegido por cdigo, la CPU puede continuar leyendo y escribiendo
en la memoria EEPROM, pero el programador del dispositivo ya no puede acceder esta memoria.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
El PIC16F84A
5.10
Uso de la EEPROM
A continuacin veremos a fondo cuales son los procesos ms usuales de escritura y de lectura
en la EEPROM.
Lectura de la memoria EEPROM
Para leer de la memoria EEPROM han de seguirse los siguientes pasos:
Veamos dos ejemplos prctico. El primero (LECTURA1) presupone que el dato en EEDATA
estar disponible rpidamente, y el segundo (LECTURA2) espera hasta confirmarlo:
LECTURA1
BCF STATUS,RP0
; Selecciona banco 0
MOVLW MEM1
; Direccin a leer de
MOVWF EEADR
; la EEPROM
BSF STATUS,RP0
; Selecciona banco 1
BSF EECON1,RD
; Activar lectura
BCF STATUS,RP0
; Selecciona banco 0
MOVF EEDATA,W
; W se carga con el valor
; ledo en eeprom
LECTURA2
BCF STATUS,RP0
; Selecciona banco 0
MOVLW MEM1
; Direccin a leer de
MOVWF EEADR
; la EEPROM
BSF STATUS,RP0
; Selecciona banco 1
BSF EECON1,RD
; Activar lectura
ESPERA
BTFSC EECON1,RD
; Espera final de lectura
GOTO ESPERA
; a que baje la bandera
BCF STATUS,RP0
; Selecciona banco 0
MOVF EEDATA,W
; W se carga con el valor
; ledo en eeprom
La memoria EEPROM es bastante lenta, por lo cual es importante esperar a que el ciclo de
lectura termine, aunque algunas veces se omita. Pero es an ms importante esta espera en el
ciclo de escritura, ya que la EEPROM puede tardar en ser escrita hasta 10 ms.
Escritura de la memoria EEPROM
El proceso de escritura es an ms complejo ya que deberemos hacer todo lo anterior y adems
escribir un cdigo especial de proteccin. Estos pasos los vemos en las siguientes lneas:
Poner a 1 (si no lo estaba) el bit WREN del registro EECON1 para habilitar la operacin de
escritura.
Cargar en EEADR la direccin de la posicin a escribir.
Cargar en el registro EEDATA el valor a grabar.
Ejecutar la siguiente secuencia que inicia la escritura de cada byte y adems sirve de
proteccin frente a errores eventuales. Esta secuencia siempre es la misma y ha de
ejecutarse siempre.
MOVLW
MOVWF
MOVWF
55H
EECON2
AAH
MOVWF
BSF
EECON2
EECON1,WR
Esta ltima instruccin inicia el proceso de escritura. Cuando se termina, el bit EEIF est a 1
y, si ha sido habilitada la interrupcin de EEPROM haciendo uso del bit EEIE del registro
INTCON, esta interrupcin se genera.
Mediante software es necesario poner a cero el bit EEIF.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
El PIC16F84A
5.11
BSF STATUS,RP0
; Selecciona el banco 1
BSF EECON1,WREN ; Permiso de escritura activado
BCF INTCON, GIE ; Desabilita interrupciones.
;Comienzo de la secuencia de escritura
MOVLW 0x55
MOVWF EECON2
; Se escribe el dato 55 h en EECON2
MOVLW 0xAA
MOVWF EECON2
; Se escribe AA h en EECON2
BSF EECON1,WR
; Comienza la escritura
BSF INTCON,GIE
; Habilita las interrupciones.
BCF EECON1,WREN ; Permiso de escritura desactivado
BCF STATUS,R0
; Selecciona el banco 0
Verificacin de la escritura
Dependiendo de la aplicacin, la experiencia en programacin dice que los datos escritos en la
EEPROM deben ser verificados comparndolos con el dato que se acaba de escribir. Esto debe
usarse en aplicaciones en las que un bit de la EEPROM sufre ciclos de lectura/escritura hasta rozar
el lmite de las especificaciones. Generalmente el fallo de escritura en un bit de la EEPROM ser
un bit que se escribe como un 0 lgico pero devuelve un 1 debido a la prdida de ese bit. La
siguiente porcin de cdigo es un ejemplo de verificacin del dato escrito:
BCF STATUS,RP0
; Nos situamos en el banco 0
MOVF EEDATA,W
; Debemos estar en el banco 0
BSF STATUS,RP0
; Cambiamos al banco 1
BSF EECON1,RD
; Leemos el dato que se guarda en
BCF STATUS,RP0
; EEDATA, y cambiamos a banco 0
; A continuacin se comprueba que los datos en W en EEDATA son los mismos
SUBWF EEDATA,W
; Restamos ambos valores
BTFSS STATUS,Z
; Si la operacin es cero, son iguales
GOTO ERR_ESCRIT
; Si no son iguales, saltamos a ERR_ESCRIT
.....
; Si son iguales, seguimos con el programa
Rutinas EEPROM
A continuacin se presentan dos rutinas para escribir y leer en la EEPROM:
;**************************************************************
; EEPROM_W:
; Graba un byte en la EEPROM de datos. La direccin ser la contenida
; en EEADR y el dato se le supone previamente introducido en EEDATA
;
EEPROM_W
bsf STATUS,RP0
;Selecciona banco 1
bsf EECON1,WREN ;Permiso de escritura
movlw b'01010101' ;Secuencia de escritura
movwf EECON2
movlw b'10101010'
movwf EECON2
bsf EECON1,WR
;Orden de escritura
bcf EECON1,WREN ;Desconecta permiso de escritura
ESPERA
btfss EECON1,EEIF ;Comprobar bandera de fin de escritura
goto ESPERA
bcf EECON1,EEIF
bcf STATUS,RP0
return
;
;**************************************************************
; EEPROM_R:
; Lee un byte de la EEPROM. Se supone al registro EEADR cargado
; con la direccin a leer. En EEDATA aparecer el dato ledo.
;
EEPROM_R
bsf STATUS,RP0
;Seleccin de banco 1
bsf EECON1,RD
;Orden de lectura
bcf STATUS,RP0
;Seleccin de banco 0
return
;**************************************************************
Puertos de E/S
El PIC16F84 dispone de dos puertos digitales de E/S paralelos de uso general denominados
Puerto A y Puerto B.
Puerto A
El puerto A dispone de 5 lneas de la RA0 a la RA4, en la que hay que distinguir la A4 o T0CKI
(Timer 0 Clock Input) que est compartida con la entrada para el Timer 0 (TMR0) a travs de un
trigger Schmitt y que cuando se configura como salida es de drenador abierto, por lo que debe
colocarse una resistencia de polarizacin.
Diagrama de bloques de
RA3:RA0
Puerto B
El puerto B dispone de 8 lneas de E/S que van desde la RB0 a la RB7 (la lnea RB0 o INT es
compartida con la entrada de interrupcin externa). Adems, las lneas RB4 a RB7 puede
programarse una interrupcin por cambio de estado de cualquiera de estas lneas.
Diagrama de bloques de
RB7:RB4
Diagrama de bloques de
RB3:RB0
El PIC16F84A
5.12
Cuando se produce una interrupcin por cambio de estado de cualquiera de las lneas RB4 a
RB7, para lo cual las lneas deben estar adems programadas como entradas (ver registro
INTCON e Interrupciones) el valor de la patilla en modo entrada es comparado con el valor
almacenado en la bscula durante la ltima lectura del Puerto B. Los cambios en las patillas se
detectan realizando una operacin OR para la generacin de una interrupcin por cambio de
estado. Esta interrupcin puede despertar "wake up" al microcontrolador del modo de reposo
SLEEP. El usuario debe borrar la interrupcin en la Rutina de Servicio de Interrupcin RSI de una
de las siguientes maneras:
Borrando la bandera bit 3 de INTCON (RBIE).
Leyendo o escribiendo el PORTB y luego borrando el bit RBIF. Esto finaliza la condicin
"mismacht" y permite que se borre RBIF.
Una condicin "mismacht" puede producir que el bit RBIF siga a "1". Leyendo el puerto B puede
finalizar la condicin de "mismacht" y permitiendo que el bit RBIF sea puesto a "0".
Adems, todas las lneas del Puerto B disponen de resistencias internas de polarizacin
programables "pull-up" de alto valor. Cada una de las 8 resistencias pueden ser activadas o
deshabilitadas haciendo uso del bit RBPU del registro especial OPTION. Estas resistencias se
deshabilitan automticamente si una lnea es programada como salida as como durante el
proceso de Power On Reset.
Configuracin de los puertos de Entrada/Salida
Cualquier lnea puede funcionar como entrada o como salida. Sin embargo, si acta como
entrada la informacin que se introduce no se memoriza, por lo que la informacin debe ser
mantenida hasta que sea leda. Si la lnea acta como salida, el bit que procede del bus de datos
se guarda en la bscula, con lo que la informacin que ofrece esta patita permanece invariable
hasta que se reescriba este bit.
Los bits de cada puerto se configuran mediante los bits correspondientes de dos registros
especiales de control :
Registro de Datos denominados PORTA PORTB: Se pueden leer o escribir segn que el
puerto correspondiente se utilice como entrada o como salida.
Registro de Control denominado TRISA TRISB: En los registros de Control se programa el
sentido de funcionamiento de cada una de las lneas de E/S. Colocando un "0" en el
correspondiente bit del registro TRISA TRISB, la lnea queda programada como salida
mientras que colocando un "1" la lnea queda programada como entrada. Por ejemplo, si
ponemos un 0 en el bit 3 del registro TRISA la patilla RA3 ser una salida y si ponemos un 1
en el bit 4 del registro TRISB entonces la patilla RB4 ser una entrada.
Los Puertos A y B (PORTA y PORTB) se corresponden con las posiciones 5 y 6 del rea de
datos.
Cuando se produce un reset, todos los bits de los registros TRIS pasan a tener el valor 1 y todas
las lneas de E/S actan como entrada por evidentes motivos de seguridad para evitar daos
irreparables. Todas las patillas de E/S que no se empleen deben ser llevadas a +5v, regla de las
entradas CMOS, preferiblemente a travs de una resistencia para evitar que si por error se
configurasen como salidas puedan darse problemas si presentan un estado bajo.
Para mas informacin, ver "Registro TRISA y TRISB (85h y 86h)" de "Registros del PIC16F84A"
as como "Instrucciones y puertos" de "Tcnicas de programacin".
DISPOSITIVOS LGICOS MICROPROGRAMABLES
El PIC16F84A
5.13
La mxima corriente que puede suministrar una sla salida como fuente o sumidero es de
25 mA.
De todas maneras hay que tener en cuenta no superar la disipacin de potencia mxima, que se
calcula como sigue:
Pdis = VDD x (IDD - IOH) + {(VDD-VOH) x IOH} + (VOL x IOL)
VOH suele ser VDD-0,7 v y VOL 0,6 v.
El consumo de corriente (IDD) es principalmente funcin de la tensin de alimentacin y de la
frecuencia. Otros factores, como cambios en E/S, tipo de oscilador, temperatura y otros tienen
influencia en el consumo. La IDD para el PIC16F84A-4 est entre 1,8 a 4.5 mA en configuracin de
oscilador RC y XT (FOSC=4 MHz, VDD=5,5V), con las patillas como entradas y unidas a positivo.
En caso de que se necesiten utilizar perifricos que manejen mayor cantidad de corriente de la
especificada, habr que aplicar un circuito adaptador como por ejemplo buffers o transistores.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
El PIC16F84A
5.14
En la siguiente figura vemos una configuracin tpica en la que se utilizan buffers de corriente,
que proporcionan en su salida el mismo nivel lgico que la entrada pero pueden controlar
corrientes relativamente elevadas. En este caso se utiliza el ULN2803, un circuito integrado que
consiste en 8 buffers de potencia capaces de suministrar en su salida hasta 1 A, mucho ms de lo
que es capaz de soportar un PIC:
Temporizador/Contador TMR0
El temporizador/contador TMR0 es un registro de 8 bits, es decir, un particular tipo de registro
cuyo contenido es incrementado con una cadencia regular y programable directamente por el
hardware del PIC. Como es de 8 bits, el mximo de la cuenta est en 255.
El TMR0 tiene las siguientes caractersticas:
Temporizador/Contador de 8 bits.
Divisor de 8 bits programable por software.
Seleccin de reloj interno y externo.
Interrupcin por desbordamiento.
Seleccin del flanco del reloj externo.
Este registro puede usarse para contar eventos externos por medio de un pin de entrada
especial (modo contador) o para contar pulsos internos de reloj de frecuencia constante (modo
temporizador). Adems, en cualquiera de los dos modos, se puede insertar un prescaler, es decir
un divisor de frecuencia programable que puede dividir por 2, 4, 8, 16, 32, 64, 128 o 256. Este
divisor puede ser utilizado alternativamente como prescaler o del TMR0 o como postscaler del
Watch Dog Timer, segn se lo programe.
En la prctica, a diferencia de los otros registros, el TMR0 no mantiene inalterado el valor que
tiene memorizado, sino que lo incrementa continuamente.
Si por ejemplo escribimos en l el valor 10, despus de un tiempo igual a cuatro ciclos mquina,
el contenido del registro comienza a ser incrementado a 11, 12, 13 y as sucesivamente con una
cadencia constante y totalmente independiente de la ejecucin del resto del programa.
El PIC16F84A
5.15
Una vez alcanzado el valor 255, el registro TMR0 es puesto a cero automticamente
comenzando entonces a contar desde cero y no desde el valor originalmente cargado.
La frecuencia de conteo es directamente proporcional a la frecuencia de reloj aplicada al PIC y
puede ser modificada programando adecuadamente algunos bits de configuracin.
El modo temporizador se selecciona colocando a 0 el bit T0CS del registro OPTION. En este
modo, el Timer0 se incrementa con cada ciclo de instruccin (con el divisor desactivado).
El modo contador se selecciona colocando a 1 el bit T0CS del registro OPTION. En este modo,
el contador se incrementar con cada flanco de subida o de bajada del pin RA4/T0CKI. El flanco se
selecciona con el bit T0SE del registro OPTION.
Se generar una interrupcin cuando el registro TMR0 se desborda de FFh a 00h. Este
desbordamiento se indicar el el bit T0IF del registro INTCON.
En la siguiente figura est representado el esquema de bloques internos del PIC que determinan
el funcionamiento del registro TMR0:
Fosc/4 y T0CKI representan las dos posibles fuentes de seal de reloj, para el contador TMR0.
Fosc/4 es una seal generada internamente por el PIC tomada del circuito de reloj y que es igual
a la frecuencia del oscilador dividida por cuatro.
T0CKI es una seal generada por un posible circuito externo y aplicada al pin T0CKI
correspondiente al pin 3 del PIC16F84.
Los bloques T0CS y PSA son dos selectores de seal (multiplexores) en cuya salida se presenta
una de las dos seales de entrada en funcin del valor de los bits T0CS y PSA del registro
OPTION.
El bloque PRESCALER Predivisor es un divisor programable cuyo funcin es dividir la
frecuencia de conteo, interna externa.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
El PIC16F84A
5.16
El Prescaler
El PRESCALER consiste en un divisor programable de 8 bits a utilizar en el caso de que la
frecuencia de conteo enviada al contador TMR0 sea demasiado elevada para nuestros propsitos.
Se configura a travs de los bits PS0, PS1 y PS2 del registro OPTION.
La frecuencia Fosc/4 es una cuarta parte de la frecuencia de reloj. Utilizando un cristal de 4Mhz
tendremos una Fosc/4 igual a 1 MHz, con lo que la cadencia de conteo que se obtiene provoca en
TMR0 1 milln de incrementos por segundo (1/1.000.000 seg. =1MHz), que para muchas
aplicaciones podra resultar demasiado elevada.
Con el uso del PRESCALER podemos dividir la frecuencia Fosc/4 configurando oportunamente
los bits PS0, PS1 y PS2 del registro OPTION segn la siguiente tabla:
PS
2
PS1
PS
0
DIVISOR
2
250.000
125.000
16
62.500
32
31.250
64
15.625
128
7.812,5
256
3.906,25
El PIC16F84A
5.17
Banco 0
Direc
c
Nombre Bit 7
00h
INDF
01h
TMR0
Contador/Temporizador de 8 bits
6.2
02h
PCL
03h
STATUS IRP
04h
FSR
05h
PORTA
RA4
RA3
T0CKI
06h
PORTB
RB7
RB6
RB5
RB4
07h
No implementado
08h
09h
EEADR
0Ah
PCLATH -
0Bh
INTCON GIE
EEIE T0IE
RP1
RP0
TO
PD
RB3
DC
RA2
RA1
RA0
RB2
RB1
RB0
INT
RBIE T0IF
INTF RBIF
Banco 1
Direc
c
Nombre Bit 7
80h
INDF
81h
OPTION
RBP
U
82h
PCL
83h
STATUS IRP
84h
FSR
85h
TRISA
86h
TRISB
87h
No Implementado
88h
ECON1
89h
ECON2
8Ah
PCLATH -
8Bh
INTCON GIE
EEIE T0IE
INTE
RP1
T0C
S
RP0
T0SE
PSA
PS2
PS1
PS0
TO
PD
DC
EEIF
WRR WEN WR
RD
RBIE T0IF
INTF RBIF
6.3
Registro W
En la figura siguiente se representa un diagrama simplificado de la arquitectura interna de los
datos en la CPU de los microcontroladores PIC y de los microprocesadores tradicionales
relacionado con la ALU:
Podemos ver los buses por donde circulan los datos, y la Unidad Aritmtico-Lgica ALU
(Arithmetic-Logic Unit). Que es la encargada de hacer las operaciones aritmticas tales como suma
y resta, y operaciones lgicas.
Observamos que la principal diferencia entre ambos se encuentra en la ubicacin del registro de
trabajo, que para los PICs se denomina W (Working Register), y para los sistemas tradicionales es
el Acumulador.
En los microcontroladores tradicionales todas las operaciones se realizan sobre el acumulador.
La salida del acumulador esta conectada a una de las entradas de la ALU, y por lo tanto ste es
siempre uno de los dos operandos de cualquier instruccin. Por convencin, las instrucciones de
simple operando (borrar, incrementar, decrementar, complementar), actan sobre el acumulador.
La salida de la ALU va solamente a la entrada del acumulador, por lo tanto el resultado de
cualquier operacin siempre quedara en el acumulador. Para operar sobre un dato de memoria,
despus de realizar la operacin tendremos que mover siempre el acumulador a la memoria con
una instruccin adicional.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
6.4
El stack y el puntero interno que lo direcciona, son invisibles para el programador, solo se
accede a ellos automticamente para guardar o rescatar las direcciones de programa cuando se
ejecutan las instrucciones de llamada o retorno de subrutinas, cuando se produce una interrupcin
o cuando se ejecuta una instruccin de retorno de ella.
Registro INDF (00h y 80h)
El registro INDF (Indirect File) que ocupa la posicin 00 no tiene existencia fsica, por lo que no
se podr acceder a l. En realidad este registro sirve nicamente para especificar la utilizacin del
direccionamiento indirecto junto con el registro FSR. Ver el direccionamiento indirecto en "El
PIC16F84A".
DISPOSITIVOS LGICOS MICROPROGRAMABLES
6.5
6.6
En la instruccin de salto relativo, el resultado de las mismas slo afecta a los 8 bits de menor
peso. Los 5 bits de mayor peso se suministran desde PCLATH. En las instrucciones GOTO y CALL
se efectua la misma operacin teniendo presente que el PC se codifica mediante 11 bits y se
suministran en la propia instruccin, desde el cdigo OP. Los dos bits de ms peso del PC de
cargan con los bits 4 y 3 del registro PCLATH.
Dado que la memoria de programa se organiza en pginas de 2 K, la posicin de la memoria la
indican los 11 bits de menor peso del PC y los 2 bits de mayor peso indican la pgina.
A continuacin se muestra como se carga el PC:
El reset pone a 0 todos los bits de PCL y PCLATH haciendo que el reinicio comience en la
direccin 0000h.
6.7
R/W0
R/W0
R-1 R-1
R/Wx
R/WR/W-x
x
IRP
RP1
RP0
/TO /PD
DC
bit 7
bit 6
bit 5
bit 4 bit 3
bit 2
bit 1
bit 0
R/W significa que el bit correspondiente se puede leer y escribir, mientras que R significa que
solamente puede ser ledo. Tambin se indica el estado que se establece tras un reset.
Bit 7, IRP: Seleccin del banco en direccionamiento indirecto. Este bit junto con el de ms
peso del registro FSR sirven para determinar el banco de la memoria de datos seleccionado.
En el PIC16X84 al disponer de dos bancos no se usa y debe programarse como 0.
Bit 6 y 5, RP0 y RP1: Register Bank Select. Seleccin de pgina o banco de la memoria con
direccionamiento directo. Cada pgina contiene 128 bytes. Como el PIC16X84 slo tiene
dos bancos nicamente se emplea RP0 de forma que cuando vale 0 se accede al banco 0 y
cuando vale 1 se accede al banco 1. Despus de un reset, RP0 se pone automticamente a
0. RP1 debe mantenerse a 0. El bit RP1 deber ser puesto a cero, ya que si no nos
saldramos del rango de memoria.
Bit 4 (flag), TO: Time Out (Tiempo acabado)
1. Se pone a 1 tras conectar la alimentacin o al ejecutar CLRWDT o SLEEP.
0. Se pone a 0 por desbordamiento del Perro Guardin WDT.
Bit 3 (flag), PD: Power Down (Apagado).
1. Se pone automticamente a 1 tras conectar la alimentacin Vdd o ejecutar
CLRWDT, que resetea el contador WatchDog.
6.8
RP
0
Banc
o
Direccin
00h a 7Fh
80h a FFh
100h a
17Fh
180h a
1FFh
6.9
Cada bit del registro INTCON tiene un significado concreto que se muestra en la siguiente tabla:
R/W0
R/W0
R/W0
R/W0
R/W0
R/W0
R/W0
R/W-x
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
6.10
6.11
R/W1
R/W-1
/
INTEDG T0CS T0SE PSA
RBPU
PS2
PS1
PS0
Bit 7
Bit 2
Bit 1
Bit 0
R/W-1 R/W-1
Bit 6
R/W1
Bit 5
R/W1
Bit 4
R/W1
Bit 3
Bit 7, /RBPU (RB Pull Up). Conexin de las resistencias de polarizacin del Puerto B. Se
conectan todas cuando el puerto B actua como entrada.
1: Todas las resistencias son desconectadas.
0: Las resistencias se activan de forma individual.
Bit 6, INTDEG (INTerrupt EDGe). Selecciona el tipo de flanco para la interrupcin externa.
Este bit indica el tipo de flanco de la seal externa que ha de provocar una interrupcin en la
patilla RB0/INT.
1: La interrupcin es producida por el flanco ascendente o de subida.
0: La interrupcin es producida por el flanco descendente o de bajada.
Bit 5, T0CS (Timer 0 Signal Source). Seleccin de la fuente de reloj para el TMR0.
1: TMR0 se usa en modo contador de los pulsos introducidos a travs de RA4/T0CKI
0: TMR0 se usa en modo temporizador haciendo uso de los pulsos de reloj internos
(Fosc/4).
Bit 4, T0SE (Timer 0 Signal Edge). Tipo de flanco activo de T0CKI (patilla RA4/T0CKI).
1 = El TMR0 se incrementa con el flanco descendente de la seal aplicada a
RA4/T0CK1.
0 = El TMR0 se incrementa con el flanco ascendente.
Bit 3, PSA (PreScaler Assignement). Se usa para la asignacin del divisor de frecuencias o
Prescaler.
1 = El divisor de frecuencia se asigna al WDT.
0 = El divisor de frecuencia se asigna a TMR0.
Bits 0, 1 y 2, PS0, PS1 y PS2 (Prescaler Rate Select Bits). Configura la tasa del valor del
divisor de frecuencia o prescaler. Difiere dependiendo que se haya asignado al TMR0 o al
WDT.
PS
2
PS
1
PS
0
Divisor
TMR0
Divisor
WDT
1:2
1:1
1:4
1:2
1:8
1:4
1:16
1:8
1:32
1:16
1:64
1:32
1:128
1:64
1:256
1:128
6.12
U-0
U-0
R/W0
R/W-x
R/W-0
EEIF
WRER
R
WREN WR
RD
Bit 3
Bit 2
Bit 0
R/S0
Bit 1
R/S-0
6.13
Para leer una posicin de memoria, se debe escribir la direccin en el registro EEADR y colocar
a '1' el bit de control RD. El dato estar disponible en un prximo ciclo de instruccin, normalmente
en el siguiente, en el registro EEDATA hasta que se lea otro o se escriba en este registro.
Para escribir un dato en la EEPROM, se debe primero colocar la direccin en el registro EEADR
y el dato en el registro EEDATA. Luego. Despus se debe seguir una secuencia especfica para
comenzar a escribir cada byte, para garantizar no escribir datos en la EEPROM por error. La
secuencia es:
MOVLW 55h
MOVWF EECON2
MOVLW AAH
MOVWF EECON2
BSF EECON1,WR
Adems, el bit WREN del registro EECON1 debe estar puesto a '1' para habilitar la operacin de
escritura.
Ms informacin en Uso de la EEPROM.
Registro EECON2 (89h)
Este registro no est implementado fsicamente, por lo cual no se puede leer. Tan slo sirve para
un proceso de proteccin de escritura que consiste en copiar en l unos datos especficos, con el
fin de evitar que un programa por error pueda programar la EEPROM, manipulando simplemente
los bits del EECON1.
Lo veremos mas adelante en Uso de la EEPROM.
Estado predeterminado de los registros
En la siguiente tabla, se muestran los estados que tienen los registros al alimentar el PIC,
despus de un reset y al salir del modo SLEEP.
Leyenda:
( u ) = no cambia
( x ) = desconocido
( - ) = no existe, se lee como 0
( ? ) = depende de otras condiciones
Notas:
Uno o ms bits de INTCON pueden quedar afectados a causa de la salida del modo SLEEP.
Cuando la salida del modo SLEEP se produce por una interrupcin y GIE est activado, el
PC se carga con el vector de interrupcin (0004 h).
Las posibles fuentes de reset afectan de forma diversa a los contenidos de los diferentes
registros de control, de estado o de datos. En la descripcin de cada registro se indica el estado de
los bits despus de un reset de alimentacin. Es aconsejable examinar esta tabla despus de un
reset antes de cualquier utilizacin, excepto en el caso de que se reinicie por programa cada
registro.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Registro
Conexin
de la
Direc.
alimentac
.
en modo
normal
en modo
SLEEP
Reset por
WDT
en modo
normal
6.14
por
interrupcin
PC + 1
PC + 1
PC
000 h
000 h
000 h
000 h
xxxx xxxx
uuuu uuuu
uuuu uuuu
uuuu uuuu
INDF
00 h
---- ----
---- ----
---- ----
---- ----
---- ----
---- ----
TMR0
01 h
xxxx xxxx
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
PCL
02 h
0000
0000
0000 0000
0000 0000
0000 0000
PC+1
PC+12
STATUS
03 h
0001
1xxx
000u uuuu
0001 0uuu
0000 1uuu
uuu0 0uuu
uuu1 0uuu
FSR
04 h
xxxx xxxx
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
PORT A
05 h
---x xxxx
---u uuuu
---u uuuu
---u uuuu
---u uuuu
---u uuuu
PORT B
06 h
xxxx xxxx
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
EEDATA
08 h
xxxx xxxx
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
EEADR
09 h
xxxx xxxx
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
PCLATC
H
0A h
---0 0000
---0 0000
---0 0000
---0 0000
---u uuuu
---u uuuu
INTCON
0B h
0000
000x
0000 000u
0000 000u
0000 000u
uuuu
uuuu1
uuuu uuuu1
INDF
80 h
---- ----
---- ----
---- ----
---- ----
---- ----
---- ----
OPTION
81 h
1111 1111
1111 1111
1111 1111
1111 1111
uuuu uuuu
uuuu uuuu
PCL
82 h
0000 000
0
0000 0000
0000 0000
0000 0000
PC+1
PC+12
STATUS
83 h
0001
1xxx
000u uuuu
0001 0uuu
0000 1uuu
uuu0 0uuu
uuu1 0uuu
FSR
84 h
xxxx xxxx
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
TRIS A
85 h
---1 1111
---1 1111
---1 1111
---1 1111
---u uuuu
---u uuuu
TRIS B
86 h
1111 1111
1111 1111
1111 1111
1111 1111
uuuu uuuu
uuuu uuuu
EECON1
88 h
---0 x000
---0 ?000
---0 ?000
---0 ?000
---u uuuu
---u uuuu
EECON2
89 h
---- ----
---- ----
---- ----
---- ----
---- ----
---- ----
PCLATC
H
8A h
---0 0000
---0 0000
---0 0000
---0 0000
---u uuuu
---u uuuu
INTCON
8B h
0000
000x
0000 000u
0000 000u
0000 000u
uuuu
uuuu1
uuuu uuuu1
6.14
CP
CP
CP
CP
CP
CP
CP
CP
CP
B9
B8
B7
B6
B5
B4
R/W
R/W
R/W
/
FOSC
WDTE
PWRTE
1
B3
B2
R/W
FOSC
0
B1
B0
CP
Activando CP, Code Protection, tendremos la garanta de que el cdigo escrito en el PIC no
pueda ser ledo por otra persona, para que no se copie, modifique, etc. Esto no impide que el PIC
funcione como siempre, ni que no se pueda sobrescribir su contenido. Lo nico que nos impide es
leerlo.
PWRTE
Si activamos el bit PWRTE, conseguimos que se genere un retardo en la inicializacin del
microcontrolador. Esto se utiliza para que la tensin se estabilice, por lo que se recomienda su uso.
WDTE
El "perro guardin" del PIC se configura aqu. Con esto el PIC tiene la capacidad de
autorresetearse. Es til ante problemas que impidan el funcionamiento del programa del PIC, como
un bucle infinito, el WDT lo sacar de l resetendo al PIC.
Su funcionamiento es sumamente sencillo. Simplemente es un registro que debemos borrar cada
cierto tiempo. Si pasa un tiempo (entre 2.5ms y 2.5 seg) y el registro no ha sido borrado, el PIC se
resetea. La instruccin para borrar el registro es CLRWDT. Con poner un par de ellos a lo largo de
nuestro cdigo es suficiente para tener una garanta de que nuestro PIC no se quede "colgado".
FOSC1, FOSC0
Mediante FOSC1 y FOSC0 controlamos el modo de oscilacin que usar el PIC para funcionar. El
oscilador se puede configurar de 4 maneras distintas, dependiendo de la velocidad y del tipo de
circuito oscilador empleado.
XT: Tendremos que disponer de un cristal de cuarzo y dos condensadores. Esto permitir
generar los pulsos necesarios para el microcontrolador con una frecuencia determinada. La
exactitud es muy alta, por lo que se recomienda para casi todas las aplicaciones. El valor del
cristal generalmente ser de 4Mhz (como mximo) y los condensadores sern cermicos de
entre 15 y 33 nF.
RC: Este es el sistema ms sencillo y econmico. Se basa en un montaje con una
resistencia y un condensador. La velocidad a la que oscile el PIC depender de los valores
del condensador y de la resistencia. La mxima frecuencia que podremos emplear con este
sistema ser de 5.5MHz (con el PIC16F84A-20).
HS: Para cuando necesitemos aplicaciones de alta velocidad, entre 4 y 20 Mhz. Este
montaje se basa tambin en un cristal de cuarzo, como el XT.
LP: (Low Power) Esta modalidad permite un descenso del consumo en el PIC gracias a que
la frecuencia de oscilacin es menor que en la configuracin XT. Al igual que con XT y HS,
necesitaremos un cristal de cuarzo (de 32 a 200 KHz) y dos condensadores.
Programar la palabra de configuracin
Existen dos maneras de programar la palabra de configuracin:
1) Cuando se programa el PIC. En todos los programadores es posible activar o desactivar estas
opciones a nuestra conveniencia. En la siguiente figura puede verse una captura del programa
ICProg, el ms extendido en la programacin de microcontroladores y en la parte derecha, las
opciones de configuracin.
ensamblador con los valores por defecto. Podemos hacer que estos valores cambien introduciendo
una lnea de cdigo en el nuestro algoritmo. Este cdigo est contenido en el fichero que incluimos
en la cabecera (P16F84A.INC):
_CP_ON
EQU H'000F' ; Activa code protect
_CP_OFF
EQU H'3FFF' ; Desactiva code protect
_PWRTE_ON
EQU H'3FF7' ; Activa power on reset
_PWRTE_OFF
EQU H'3FFF' ; Desactiva power on reset
_WDT_ON
EQU H'3FFF' ; Activa Watchdog
_WDT_OFF
EQU H'3FFB' ; Desactiva Watchdog
_LP_OSC
EQU H'3FFC' ; Oscilador LP
_XT_OSC
EQU H'3FFD' ; Oscilador XT
_HS_OSC
EQU H'3FFE' ; Oscilador HS
_RC_OSC
EQU H'3FFF' ; Oscilador RC
Como podemos ver los nombres de las etiquetas son bastante intuitivos. Este cdigo debe situarse
al principio del programa, despus del tipo de PIC a usar y de la definicin de las etiquetas. La
lnea de configuracin siempre comienza con la directriz __CONFIG y cada opcin debe estar
separada de otra con el carcter & . Veamos un ejemplo:
LIST P=PIC16F84A ; Pic a usar
#INCLUDE <P16F84A.INC> ; Lista de etiquetas de microchip
; Bits de configuracin. Configuran opciones externas de hardware para la programacion
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
En este ejemplo, Code Protect y Watchdog Timer estn desactivados, Power on Reset en
cambio est activado, y el cristal usado no supera los 4 MHz.
Cuando cargemos el archivo del PIC en el programador (por ejemplo, en Ic-Prog), estarn
marcadas las opciones que hemos configurado en el cdigo. Aunque lo hayamos hecho as,
podemos cambiar estas opciones en la ventana del programador.
Oscilador
Todo microprocesador o microcontrolador requiere de una seal de reloj que sincronice su
funcionamiento. Esta seal se obtiene mediante un oscilador de frecuencia.
Existen microcontroladores que tienen un oscilador interno y no requieren de componentes
externos. El microcontrolador PIC16F84 requiere de un circuito externo de oscilacin o generador
de pulsos de reloj.
La frecuencia de reloj mxima es de 4 MHz para el PIC16F84A-04 y de 20 MHz para el
PIC16F84A-20.
El PIC16F84 puede utilizar cuatro tipo diferentes configuraciones de reloj. La eleccin depender
de la precisin y velocidad que requiramos; por otro lado, el coste tambin es un aspecto a tener
en cuenta a la hora de elegir uno u otro.
En el momento de programar el microcontrolador se deber especificar en los parmetros el tipo
de oscilador que utilizamos en el circuito electrnico. En ese momento, se programan dos bits de
configuracin denominados FOSC1 y FOSC2. Por ejemplo si la frecuencia de trabajo es de 20
MHz entonces la configuracin del microcontrolador deber estar en "HS"; pero si la frecuencia de
trabajo es de 4 Mhz entonces la configuracin del microcontrolador deber estar en "XT".
Existen 4 modos de oscilador para el PIC16F84A. Tres (LP,XT y HS) utilizan cristal de cuarzo y el
La condicin ms importante para que este oscilador funcione es que los condensadores C1 y C2
debern ser iguales. En una tabla mas adelante estn reflejados algunos valores de los
condensadores C1 y C2.
Debe utilizarse una resistencia en serie (Rs) para cristales AT.
XT (XTal): Oscilador estndar de cristal de cuarzo, desde una frecuencia de 100 kHz hasta un
mximo de 4 MHz para el PIC16F84A-04.
LP (Low Power): Con cristal de cuarzo desde 32 a 200 KHz. Este oscilador es igual que el
anterior, con la diferencia de que el PIC trabaja de una manera distinta. Este modo est destinado
para trabajar con un cristal de menor frecuencia, que, como consecuencia, har que el PIC
consuma menos corriente. Es el modo ideal para el PIC16LF84A-04.
HS (High Speed): Alta velocidad, tambin con cristal de cuarzo de 4 a 20 MHz. Habremos de usar
esta configuracin cuando usemos cristales mayores de 4 MHz. Es el modo adecuado para un
PIC16F84A-20.
Seleccin de condensadores para osciladores de cristal.
Modo
Frecuenci
a
LP
32 Khz
200 Khz
68 - 100 pF 68 - 100 pF
15 - 33 pF 15 - 33 pF
XT
100 Khz
2 Mhz
4 Mhz
100 - 150
pF
15 - 33 pF
15 - 33 pF
100 - 150
pF
15 - 33 pF
15 - 33 pF
HS
4 Mhz
20 Mhz
15 - 33 pF
15 - 33 pF
15 - 33 pF
15 - 33 pF
OSC1/C1
OSC2/C2
La tensin de alimentacin
El valor de la resistencia
El valor del condensador
La temperatura de funcionamiento
Si nos damos cuenta, para algunos valores del voltaje, el valor de frecuencia se hace verdadero
para la expresin de la frecuencia que da la frmula:
f=RxC
Donde C est expresado en Faradios y R en Ohmios. Por desgracia el punto en el que coincide la
frecuencia y el voltaje no es lineal para todos los valores de V.
En la siguiente grfica tenemos que la mxima frecuencia que podr ser obtenida es de unos 1,8
Mhz colocando un condensador de 100 pF.
Finalmente en la tercera grfica tenemos que la mxima frecuencia obtenida con un oscilador RC
es de unos 15 Mhz utilizando un condensador de 22 pF.
Oscilador externo
A continuacin se exponen dos configuraciones que se pueden emplear con tres de los cuatro
modos de funcionamiento: XT, HS LS. En ambos casos se utiliza un oscilador externo.
Conviene recordar que segn la frecuencia de la seal inyectada, debemos usar la opcin LP para
frecuencias comprendidas entre 32 y 200 KHz, la opcin XT para frecuencias situadas entre los
100 KHz y los 4 MHz, y la opcin HS para frecuencias comprendidas entre 4 y 20 MHz
(dependiendo esta ltima de la velocidad mxima permitida por el PIC).
Como se puede observar, todos los circuitos oscilatorios que se conectan al PIC a travs de una
sola patilla, van conectadas a la entrada OSC1, dejando la entrada OSC2 abierta.
Oscilador TTL
Este tipo de oscilador est basado en un cristal que contiene toda la circuitera para generar una
onda cuadrada. Este ha de ser conectado como si de un generador de seal externa se tratase. Al
incluir toda la circuitera esto lo convierte en la opcin ms costosa; pero resulta una forma
interesante por la precisin en la seal de reloj emitida.
Estos tipos de cristales estn diseados especialmente para tecnologas TTL. La frecuencias
disponibles para esta versin de cristal son muy amplias y las mas usuales son 1 - 1.8432 - 2 - 4 8 - 10 - 11.059 - 12 - 14.31818 - 16 - 20 - 25 - 32 - 33 - 40 - 50 - 80 y 100 Mhz.
En la imagen siguiente se muestra como debe conectarse al microcontrolador y las caractersticas
del cristal.
El reset
Cuando se ejecuta un reset, se producen dos acciones importantes.
El contador de programa se vuelve a colocar en el principio del programa (0000 h).
Los registros modificados vuelven a su estado por defecto.
El reset puede ser provocado por 3 causas diferentes que dan origen a 5 modos:
En todos los casos, salvo en el quinto, el contador de programa PC se pone a 0000 h (vector de
reset), donde debe encontrarse la primera instruccin ejecutable del programa. Adems todos los
registros especficos (SFR) son colocados en estados predeterminados (ver Estado
predeterminado de los registros especficos en Registros del PIC16F84A).
En el quinto caso, cuando se produce un desbordamiento del WDT mientras el PIC est en modo
SLEEP, no se produce un reset propiamente dicho, sino que el PIC se sale del modo SLEEP, se
Alimentacin
Despertar desde
SLEEP
PWRT habilitado
PWRT
deshabilitado
XT, HS, LP
72 ms + 1024
TOSC
1024 TOSC
1024 TOSC
RC
72 ms
La resistencia de 100 ohmios puede eliminarse del circuito al no existir peligro de que en MCLR
aparezcan tensiones menores de VSS. Pero debera mantenerse si se coloca un condensador en
paralelo al pulsador.
Origen del reset
Es posible distinguir por software el origen del reset, para lo que basta con leer los bits TO (Timer
Out) y PD (Power Down) del registro de estado como se muestra el la tabla siguiente:
TO PD ORIGEN DEL RESET
0
Las interrupciones
El sistema de interrupciones consiste en un mecanismo por el cual un evento interno o externo,
asncrono respecto al programa, puede interrumpir la normal ejecucin de ste produciendo
automticamente un salto a una subrutina, de manera que pueda atender inmediatamente el
evento, y retomar luego la ejecucin del programa exactamente en donde estaba en el momento
de ser interrumpido.
Este mecanismo es muy til por ejemplo para el manejo de timers o rutinas que deben repetirse
peridicamente (refresco de display, antirrebote para teclado, deteccin de pulsos externos,
recepcin de datos, etc.).
Funcionamiento
Las interrupciones se comportan casi exactamente igual que las subrutinas. Desde el punto de
vista del control del programa, al producirse una interrupcin se produce el mismo efecto que
ocurrira si el programa tuviese un CALL 0004 h (una llamada a una subrutina situada en la
posicin de memoria 0004h) en el punto en que se produjo la interrupcin. En el registro de control
del sistema de interrupciones principal (INTCON) existe un bit de habilitacin general de
interrupciones GIE , que debe ser programado a 1 para que las interrupciones puedan actuar. Al
producirse una interrupcin, este bit se borra automticamente para evitar nuevas interrupciones.
La instruccin RETFIE se utiliza al final de la rutina de interrupcin, y es idntica a un retorno de
subrutina, salvo que adems coloca a uno automticamente el bit GIE volviendo a habilitar las
interrupciones. Dentro de la rutina de interrupcin, el programa deber comprobar el estado de las
banderas de interrupcin de cada una de las fuentes habilitadas, para detectar cual fue la que
caus la interrupcin y as decidir que accin tomar.
En la siguiente figura se muestra la lgica combinacional que usa el PIC16F84A para detectar una
interrupcin. Cada interrupcin se autoriza manualmente a travs del bit XXXE y despus
generalmente, a travs del bit GIE. Ver Registro INTCON .
Fuentes de interrupcin
La seal que produce la interrupcin es en realidad una sola, que resulta de la combinacin de
todas las fuentes posibles y de los bits de habilitacin.
Las fuentes de interrupcin varan con cada versin de PIC, y pueden ser, por ejemplo:
EQU
EQU
02h
00h
ORG 0X00
GOTO INICIO
; VECTOR DE RESET
; SALTA AL INICIO DEL PROGRAMA
ORG
0X04
CALL
BTFSC
GOTO
BTFSS
RETARDO
; LLAMA A RETARDO
PORTB,0
; PREGUNTA POR EL PIN RB0
SALE
; SALTA A LA ETIQUETA SALE
INTCON,1
; CONFIRMA SI LA INTERRUPCION FUE
; CAUSADA POR EL PIN INT
GOTO SALE
; SALTA A LA ETIQUETA SALE
INCF CONTA
; INCREMENTA EL CONTADOR
MOVF CONTA,W
; CARGA W CON EL CONTADOR
XORLW 0X0A
; XOR PARA VER SI ES IGUAL A 0Ah
BTFSC STATUS,Z
; PRUEBA SI EL CONTADOR LLEG A 0Ah
CLRF CONTA
; SI LLEG A 10 PASA A 0
MOVF CONTA,W
MOVWF PORTA
CALL RETARDO
SALE
BCF
RETFIE
INTCON,1
; PONE A CERO LA BANDERA DE INTERRUPCION
; REGRESA AL PROGRAMA PRINCIPAL
RETARDO
MOVLW .100
MOVWF LOOPS
TOP2
MOVLW .110
TOP
MOVWF LOOPS2
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOPS2
GOTO TOP
DECFSZ LOOPS
GOTO TOP2
RETLW 0
INICIO
.......
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.2
Introduccin
El juego de instrucciones de un microprocesdor o microcontrolador es el conjunto de entradas
binarias que producen acciones definidas durante un ciclo de instruccin. Un juego de
instrucciones es para el microcontrolador lo mismo que una tabla de verdad es para una puerta
lgica, un registro de desplazamiento o un sumador. Por supuesto, las acciones que realiza un
microcontrolador con cada instruccin, son ms complejas que las que realizan los dispositivos y
puertas antes mencionados.
Una instruccin es un patrn de dgitos binarios el cual debe estar a disposicin del
microcontrolador en el tiempo y forma que ste lo requiera.
Por ejemplo, cuando el procesador de un microcontrolador PIC16F84A recibe el patrn binario
de 12 bits '0000 0100 0000' en el momento adecuado, significa: Clear (borrar o poner a cero) el
registro W, y corresponde a la instruccin CLRW.
En instrucciones del PIC16F84A se muestra el juego de instrucciones completo del PIC16F84A
Para los PIC se han creado unas instrucciones y una estructura de programa que los hacen ms
sencillos y atractivos todava..
Las instrucciones de los microcontrolador PIC cumplen con las siguientes condiciones:
Juego de instrucciones reducido: Por ejemplo, solo existen 35 instrucciones en el
PIC16F84A.
Sencillas y rpidas: La mayora se ejecuta en un ciclo de instruccin, y solo las de salto
precisan 2 ciclos. El ciclo de instruccin consta de 4 ciclos de reloj principal. De esta manera
un dispositivo con un cristal de cuarzo de 20 MHz realiza 5 millones de instrucciones por
segundo.
Ortogonalidad: La ubicacin de los operandos que manejan es muy flexible. Cualquier objeto
del procesador puede actuar como origen o como destino.
Formato uniforme de las instrucciones: Todas las instrucciones tienen una longitud fija de
bits. Esta caracterstica significa un notable ahorro de la memoria de programa y una
facilidad en la construccin de compiladores.
Formato uniforme de los datos.
Un programa es una serie de instrucciones mediante las cuales un sistema basado en CPU
realiza una tarea en particular y la forma mas simple de realizar un programa es mediante el
lenguaje ensamblador (Ver Sistemas microprogramables, Lenguajes de programacin para
sistemas basados en CPU).
Podramos decir que el lenguaje ensamblador "es complejo por su sencillez". Esto quiere decir
que, a diferencia de los lenguajes de alto nivel, aqu no hay funciones que solucionen y
simplifiquen algoritmos, si no que hay que implementar hasta los pasos ms elementales.
Programa en ensamblador
Para introducir un programa en ensamblador en un sistema basado en CPU tenemos que
traducirlo a hexadecimal o a binario. Para realizarlo a suvez se utiliza un programa de ordenador,
llamado programa ensamblador. ste sera un ejemplo de programacin en ensamblador o
mnemnicos:
org 0
start movlw 0Eh
movwf REG1
movlw 100
addwf REG1,1
end
Desventajas del ensamblador
Existe una gran diferencia entre el juego de instrucciones de un sistema basado en CPU y las
tareas que este debe realizar. Las instrucciones tienden a hacer cosas como: sumar contenidos de
dos registros, desplazar el contenido de un acumulador un bit, o colocar un nuevo valor en el
contador de programa.
Por otro lado, centrandonos en el caso de los microcontroladores, este deber hacer cosas
como: reaccionar cuando una entrada digital se activa, comprobar si un valor analgico se ha
excedido de un cierto umbral, activar un rel en un momento determinado, mostrar resultados en
un panel LCD, comunicarse va serie con otros dispositivos, etc. El programador en lenguaje
ensamblador debe "traducir" estas tareas a secuencias de simples instrucciones. Esto no suele ser
fcil y consume tiempo de trabajo.
Otro inconveniente es la no portabilidad. Cada microprocesador o microcontrolador posee su
propio juego de instrucciones en el y su propia arquitectura interna.
Un programa en ensamblador escrito para el PIC16F84A, no correr en un 65C02, Z80, 8080,
8051, o cualquier otro sistema basado en CPU. Incluso dentro de los PIC hay diferencias entre las
distintas gamas como nmero y tipo de instrucciones, recursos disponibles, direccin de registros o
uso de la memoria.
Para solucionar estos problemas estn los programas de alto nivel, como el lenguaje C o Basic.
Mnemnicos
La tarea principal del ensamblador es la traduccin de los cdigos de operacin en mnemnico
en sus equivalentes binarios.
El ensamblador realiza sta tarea usando una tabla como si lo hicisemos "a mano" pero
adems debe determinar cuantos operandos requiere la instruccin y de que tipo. Esto es un poco
complejo; algunas instrucciones (como CLRW, SLEEP) no tienen operandos, otras (ADDLW 13,
GOTO FIN) tienen una, mientras que otras (BSF STATUS,C o BTFSS PORTA,O) requieren dos.
Identificacin de elementos
Flags o Banderas
Los Flags o banderas son marcadores, representados por bits dentro del registro de STATUS,
los mas importantes son:
Z: Flag de cero, se pone a 1 cuando una operacin que le afecta da como resultado un 0.
C: Flag de Carry, se pone a 1 cuando la operacin que le afecta sobrepasa el nivel de
representacin del procesador, en nuestro caso es 8 bits, de esta manera si sumamos a
1111 1111 b un 0000 0011 b el resultado seria 0000 0010 b y el bit de Carry pasara a 1.
DC: Flag de carry del nibbles inferior, este se comporta igual que el bit de Carry, solo que el
limite de representacin son los 4 bits inferiores, de esta manera si tenemos 0000 1111 b y
sumamos 0000 0111 b, el resultado ser 0001 0110 b y el bit de DC se pone a 1, el bit de
Carry estar a 0 al no superarse los 8 bits y el bit Z a 0 al ser el nmero diferente de 0.
Registros
Un registro es un espacio en la memoria de datos del microcontrolador en el que podemos
guardar informacin, existen tambin unos registros en los cuales podemos configurar el
microcontrolador o saber el estado de este o algunos de sus perifricos.
Un registro est compuesto por 8 bits los cuales se representan dndoles un numero segn su
posicin, de esta manera el bit menos significativo (LSB) se le da el nmero 0 y el ms significativo
(MSB) el 7.
BIT
7 6 5 4 3 2 1 0
REGISTR
O
X X X X X X X X
CLRF
Clear f
Operacin
00 h f
1Z
[Etiqueta] CLRF f
Sintaxis
Operadores
Ciclos
00
OPCODE
Descripcin
0001
1fff
ffff
El OPCODE de CLRF f es en binario "0000011fffffff" donde "fffffff" se sustituira por el registro que
se quiera borrar. f es una de las abreviaturas que se utilizan para describir las instrucciones del PIC
usados en el lenguaje ensamblador y que son:
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.3
03,5
podemos poner:
BSF
STATUS,5
w (working register)
w da nombre al acumulador de los PICs, el cual lo vimos anteriormente cuando tratamos los
registros. Este no es un registro situado en un banco de memoria, si no que es independiente. A
diferencia que el anterior, cuando nos referimos a l, nos referimos al contenido. Su uso es muy
sencillo, pues lo usaremos principalmente para pasar informacin de un registro a otro, o para
contener la informacin entre dos o ms instrucciones.
b (bit addres dentro de un registro)
Esta letra define la direccin de un bit dentro de un byte. En ciertas ocasiones en vez de
modificar o acceder a bytes tendremos que modificar o acceder a bits. De esta manera podemos
especificar a una instruccin que posicin ocupa el bit sobre el cual recaer la accin que esta
ejecute. Al igual que en los registros especiales, podemos poner directamente el nombre de un bit
dentro de un registro.
Ejemplo:
En lugar de:
BSF
STATUS,5
ponemos:
BSF
STATUS,RP0
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.4
l o k (literal)
Este valor ser almacenado en la propia instruccin en tiempo de ensamblado, esto significa que
son los valores que introducimos en las instrucciones para que trabaje con ellos
(independientemente de los datos que podamos almacenar o contener en la EEPROM de datos).
El valor que podemos introducir dentro de un literal est comprendido entre 0 y 255, ya que es el
mximo que puede representar un byte.
d (destiny bit)
Donde encontremos esta letra, debemos especificar donde se almacenar el resultado de una
instruccin, en w o en un registro. Puesto que esto no es un lenguaje de alto nivel, no podemos
almacenar el resultado de una operacin sobre una tercera variable o registro, as que este deber
ser almacenado en el registro origen (sobrescribindose), o en el acumulador. Esto se define a
travs de dos valores:
1: El resultado se almacenar en f.
0: El resultado se almacenar en w.
Estructura de un programa en ensamblador
Para hacer la tarea del programador ms grata, se usan algunas convenciones. Cada uno puede
adoptar las que ms le agraden y ayuden para ser ms productivo. En general, las convenciones
son cualquier accin que facilita la revisin y comprensin de un programa, especialmente el que
uno mismo ha escrito cuando tiene que revisarlo algunos meses despus. Comentamos algunas
convenciones que usaremos:
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.9
Hemos visto la estructura general. Ahora veremos la posicin de los elementos del cdigo por 4
columnas:
de operacin es el nico que nunca puede estar vaco; ste siempre contiene una
instruccin o una directiva del ensamblador.
Columna 3: Operandos El campo de operandos o de direccin puede contener una
direccin o un dato, o puede estar en blanco. Normanmente contendr registros o literales
con los que se operar (f, l o k , b y w).
Columna 4: Comentario. El campo del comentario o de etiquetas es opcional. Aqu se
situar cualquier comentario personalizado que deseemos. Estos son tiles para saber qu
hace un programa sin tener que descifrar el cdigo entero. El compilador (ensamblador)
ignorar todo texto ms all del carcter punto y coma ";".
Los comentarios generalmente se sitan en la cuarta columna para describir la accin de una
lnea de cdigo, pero pueden situarse en cualquier parte de programa para describir cualquier otro
evento, siempre que estn despus del carcter ";" (semicolon en ingls).
Normalmente las columnas son separadas por una tabulacin. El espacio mnimo entre dos
columnas es de un carcter, que puede ser un espacio en vez de una tabulacin.
Delimitadores (separacin entre campos)
Los campos van separados slo con espacios y/o tabulaciones. No agregue nunca otros
caracteres (comas, puntos, etc.)
No utilice espacios extra, particularmente despus de comas que separan operandos.( Ej:
movlw 5, w )
No use caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas.
Etiquetas (label)
Las etiquetas se sitan a la izquierda de las instrucciones y sirven para agrupar fragmentos de
cdigo. Estos fragmentos pueden ser de dos tipos:
El primer tipo no es un fragmento tal cual, si no que es un punto del programa al que
podremos saltar de manera incondicional a travs de la instruccin adecuada.
El segundo tipo es denominado subrutina. Este empieza con una etiqueta y acaba con la
instruccin RETURN o RETLW, que veremos ms adelante.
Deberemos tener en cuenta:
La etiqueta es el primer campo en una lnea en lenguaje ensamblador y puede no existir.
Si una etiqueta est presente, el ensamblador la define como el equivalente a la direccin
del primer byte correspondiente a esa instruccin.
Esta etiqueta puede volver a usarse en otro lugar pero como operando de una instruccin. El
ensamblador reemplazar sta etiqueta por el valor de cuando fue creada. Se usan
frecuentemente en las instrucciones de salto.
No puede existir ms de una etiqueta en la primera columna o primer campo de instruccin.
No pueden usarse como nombres de etiquetas a palabras ya reservadas por el ensamblador
( ORG, EQU, etc.) o nombres de instrucciones ( movlw, call, nop, etc.)
Ejemplo:
DATO
EQU
05h
ejecutada.
No se permite el uso de nmeros o caracteres no alfabticos como primera letra de la etiqueta.
Como regla prctica: usar siempre letras, y en mayscula, al menos la primera.
Ejemplos:
TABLA2X2 Perrmitido
+PESO NO permitido!
=>SALIDA NO permitido!
-SALTO NO permitido!
5ALFA NO permitido!
Dato1 Permitido
Dato2 Permitido
Loop_A Permitido
Operandos y direcciones
Los ensambladores permiten elegir con libertad el tipo de elemento a colocar en el campo de
operando o direccin.
Sistemas de numeracin
Los ensambladores aceptan nmeros Hexadecimales, octales, binarios o decimal. Esta es la
forma de representarlos:
Hexadecimal:
0A00h
$0A00
Binario:
%01001011
B'00100101'
01011010b
Octal:
@123
123Q
Decimal:
D'250'
.250
Ejemplo:
movlw .100
Significa: "mover el nmero literal 100 en decimal al registro de trabajo W"
Ya hemos indicado que MPLAB es el entorno de desarrollo de Microchip e incluye el
ensamblador MPASM, para obtener informacin sobre la convencin utilizada por este ver MPASM,
el ensamblador de Microchip
Nombres
Los nombres pueden aparecer en el campo de operando; stos son tratados como el dato que
Directiva EQU
El nombre viene de la palabra "equal", (igual)". La directiva EQU permite al programador
"igualar" nombres personalizados a datos o direcciones. Los nombres utilizados se refieren
generalmente a direcciones de dispositivos, datos numricos, direcciones de comienzo, direcciones
fijas, posiciones de bits, etc. Un nombre es ms descriptivo que una simple direccin y la tarea de
programar se har mucho ms sencilla. Tambin podemos asignar un nombre a una instruccin
que repitamos varias veces a lo largo de un algoritmo, de manera que sea mucho ms sencilla la
programacin. A estos nombre que asignamos mediante esta directiva se les denomina constantes,
ya que el registro al que apuntan no variar durante el programa
Ejemplos:
temp equ 12
DATO EQU 22
PORT_A EQU 5
START EQU 0
CARRY EQU 3
TIEMPO EQU 5
Bank_1 EQU BSF STATUS,RP0
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.5
Estas lneas tambin pueden estn incluidas en un archivo aparte al ASM (vase directiva
INCLUDE).
No siempre es necesario que con esta directiva se igualen posiciones de memoria a las
etiquetas, ya que podemos poner nombres a datos. Podemos definir una equivalencia con el
nombre de otra equivalencia ya definida y rtealizar operaciones matemticas. Por ejemplo,
podemos calcular la frecuencia del ciclo mquina a partir de la frecuencia de reloj con la finalidad
de emplearla para hacer otros clculos de la manera que se describe a continuacin:
PORT_B EQU PORT_A+1
PORT_C EQU PORT_A+2
FIN
EQU START+100
FIN2
EQU START+200
clockrate EQU .4000000 ;frecuencia del cristal
fclk
EQU clockrate/4 ;frecuencia del reloj interno
El valor del operando debe estar ya definido anteriormente, sino el compilador entregar un
error.
Adems de esto, podemos igualar a las etiquetas cualquier otro tipo de valores que usemos,
como, por ejemplo, el cero y el 1 en el bit de destino:
W
F
EQU
EQU
0
1
Con esto ltimo, cuando usemos una instruccinen donde debamos especificar donde se
almacenar el resultado, en w o en un registro, en lugar de escribir :
1: para que el resultado se almacene en f.
0: para que el resultado se almacene en w.
Pondremos:
0x00
2) Inicia el programa en la posicin 0000h y luego pasa a la 0005h para no utilizar la posicin del
vector de interrupcin (0004 h)
ORG 0x00 ; El programa comienza en la direccin 0 y
GOTO inicio ; salta a la direccin 5 para sobrepasar
ORG 0x05 ; el vector de interrupcin, situado en la posicin 4
Inicio xxx...
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.6
3) Inicia el programa en la posicin 0000h y luego pasa a la 0005h para no utilizar la posicin del
vector de interrupcin (0004 h). Si se produce una interrupcin se pasa a la posicin interr. Las
subrutinas comienzan a partir de la direccin 0300h.
ORG 00h
;vector de reset
goto inicializa
ORG 04h
;vector de interrupcin
goto interr
ORG 05h
inicializa movlw 08h
;aqu comienza el programa
.
.
ORG 300h
;subrutinas
Subrutina1
.
.
return
Subrutina2
.
.
return
Directiva #INCLUDE
Esta directiva indica que archivos debern tomarse en cuenta a la hora de compilar el cdigo.
Normalmente se usa para incluir el archivo de PIC que el ensamblador tiene entre sus archivos,
con el cual el compilador ser capaz de reconocer todos los registros especiales y sus bits. Su uso
nos recordar al #include del lenguaje C. Esta lnea debe colocarse al principio, y tiene la siguiente
sintaxis:
#INCLUDE
En ciertas ocasiones gran cantidad errores son debidos a que el nombre del archivo puesto
entre comillas no se escribe correctamente.
Si utilizamos MPLAB, un entorno de desarrollo que proporciona gratuitamente Microchip,
dispondermos de los archivos con extension .INC para cada uno de los PIC desarrollados hasta la
aparicin de la versin de MPLAB que utilicemos. En estos archivos se definen todos los registros
as como otros elementos de acuerdo al microcontrolador que estemos utilizando.
Tambin podemos crear nuestros propios archivos "INC" con funciones, definiciones y subrutinas
que utilicemos a menudo en nuestro cdigo para evitar tener que copiarlas cada vez.
El archivo P16F84A.INC que viene con MPLAB contiene definiciones de registros, bits y bits de
configuracin. Los archivos INC pueden verse con cualquier editor de texto pero no se recomienda
modificarlos, para no perder compatibilidad con programas desarrollados por otros.
Utilizar el INC del PIC que estamos utilizando en nuestro programa no es obligatorio, y podemos
omitirlo, pero a cambio tendremos que definir los nombres de los registros que usemos o bien
llamarlos por su posicin de memoria.
Esto puede a la larga ser problemtico de manera que se recomienda utilizar los archivos INC
correspondientes al PIC que utilicemos porque adems de facilitar la creacin del programa al no
tener que recordar las direcciones reales de los registros tambin se facilita el paso de un
programa diseado para un microcontrolador hacia otro distinto.
Si utilizamos las posiciones de memoria con la direccin real, podemos hacer incompatibles las
operaciones entre registros. Por ejemplo, CLRF 0x05, borra el registro ubicado en esa direccion,
que no es ni mas ni menos que el PORTA (Puerto A) en el PIC16F84A. Pues bien, si queremos
actualizarnos a otro microcontrolador pero resulta que en este el registro 0x05 tiene otra funcin
nos ser mucho mas dificil actualizar el programa. Ahora bien, si hubisemos utilizado CLRF
PORTA, y el .INC correspondiente al nuevo microcontrolador ya se ocupar el ensamblador de
realizar las correspondencias.
Y por supuesto siempre ser mas fcil recordar PORTA que no 0x05.
Tambin permite incluir otros programas. Por ejemplo:
#INCLUDE "DISPLAY.ASM"
Esto le dice al compilador que incluya el cdigo que se encuentra en el archivo DISPLAYY.ASM
como si fuese parte del propio programa. Esto es muy util para reutilizar cdigos realizados con
anterioridad.
Directiva LIST
Este comando sirve para que el compilador tenga en cuenta sobre qu procesador se est
trabajando. Este comando debe estar en todo proyecto, situado debajo del "include", con la
siguiente sintaxis.
LIST P=PIC16F84A
Directiva END
Al igual que las dos anteriores, esta debe ir incluida una sola vez en todo el programa. En
concreto, esta debe situarse al final, para indicar al ensamblador que el programa ha finalizado.
Esta siempre debe estar presente, aunque el flujo de nuestro programa acabe en un bucle.
Directiva #DEFINE
#DEFINE es una directiva muy util. Define se usa para crear pequeas macros. Con estas
macros podremos poner nombres a pequeos fragmentos de cdigo que nos facilitarn la
realizacin y comprensin del algoritmo.
Por ejemplo, podremos poner nombres a bits.
#define CERO STATUS,2
As, en vez de tener que llamar al bit por un numero y un registro, podremos usar directamente
la palabra CERO.
#define CINCO 5
Cada vez que se utilice la palabra CINCO ser reemplazada en el momento de la compilacin
por el nmero 5.
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
8.7
OPTION,RP0
OPTION,RP0
Como cambiamos varias veces de banco a lo largo de un algoritmo, puede resultar ms prctico
ponerle un nombre.
#define BANCO1 BSF OPTION,RP0
#define BANCO0 BCF OPTION,RP0
De este modo bastar con poner BANCO1 o BANCO0 para conmutar entre los dos bancos de
memoria de manera que cada vez que se utilice la palabra BANCO1, en realidad se estar
utilizando la instruccin BSF STATUS,RPO
En el siguiente ejemplo:
#define
salida
PORTA,3
No tendremos necesidad de recordar cual era la patilla de salida, sino que solo lo
mencionaremos como salida. Cada vez que aparezca la palabra salida en el cdigo, sta ser
interpretada como PORTA,1 que es una instruccin vlida. Podemos ponerlo a cero con la
instruccin.
BCF salida
En vez de tener que poner.
BCF PORTA,3
Una cosa a tener en cuenta es que con la directiva INCLUDE, podemos prescindir del carcter
almohadilla (#), pero en el caso de la directiva DEFINE, no.
Esta directiva es muy util porque hace el cdigo ms fcil de leer y entender.
Directiva TITLE
Esta directiva no sirve de mucho, pero ser til para aquellos que quieran que el compilador
tenga en cuenta el ttulo que le ha puesto a su cdigo. Tiene la siguiente sintaxis:
TITTLE "Nombre del cdigo"
Este nombre aparecer en los archivos .lst (listados) que cree el compilador.
Directivas IF...ELSE...ENDIF
Algunos ensambladores permiten incluir o excluir partes del programa dependiendo de
condiciones que existan en el tiempo de compilacin.
La forma tpica es:
IF CONDICION
.
.
ELSE
.
.
ENDIF
Ejemplo:
SINK EQU 1 ; (cambiar por 0 en caso necesario)
IF SINK=1
BCF PORTA,0
ELSE
BSF PORTA,0
ENDIF
En este caso el valor de SINK har que el compilador utilice distintas instrucciones de cdigo.
Si la condicin es verdadera en el tiempo de compilacin, las instrucciones que estn entre IF y
ELSE se incluirn en el programa. Si la condicin es falsa se incluirn en el programa las
instrucciones entre ELSE y ENDIF.
Los usos tpicos son:
Para incluir o excluir variables extras
Para incluir cdigo de diagnstico en condiciones de testeo (DEBUG).
Para permitir datos de distintos tamaos.
Desgraciadamente, el ensamblado condicional, tiende a complicar la lectura del programa, por lo
tanto, slo debemos utilizarlo si es necesario.
Directiva MACRO
Esta directiva resulta muy potente y a diferencia de la directiva #define se pueden crear macros
ms extensas, lo que nos evitar tener que ejecutar reiteradamente fragmentos de cdigo
idnticos. Cuando una macro es invocada, esta es copiada por el ensamblador en el lugar de la
invocacin dentro del cdigo fuente. La macro se declara con la directiva MACRO, y termina con la
directiva ENDM.
Creacin de una macro denominada activar:
activar macro
CLRF PORTA
BSF PORTB,2
endm
Hemos creado una macro llamada activar de manera que en nuestro cdigo cada vez que
pongamos la palabra activar, el ensamblador la reemplazar por CLRF PORTA... etc. hasta el final
de la macro que termina con la directiva ENDM (fin macro).
Las macros permiten asignar un nombre a una secuencia de instrucciones de manera que son
tiles cuando ocurren secuencias de instrucciones repetitivas. Luego se utiliza el nombre de la
macro en el programa como si se usara la secuencia de instrucciones anterior.
Las macros no son lo mismo que las subrutinas. El cdigo de las subrutinas aparece una sola
vez en un programa y la ejecucin del programa salta a la subrutina. En cambio, el ensamblador
reemplaza cada aparicin del nombre de la macro con la secuencia especificada de instrucciones.
Por consiguiente la ejecucin del programa no salta a la macro como una subrutina.
Ejemplo:
Archivo "MULX10.ASM"
MULX10 MACRO
;comienzo de la macro
MOVF tiempo,W ;guarda el tiempo en W
RLF tiempo ;multiplica por 2
RLF tiempo ;multiplica por 2
RLF tiempo ;multiplica por 2
ADDWF tiempo ;le suma una vez ms
ADDWF tiempo ;le suma una vez ms
ENDM
;fin de la macro
Archivo "EJEMPLO1.ASM":
#INCLUDE "MULX8.ASM"
tiempo EQU 0Ch
resultado EQU 0Dh
MOVLW 20
MOVWF tiempo
MULX10
MOVWF resultado
END
Si ensamblamos "EJEMPLO1.ASM" notaremos que el listado final (EJEMPLO.LST) queda de la
siguiente forma:
tiempo EQU 0Ch
resultado EQU 0Dh
MOVLW 20
MOVWF tiempo
MOVF tiempo,W ;guarda el tiempo en W
RLF tiempo ;multiplica por 2
RLF tiempo ;multiplica por 2
RLF tiempo ;multiplica por 2
ADDWF tiempo ;le suma una vez ms
ADDWF tiempo ;le suma una vez ms
MOVWF resultado
END
endm
;enable y disable all the mascarable interrupts (16F84):
EI
macro
bsf INTCON,GIE
endm
DI
macro
bcf INTCON,GIE
endm
#define iEnable EI
#define iDisable DI
;arrancar el timer:
RESET_TIMER macro
bcf INTCON,T0IF
endm
; inicializar timer antes de hacer RESET_TIMER para que arranque.
INIT_TIMER macro dato
movlw dato
movwf TMR0
endm
jmp
macro salto
goto salto
endm
ret
macro
return
endm
;Complemento a 1 de W:
comw
macro
xorlw 0xff
endm
;Instrucciones de salto tipo Z80
jz
jnz
jc
goto _salto
endm
jnc
; ************************************************************
;
FIN
; ************************************************************
Introduccin
El PIC16F84A pertenece a la gama media y es de tipo RISC; esto quiere decir que tiene un
juego de instrucciones reducido, en concreto de 35 instrucciones o nemnicos que son la base de
funcionamiento del PIC. Al igual que los bits de los registros, sera complicado memorizarlas todas,
as que utilizaremos este documento como gua de consulta.
Las instrucciones fundamentalmente se dividen en tres tipos. Esta divisin viene dada por el tipo
de datos con los que trabajan:
Instrucciones orientadas a los registros o bytes (byte-oriented operations).
Instrucciones orientadas a los bits (bit-oriented operations).
Operaciones con literales y de control (literal and control operations).
DISPOSITIVOS LGICOS MICROPROGRAMABLES
Repertorio 35 instrucciones
Las 35 instrucciones mnemnicos de la gama media de Microchip las encontraremos
resumidas en la siguiente tabla. w es el acumulador, f representa un registro cualquiera y C, DC, Z
los flags del registro STATUS.
Instrucciones orientadas a registros
MNEMNICO
OPERANDOS
DESCRIPCIN
CDIGO OP
BANDERA
NCIC NOTAS
S
ADDWF
f,
w+fd
d
C, DC, Z
1,2
ANDWF
f,
w AND f d
d
1,2
CLRF
00 h f
CLRW
00 h w
COMF
f, Complemento de f d
1,2
d
DECF
f,
f-1d
d
1,2
DECFSZ
f,
f - 1 d (si es 0 salta)
d
Ninguna
1(2)
1,2,3
INCF
f,
f+1d
d
1,2
INCFSZ
f,
f + 1 d (si es 0 salta)
d
Ninguna
1(2)
1,2,3
IORWF
f,
w OR f d
d
1,2
MOVF
f,
fd
d
1,2
MOVWF
wf
Ninguna
NOP
No operacin
Ninguna
RLF
f,
Rota f izq por carry d
d
1,2
RRF
1,2
SUBWF
f,
f-wd
d
C,DC,Z
1,2
SWAPF
f, Intercambia nibbles de f
d d
Ninguna
1,2
XORWF
f,
w XOR f d
d
1,2
DESCRIPCIN
CDIGO OP
BANDERA
NCIC NOTAS
S
BCF
f,b
Pone a 0 bit b de
registro f
Ninguna
1,2
BSF
f,b
Pone a 1 bit b de
registro f
Ninguna
1,2
BTFSC
f,b
Ninguna
1(2)
BTFSS
f,b
Ninguna
1(2)
MNEMNICO
OPERANDOS
DESCRIPCIN
CDIGO OP
BANDERA
NCIC NOTAS
S
ADDLW
k w+kw
11 111x kkkk
kkkk
C,DC,Z
ANDLW
k w AND k w
11 1001 kkkk
kkkk
CALL
k Llamada a subrutina k
10 0kkk kkkk
kkkk
Ninguna
CLRWDT
00 0000 0110
0100
TO,PD
GOTO
k Ir a direccin k
10 1kkk kkkk
kkkk
Ninguna
IORLW
k w OR k w
11 1000 kkkk
kkkk
MOVLW
k kw
11 00xx kkkk
kkkk
Ninguna
RETFIE
Retorno de una
interrupcin
00 0000 0000
1001
Ninguna
RETLW
k Retorno con k en w
11 01xx kkkk
kkkk
Ninguna
RETURN
00 0000 0000
1000
Ninguna
SLEEP
Modo Standby
00 0000 0110
0011
TO, PD
SUBLW
k k-ww
11 110x kkkk
kkkk
C,DC,Z
XORLW
k w XOR k w
11 1010 kkkk
kkkk
Notas:
1. Al modificar un registro de E/S con una operacin sobre l mismo (por ejemplo MOVF
PORTB,1), el valor utilizado es el que se halle presente en las patillas del PORTB. Por
ejemplo, si el biestable tiene un "1" para una patilla configurada como entrada y se pone a
nivel bajo desde el exterior, el dato se volver a escribir como "0".
2. Si se ejecuta esta instruccin sobre el TMR0 y d=1, se borrar el conteo de la preescala
asignada (preescaler), si est asignado al TMR0, pero no se borrar la preescala asignada
en OPTION_REG, que controla Timer0.
3. Si se modifica el Contador de Programa PC o una condicin de prueba es verdadera, la
instruccin requiere dos ciclos mquina. El segundo ciclo se ejecuta como un NOP.
En las tablas siguientes, por orden alfabtico, veremos todos los datos de inters sobre las 35
instrucciones.
Algunos son de poca importancia. En cambio otros, como la operacin, la sintaxis, el
comportamiento del registro STATUS y los ejemplos, son imprescindibles para comprender su
funcionamiento.
Aparte de estas 35 instrucciones, hay otro tipo de instrucciones usadas para simplificar la tarea
de programar, y que generalmente estn formadas por dos instrucciones bsicas. Estas no las
trataremos a fondo, pero las veremos en un resumen despus de comprender el funcionamiento de
las 35 instrucciones bsicas.
ADDLW
ADDLW
ADD Literal to w
w+kw
Operacin
[Etiqueta] ADDLW k
Sintaxis
Operadores
Ciclos
1
11
OPCODE
111x
kkkk
kkkk
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
Al ejecutarse la instruccin
w = 10 h + 15 h = 25 h
w = 0001 0000 b + 0001 0101 b = 0010 0101 b
0001 0000 b
0001 0101 b
0010 0101 b
ADDWF
ADDWF
ADD w to F
w+fd
Operacin
Sintaxis
Operadores
Ciclos
00
OPCODE
0111
dfff
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
ffff
ADDWF FSR,0
Si antes de la instruccin. w = 17 h y FSR = C2 h como d=0
Al ejecutarse:
w = 17 h + C2 h = D9 h
FSR = C2 h
0001 0111 b
1100 0010 b
1101 1001 b
Volver a tabla
Instrucciones del P
ANDLW
ANDLW
AND Literal and w
w AND k w
Operacin
[Etiqueta] ANDLW k
Sintaxis
Operadores
Ciclos
11
OPCODE
1001
kkkk
kkkk
PA1
PA0
TO#
PD
#
DC
Instrucciones del P
ANDWF
ANDWF
AND w with F
w AND f d
Operacin
Sintaxis
Operadores
Ciclos
OPCODE
Descripcin
00
0101
dfff
Registro de STATUS
ffff
PA2
PA1
PA0
TO
#
PD
#
DC
Instrucciones del P
BCF
BCF
Bit Clear F
0 (f<b>)
Operacin
Sintaxis
Operadores
Ciclos
OPCODE
Descripcin
01
00bb
bfff
ffff
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
BCF
FLAG_REG, 7
Instrucciones del PI
BSF
BSF
Bit Set F
1 (f<b>)
Operacin
Sintaxis
Operadores
Ciclos
01
OPCODE
Descripcin
11bb
Registro de STATUS
PA2
PA1
PA0
TO
PD
DC
bfff
ffff
EJEMPLO:
BSF
FLAG_REG, 7
Instrucciones del PI
BTFSC
BTFSC
Bit Test, Skip if Clear
Salta si (f<b>) = 0
Operacin
Sintaxis
Operadores
1 (2)
Ciclos
OPCODE
Descripcin
01
10bb
PA1
PA0
ffff
Registro de STATUS
PA2
bfff
TO
PD
DC
EJEMPLO:
INICIO BTFSC FLAG,1
ES_1 GOTO PROCESO
ES_0
Si antes de la instruccin. PC = direccin INICIO
Al ejecutarse:
if FLAG<1> = 0,
PC = direccin ES_0 y seguir la ejecucin del programa.
if FLAG<1> = 1,
PC = direccin ES_1 y el programa continuar en PROCESO
Volver a tabla
Instrucciones del PI
BTFSS
BTFSS
Bit Test, Skip if Set
Salta si (f<b>) = 1
Operacin
Sintaxis
Operadores
1 (2)
Ciclos
OPCODE
Descripcin
01
11bb
bfff
ffff
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
INICIO BTFSS FLAG,1
ES_0 GOTO PROCESO
ES_1
Si antes de la instruccin. PC = direccin INICIO
Al ejecutarse:
if FLAG<1> = 0,
PC = direccin ES_0 y el programa continuar en PROCESO.
if FLAG<1> = 1,
PC = direccin ES_1 y seguir la ejecucin del programa.
Volver a tabla
Instrucciones del PI
CALL
CALL
Subrutine Call
Operacin
Sintaxis
Operandos
Ciclos
PC + 1 TOS
k PC <10:0>
PCLATCH (<4:3>) PC (<12,11>)
[Etiqueta] CALL k
0 = k = 2047
2
10
OPCODE
0kkk
kkkk
kkkk
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD#
DC
EJEMPLO:
INICIO CALL
SUB_1
Si antes de la instruccin:
PC = direccin INICIO
Al ejecutarse:
PC = direccin SUB_1
TOS = direccin INICIO +1
Volver a tabla
CLRF
Clear f
Operacin
Sintaxis
Instrucciones del PI
00 h f
1Z
[Etiqueta] CLRF f
Operadores
Ciclos
00
OPCODE
Descripcin
0001
1fff
ffff
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
REG
Si antes de la instruccin:
REG = 5A h
Al ejecutarse:
REG = 00 h
flag Z = 1
Volver a tabla
Instrucciones del
PIC16F84A
CLRW
CLRW
Clear w
Operacin
Sintaxis
00 h w
1Z
[Etiqueta] CLRW
9.15
No tiene
Operadores
Ciclos
00
OPCODE
Descripcin
0001
0000
0011
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
Instrucciones del
PIC16F84A
CLRWDT
CLRWDT
Clear watchdog Timer
Operacin
Sintaxis
00 h WDT
1 T0#
1 PD#
[Etiqueta] CLRWDT
9.16
No tiene
Operadores
Ciclos
00
OPCODE
0000
0110
0100
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
COMF
COMF
Complement f
Operacin
Instrucciones del
PIC16F84A
Complemento de f d
9.17
Sintaxis
Operadores
Ciclos
00
OPCODE
1001
dfff
ffff
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
REG1,0
Si antes de la instruccin:
REG1 = 13 h como d= 0
Al ejecutarse:
REG1 = 13 h = 0001 0011 b
w = EC h = 1110 1100 b
flag Z = 0
0001 0011 b
1110 1100 b
Volver a tabla
Instrucciones del
PIC16F84A
9.18
DECF
DECF
Decrement f
f-1d
Operacin
Sintaxis
Operadores
Ciclos
00
OPCODE
0011
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
Si antes de la instruccin:
CNT = 01 h
Z=0
Al ejecutarse:
CNT = 00 h
bit Z = 1
Volver a tabla
ffff
Descripcin
DECF
dfff
Instrucciones del
PIC16F84A
DECFSZ
9.19
DECFSZ
Decrement f , Skip if 0
f - 1 d, salta si resultado = 0
Operacin
Sintaxis
Operadores
1 (2)
Ciclos
00
OPCODE
1011
ffff
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
INICIO
DECFSZ CNT,1
GOTO
LOOP
CONTINUAR
si antes de la instruccin:
PC = direccin INICIO
Al ejecutarse: CNT = CNT -1
Si CNT = 0 entonces PC = direccin CONTINUAR
Si CNT no = 0 entonces PC = direccin INICIO + 1
Volver a tabla
dfff
Instrucciones del
PIC16F84A
GOTO
9.20
GOTO
Unconditional Branch
k PC <10:0>
(PCLATH <4:3>) (PC <12:11>)
Operacin
[Etiqueta] GOTO k
Sintaxis
Operadores
Ciclos
10
OPCODE
1kkkk
kkkk
kkkk
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
GOTO
SEGUIR
Al ejecutarse:
PC = direccin SEGUIR
Volver a tabla
Instrucciones del
PIC16F84A
INCF
9.21
INCF
Increment f
f+1d
Operacin
Sintaxis
Operadores
Ciclos
00
OPCODE
1010
dfff
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
CNT,1
Si antes de la instruccin:
CNT = FF h
flag Z = 0
Al ejecutarse:
ffff
FF h + 1 h = 00 h
CNT = 00
flag Z = 1
Volver a tabla
Instrucciones del
PIC16F84A
INCFSZ
9.22
INCFSZ
Increment f, SkIP if 0
f +1 d, salta si resultado = 0
Operacin
Sintaxis
Operadores
1 (2)
Ciclos
00
OPCODE
1111
ffff
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
INICIO
dfff
INCFSZ CNT,1
GOTO SALTO
CONTINUAR
Si antes de la instruccin:
PC = direccin INICIO
Al ejecutarse: CNT = CNT+1
Si CNT = 0
Entonces PC = direccin CONTINUAR
Si CNT no = 0
Entonces PC = direccin INICIO + 1
Volver a tabla
Instrucciones del
PIC16F84A
IORLW
9.23
IORLW
Inclusive OR Literal with w
w OR k w
Operacin
[Etiqueta] IORLW k
Sintaxis
Operadores
Ciclos
11
OPCODE
1000
kkkk
kkkk
PA1
PA0
TO
#
PD
#
DC
Instrucciones del
PIC16F84A
IORWF
9.24
IORWF
Inclusive OR w with f
w OR f d
Operacin
Sintaxis
Operadores
Ciclos
OPCODE
Descripcin
00
0100
dfff
ffff
PA1
PA0
TO
#
PD
#
DC
Instrucciones del
PIC16F84A
MOVLW
MOVLW
Move literal to w
Operacin
Sintaxis
Operadores
Ciclos
kw
[Etiqueta] MOVLW k
0 < f < 255
1
9.25
11
OPCODE
Descripcin
00xx
kkkk
kkkk
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
MOVLW 0x5A
Al ejecutarse:
w = 5A h
Volver a tabla
Instrucciones del
PIC16F84A
MOVF
9.26
MOVF
Move f
fd
Operacin
Sintaxis
Operadores
Ciclos
OPCODE
00
10000
dfff
ffff
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
FSR,0
Al ejecutarse:
w = al valor del FSR
Volver a tabla
Instrucciones del
PIC16F84A
MOVWF
9.27
MOVWF
Move w to f
wf
Operacin
[Etiqueta] MOVWF f
Sintaxis
Operadores
Ciclos
OPCODE
00
0000
1fff
ffff
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
MOVWF OPCION
Si antes de la instruccin:
OPCION = FF h
w = 4F h
Al ejecutarse:
OPCION = 4F h
w = 4F h
Volver a tabla
Instrucciones del
PIC16F84A
NOP
NOP
No operation
Operacin
Sintaxis
Operadores
Ciclos
no operacin
[Etiqueta] NOP
No tiene
1
9.28
00
OPCODE
0000
0xx0
0000
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
Si usamos un cristal de cuarzo de 4 Mhz en el oscilador, podremos obtener un retardo igual a un
microsegundo por cada instruccin NOP que insertemos en el cdigo del programa:
RETARDO NOP
NOP
NOP
RETURN
Cada vez que llamemos a la subrutina RETARDO, obtendremos 3 microsegundos de demora.
Volver a tabla
Instrucciones del
PIC16F84A
RETFIE
RETFIE
Return from Interrupt
Operacin
Sintaxis
Operadores
Ciclos
TOS PC
1 GIE
[Etiqueta] RETFIE
No tiene
2
9.29
00
OPCODE
0000
0000
1001
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
RETFIE
Al ejecutarse:
PC = TOS
GIE = 1
Volver a tabla
Instrucciones del
PIC16F84A
RETLW
RETLW
Retur with Literal in w
Operacin
Sintaxis
Operadores
Ciclos
k w;
TOS PC
[Etiqueta] RETLW k
0 < k < 255
2
9.30
11
OPCODE
01xx
kkkk
kkkk
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
MOVLW 0x07 ;Se carga 07 h en w
CALL
TABLA ;Tabla de valores
... ;w contiene en valor recogido
...
TABLA ADDWF PC
;Se aade a PC el desplazamiento (offset) de w
RETLW k1
;Nueva Tabla
RETLW k2
...
...
...
RETLW kn
;Fin de tabla
Al ejecutarse la instruccin w = toma el valor de k7
Volver a tabla
Instrucciones del
PIC16F84A
RETURN
RETURN
Return from Subroutine
Operacin
Sintaxis
Operadores
TOS PC
[Etiqueta] RETURN
No tiene
9.31
Ciclos
00
OPCODE
0000
0000
1000
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
RETURN
Volver a tabla
Instrucciones del
PIC16F84A
RLF
RLF
Rotate Left f through Carry
Operacin
Sintaxis
Operadores
9.32
d [0,1]
1
Ciclos
00
OPCODE
1101
dfff
ffff
Descripcin
PA1
PA0
TO
#
PD
#
DC
EJEMPLOS:
Si tenemos el registro VALOR = 0000 0001 b y aplicamos la instruccin RLF VALOR,1
Entonces el resultado ser VALOR = 0000 0010 b y el bit C = 0.
Si tenemos el registro VALOR = 1110 0110 b y aplicamos la instruccin RLF VALOR
El resultado ser VALOR = 1100 1100 b y el bit C = 1.
Si antes de la instruccin REG1 = 1110 0110 b y flag C = 0 y aplicamos la instruccin RLF REG1,0,
como d = 0 el resultado queda en w, al ejecutarse:
REG1 = 1110 0110 b
w = 1100 1100 b
flag C = 1
Volver a tabla
RRF
Instrucciones del
PIC16F84A
9.33
RRF
Operacin
Sintaxis
Operadores
Ciclos
00
OPCODE
Descripcin
1100
dfff
ffff
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLOS:
Si tenemos el registro VALOR = 0000 0001 b y aplicamos la instruccin RRF VALOR,1
Entonces el resultado ser VALOR = 0000 0000 b y el bit C = 1.
Si tenemos el registro VALOR = 1000 0000 b y aplicamos la instruccin RRF VALOR,1
El resultado ser VALOR = 0100 0000 b y el bit C = 0.
Si antes de la instruccin, REG1 = 1110 0110 b y flag C = 1 y aplicamos la instruccin RRF
REG1,0, como d = 0 el resultado queda en w, al ejecutarse:
REG1 = 1110 0110 b
w = 0111 0011 b
flag C = 0
Volver a tabla
Instrucciones del
PIC16F84A
SLEEP
9.34
SLEEP
Sleep
Operacin
00 h WDT
0 WDT prescaler
1 TO#
0 PD#
Sintaxis
[Etiqueta] SLEEP
No tiene
Operadores
Ciclos
00
OPCODE
0000
0110
0011
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
Z#
DC
Instrucciones del
PIC16F84A
SUBLW
9.35
SUBLW
Subtract w from Literal
k-ww
Operacin
[Etiqueta] SUBLW k
Sintaxis
Operadores
Ciclos
11
OPCODE
110x
kkkk
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
kkkk
;k - w w, 02 h - w w
Instrucciones del
PIC16F84A
SUBWF
9.36
SUBWF
Subtract w from f
f-wd
Operacin
Sintaxis
Operadores
Ciclos
OPCODE
Descripcin
00
0010
dfff
ffff
PA1
PA0
TO#
PD
#
DC
SWAPF
Instrucciones del
PIC16F84A
SWAPF
Swap Nibbles in f
9.37
(f<3:0>) (d <7:4>)
(f<7:4>) (d <3:0>)
Operacin
Sintaxis
Operadores
Ciclos
00
OPCODE
1110
dfff
ffff
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
SWAPF REG1,0
Si antes de la instruccin:
REG1 = A5 h = 1010 0101 h
Como d=0 el resultado se almacenar en w
Al ejecutarse la instruccin:
REG1 = A5 h = 1010 0101 b
w = 5A h = 0101 1010 b
Volver a tabla
XORLW
Instrucciones del
PIC16F84A
XORLW
9.38
Operacin
[Etiqueta] XORLW k
Sintaxis
Operadores
Ciclos
11
OPCODE
1010
kkkk
kkkk
PA1
PA0
TO
#
PD
#
DC
Instrucciones del
9.39
PIC16F84A
XORWF
XORWF
Exclusive OR w with f
w XOR f d
Operacin
Sintaxis
Operadores
Ciclos
Descripcin
PA1
PA0
TO
#
PD
#
DC
EJEMPLO:
XORWF REG1,1
Si antes de la instruccin:
REG1 = AF h = 1010 1111 b
w = B5 h = 1011 0101 b
Como d=1, el resultado se almacena en REG1
Al ejecutarse:
REG1 = 1010 1111 1011 0101 =0001 1010 = 1A h
w = B5 h
1010 1111
1011 0101
0001 1010
Volver a tabla
Instrucciones del
PIC16F84A
9.40
OPTION
Operacin
[Etiqueta] OPTION
Sintaxis
No tiene
Operadores
Ciclos
OPCODE
00
0000
Descripcin
Registro de STATUS
PA2
PA1
PA0
TO
#
PD
#
DC
0110
0010
EJEMPLO:
MOVLW 10H ; carga el acumulador con el valor 10h.
OPTION
; carga el registro OPTION con el acumulador.
Esta instruccin existe para mantener la compatibilidad con los PIC producidos con anterioridad,
y como en el futuro podra dejar de implementarse, Microchip aconseja realizar el ejemplo anterior
de esta otra forma:
BSF STATUS,RP0
; activa el banco 1.
MOVLW 10H
; carga el acumulador con 10h
MOVWF OPTION_REG
; carga OPTION con el acumulador.
Instrucciones del
PIC16F84A
TRIS
TRIS
w f(TRISA TRISB)
[Etiqueta] TRIS f
Sintaxis
No tiene
Operadores
Ciclos
OPCODE
00
0000
0110
1111
PA1
PA0
TO
#
PD
#
DC
9.41
EJEMPLO:
MOVLW 16h ; carga el acumulador W con el valor 16h
TRIS PORTA ; carga el registro PORTA con el acumulador.
Esta instruccin existe para mantener la compatibilidad con los PIC producidos anteriormente, y
como en el futuro podra dejar de implementarse, Microchip aconseja realizar el ejemplo anterior de
esta otra forma (aunque ocupa ms memoria...):
BSF STATUS,RP0
; activa el banco 1.
MOVLW 16h
; carga el acumulador con el valor 16h
MOVWF TRISA
; carga el registro PORTA con W.
Instrucciones del
PIC16F84A
9.42
Instrucciones especiales
Existe un conjunto de instrucciones especiales diseadas para facilitar las operaciones a la hora
de disear nuestros algoritmos. Estas instrucciones pueden ser implementadas con una, dos o tres
de las instrucciones de la gama media. La mayora de ellas se basa en las operaciones con los
acarreos y con los bits del registro status en general. Este cuadro slo debe servir de referencia y
se recomienda usar la forma equivalente del repertorio de instrucciones, no obstante, pueden
encontrarse programas que los utilicen. Por supuesto con estos algoritmos, aunque utilicen una
sola expresin, no vamos disminuir los ciclos mquina necesarios.
Mnemnico
Descripcin
Parmetros
Traduccin
Operacin
Equivalente
Flag
ADDCF
f,
d
Sumar acarreo a f
BTFSC 3,0
INCF f,d
ADDDCF
f,
d
BTFSC 3,1
INCF f,d
K Branch
GOTO k
BC
K Branch on Carry
BTFSC 3,0
GOTO k
BDC
BNC
K Branch on No Carry
BTFSS 3,0
GOTO k
BNDC
K Branch on No Digit Carry Saltar a una etiqueta si no hay acarreo BTFSS 3,1
de digito
GOTO k
BNZ
K Branch on No Zero
BTFSS 3,2
GOTO k
BZ
K Branch on Zero
BTFSC 3,2
GOTO k
CLRC
Clear Carry
BCF 3,0
CLRDC
BCF 3,1
CLRZ
Clear Zero
BCF 3,2
BSF/BCF
0A,3
BSF/BCF
0A,4
CALL k
BSF/BCF
0A,3
BSF/BCF
0A,4
GOTO k
Mover registro a W
MOVF f,0
Negate File
Negar un registro
COMF f,1
INCF f,d
SETC
Set Carry
BSF 3,0
SETDC
BSF 3,1
SETZ
Set Zero
BSF 3,2
SKPC
Skip on Carry
BTFSS 3,0
SKPDC
BTFSS 3,1
SKPNC
Skip on No Carry
BTFSC 3,0
SKPNDC
BTFSC 3,1
SKPNZ
BTFSC 3,2
LCALL
LGOTO
K Long CALL
K Long GOTO
f,
d
SKPZ
SUBCF
Skip on Zero
BTFSS 3,2
BTFSC 3,0
DECF f,d
SUBDCF f,d
BTFSC 3,1
DECF f,d
TSTF
Test File
MOVF f,1
Probar registro
Tcnicas de
programacin
10.2
Movimiento de datos
El juego de instrucciones reducido, y su tamao de 14 bits, hacen que el PIC16F84A tenga una
serie de restricciones. Por un lado no se pueden especificar dos registros dentro de una
instruccin. Cada registro necesita 7 bits para especificar la direccin, pero tambin hay que
especificar el cdigo de la instruccin y qu hacer con ella. La solucin es realizar todo a travs del
registro de trabajo o w que no necesita direccin y est situado dentro de la CPU del
microcontrolador. Una transferencia de un registro a otro necesitara dos instrucciones.
Supongamos que tenemos que transferir un dato al puerto B:
MOVF DATO, W ; copia el contenido del registro DATO en W
MOVWF PORTB ; copia el contenido de W en el Puerto B
Nota: En todos los ejemplos consideramos que w = 0 y que f = 1, esto significa que MOVF
DATO, W es lo mismo que MOVF DATO, 0
La primera instruccin tiene la forma MOVF f,d que copia el registro f en el destino especificado
por d (w en este caso). La segunda instruccin simplemente mueve cualquier dato contenido en w
en el registro f, que en este caso es el puerto B.
El registro DATO permanece invariable en la primera instruccin y w permanece invariable en la
segunda, de manera que estas instrucciones se parecen ms a una copia que a un movimiento de
datos.
Las instrucciones con literales no tienen espacio para contener la direccin de un registro, por
eso debemos utilizar el registro de trabajo w para cargar un registro con un literal y tambin se
necesitan dos instrucciones.
MOVLW 0xAA ; coloca el valor 10101010 en W
MOVWF DATO ; copia W en el registro DATO
Esto mismo se aplica cuando se usan operaciones booleanas, de suma y de resta entre literales
y registros. Todas necesitan dos instrucciones:
MOVLW k
SUBWF f,d
; copia el literal en W
; copia el resultado de restar W de f en d
Errores frecuentes
Es fcil cometer pequeos errores que nos harn gastar gran cantidad de tiempo. Aqu hay
algunas causas de problemas frecuentes.
Muchas instrucciones de un programa son del tipo MOV y estn relacionadas con w. Es muy
fcil confundir "cargar un registro en w" con "cargar f con w".
MOVWF f, w se mueve al registro f (El resultado se guarda en f)
MOVF f, w, El registro f se mueve a w, guardando el resultado en w
MOVF f, f, El registro f se mueve sobre s mismo
En este ultimo caso, el registro no vara, pero las banderas del registro STATUS si.
MOVWF es la nica instruccin w-f que no tiene bit de destino, ya que el destino siempre ser f.
Las instrucciones w-f son:
Otro error comn es poner GOTO cuando deberamos poner CALL y viceversa. Esto provocara
que el programa se quede colgado o se comporte de manera extraa. Relacionados con el mismo
tipo de instrucciones, otro error comn es olvidar poner al final de las subrutinas la instruccin de
retorno RETURN, RETLW o RETFIE.
Un problema que puede darse con las rutinas del tipo addwf PCL,1 es que se encuentren
situadas mas alla de la direccin de memoria de programa 255. Para solucionarlo basta con tomar
por costumbre colocar las rutinas al principio del programa y que el tipo de rutina citado no supere
la posicin de memoria 255. En el ejemplo siguiente la rutina CODIGO_7S dar problemas si no se
sita al principo:
;**************************************************************
ORG 0x00
;Vector de Reset
goto INICIO
org 0x05
;Salva el vector de interrupcin
;**************************************************************
; SUBRUTINAS
;**************************************************************
CODIGO_7S
; Devuelve el cdigo 7 segmentos
addwf PCL,1
retlw CERO
retlw UNO
retlw DOS
retlw TRES
retlw CUATRO
retlw CINCO
retlw SEIS
retlw SIETE
retlw OCHO
retlw NUEVE
; ..............
; ..............
;**************************************************************
; Comienzo del programa
INICIO
; ..............
; ..............
Debemos tener cuidado cuando usemos los mismos registros en dos rutinas distintas,
especialmente si una de ellas llama a la otra. Por ejemplo, si utilizamos TEMP en un bucle de
temporizacin y despus se vuelve a utilizar TEMP en una subrutina que llama a la subrutina de
temporizacin, debemos tener en cuenta que la subrutina de temporizacin cambia TEMP.
Las instrucciones RLF y RRF rotan a travs de carry del registro STATUS, lo que quiere decir
que el carry debe de ser actualizado antes de llamar a la instruccin, ya que los bits de mayor o
menor peso pasarn al bit mayor o menor. Del mismo modo el bit mayor o menor ser situado en el
acarreo.
Aritmtica
Dentro de los microcontroladores PIC se cuenta con instrucciones aritmticas tales como:
Para efectuar operaciones de suma:
ADDWF f,d, Suma el valor de w al registro f guardndolo en w o f
ADDLW k, Suma el valor de w al literal k guardndolo en w
Para efectuar operaciones de resta:
SUBWF f,d, Resta al valor del registro f el valor de w (f-w) guardndolo en w o f
SUBLW k, Resta al valor del literal k el valor de w (k-w) guardndolo en w
Para realizar multiplicaciones por 2.
RLF f,d, Rota a la izquierda el valor del registro f guardndolo en w o f
Para realizar divisiones entre 2.
RRF f,d, Rota a la derecha el valor del registro f guardndolo en w o f
Hasta este punto podramos ver el conjunto de instrucciones un poco limitado. Sin embargo,
utilizando las tcnicas apropiadas de programacin podemos obtener operaciones ms complejas.
bit 7
RLF
f,d
10.3
Ahora para la rotacin a la derecha, supongamos que nuestro registro f = 0000 1111 b y que la
bandera CARRY tiene un 0; cuando se aplica el comando RRF f,0 todos los nmeros del registro f
se desplazan hacia la derecha. El valor lgico que se encuentra en la bandera CARRY es colocado
en el bit 7 y el bit. 0 es colocado en la bandera CARRY. El resultado de nuestro ejemplo seria: f =
0000 0111 b y CARRY seria 1:
bit 7
RRF
f,d
Tcnicas de
programacin
10.4
Operaciones de comparacin
Las operaciones de comparacin utilizan la instruccin de resta. La resta no es mas que sumar
al minuendo el complemento a 2 del sustraendo.
Igualdad
Supongamos que estamos intetando determinar si un nmero es igual a 2.
MOVLW .2
SUBWF N, W
;W=N-2
BTFSS STATUS, Z
GOTO NO_ES_IGUAL
GOTO ES_IGUAL
Al nmero a comprobar (N) se le resta la cantidad de comparacin (2) que se ha guardado en W.
El resultado vuelve a guardarse en W para salvaguardar la variable N. Finalmente se comprueba la
bandera Zero del registro Status.
Mayor que y menor que
Supongamos que estamos intetando determinar si un nmero mayor o menor de 2.
MOVLW .2
SUBWF N, W
;W=N-2
BTFSS STATUS, C
GOTO MENOR
GOTO MAYOR_IGUAL
Aqui se comprueba la bandera C. Si Carry es 1 el resultado es positivo y si es 0 es negativo. As,
si N<2 entonces el programa va a MENOR. Si N es igual o mayor a 2 se salta a MAYOR_IGUAL.
As, el cdigo anterior:
N<2 MENOR
N>=2 MAYOR_IGUAL
Otra posibilidad es la siguente:
MOVF N, W
SUBLW .2
;W=2-N
BTFSS STATUS, C
GOTO MAYOR
GOTO MENOR_IGUAL
Subrutinas
El movimiento del programa se basa en la llamada a etiquetas y a subrutinas. Esto nos da
capacidad para decidir, temporizar o retardar, operar y/o ejecutar algoritmos. Por eso debemos
tener en cuenta las tcnicas ms comunes en la programacin de lenguaje ensamblador que nos
permitirn hacer estas y muchas otras cosas.
La mayora de los microcontroladores incluyen en su repertorio de instrucciones algunas que
permiten saltar a una rutina y, cuando se completa su ejecucin, retornar al programa principal.
El empleo de subrutinas aporta muchas ventajas entre las que se destacan las siguientes:
Se pueden escribir como subrutinas secciones de cdigo y ser empleadas varias veces en el
mismo programa.
Dan a los programas un carcter modular, es decir, se pueden codificar diferentes mdulos
para utilizarlos en cualquier programa.
Se reduce notablemente el tiempo de programacin y la deteccin de errores, utilizando
repetidamente una subrutina.
El cdigo es ms fcil de interpretar, dado que las instrucciones de las subrutinas no
aparecen en el programa principal, slo figuran las llamadas (CALL).
La instruccin CALL
La instruccin CALL (llamada a subrutina) consigue que la ejecucin del programa contine en
la direccin donde se encuentra la subrutina a la que hace referencia. Es similar a GOTO pero
coloca en la pila la direccin de la siguiente instruccin que se debe ejecutar despus de terminar
con la subrutina.
La subrutina finaliza con la instruccin RETURN (retorno de la subrutina) que retoma la direccin
guardada en la pila y la coloca en el contador de programa PC continuando el flujo de control con
la instruccinque que sigue a CALL .
En la familia PIC de gama media la pila tiene ocho niveles de memoria del tipo LIFO (Last In,
First Out, ltimo en entrar, primero en salir). Si se produce la llamada a una subrutina durante la
ejecucin de otra subrutina, la direccin de retorno de esta segunda es colocada en la cima de la
pila sobre la direccin anterior. Esta segunda direccin es la primera en salir de la pila mediante la
instruccin RETURN .
Con la pila de ocho niveles, una subrutina puede llamar a otra y sta, a su vez, llamar a otra
hasta un mximo de ocho.
Consulta a tablas
En muchas ocasiones es necesario efectuar una coincidencia entre alguna cantidad de valores
conocidos y un nmero desconocido que se tiene como ndice.
Por ejemplo, basados en el contenido de una posicin de memoria RAM, que usaremos como
ndice, se puede obtener de una serie consecutiva de datos almacenados en la memoria de
programa. A este conjunto de datos que queremos obtener a cambio de un valor del ndice se les
denomina tabla.
Tcnicas de
programacin
10.5
La tcnica consiste en cargar el valor del ndice en el acumulador, y despus llamar a una
subrutina que primero suma este valor al PCL , por lo cual obtendremos un desplazamiento de
tantas lneas como indique el ndice. Una vez nos hayamos desplazado hasta la lnea deseada,
esta indicar el fin de la subrutina, y devolver en el acumulador el valor deseado, para ese valor
del ndice.
Veamos un ejemplo:
INDICE EQU
................
................
0Ch
MOVF INDICE,W
;llevamos a W el nmero utilizado como ndice
CALL TABLA
; posicin en donde se encuentra la serie de
; datos. En esta lnea se tiene en w el dato ledo
; de la tabla despus del retorno de la subrutina
................
................
TABLA
ADDWF PCL,f ;se suma al PC W obteniendo como resultado un salto indexado
RETLW 30h ;s W sumado a PCL es 0 se retorna en esta posicin, W=30h
RETLW 31h ;s W sumado a PCL es 1 se retorna en esta posicin, W=31h
RETLW
RETLW
RETLW
RETLW
32h
33h
34h
35h
Para terminar, despus de observar el ejemplo anterior, debemos tener en cuenta que antes de
llamar a la subrutina TABLA, se debe cargar en el registro de trabajo w el valor del ndice y una
vez se retorne de dicha subrutina, es en este mismo registro de trabajo en donde se obtiene el
resultado de la consulta a la tabla (vemos que la sucesin de instrucciones RETLW k se encuentra
en memoria de programa).
Conversin a ASCII
Cdigos ASCII:
Tcnicas de
programacin
10.6
en hexadecimal (8 bits)
37
h
30
h
Lo transportamos a un programa:
numHEX EQU 0Ch ; posicin donde se almacena el nmero a convertir
asciiH EQU 0Dh ; posicin donde se almacena el resultado parte alta
asciiL EQU 0Eh ; posicin donde se almacena el resultado parte baja
.......................
.......................
MOVLW 0Fh
; dato para enmascarar parte alta
ANDWF numHEX,0
; se enmascara la parte alta del nmero
; hexa y pasa a W
IORLW 30h
; convierte el nmero en ASCII
MOVWF asciiL
; nmero salvado en la variable de salida
MOVLW F0h
; dato para enmascarar parte baja
ANDWF numHEX,1
; se enmascara la parte baja del nmero
; hexadecimal y queda all
SWAPF numHEX,0
; se invierten parte alta y baja
IORLW 30h
; convierte el nmero en ASCII
MOVWF asciiL
; el nmero queda salvado en la variable
; salida
de
.....................
.....................
El ejemplo anterior funciona de forma correcta siempre y cuando los nibbles del nmero
hexadecimal a convertir estn en el rango de 0 a 9. Habr que realizar un tratamiento adicional a
stos si se encuentran en el rango de A h a F h.
Tcnicas de
programacin
10.7
Ramificacin
Cuando se tiene que solucionar un diagrama de flujo como el de la siguiente figura, en el cual
tenemos una accin o ninguna segn la respuestas a una pregunta, se plantea la solucin
siguiente.
call
....
goto
0
1
2
Uno de estos posibles valores lo llevamos a w y en una parte del programa los tratamos de la
siguiente manera:
ADDWF
GOTO
GOTO
GOTO
PCL,1
ACCION1
ACCION2
ACCION3
ACCION1:
.........
;instrucciones correspondientes a la Accin 1
.........
GOTO ENCUENTRO
ACCION2:
.........
;instruccionescorrespondientes a la Accin 2
.........
GOTO ENCUENTRO
ACCION3:
.........
.........
;instruccionescorrespondientes a la Accin 3
ENCUENTRO
; sitio de encuentro de los distintos caminos
de una de las acciones
.........
;continuacindel programa
Tcnicas de
programacin
; despus
10.8
Solucin 2
Otra forma posible es comparando uno por uno los valores de las diferentes opciones
almacenadas en memoria RAM en una variable llamada OPCION
MOVLW OPCION1
XORWF OPCION,0
BTFSC STATUS,Z
GOTO ACCION1
MOVLW OPCION2
XORWF OPCION,0
BTFSC STATUS,Z
GOTO ACCION2
MOVLW OPCION3
XORWF OPCION,0
BTFSC STATUS,Z
GOTO ACCION3
ACCION1
.........
; instrucciones de la Accin 1
.........
.........
GOTO ENCUENTRO
ACCION2
.........
; instrucciones de la Accin 2
.........
.........
GOTO ENCUENTRO
ACCION3
.........
.........
.........
ENCUENTRO
.........
.........
; instrucciones de la Accin 3
; sitio de encuentro
; continuacin del programa
Aunque este ltimo mtodo es ms largo que el anterior, es vlido cuando los valores de las
diferente sopciones no son consecutivos entre si.
Temporizacin
Hay veces en las que se necesita introducir ciertos retardos de tiempo. Los retardos de tiempo
se pueden obtener mediante hardware o por medio de ciclos repetitivos basados en software.
Los retardos de tiempo basados en software se realizan mediante un bucle e incrementando o
disminuyendo un contador que cuando pase por cero har que salgamos de la condicin.
Como ya sabemos, un ciclo mquina es el tiempo utilizado por el microcontrolador para realizar
sus operaciones internas y equivale a 4 ciclos de reloj u oscilador.
Por tanto:
Tciclo mq. = 4 * Tosc
Tciclo mq. = 4 / fosc
Como cada instruccin necesita 4 ciclos de reloj para que se ejecute, si usamos un cristal de 4
MHz cada instruccin ocupar 1 microsegundo, a no ser que el contador del programa se
modifique.
El nmero de ciclos mquina utilizados por una instruccin para ser ejecutada depende de la
misma. Las instrucciones que modifican el contador de programa necesitan dos ciclos mquina,
mientras que todas las dems necesitantan solo uno. De esta manera las instrucciones de salto
necesitan 2 ciclos mquina para ejecutarse.
La precisin de los retardos generados por software depende en esencia del tipo de oscilador
que se utilice como base de tiempo en el microcontrolador (la mayor precisin se obtiene de los
cristalesde cuarzo).
La velocidad a la que se ejecuta el cdigo (instrucciones) depende de la velocidad del oscilador
y del nmero de ciclos mquina ejecutados. Las instrucciones necesitan 1 2 ciclos de mquina
para ser ejecutadas.
El hecho de generar ciclos repetitivos por medio del programa y calcular el tiempo total de
ejecucin nos puede ayudar a generar tiempos precisos.
Un ejemplo de ciclo repetitivo lo tenemos a continuacin, en la siguiente figura:
Tcnicas de
programacin
10.9
CICLOS
la carga de k en W
1c
la carga de W en el contador
1c
k-1
2c
el salto a Loop
2 * (k - 1)
Total:
(3 * k) + 1
Por cada instruccin agregada debe incluirse en la cuenta total el nmero de ciclos
correspondiente a dicha instruccin.
Trabajando a 4 Mhz y asumiendo que k se remplaza por el valor 15 en decimal en el ejemplo
tendramos un tiempo igual a:
CICLOS
MSEC1
MOVLW 0xF9
1c
NOP
1c
ADDLW 0xFF
1c
BTFSS
STATUS,Z
1c, 2c al
saltar
GOTO MIC4
2c
RETURN
2c
MIC4
Total, 1000 c
Como puede observarse despus de ejecutar CALL MSEC1 transcurrirn 1000 ciclos de reloj,
esto es 1 milisegundo antes de pasar a la siguiente instruccin.
La subrutina no utiliza ningn registro aparte de w. Para periodos de tiempo ms largos debern
utilizarse registros.
La siguiente rutina es llamada con el nmero de milisegundos que debern transcurrir dentro del
acumulador segn el valor de la variable CNTMSEC. Hace uso de la rutina MIC4. Se pueden
realizar retardos de hasta un cuarto de segundo(1 - 255 msec):
NMSEC MOVWF CNTMSEC
; mueve W al registro msec
MSLOOP MOVLW 0xF8
; cuenta 8 microsegundos por encima
CALL MIC4
; 248 * 4 + 2 = 994
NOP
; realiza el resto del bucle
NOP
; aade 6 microsegundos
DECFSZ CNTMSEC, f
; decrementa el contador
; salta cuando llega a cero
GOTO MSLOOP
; vuelve a realizar el bucle
RETURN
Instrucciones y puertos
Conviene recordar que el PIC16F84A tiene 13 patillas que pueden ser configuradas
individualmente como entrada o como salida. Estn divididos en dos puertos de 8 patillas y otro de
5, puerto B y puerto A, respectivamente. La direccin de cada bit est determinada por los bits de
los registros TRISA y TRISB del banco de memoria 1. Un cero en un bit significa que es una salida,
mientras que un uno significa que queda configurado como una entrada.
Ejemplo de cmo configurar el puerto B alternando entradas y salidas:
BSF STATUS,RP0
; Activa el banco de memoria 1.
MOVLW 0xAA
; coloca en el acumulador el valor '10101010'
MOVWF TRISB
; W es copiado en el registro TRISB
BCF STATUS,RP0
; Activa el banco de memoria 0.
No se recomienda utilizar la instruccin TRIS, ver Instrucciones OPTION y TRIS.
Recuerdese que algunas patillas de los puertos estn relacionados con otras funciones del
microcontrolador. Los 4 bits ms altos del puerto B pueden ser utilizados como interrupciones
cuando son programados como entradas. El bit 0 del puerto B tambin puede ser usado como
fuente de interrupcin externa. El bit ms alto del puerto A puede utilizarse tambin como entrada
externa de reloj para el contador-temporizador.
Ver Puertos de E/S de "El PIC16F84A" para observar la constitucin interna de los puertos y su
funcionamiento (corrientes de salida que proporcionan, etc).
Escritura en los puertos
Antes de nada, ya sabemos que podemos ajustar independientemente cada lnea de un puerto
para que sea entrada o salida, mediante la instruccin TRIS . As, para tener ms control sobre lo
que estamos haciendo, podemos cargar en este registro el valor en binario.
Ejemplo, en lugar de:
MOVLW 30h
MOVWF TRISB
Ponemos:
MOVLW B'00110000'
MOVWF TRISB
Para escribir en los puertos, podemos mover directamente el valor hexadecimal desde el
acumulador al puerto entero. Esto se utiliza en aquellos casos en que usemos un puerto entero
como un bus de datos, como puede ser en un display. Pero lo ms normal es controlar cada patilla
activando o desactivando independientemente los bits del registro PORTA o PORTB , a travs de
la instruccin BSF (activa) y BCF (desactiva).
Tcnicas de
programacin
10.10
TRISB, 0
TRISB, 1
TRISB, 2
TRISB, 3
GOTO
OTRO
OTRO
..........
Esto est bien en el caso de que lo apliquemos a entradas basadas en circuitera lgica, o que
cambian de estado una vez cada mucho tiempo. Si quisisemos aplicarlo, por ejemplo, a una
entrada a la que tenemos conectado un pulsador, hemos de usar un circuito y un algoritmo antirebotes.
Tcnicas de
programacin
10.11
Los rebotes son de sobra conocidos por todos aquellos que estn iniciados en la electrnica
digital. Son producidos por los elementos electromecnicos conectados a un circuito lgico, los
cuales causan que este funcione mal al ser pulsados, ya que estos provocan un tren de pulsos
debido a los rebotes que provocan las partes mviles al tomar contacto con las fijas.
Hardware para evitar rebotes
Existen varias soluciones, segn utilicemos entradas de nivel alto o de nivel bajo. Pero todas
tienen en comn una resistencia de Pull-Up (o de Pull-Down) y un condensador de unos 100nF que
absorber cualquier interferencia y/o rebote en la lnea de entrada. En la figura siguiente se
muestran distintas configuraciones para evitar los rebotes, una con el condensador a masa, y la
otra con el condensador a Vcc. En ciertas ocasiones es normal situar una resistencia de unos 270
ohmios a 1K, entre el circuito y la patilla del PIC.
Si bien usando resistencias de pull-up, podemos salvar estas situaciones, hemos de tener
presente que todas las lneas del puerto B disponen de estas resistencias, por lo cual no ser
necesario aadirlas, ya que estn implementadas. Para activarlas basta con poner a cero el bit
RBPU del registro OPTION.
Software para evitar rebotes
Ms que para evitar los rebotes, esta aplicacin se usa para no pasar de instruccin sin antes
haber soltado el pulsador, ya que no somos tan rpidos como para que la entrada est a nivel bajo
antes de una supuesta comprobacin del mismo bit. La solucin est en quedarnos bloqueados en
otro bucle hasta que hayamos liberado el pulsador.
Ejemplo:
BUCLE
Tcnicas de
programacin
10.12
MPLAB-IDE v6.60
11.2
Introduccin
MPLAB-IDE es una Plataforma de Desarrollo Integrada bajo Windows, con mltiples
prestaciones, que permite escribir el programa para los PIC en lenguaje ensamblador (assembler)
o en C (el compilador C se compra aparte), crear proyectos, ensamblar o compilar , simular el
programa y finalmente programar el componente, si se cuenta con el programador adecuado.
MPLAB incorpora todas las utilidades necesarias para la realizacin de cualquier proyecto y,
para los que no dispongan de un emulador, el programa permite editar el archivo fuente en
lenguaje ensamblador de nuestro proyecto, adems de ensamblarlo y simularlo en pantalla,
pudiendo ejecutarlo posteriormente en modo paso a paso y ver como evolucionaran de forma real
tanto sus registros internos, la memoria RAM y/o EEPROM de usuario como la memoria de
programa, segn se fueran ejecutando las instrucciones. Adems el entorno que se utiliza es el
mismo que si se estuviera utilizando un emulador.
Nos vamos a centrar en la versin 6.60 (MPLAB 6.60 en zip.). Las nuevas que van saliendo
cada poco tiempo y que incorporan nuevos tipos de microcontroladores, se pueden obtener de
forma gratuita en la pgina web www.microchip.com, en la cual se encuentra una amplia
informacin sobre todos los dispositivos que fabrica Microchip.
Partes de MPLAB-IDE:
EDITOR: Editor incorporado que permite escribir y editar programas u otros archivos de
texto.
PROJECT MANAGER: Organiza los distintos archivos relacionados con un programa en un
proyecto. Permite crear un proyecto, editar y simular un programa. Adems crea archivos
objetos y permite bajar archivos hacia emuladores (MPLAB-ICE) o simuladores de hardware
(SIMICE).
SIMULADOR: Simulador de eventos discretos que permite simular programas con ilimitados
breakpoint, examinar/modificar registros, observar variables, tiempos y simular estmulos
externos.
ENSAMBLADOR: Genera varios tipos de archivos objetos y relacionados, para
MPLAB-IDE v6.60
11.3
El editor
Aspecto del programa con el Editor en primer plano:
Instrucciones
Directivas del propio ensamblador
Nombres de registros especiales (SFR)
Nombre de cada uno de los bit de los registros especiales.
MPLAB-IDE v6.60
11.4
El uso de maysculas y minsculas en los programas obedece a una serie de reglas o normas
de estilo, comunes entre los programadores en ensamblador, que si bien no son obligatorias,
facilitan la lectura del cdigo fuente. Estas reglas son:
Las directivas del ensamblador se escriben en maysculas.
Los nombres de las variables se escriben en maysculas y minsculas, por ejemplo Variable
A podra ser VARA o VAR_A o VarA.
Los nemnicos de las instrucciones se escriben en minsculas.
El programa se escribe utilizando los tabuladores para definir las distintas columnas, tales
como etiquetas, comienzo de lneas de programa y columna donde empiezan los
comentarios separados por un ";" (punto y coma).
Cuando terminemos de escribir el programa, si no lo hicimos antes, seleccionamos File/Save
donde le damos el nombre a nuestro programa E001.ASM, dentro del directorio de proyecto.
Una vez escrito el programa, es necesario crear un proyecto para poder compilar, simular,
depurar y, en su caso, programar.
Para crear un proyecto, escoja la opcin Proyect/Proyect Wizard y siga las instrucciones que
vayan apareciendo:
Escoja el microcontrolador (PIC16F84A)
Escoja el conjunto de lenguaje Microchip MPASM Tolsuit.
Nota: si aparece
y pulsa
aparecer un mensaje de error.
Para solucionarlo seleccionar en Toolsuite Contents
y
seguidamente pulse sobre
para seleccionar C:\Archivos de programa\MPLAB
IDE\MCHIP_Tools\mplib.exe
Pngale nombre al proyecto. Use el mismo nombre del archivo fuente (se sugiere).
Escoja el directorio donde trabajar. Se debe utilizar una ruta corta, por ejemplo
D:\PIC\PRG, de lo contrario el ensamblador puede dar problemas (no utilizar el escritorio o
mis documentos, que corresponden a rutas largas).
Selecione el archivo fuente y pulse el botn Add.
DISPOSITIVOS LGICOS MICROPROGRAMABLES
MPLAB-IDE v6.60
11.5
Compila (make)
Compila (built all)
Una vez creado el proyecto, haga click en el cono Built All
. Con esto compilar el
programa y se crerarn archivos de error, mapa del programa, archivos objetos y archivos hex.
Si no se han cometido errores al introducir los cdigos, En la ventana Output, solapa Build
aparecer un mensaje parecido a este:
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\MPLAB IDE\MCHIP_Tools\mpasmwin.exe" /q /p16F84A
"E001.ASM" /l"E001.lst" /e"E001.err"
Loaded D:\PIC\PRG\E001.COD
BUILD SUCCEEDED: Fri Dec 03 20:03:30 2004
MPLAB-IDE v6.60
11.6
Esto nos indica que el programa se ha ensamblado con xito y ya estamos en condiciones de
iniciar la simulacin del programa. Si por el contrario, se han detectado errores, en dicho mensaje
ser mostrado el error; si se hace doble clic sobre la lnea que muestra el error, el cursor saltar
directamente a la lnea de cdigo donde se encuentra el error. Una vez subsanados los errores
habr que volver a compilar el programa.
Men View
Seguidamente analizaremos las distintas posibilidades que ofrece el men view:
Project: Esta ventana presenta la lista de archivos que actualmente hay en un proyecto. Si el
proyecto se ha ensamblado o compilado la ventana de proyecto muestra una lista de todos los
archivos incluidos en el proyecto. Un doble clic en cualquier archivo resaltado en la ventana, abrir
dicho archivo para su revisin.
Output: Muestra la ventana Output, que ofrece informacin de salida del programa, como por
ejemplo cuando se compila aqui va apareciendo la informacin sobre la compilacin, indicando si
hay errores.
Toolbars: Permite seleccionar que barras de herramientas apareceran en MPLAB.
Disassembly Listing: En esta ventana se puede ver el cdigo mquina paralelamente al cdigo
en ensamblador. Resulta muy util para seguir paso a paso la ejecucin del programa.
Hardware Stack: El contenido de la pila puede verse y modificarse con el ratn o el teclado al
seleccionar esta opcin. Si la pila se desborda, MPLAB indica su rebosamiento con el mensaje
underflow. Para modificar un nivel de la pila basta con hacer click con el puntero del ratn sobre el
o utilizar el teclado con los cursores.
Program Memory: Al seleccionar esta opcin aparece la siguiente ventana en la que se puede
apreciar las posiciones de memoria que ocupa cada una de las instrucciones, el cdigo de
operacin de cada instruccin y la posicin de memoria que se le ha dado a cada etiqueta. Puede
utilizarse para seguir paso a paso la ejecucin del programa y adems de modificar un registro
mediante el ratn y el teclado pueden modificarse varios a la vez si se pone el puntero del ratn
sobre el primer registro que se quiere modificar y seguidamente se pulsa el botn derecho del
MPLAB-IDE v6.60
11.7
Si pulsamos en cada uno de los tres botones de la parte inferir de esta ventana podemos
seleccionar tres formas de ver la memoria de programa:
Opcode Hex: representa la memoria de programa con los datos en hexadecimal. Esta
opcin es muy til al usar el programador del dispositivo y comprobar si se grabaron bien los
datos.
Machine: esta opcin presenta el cdigo mquina ensamblado con la informacin de las
etiquetas y direcciones de memoria que tienen asignadas.
Symbolic: despliega el cdigo hexadecimal desensamblado con los smbolos (etiquetas)
utilizados en el programa.
File Registers: La lista de registros del microcontrolador, que son de memoria SRAM, se
pueden ver seleccionando esta opcin. Esta ventana al desplegarse presenta una lista con la
memoria de datos del dispositivo emulado. El listado de registros puede verse de dos maneras,
segun se active Hex o Symbolic.
En la siguiente figura se muestran algunos registros de la memoria del banco 0. Observese que
tambin se muestra la posicin que etiquetamos como RESULTADO:
MPLAB-IDE v6.60
11.8
EEPROM: Si el dispositivo emulado tiene EEPROM o memoria Flash como es el caso del
PIC16F84, el contenido de la memoria puede verse seleccionando esta opcin. La memoria de
EEPROM puede modificarse a travs de esta ventana.
Watch : MPLAB permite supervisar los contenidos de los registros a travs de esta ventana.
Para agregar los registros a visualizar, se puede hacer directamente escribiendolos con el teclado o
mediante los botones Add SFR o Add Symbol y las ventanas desplegables correspondientes. En
la figura se muestra como se ha introducido el valor de RESULTADO para supervisarlo, despus
de emular el programa aparece el valor 0FH, esto es 15, que es igual a 7+8:
E001.COD
E001.ERR
E001.HEX
E001.LST
E001.MCP Archivo de proyecto.
E001.MCS
E001.MCW Archivo de espacio de trabajo.
El archivo de espacio de trabajo es muy intyeresante porque permite dejar las ventanas y el
programa en el estado actual, cerrar el programa y mas tarde, seguir trabajando recuperando el
estado del programa tal y como lo dejamos. Para trabajar con el Workspace debemos ir al men
file.
Simulacin
Para comenzar la simulacin debemos elegir la herramienta que vamos a utilizar. En nuestro
caso, MPLAB SIM. Para hacerlo debemos seleccionar en la barra de mens Debugger/Select
tools/MPLAB SIM:
MPLAB-IDE v6.60
11.9
Run
Halt
Animate
Step Into
Step
Over
Step Out
Reset
Run (F9): Al activarse esta opcin el programa se ejecuta a toda velocidad en "modo tiempo
real", aunque no hay que olvidar que se trata de una simulacin por ordenador. La ejecucin
comienza en la direccin actual del contador de programa (PC), que se muestra en la barra
de estado y en la ventana Program Memory. Mientras el programa est en ejecucin Step y
Run estn deshabilitados y se detiene si se activa Halt o si se encuentra un breakpoint (Ver
Nota mas adelante).
Animate: Esta opcin es similar a la anterior pero en este caso el programa se simula de
forma automtica desde la direccin que indique el PC en el instante en que se active.
Equivale a pulsar contnuamente Step Into. Se detiene con Halt.
Halt (F5): Detiene la ejecucin del programa, el contador de programa se detiene y se
actualiza la informacin.
Step Into (F7): Esta accin ejecuta la instruccin cuya direccin de memoria coincida con el
valor al que apunta el PC antes de activarla. Si algn registro se modifica se resalta en color
rojo. Como puede apreciarse cuando se utiliza esta accin, podemos comprobar paso a
paso como se ejecuta el programa, y de esta forma, ver si hay fallos y ver donde est el
MPLAB-IDE v6.60
11.10
Para realizar la simulacin podemos colocar las ventanas tal y como aparece en la figura, pulsar
sobre
los registros:
Tal y como estn dispuestas las ventanas puede observarse todo lo necesario para la
simulacin. La flecha amarilla en la ventana donde est el ASM indica que instruccin es la que
puede ejecutarse.
Si se modificase el archivo ASM mientras se simula, aparecer un ventana con el mensaje The
project is out of date e indicando si se quiere rehacer de nuevo el proyecti. Debe contestarse que
si y comenzar de nuevo la simulacin con los cambios establecidos. Es importante decir que
aunque se conteste que no, el cambio se guardar en el ASM.
Con la venntana Special Function Registers se pueden observar los cambios en los registros
especficos, e incluso modificarlos seleccionandolos con el ratn con un doble click y utilizndo el
teclado. El men contextual (pulsar botn derecho sobre la ventana) permite nuevas posibilidades,
que por ejemplo permite con Fill Registers modificar varios registros de una vez.
Con la ventana File Registers, se ven todos los registros, si bien resultan de especial inters los
registros de proposito general, que por supuesto pueden modificarse a voluntad.
Tanbin resulta de inters el men Debugger/Clear Memory.
MPLAB-IDE v6.60
11.11
En MPLAB, si bien en principio todos los registros pueden modificarse a voluntad, resulta que no
se pueden modificar directamente los bits de PORTA y PORTB cuando estn configurados como
entradas (vase simulando PRACTICA.ASM). Si se pueden modificar los bits de PORTA y PORTB
si estn configurados como salidas.
Para conseguir "botones" que permitan accionar las patillas de entrada del PIC se utiliza el MPLAB
Stimulus Controller, que aparece con el men Debugger/Stimulus Controller:
Para crear cada fila pulsar Add Row, seleccionar Type, Enable, Pin y Action y terminar con
Edit Complete.
En la primera fila de la figura, al pulsar Fire cambia RA0 de estado, se hace 0 si era 1 y
viceversa (Toggle), el cambio no se hace efectivo hasta que se pulsa Step Into. No funciona bien
con Animate si bien se puede intentar aumentar en Debugger/Setting, en la solapa Debuger
Animation el tiempo de paso en la anumacin. No se ven los cambios si se utiliza Run hasta que
la informacin no se actualiza con Halt, si bien aqu resultara casi imprescindible utilizar
Breakpoint.
Ademas del tipo Action Toggle, que cambia de estado una entrada, tenemos High que aplica un
1, Low que aplica un cero y Pulse que proporciona un pulso de corta duracin. En
PRACTICA.ASM, tal y como se ha resuelto la entrada de datos en el programa, no sirve la
utilizacin de Pulse y se puede utilizar Toggle o bien dos filas para cada entrada, una con High y
otra con Low.
En la ultima fila de la figura se ve como se utiliza el Type Synch (sncrono), que hace que
automticamente cambie RB3 de forma sincronizada con el reloj, estando 10 ciclos a estado alto y
luego 10 ciclos a estado bajo.
Las filas de entradas realizadas pueden guardarse y recuperarse (Pin Stimulus File, Load y
Save)
DISPOSITIVOS LGICOS MICROPROGRAMABLES
MPLAB-IDE v6.60
11.12
Cuando un archivo fuente se ensambla de esta manera, todas las variables y rutinas utilizadas en
el el archivo fuente deben definirse dentro de este, o en archivos explcitamente incluidos por el
archivo fuente. Si el ensamblado se realiza sin errores, se generar un archivo hexadecimal .HEX
que contiene el cdigo mquina ejecutable para el dispositivo designado. Este archivo puede
utilizarse con un simulador para probar la ejecucin del cdigo o cargarse en el microcontrolador
mediante un programador.
Generando cdigo relocalizable
El ensamblador MPASM tambin puede generar mdulos objeto relocalizables que pueden unirse
(linkarse) con otros mdulos utilizndo MPLINK para conformar cdigo ejecutable final. Este
mtodo es muy til para crear mdulos reutilizables.
Pueden agruparse mdulos relacionados y pueden guardarse juntos en una librera mediante
MPLIB..
Archivos de entrada/salida
stas son las extensiones de archivo predefinidas utilizadas por el ensamblador y su funcin.
Archivos de entrada:
Cdigo fuente (.asm): Archivo fuente de entrada al ensamblador.
Archivo include (.inc): Archivo de inclusin o cabecera.
Archivos de salida:
Archivo de listado (.lst): Archivo del listado generado por el ensamblador.
Archivo de error (.err): Archivo de errores de ensamblado.
Archivo hexadecimal (.hex, .hxl, .hxh): Archivo hexadecimal con cdigo ejecutable.
Archivo de referencias cruzadas (.xrf): Archivo para las referencia cruzadas de los
archivos ensamblados.
Archivo de smbolos y depuracin (.cod).
Archivo objeto (.o).
Cdigo fuente (.asm)
El ensamblador es un lenguaje de programacin para desarrollar cdigo fuente en una aplicacin
con PIC. El archivo de cdigo fuente puede crearse y editarse con cualquier editor de texto ASCII.
Para mas informacin ver El lenguaje ensamblador del PIC16F84A
El cdigo fuente debe seguir las siguientes pautas bsicas:
Cada lnea del archivo fuente puede contener cuatro tipos de informacin:
Etiquetas
Operacin, Mnemnicos (intrucciones), Directivas y Macros
Operandos
Comentarios
etiqueta se coloque en la primera columna y que los mnemnicos se coloquen una o dos columnas
ms all. Los operandos siguen al cdigo mnemotcnico. Los comentarios pueden seguir a los
operandos, mnemnicos o etiquetas, y pueden comenzar en cualquier columna. La anchura de
columna mxima es de 255 carcteres.
Un espacio en blanco debe separar la etiqueta del cdigo mnemotcnico, y tambin un espacio en
blanco deba separar el cdigo mnemotcnico y los operandos. Los operandos mltiples deben
separarse por comas.
Se considera como un espacio en blanco uno o ms espacios o tabulaciones. El espacio en blanco
se utiliza para separar las partes de una lnea del cdigo fuente. El espacio en blanco debe
utilizarse para hacer el cdigo ms fcil de leer. Cualquier nmero de espacios en blanco o
tabulaciones son exactamente igual que uno.
Etiquetas
Una etiqueta se usa para representar una lnea o grupo de cdigo, o un valor constante. Se
necesitan para las instrucciones de salto.
Las etiquetas deben empezar en la columna 1. Pueden terminar en "dos puntos" (:), espacio,
tabulacin o fn de lnea. Las etiquetas deben comenzar por un carcter alfabtico o por un guin
bajo (_) y puede contener carcteres alfanumricos, guin bajo (_) y el signo de interrogacin (?).
Las etiquetas no deben:
Comenzar por dos guiones bajos, ejem., __config.
Comenzar por un guin bajo y un nmero, ejem., _2NDLOOP.
Ser palabras reservadas del ensamblador (ver Section 3.3 Reserved Words and Section
Names de MPASM, MPLINK, MPLIB User's Guide).
Las etiquetas pueden tener como mucho 32 carcteres. Por defecto se distinguen maysculas y
minsculas, pero esto puede anularse con la opcin en lnea de comandos (/c). Si se utiliza "dos
puntos" (:) al definir una etiqueta, se le trata como un operador de la etiqueta y no como parte de la
propia etiqueta.
Mnemnicos, directivas y macros
Los mnemnicos le dicen al ensamblador qu instrucciones de cdigo mquina (cdigos de
operacin) deben utilizarse. Por ejemplo, suma (add), ir a (goto) o movimientos (movwf). A
diferencia de las etiquetas que creamos nosotros mismos, los mnemnicos los proporciona el
lenguaje ensamblador que se utilice. Los mnemnicos no son en ningn caso sensibles a
maysculas/minsculas.
Las directivas son rdenes del ensamblador que aparecen en el cdigo fuente pero que
normalmente no son traducidas directamente a cdigos de operacin. Se utilizan para controlar al
ensamblador: sus entradas, salidas y asignacin de datos. Las directives no son en ningn caso
sensibles a maysculas/minsculas.
Las macros son conjuntos de instrucciones y directivas definidas por el usuario que se insertarn
en el cdigo fuente al realizar el ensamblado siempre que la macro se invoque (ver directiva
macro).
Los mnemnicos de las instrucciones del ensamblador, las directivas y las llamadas a macros
deben colocarse de la segunda columna en adelante. Si hay una etiqueta en la misma lnea, las
instrucciones deben separarse de esa etiqueta por "dos puntos", o por uno o ms espacios o
tabulaciones.
Operandos
Los operandos dan informacin a la instruccin sobre los datos que deben utilizarse y donde se
encuentran. Los operandos debe separarse de los mnemnicos por uno o ms espacios, o
tabulaciones. Los operandos mltiples deben separarse por comas.
Comentarios
Los comentarios son texto que explica el funcionamiento de una lnea o lneas de cdigo. El
ensamblador MPASM trata lo que est despus de un punto y coma como un comentario. Todos
los carcteres que siguen al punto y coma se ignoran hasta el final de la lnea. Las constantes del
cadena que contienen un punto y coma se permiten y no se confunden con comentarios.
Archivo include (.inc)
Un archivo "include" o cabecera (header) es cualquier archivo que contenga cdigo ensamblador
vlido. Normalmente, el archivo contiene equivalencias sobre registros especficos del dispositivo a
utilizar y asignaciones de bits. Este archivo puede ser incluido en el cdigo para que pueda ser
reutilizado por muchos programas.
Como ejemplo, para aadir el archivo de cabecera para el dispositivo PIC18F452 en el cdigo
ensamblador de nuestro programa, pondremos:
#include p18f452.inc
Este tipo de archivos de cabecera los proporciona Microchip y se encuentran en el directorio de
instalacin de MPASM o de MPLAB.
Podemos crear nuestros propios archivos de cabecera o utilizar otros desarrollados por terceros.
Archivo de listado (.lst)
El archivo de listado que genera MPASM proporciona la correspondencia entre cdigo fuente y
cdigo objeto, como puede verse en este fragmento de archivo .LST:
LOC OBJECT CODE
VALUE
001C 3A03
001D 1903
00065
00066
XORLW 0x03
BTFSC STATUS,2
Analicemos la lnea:
001C 3A03
00065
XORLW 0x03
El archivo de listado tambin proporciona una lista de smbolos y sus valores, informacin sobre el
uso de la memoria y el nmero de errores, advertencias y mensajes generados.
Aparece una informacin del tipo:
Program Memory Words Used: 782
Program Memory Words Free: 242
Que nos indica la cantidad de memoria de programa utilizada y libre, en palabras de 14 bits.
Este archivo puede verse en MPLAB IDE siguiendo estos pasos:
MPASM y MPLINK (y en consecuencia MPLAB) pueden generar archivos de listado. Los archivos
de listado generados se encuentran en el mismo directorio que el resto de archivos que se generan
(.HEX, .ERR, etc), normalmente donde se encuentre el .ASM. Puede abrirse con cualquier editor
de texto ASCII.
Archivo de error (.err)
El ensamblador MPASM, por defecto, genera un archivo del error. Este archivo puede ser til
cuando estamos poniendo a punto el cdigo de nuestro programa. MPLAB mostrar la informacin
del error en la ventana Output. El formato de los mensajes en el archivo de error es:
type[number] lnea de descripcin de archivo
Por ejemplo:
Error[113] C:\PROG.ASM 7 : Symbol not previously defined (start)
El archivo del error puede contener cualquier nmero de errores, advertencias y mensajes del
ensamblador MPASM. Para mas informacin, ver Chapter 8. Errors, Warnings, Messages, and
Limitations en MPASM, MPLINK, MPLIB User's Guide
Archivo hexadecimal (.hex, .hxl, .hxh)
El archivo hexadecimal es, por as decirlo, el archivo que contiene el ejecutable para el
microcontrolador. La informacin que contiene se transferir a PIC cuando se programe. La
informacin que contiene est en formato ASCII, no en binario como podra pensarse, de manera
que se representan los valores hexadecimales con carcteres alfanumricos, 3FFA, 0023, etc.
MPASM y MPLINK son capaces de generar archivos de texto ASCII en hexadecimal en diferentes
formatos. Esto es util para transferir el programa a distintos tipos programadores.
Nombre de formato
Tipo de
formato
Extensin de
archivo
Uso
INHX8M
.hex
.hex
.hxl, .hxh
otros programadores
INHX8S
Este formato produce un archivo hexadecimal de 8 bit con la combinacin byte bajo / byte alto. De
esta manera cada direccin puede contener slo 8 bits en este formato por lo que todas las
direcciones se doblan.
Cada registro de datos (cada lnea) comienza con un prefijo de 9 caracteres y acaba con 2
caracteres de checksum.
Cada registro de datos tiene el formato siguiente:
:BBAAAATTHHHH... .HHHCC
donde:
BB: dos digitos en hexadecimal que representan el nmero de bytes de datos que aparecen
en la lnea.
AAAA: cuatro digitos en hexadecimal que representan la direccin de arranque de los datos
del registro.
TT: dos digitos que siempre sern '00' salvo al final del archivo de datos que sern '01'.
HH: dos digitos en hexadecimal, con la informacin en la forma byte bajo / byte alto.
CC: checksum de dos digitos en hexadecimal son el complemento a dos de la suma de
todos bytes precedentes en el registro.
Ejemplo:
Parte de e001.lst:
0000 3007 movlw 0x07 ;Carga primer sumando en W
0001 3E08 addlw 0x08 ;Suma W con segundo sumando
0002 0090 movwf 0x10 ;Almacena el resultado
e001.hex completo:
:020000040000FA
:060000000730083E9000ED
:00000001FF
Observemos la 2 lnea:
:060000000730083E9000ED
:06000000
06 6 bytes: 07, 30, 08, 3E, 90, 00.
0000 direccin 0
00 al no ser el registro final
730083E9000ED
07 30 es 3007
08 3E es 3E08
90 00 es 0090
ED es el checksum
Ejecutar MPASM
MPASM permite operar a travs de una ventana con el botn Built All de MPLAB (ver MPLAB-IDE
v6.60) o a travs de lnea de comandos, siendo el resultado final el mismo, mediante el programa
mpasmwin de Microchip.
La lnea de comando se compone de de distintos campos, del tipo:
MPASMWIN [/<opcin>[,/<opcin>....]] [<nombre_archivo>]
<nombre_archivo> indica a MPASM el archivo a ensamblar, y las opciones pueden indicar el tipo
de prosesador, si queremos que nos muestre todos los mensajes o solo los de error, el formato de
salida del archivo .HEX etc. Estos campos se incluyen automticamente cuando trabajamos
con Built All.
A continuacin se muestra como se ejecuta MPASM segn aparece en la ventana Output de
MPLAB cuando pulsamos Built All:
mpasmwin.exe /q /p16F84A "jluzpic.asm" /l"jluzpic.lst" /e"jluzpic.err"
Tambin podemos ejecutar el archivo mpasmwin.exe directamente, aparecer:
Sistemas de numeracin
La convencin utilizada por MPASM es la siguiente:
Hexadecimal: es la numeracin por defecto. Para mayor claridad para el programador se utiliza
una letra H al final del nmero. Por ejemplo: 0100H, 0A0H, 5H, 66h.
Importante: Como sta es la numeracin por defecto hay que tener mucho cuidado al colocar
nmeros en decimal. Por ejemplo la instruccin MOVLW 64 no utilizar el nmero 64 decimal sino
el 100 decimal (64 hex = 100 dec)
Binario: Para escribir nmeros en binario utilizar B'xxxxxxxx' (utilizar comillas simples). Por
ejemplo: B'10011001' , b'01110000'.
Decimal: podemos utilizar la forma D'120' (tambin con comillas simples) o la forma corta
anteponiendo un punto al nmero decimal. Esta es la forma utilizada en todos los programas
realizados por Microchip. Por ejemplo: D'112' d'10' .200 .100
Tener en cuenta siempre el tamao de datos con el que se est trabajando. En la mayora de los
casos, se utilizar un nmero para almacenarlo en el acumulador y ste es de 8 bits. Por lo tanto el
nmero utilizado no debe exeder de 255 decimal o FF hexadecimal.
Tipo
Decimal
Sintaxi
Ejemplo
s
Comentario
D''
D'100'
D puede ser
minscula
.100
H''
H'64'
0x
0x64
Hexadecimal
Octal
O''
H puede ser
minscula
64
Por defecto
O'144'
O puede ser
minscula
Binario
ASCII
B''
B'0110010
0'
B puede ser
minscula
A''
A'C'
A puede ser
minscula
''
'C'
Directivas de MPASM
Las directivas son "indicaciones" para el ensamblador que le dicen cmo hacer algunas cosas, y
sirven para ayudarnos en la tarea de programar. MPASM ofrece bastantes directivas, las cuales se
escriben dentro del cdigo fuente. Por eso no hay que confundir las directivas con las instrucciones
del PIC.
Los tipos de directivas son:
Directivas de control.
Directivas de datos.
Directivas de listado.
Directivas de macros.
Directivas de ficheros objeto.
DA
DB
DW
DT
DE
FILL
RES
__CONFIG
__IDLOCS
Directivas de Control
CBLOCK
ENDC
CONSTANT
EQU
VARIABLE
SET
Las dos se emplean para asignar expresiones a smbolos esos smbolos pueden
cambiar de valor (son variables). Sintaxis distinta, pero igual efecto
VARIABLE BUFFER=0x20
BUFFER SET 0x20
#DEFINE
Se emplea para definir una etiqueta para una cadena decaracteres siempre que
aparezca la etiqueta, se sustituye directamente por la cadena
#DEFINE bit_0 STATUS,RP0
#UNDEFINE
ORG
END
END
INCLUDE
RADIX
PROCESSOR
SUBTITLE
SPACE
PAGE
LIST
NOLIST
MESSG
ERROR
ERRORLEVE
L
IFDEF
IF expresin
;Si la expresin es cierta se ensambla este grupo
Grupo 1 de Directivas e Instrucciones
ELSE
;y si es falsa, este otro
Grupo 2 de Directivas e Instrucciones
ENDIF
Puede sustituir a la IF. Se ensambla si est definida la etiqueta
#DEFINE DE_B_a_A 1
IFDEF DE_B_a_A
MOVF PORTB,w
MOVWF PORTA
ELSE
MOVF PORTA,W
MOVWF PORTB
ENDIF
IFNDEF
WHILE
ENDW
Macros
Una macro es un conjunto de instrucciones que pueden ser insertadas en el
cdigo fuente mediante una simple llamada a macro.
Una macro debe ser definida primero antes de poder ser llamada en elcdigo
fuente siguiente.
Una macro puede llamar a otra macro o a s misma de manera recursiva
Definicin de una macro:
Etiqueta MACRO argumento1, arguento2, argumento3, ...
Conjunto de Instrucciones
EXITM (salida intermedia opcional)
Ms instrucciones
ENDM
MACRO
EXITM
ENDM
Directivas de MPASM
Directiva
Descripcin
Sintaxis
__BADRAM
BANKISEL
bankisel <label>
BANKSEL
banksel <label>
CBLOCK
cblock [<expr>]
CODE
__CONFIG
__config <expr>
CONSTANT
constant
<label>[=<expr>,...,<label>[=<expr>]]
[<label>] data<expr>,
[,<expr>,...,<expr>]
[<label>] data
"<text_string>"[,"<text_string>",...]
[<label>] db
<expr>[,<expr>,...,<expr>]
[<label>] db
"<text_string>"[,"<text_string>",...]
DE
[<label>] de
<expr>[,<expr>,...,<expr>]
[<label>] de
"<text_string>"[,"<text_string>",...]
#DEFINE
DATA
DB
Define tabla
[<label>] dt
<expr>[,<expr>,...,<expr>]
[<label>] dt
"<text_string>"[,"<text_string>",...]
DW
[<label>] dw
<expr>[,<expr>,...,<expr>]
[<label>] dw
"<text_string>"[,"<text_string>",...]
ELSE
else
END
end
ENDC
endc
ENDIF
ENDM
endm
ENDW
endw
EQU
ERROR
error "<text_string>"
DT
EXITM
exitm
EXPAND
expand
EXTERN
extern<label>[ ,<label>]
FILL
Llena la memoria
GLOBAL
IDATA
__IDLOCS
__idlocs <expr>
IF
if <expr>
IFDEF
ifdef <label>
IFNDEF
ifndef <label>
#INCLUDE
include <<include_file>>
|"<include_file>"
LIST
Opciones listado
list [<list_option>,...,<list_option>]
LOCAL
MACRO
__MAXRAM
__maxram <expr>
MESSG
messg "<message_text>"
NOEXPAND
noexpand
NOLIST
nolist
ORG
PAGE
page
PAGESEL
pagesel <label>
processor <processsor_type>
RADIX
radix <default_radix>
RES
Reserve la Memoria
SET
SPACE
space <expr>
SUBTITLE
subtitle "<sub_text>"
TITLE
title "<title_text>"
UDATA
UDATA_OVR
UDATA_SHR
#UNDEFINE
#undefine <label>
VARIABLE
variable
<label>[=<expr>,...,<label>[=<expr>] ]
Realiza el bucle Mientras la Condicin es
while <expr>
Verdadera
Para mas informacin ver MPASM, MPLINK, MPLIB User's Guide o informacin actualizada en
Microchip.
WHILE
BANKISEL
Genera el cdigo que selecciona el banco de memoria RAM para el direccionamiento Indirecto.
Sintaxis:
bankisel <etiqueta>
Descripcin:
Se usa para generar el archivo objeto. Esta directiva es una instruccin para el linkador para que
seleccione el banco de memoria adecuado para acceder directamente a la <etiqueta>
especificada. La <etiqueta> debe ser especificada sola. No puede realizarse ninguna operacin
delante de la <etiqueta>. La <etiqueta> debe estar definida previamente.
El linkador generar el banco apropiado que selecciona el cdigo. En esencia para los dispositivos
de 14 bits, la instruccin genera el set/clear del bit apropiado en el IRP de registro de STATUS.
Para los dispositivos de 16-bits, MOVLB o MOVLR son las que lo generan. Si el usuario puede
especificar la direccin indirecta completamente sin estas instrucciones, no se genera ningn
cdigo.
Ejemplo:
movlw
movwf
bankisel
...
movwf
Var1
FSR
Var1
INDF
Ver
PAGESEL BANKSEL
Volver a la tabla de directivas
BANKSEL
Genera el cdigo que selecciona el cdigo de memoria RAM
Sintaxis:
banksel <etiqueta>
Descripcin:
Se utiliza para generar un archivo objeto. Esta directiva da instruccin al linkador para que
seleccione el banco de memoria adecuado para acceer directamente a la etiqueta. La etiqueta
debe especificarse sola. Ninguna operacin puede realizarse delante de la etiqueta. La etiqueta
debe haberse definido previamente.
El linkador genera el banco apropiado que selecciona el cdigo . En esencia para los dispositivos
de 12 bits, las instrucciones de set/clear se generan los bit apropiados en el FSR. Para los
dispositivos de 14 bits, se generan las instrucciones de set/clear de los bit del registro de STATUS.
Para los dispositivos de 16 bits, se generan instrucciones MOVLB o MOVLR. Para dispositivos de
16 bits reforzados se generan MOVLB. Si el dispositivo contiene slo un banco RAM, no se genera
ninguna instruccin.
Ejemplo:
banksel Var1
movwf Var1
Ver
BANKISEL PAGESEL
Volver a la tabla de directivas
CBLOCK
Define un bloque de constantes.
Sintaxis:
cblock [<expresin>] <etiqueta>[:<increment>][,<etiqueta>[:<increment>]]endc
Descripcin:
Define una lista de constantes definidas (por un nombre). A cada <label> se le asigna un valor
inmediatamente superior que al anterior <label>. El propsito de esta directiva es asignar
direcciones a muchas etiquetas. La lista finaliza cuando se encuentra la directiva ENDC.
<expr> indica el valor de arranque para el primer nombre del bloque de etiquetas. Si no se asigna
en la expresin, la primera variable recibir un valor superior al de la variable final del CBLOCK
anterior. Si el primer CBLOCK en el archivo fuente no tiene ningn <expresin>, los valores
asignados empiezan con el cero.
Si <increment> se especifica, entonces a la prxima <etiqueta> se le asigna el valor de
<increment> superior a la anterior <etiqueta>.
Pueden darse los nombres mltiples en una lnea, separada por las comas.
Ejemplo:
cblock 0x20
;a la primera variable se le asigna el valor 20
name_1, name_2 ;name_2, se le asigna el valor 21
name_3, name_4 ;name_4 se le asigna 23.
endc
cblock 0x30
TwoByteVar: 0, TwoByteHigh, TwoByteLow
Queue: QUEUE-SIZE
QueueHeadm QueueTail
Double1:2, Double2:2
endc
Ver
ENDC
Volver a la tabla de directivas
CODE
Empieza la seccin de cdigo de un Archivo Objeto
Sintaxis:
[<etiqueta>] CODE [<direccin de ROM>]
Descripcin:
Se usa para generar un archivo del objeto. Declara el principio de una seccin de cdigo del
programa. Si <etiqueta> no se especifica, la seccin se nombra .code, empezando en la direccin
siguiente a la direccin especificada o se asignar al eslabn tiempo si ninguna direccin se
especifica.
Ejemplo:
RESET code H'01FF'
goto START
Ver
EXTERN GLOBAL IDATA UDATA UDATA_ACS UDATA_OVR UDATA_SHR
Nota: Dos secciones del mismo archivo fuente no pueden tener el mismo nombre.
Volver a la tabla de directivas
__CONFIG
Configuracin de los bit de configuracin de procesador
Sintaxis:
__config <expr> OR __config <addr>, <expr>
Descripcin:
Fija los bit de configuracin del procesador con el valor descrito por la expresin
Para los dispositivos PIC18CXX, la direccin de la palabra de configuracin tambin debe ser
especificada por <addr> . Ver en el manual de referencia de los microcontroladores la descripcin
de los bit de la palabra de configuracin para cada microcontrolador.
Antes de utilizar esta directiva, debe declararse mediante la directiva LIST o la directiva
PROCESSOR. Si esta directiva se usa en la familia de los PIC17CXX, el archivo Hexadecimal
debe ponerse en formato INHX32 utilizando la directiva LIST .
Ejemplo:
LIST P=12ce519 ,n=66
INCLUDE
__CONFIG CP_OFF & WDT_ON & MCLRE_ON & IntRC_OSC
La primera lnea de directivas indica que el nmero de lneas que se incluir en el listado de una
pgina.
La segunda lnea indica al compilador el fichero que deber incluir en la compilacin, en este caso
CONSTANT
Declara los smbolos de las constantes
Sintaxis:
constant <label>=<expr> [...,<label>=<expr>]
Descripcin:
Crea los smbolos para el uso de expresiones. No pueden ponerse a cero las constantes una vez
se ha inicializado, y la expresin deber ser totalmente admitida en el momento de la asignacin.
Esta es la diferencia principal entre las constantes (CONSTANT) y aquellas que se definen como
variables (VARIABLE) o aquellas creadas por la directiva SET. Por otra parte pueden usarse
constantes y variables intercambiables en las expresiones.
Ejemplo:
variable RecLength=64 ;Poner por defecto
;RecLength
constant BufLength=512 ;Init BufLength
.
;RecLength may
.
;be reset later
.
;in RecLength=128
.
;
constant MaxMem=RecLength+BufLength ;CalcMaxMem
Ver
SET VARIABLE
Volver a la tabla de directivas
DATA
Crea Datos numricos y de Texto
Sintaxis:
[<etiqueta>] data <expr>,[,<expr>,...,<expr>]
[<etiqueta>] data "<text_string>"[,"<text_string>",...]
Descripcin:
Esta directiva inicializa una o ms palabras de memoria de programa con los datos de la expresin.
Estos datos pueden ser en forma de constantes, reubicable o etiquetas externas, o expresiones
formadas por cualquiera de las anteriores.
Los datos tambin pueden ser un carcter ASCII, <text_string> , entre comillas simples para
caracteres o entre dobles comillas para cadenas de caracteres.
Ejemplo:
data
data
data
data
data
reloc_label+10 ;constante
1,2,ext_label ;constante, externa
"hola 1,2,3"
;cadena de caracteres
'N'
;carcter sencillo
start_of_program ;etiqueta recolocable
Ver
DW DB DE DT IDATA
Volver a la tabla de directivas
DB
Declara datos de un Byte
Sintaxis:
[<etiqueta>] db <expr>[,<expr>,...,<expr>]
Descripcin:
Reserva memoria de programa para palabras de tamao 8 bits. Las expresiones mltiples
continan llenando los bytes de memoria de forma consecutiva hasta el final de las expresiones. Si
el nmero de datos de las expresiones es impar, el ltimo byte ser el cero. Al generar un archivo
del objeto, esta directiva tambin puede usarse para declarar los valores de los datos de
inicializacin. Para mas informacin mirar la directiva IDATA.
Ejemplo:
DB 't', 0x0f, 'e', 0x0f, 's' , 0x0f, 't', '\n'
Ver
DATA DW DE DT IDATA
Volver a la tabla de directivas
DE
Define datos en la EPROM
Sintaxis:
[<etiqueta>] de <expr>[,<expr>,...,<expr>]
Descripcin:
Reservan palabras de memoria de 8 bits. Cada expresin reserva un valor de 8 bits. Los bits
superiores de la palabra de programa son cero. Carda carcter de un string se guarda en un
posicin separada.
Ejemplo:
org H'2100'
de "ProgTOB, v1.0" ,0
El resultado en la memoria EEPROM es el siguiente:
Ver
DATA DB DT DW
Volver a la tabla de directivas
#DEFINE
Define una etiqueta de sustitucin de texto
Sintaxis:
#define <name> [<string>]
Descripcin:
Esta directiva define una cadena de substitucin de texto. Dondequiera que <name> se encuentre
en el ensamblador, se sustituir por <string>.
Usando la directiva sin <string> genera una definicin de tipo <name> para ser utilizada
internamente por la directiva IFDEF.
Esta directiva emula el ANSI 'C' standard como #define. No est disponible definir smbolos con
este mtodo utilizando MPASM.
Ejemplo 1:
#define banco0 bcf status,5
#define banco1 bsf status,5
Siempre que a lo largo del programa se escriba banco0, se selecciona el banco 0 de memoria. De
igual modo, siempre que se escriba banco1, se selecciona el banco 1 de memoria.
Ejemplo 2:
#define longitud 20
#define control 0x19,7
#define posicion (X,Y,Z) (Y-(2 * Z+X))
.
.
.
test_label dw posicin (1, longitud,512)
bsf control ;set bit 7 de la posicin 19 RAM
Ver
IFDEF IFNDEF #UNDEFINE
Volver a la tabla de directivas
DT
Define Tabla
Sintaxis:
[<etiqueta>] dt <expr> [, <expre>, .., <expre>]
Descripcin:
Esta genera, durante la fase de ensamblado, tantas instrucciones retlw como caracteres u octetos
la acompaen.
Ejemplo:
dt "mensaje",0x10,.15
Esta directiva genera las instrucciones:
rtlw 0x6D (m en ASCII)
rtlw 0x65 (e en ASCII)
rtlw 0x6E (n en ASCII)
rtlw 0x73 (s en ASCII)
rtlw 0x61 (a en ASCII)
rtlw 0x6A (j en ASCII)
rtlw 0x65 (e en ASCII)
rtlw 0x10
rtlw 0xf (15 en decimal)
Ver
DATA DB DE DW
Volver a la tabla de directivas
DW
Define datos de un Word
Sintaxis:
[<etiqueta>] dw <expr> [, <expre>, .., <expre>]
Descripcin:
Reserva memoria de programa para los datos, inicializando estas posiciones con valores
especficos. Se guardan los valores en posiciones de memoria sucesivas y se incrementa en uno el
contador. Las expresiones pueden ser literales y se guardan como se ha descrito en la directiva
DATA.
Al generar el archivo objeto, esta directiva tambin puede usarse para declarar los valores de los
datos inicializados. Ver la directiva IDATA para ms informacin.
Ejemplo:
dw 39, "diagnostic 39", (d_list*2+d_offset)
dw diagbase-1
Ver
DATA DB IDATA
Volver a la tabla de directivas
ELSE
Empieza el bloque alternativo de un IF
Sintaxis:
else
Descripcin:
Usada junto con la directiva IF para proporcionar un camino alternativo de ensamblado si al evaluar
la condicin es falso. Else puede usarse dentro de un bloque de programa o en una macro.
Ejemplo:
SPEED macro rate
if rate < 50
dw lento
else
dw rapido
endif
endm
Ver
IF ENDIF
Volver a la tabla de directivas
END
Fin de bloque de programa
Sintaxis:
end
Descripcin:
Esta directiva indica el final del programa y es obligatoria. Si se detecta el fin de fichero y no se ha
encontrado la directiva ENDse produce error. Todas las lneas posteriores a la lnea en la que se
encuentra esta directiva, se ignoran y no se ensamblan.
Ejemplo:
Inicio bsf STATUS,RP0 ; Comienza el programa ejecutable
clrf PORTB
bcf STATUS,RP0
movlw b'00000010'
movwf PORTB
end
Volver a la tabla de directivas
ENDC
Termina un bloque automtico de constantes
Sintaxis:
endc
Descripcin:
ENDCse escribe al final de una lista de constantes CBLOCK. Debe escribirse para indicar el fin de
la lista.
Ejemplo:
cblock 0x20
;a la primera variable se le asigna el valor 20
name_1, name_2 ;name_2 se le asigna el valor 21
name_3, name_4 ;name_4 se le asigna 23.
endc
Ver
CBLOCK
Volver a la tabla de directivas
ENDIF
Fin de bloque de condiciones de ensamblado
Sintaxis:
endif
Descripcin:
Esta directiva marca el extremo de un bloque condicional de ensamblado. ENDIF puede usarse
dentro de un bloque de programa o en una macro.
Ver
IF ELSE
Volver a la tabla de directivas
ENDM
Fin de la definicin de una macro
Sintaxis:
endm
Descripcin:
Termina una definicin del macro que comienza con la directiva MACRO.
Ejemplo:
Led1 macro ;Enciende el LED1 del conectado al PortB
bsf STATUS,RP0
clrf PORTB
bcf STATUS,RP0
movlw b'00000010'
movwf PORTB
endm
Ver
MACRO EXITM
Volver a la tabla de directivas
ENDW
Fin de bucle de espera
Sintaxis:
endw
Descripcin:
ENDW Finaliza un tiempo de espera. Cuando se cumple la condicin especificada por la directiva
WHILE , el cdigo fuente entre la directiva WHILE y la directiva ENDW se extender repetidamente
en la fuente del ensamblador y el cdigo fuente. Esta directiva puede usarte dentro de un bloque
de programa o en una macro.
Ejemplo:
test_mac macro count
variable i
i=0
while i < count
movlw i
i += 1
endw
endm
start
test_mac 5
end
Ver
WHILE
Volver a la tabla de directivas
EQU
Define una constante para el ensamblador
Sintaxis:
<etiqueta> equ <espr>
Descripcin:
Esta directiva permite asignar el valor de <expr> a un identificador <etiqueta>. El resultado puede
ser una expresin compuesta por otros identificadores y tan compleja como se desee.
Generalmente, el identificador es un nombre que describe el valor de manera ms significativa
para el programador. Suele utilizarse para definir constantes y direcciones de memoria. As, es ms
fcil recordar SEG_POR_HORA que recordar el valor 3600 o en el caso de una direccin de
memoria TRISA que 0x05.
Ejemplo:
cuatro EQU 4; asigna el valor del nmero 4 a la etiqueta 4
Ver
SET
Volver a la tabla de directivas
ERROR
Emite un mensaje de Error
Sintaxis:
error "<text_string>"
Descripcin:
<text_string> imprime en un formato idntico a cualquier error de MPASM
El mensaje <text_string> puede tener un total de ochenta caracteres.
Ejemplo:
error_checking macro arg1
if >= 55 ; Si el argumento est fuera de rango
error "error_checking-01 el argumento est fuera de rango"
endif
endm
Ver
MESSG
Volver a la tabla de directivas
ERRORLEVEL
Sita el nivel de error
Sintaxis:
errorlevel {0|1|2|+<msgnum>|-<msgnum>} [, ...]
Descripcin:
Tipos de mensajes que estn impreso en el archivo listable y el archivo de errores.
Poner
Efecto
Imprime errores
Los valores para <msgnum> pueden verse en MPASM, MPLINK, MPLIB Users Guide. Los
mensajes de Error no pueden ser desactivados. La opcin de 0, 1, o 2 anula el mensaje individual
que desactiva o habilitando.
Ejemplo:
errorlevel 1, -202
Ver
LIST
Volver a la tabla de directivas
EXITM
Salida de una Macro
Sintaxis:
exitm
Descripcin:
Fuerza el retorno inmediato de la expansin de la macro durante el ensamblado. El efecto es igual
que encontrar una directiva ENDM.
Ejemplo:
test macro filereg
if filereg == 1 ;check for valid file
exitm
else
error "bad file assignment"
endif
endm
Ver
MACRO ENDM
Volver a la tabla de directivas
EXPAND
Expande una lista de Macro
Sintaxis:
expand
Descripcin:
Extiende todas las macros en el archivo de listado. Esta directiva es aproximadamente equivalente
al comando de la opcin de lnea /m MPASM, pero puede desactivarse por la accin de un
NOEXPAND.
Ver
MACRO NOEXPAND
Volver a la tabla de directivas
EXTERN
Declare una etiqueta definida como externa
Sintaxis:
extern <etiqueta> [,<etiqueta>...]
Descripcin:
Se utiliza para generar un archivo del objeto. Declara nombres del smbolo que pueden ser usado
en el mdulo actual pero se define como global en un mdulo diferente.
La declaracin de EXTERNdebe ser incluida antes de <etiqueta>. Debe expecificarse al menos
una etiqueta en la misma lnea. Si <etiqueta> se define en el el mdulo actual, MPASM generar
un error de la etiqueta doble.
Ejemplo:
extern Function
...
call Function
Volver a la tabla de directivas
FILL
Llena la memoria
Sintaxis:
[<label>] fill (<expr>,<count>)
Descripcin:
Genera <count> sucesos de palabras de programa o byte (en los dispositivos PIC18CXX ). <expr>
puede ser una instruccin en ensamblador.
Ejemplo:
fill 0x1009, 5 ; Llenar con una constante
fill (GOTO RESET_VECTOR),NEXT_BLOCK-$
Ver
DW ORG DATA
Volver a la tabla de directivas
GLOBAL
Exportacin una Etiqueta
Sintaxis:
global <etiqueta> [,<etiqueta>...]
Descripcin:
Para el uso al generar un archivo del objeto. Declara nombres del smbolo que son definidos en el
mdulo actual y debe estar disponible en otros mdulos.
La declaracin GLOBAL debe anteceder a una <etiqueta>. Por lo menos una etiqueta debe
especificarse en la lnea.
Ejemplo:
udata
Var1 res 1
Var2 res 1
global Var1, Var2
code
AddThree
global AddThree
addlw 3
return
Volver a la tabla de directivas
IDATA
Comienza una seccin de identificadores en el archivo objeto
Sintaxis:
[<label>] idata [<RAM address>]
Descripcin:
Para generar un archivo objeto. Declara el inicio de una seccin de inicicaliazcin de datos. Si
<label> no se especifica, la seccin se nombra .idata. La primera direccin es la que se especifica,
sino se indica, se asignar en el momento de linkar. Ningn cdigo puede generarse en este
segmento del programa.
El montador generar una entrada de la tabla parecer-despierta para cada byte especificado en la
seccin IDATA . El usuario debe linkar entonces o debe incluir el cdigo de la inicializacin
apropiado.
dw 0
dw D'300'
dw D'5'
db 0
db 'Hi there!'
Ver
EXTERN GLOBAL UDATA UDATA_ACS UDATA_OVR UDATA_SHR
Volver a la tabla de directivas
__IDLOCS
El Procesador fija las posiciones de ID
Sintaxis:
__idlocs <expr> or __idlocs <expr1>, <expr2>
Descripcin:
Para los PIC12CXX, PIC14000, y PIC16CXX, __IDLOCS pone los cuatro localizadores ID en
hexadecimal valorando la <expr>. Para los dispositivos PIC18CXX, __IDLOCS pone dos bytes en
el dispositivo ID <expr1> el valor del hexadecimal de <expr2>. Esta directiva no es vlido para la
familia de PIC17CXX.
Por ejemplo, si <expr> evala 1AF, primero (la direccin ms baja) del localizador ID es el cero, el
segundo es el uno, el tercero es el diez, y el cuarto es quince.
Antes de usar esta directiva, debe declararse el procesador a travs de la lnea de comandos con
la directiva LIST, o la directiva PROCESSOR.
Ejemplo:
__idlocs H'1234'
Ver
LIST PROCESSOR __CONFIG
Volver a la tabla de directivas
IF
Comienza un bloque de cdigo condicional
Sintaxis:
if <expr>
Descripcin:
Empieza ejecucin de un bloque condicional de ensamblado. Si <expr> es verdadera,
el cdigo inmediato a IF se ensamblara. En caso contrario, las instrucciones siguientes se saltan
hata encontrar una directiva ELSE o una directiva ENDIF.
La evaluacin de una expresin que sea cero se considera desde el punto de vista de la lgica
FALSA. La evaluacin de una expresin que de cualquier valor distinto de dero se considera como
VERDADERA. las directivas IF (SI) y WHILE (MIENTRAS) operan con el valor lgico de una
expresin. Un expresin verdadera (TRUE) garantiza devolver un valor distinto de cero, y falsa
(FALSE) el valor cero.
Ejemplo:
if version == 100 ;check current version
movlw 0x0a
movwf io_1
else
movlw 0x01a
movwf io_2
endif
Ver
ELSE ENDIF
Volver a la tabla de directivas
IFDEF
Ejecuta si el smbolo ha sido definido
Sintaxis:
ifdef "<label>"
Descripcin:
Si <label> se ha definido previamente, normalmente utilizando la directiva #DEFINE o poniendo el
valor en el comando de lnea del MPASM, se toma el camino condicional. El ensamblado
continuar hasta encontrar un ELSE emparejado o una directiva ENDIF.
Ejemplo:
;*******************************
;doble microcontrolador
;********************************
#DEFINE PIC674
ifdef PIC674
LIST p=12ce674
INCLUDE
else
LIST p=12ce519
INCLUDE
endif
ifdef PIC674 ;Si est declarada PIC674, el reloj ser externo
__CONFIG CP_OFF & WDT_OFF & MCLRE_OFF & EXTER_COSC_NOCLKOUT & HSOSC
else
__CONFIG CP_OFF & WDT_OFF & MCLRE_OFF & IntRC_OSC
endif
Si se pine un ";" delante de #DEFINE PIC674, se compila para el microcontrolador PIC12CE519, si
se quita el ";" lo hace para el PIC674. Si el microcontrolador que se usa es el 674, el oscilador que
se utiliza es el externo y sin habilitar la salida de reloj (CLKOUT) mientras que si se utiliza el 519, el
oscilador ser interno por RC. En la fase de ensamblado se comprobar si est declarada la
variable. Si es cierta, se ejecutar la primera lnea de configuracin y si no lo es, se ejecutar la
que hay despus de ELSE.
Ver
#DEFINE ELSE ENDIF IFNDEF #UNDEFINE
Volver a la tabla de directivas
IFNDEF
Ejecuta si el smbolo no ha sido definido
Sintaxis:
ifndef "<label>"
Descripcin:
Si <label> no se ha definido previamente, o se ha utilizando la directiva #UNDEFINE , entonces el
cdigo que hay a continuacin de la directiva ser ensamblado. Se seguir ensamblando hasta
encontrar una directiva ELSE emparejada o encontrar una directiva ENDIF.
Ejemplo:
;*******************************
;doble microcontrolador
;*******************************
#DEFINE PIC674
ifndef PIC674
LIST p=12ce519
INCLUDE
else
LIST p=12ce674
INCLUDE
endif
ifndef PIC674 ;Si est declarada PIC674, el reloj ser externo
__CONFIG CP_OFF & WDT_OFF & MCLRE_OFF & IntRC_OSC
else
__CONFIG CP_OFF & WDT_OFF & MCLRE_OFF & EXTER_COSC_NOCLKOUT & HSOSC
endif
Si se pine un ";" delante de #DEFINE PIC674, se compila para el microcontrolador PIC12CE519, si
se quita el ";" lo hace para el PIC674. Si el microcontrolador que se usa es el 674, el oscilador que
se utiliza es el externo y sin habilitar la salida de reloj (CLKOUT) mientras que si se utiliza el 519, el
oscilador ser interno por RC. En la fase de ensamblado se comprobar si est declarada la
variable. Si es cierta, se ejecutar la primera lnea de configuracin y si no lo es, se ejecutar la
que hay despus de ELSE.
Ver
#DEFINEELSEENDIF IFNDEF #UNDEFINE
Volver a la tabla de directivas
INCLUDE
Incluye Fichero fuentes adicionales
Sintaxis:
include <<include_file>>
include "<include_file>"
Descripcin:
El archivo especificado se lee en cdigo fuente. El efecto es igual que si el texto entero del archivo
include se pusiera aqu. Al ensamblar el cdigo fuente se aadir el archivo incluido. Se permiten
seis niveles de anidamiento. El <include_file> puede escribirse entre comillas o entre los smbolos
de mayor que y menor que (< >). Si se especifica totalmente el camino del fichero include, slo ese
camino se investigar. Si no se indica camino, el orden de la bsqueda es: el directorio activo
actual, el directorio de archivo de fuente, el directorio ejecutable de MPASM.
Ejemplo:
include ;define el archivo donde estn definidos todos los
;registros del PIC16F84
include "p16F84.inc" ;tambin se puede definir de esta forma
include "c:\sys\sysdefs.inc" ;define sysdefs.inc con su camino
include
;define regs.h
Volver a la tabla de directivas
LIST
Opciones de Listado
Sintaxis:
list [<list_option>, ..., <list_option>]
Descripcin:
Se admite solo en una lnea , la directiva LIST tiene el efecto sobre el listado de salida. Por otra
parte, uno de lo siguiente opciones pueden proporcionarse controlando la estructura del proceso
de ensamblado o el archivo listado:
Opcin
Por
defecto
b=nnn
c=nnn
132
f=<format
>
INHX8M
Free
FIXED
Fixed
FIXED
mm=on/of
f
On
n=nnn
60
P=<tipe>
Ningn
tipo
r=<radix>
hex
st=ON/OF
F
On
t=ON/OFF
Off
w=0|1|2
x=ON/OF
F
On
Descripcin
Espacios de tabulacin
Fija la anchura de las columnas
Fija el fichero hexadecimal de salida . <format> puede ser INHX32,
INHX8M, o INHX8S.
Nota: Todas las opciones LIST estn definidas como nmero decimales
Ejemplo:
list p=17c42, f=INHX32, r=DEC
Ver
NOTLIS PROCESSOR RADIX ERRORLAVEL EXPAND NOEXPAND
Volver a la tabla de directivas
LOCAL
Declara la variable de la macro como local
Sintaxis:
Local <label>, <label>
Descripcin:
Declara que el elemento de datos especificado se considera en el contexto local de la macro.
<label> puede ser idntico a otra etiqueta declarada fuera de la definicin de la macro; no habr
ningn conflicto entre las dos. Si la macro es llamada recursivamente, cada llamada tendr su
propia copia local.
Ejemplo:
.
.
len equ 10 ;versin global
size equ 20 ;Comprobar que una variable local
;puede crearse ahora y modificarse
test macro size
local len, label ;local len y label
len set size ;modifica local len
label res len ;reserva buffer
len set len-20 ;
endm
;fin de la macro
Ver
MACRO ENDM
Volver a la tabla de directivas
MACRO
Declara la definicin de macro
Sintaxis:
<label> macro [<arg>, ..., <arg>]
Descripcin:
Una macro define un conjunto de instrucciones a las que se asigna un nombre. Posteriormente, el
programa fuente del usuario puede incluir el nombre de una macro y todas las instrucciones que la
componen quedan insertadas en el momento de realizar el ensamblado, formando parte del
programa.
Ejemplo:
La estructura de la macro es la siguiente:
Nombre_macro macro
Instruccin_1
Instruccin_2
.
.
Instruccin_n
endm
Donde:
Nombre_macro: indica el nombre de la macro que posteriormente se emplear en el programa
fuente para incluir todas las instrucciones que estn definidas bajo este nombre. Las directivas
MACRO y ENDMACRO forman el cuerpo dentro del cual estn incluidas todas las instrucciones
deseadas.
Cada vez que se emplea Nombre_macro en el programa fuente, implica insertar todas las
instrucciones que conlleve dicho nombre en el programa
Ver
ENDM LOCAL IF ELSEENDIF EXITM
Volver a la tabla de directivas
__MAXRAM
Define la Posicin de RAM mayor
Sintaxis:
__maxram <expr>
Descripcin:
Las directivas __MAXRAM y __BADRAM dan juntas accesos a los flag de registro no
implementado.
__MAXRAM define el valor mximo absoluto vlido de la memoria RAM e inicializa las direcciones
del mapa de memoria a utilizar, el valor debe ser siempre superior a la mxima direccin del banco
0 y menor de 1000h.
Este directiva esta diseada para usarla junto con la directiva __BADRAM para proteger ciertas
direcciones de memoria.
__MAXRAM puede usarse ms de una vez en un archivo de la fuente. Cada uso redefine la
direccin de memoria, se debe de tener en cuenta que cada vez que esto ocurre, se borra el
contenido de la memoria.
Ejemplo:
;definicin DE RAM para el PIC16F84
__MAXRAM H'CF'
__ BADRAM H'07',H50'-H'7F',H87'
movwf H'07' ;Genera un warning de direccin de RAM no valida
movwf H'87' ;Genera un warning de direccin de RAM no valida
Ver
__BADRAM
Volver a la tabla de directivas
MESSG
Crea mensajes definidos por el usuario
Sintaxis:
messg "<message_text>"
Descripcin:
Genera un mensaje informativo a ser imprimido el archivo listable. El texto del mensaje puede tener
hasta 80 carcteres. Emitiendo una directiva MESSG no pone el cdigo de retorno de error.
Ejemplo:
mssg_macro macro
messg "mssg_macro-001 llamada sin el argumento"
endm
Ver
ERROR
Volver a la tabla de directivas
NOEXPAND
Termina la expansin de la Macro
Sintaxis:
noexpand
Descripcin:
Desactiva la expansin de la macro en el archivo de listado.
Ver
EXPAND
NOLIST
Desactiva el listado de salida
Sintaxis:
nolist
Descripcin:
Desactiva el archivo del listado de salida
Ver
LIST
Volver a la tabla de directivas
ORG
Origen de las instrucciones del programa
Sintaxis:
[<label>] org <expr>
Descripcin:
El origen del programa comienza la direccin indicada en la <expr> de la directiva. Si se especifica
una <etiqueta> se le da el valor de la <expr>. Si no hay ningn ORG especificado, la generacin
del cdigo comienza en la direccin cero.
Ejemplo:
int_1
org 0x20
;Vector 20 va aqu
int_2
org int_1+0x10
;Vector 20 va aqu
Ver
RES FILL
Volver a la tabla de directivas
PAGE
Inserta el nmero de pgina en el listado
Sintaxis:
page
Descripcin:
Inserta el nmero de pgina en el listado del programa
Ver
LIST TITLE SUBTITLE
Volver a la tabla de directivas
PAGESEL
Genera pgina que selecciona el cdigo
Sintaxis:
Pagesel <label>
Descripcin:
Para el uso general de un archivo objeto. Al linkar una instruccin para generar la pgina que
selecciona el cdigo para poner los bits de la pgina en la pgina que contiene las etiquetas
designadas .Una nica <etiqueta> debe especificarse. Ninguna operacin puede realizarse
delante de la <etiqueta>. La <etiqueta> debe haberse definido previamente. El linkador generar
la pgina apropiada que selecciona el cdigo. Para los micros de 12-bits, las instrucciones de bit
set/clear apropiadas en el ESTADO registran el estado generado. Para los dispositivos de 14-bits y
los de 16-bits, MOVLW y MOVWF generarn las instrucciones paramodificar el PCLATH. Si el
dispositivo contiene slo una pgina de memoria del programa, ningn cdigo se generar.
Para los dispositivos de PIC18CXX, este orden no har nada.
Ejemplo:
Pagesel GotoDest
goto GotoDest
....
pagesel CallDest
call CallDest
Ver
BANKSEL BANKISEL
Volver a la tabla de directivas
< name="PROCESSOR">PROCESSOR
Fija el tipo de procesador
Sintaxis:
processor <processor_type>
Descripcin:
Fija el tipo de microcontrolador utilizado <processor_type>.
Ejemplo:
processor 16F84
Ver
LIST
Volver a la tabla de directivas
RADIX
Especifica el rango (RADIX) por defecto
Sintaxis:
radix <default_radix>
Descripcin:
Define el rango para las expresiones de los datos. El radix predefinido por defecto es el
hexadecimal.
Los valores del radix son: el hexadecimal (hex), decimal (dec), u octal (oct).
Ejemplo:
radix dec
Ver
LIST
Volver a la tabla de directivas
RES
Reserva memoria
Sintaxis:
[<label>] res <mem_units>
Descripcin:
Al indicador de la posicin de memoria se le incrementa desde la posicin actual las unidades que
especifica <mem_units>. En el cdigo no reubicable, la <etiqueta> puede ser una direccin de
memoria de programa. En el cdigo reubicable (usando MPLINK), tambin pueden usarse RES
para reservar el almacenamiento de los datos.
Ejemplo:
Buffer RES 64 ;reserva 64 palabras para almacenar
Ver
ORG FILL
Volver a la tabla de directivas
SET
Define Variable en Ensamblador
Sintaxis:
<etiqueta> set <expresin>
Descripcin:
<etiqueta> asume el valor de la expresin de MPASM vlida especificada por <expresin>. La
directiva SET es funcionalmente equivalente a la directiva EQU slo que los valores SET pueden
ser alterado como por otra directiva SET.
Ejemplo:
area set 0
ancho set 0x12
largo set 0x14
area set largo * ancho
Ver
EQU
Volver a la tabla de directivas
SUBTITLE
Especifica el subttulo del programa
Sintaxis:
subtitle "<sub_text>"
Descripcin:
<sub_text> es una cadena de caracteres ASCII imprimibles que se indica entre dobles comillas.
Debe tener 60 caracteres o menos. Esta directiva establece el texto a ser usado en la segunda
SPACE
Inserta lneas en blanco
Sintaxis:
space <expr>
Descripcin:
Insercin el nmero de lneas en blanco en el archivo de listado indicadas en <expr>.
Ejemplo:
space 3 ;Inserta tres lneas en blanco
Ver
LIST
Volver a la tabla de directivas
TITLE
Especifica el ttulo del programa
Sintaxis:
title "<title_text>"
Descripcin:
<title_text> es una cadena de caracteres ASCII imprimibles que se indica entre dobles comillas.
Debe tener 60 caracteres o menos. Esta directiva establece el texto a ser usado en la lnea inicial
de cada pgina en el archivo de impresin.
Ejemplo:
title "cdigo de operacin, rev 5.0"
Ver
LIST SUBTITLE
Volver a la tabla de directivas
UDATA
Empieza la seccin de datos no inicializados en el archivo objeto
Sintaxis:
[<label>] udata [<RAM address>]
Descripcin:
Para el uso al generar el archivo objeto. Declara el inicio de una seccin de datos a inicializar . Si
<label> no se especifica, la seccin se nombra .udata.
La primera direccin se indica con a la direccin especificada o se asignar a continuacin de la
direccin especifica. No se puede generar ningn cdigo en este segmento.
La directiva RES debe utilizarse para reservar espacio para los datos.
Nota: Dos secciones en el mismo archivo fuente no pueden tener el mismo nombre.
Ejemplo:
udata
Var1 res 1
Double res 2
Ver
IDATA UDATA_OVR UDATA_SHR EXTERN GLOBAL
Volver a la tabla de directivas
UDATA_OVR
Comienza la seccin de datos no inicializados superpuestos
Sintaxis:
[<label>] udata_ovr [<RAM address>]
Descripcin:
Para el uso al generar un archivo del objeto. Declara el principio de una seccin de los datos de
inicializacin superpuestos. Si no se especifica <label>, la seccin es nombrada .udata_ovr. La
direccin de arranque se indica al principio o se asignar en momento de linkar si no se especifica
ninguna direccin. El espacio declarado por esta seccin es overlayed para todas las otras
secciones del udata_ovr del mismo nombre. Es una manera ideal de declarar las variables
temporales ya que permite que las variables mltiples sean declaradas en la misma posicin de de
memoria. Ningn cdigo puede genere en este segmento. La directiva RES debe usarse para
UDATA_SHR
Empieza la seccin de datos no inicializados compartidos
Sintaxis:
[<label>] udata_shr [<RAM address>]
Descripcin:
Para el uso al generar un archivo del objeto. Declara el inicio de una seccin de los datos de
uninitialized compartido. Si <la etiqueta> no se especifica, la seccin es nombrada .udata_shr. La
direccin de arranque se inicializa la direccin si no se asignar en momento del linkado cuando no
se indique ninguna direccin. Esta directiva se usa para declarar variables que se asignan en RAM
que es compartido por todos los bancos del RAM (es decir los unbanked RAM). Ningn cdigo
puede generarse en este segmento. La directiva RES debe usarse para reservar el espacio para
los datos.
Ejemplo:
Temps udata_shr
Temp1 res 1
Temp2 res 1
Temp3 res 1
Ver
EXTERN GLOBAL IDATA UDATA UDATA_ACS UDATA_OVR
Volver a la tabla de directivas
#UNDEFINE
Anula etiqueta de sustitucin
Sintaxis:
#undefine <label>
Descripcin:
La <etiqueta> es previamente un identificador definido con la directiva #DEFINE. Esta debe ser
una etiqueta valida para el MPASM. El identificador indicado es borrado de la tabla de smbolos.
Ejemplo:
#define length 20
.
.
#undefine length
Ver
#DEFINE IFDEF INCLUDE IFNDEF
Volver a la tabla de directivas
VARIABLE
Declara un smbolo como variable
Sintaxis:
variable &t;label>[=<expr>][,<label>[=<expr>]...]
Descripcin:
Crea los smbolos para el uso en las expresiones de MPASM. Las variables y constantes puede
intercambiarse en las expresiones.
La directiva VARIABLE crea un smbolo que es funcionalmente equivalente a los creados por la
directiva SET. La diferencia es que la directiva VARIABLE no requiere que los smbolos se
inicialicen cuando se declaran.
Note que no se pueden actualizar os valores de las variables dentro de un operando. Se debe
utilizar lneas separadas para asignar variables, incrementos y decrementos.
Ejemplo:
variable RecLength=64 ;Poner por defecto
;RecLength
constant BufLength=512 ; Init BufLength
.
; RecLength may
.
; be reset later
.
; in RecLength=128
.
;
constant MaxMem=RecLength+BufLength ;CalcMaxMem
Ver
CONSTANTSET
Volver a la tabla de directivas
WHILE
Realiza el bucle mientras la condicin es verdadera
Sintaxis:
while <expr>
endw
Descripcin:
Las lneas de comandos comprendidas entre WHILE y los ENDW se ensamblan mientras el valor
de la <expr> sea TRUE (verdadera). Una expresin que al ser evaluada da cero, se considera
como FALSE (falsa). Una expresin que al evaluarla es distinta de cero, se considera como TRUE
(verdadera). Un bucle WHILE puede contener un mximo de 100 lneas y repetirlo un mximo de
256 veces.
Ejemplo:
test_mac macro count
variable i
i=0
while i < count
movlw i
i += 1
endw
endm
start
test_mac 5
end
Ver
ENDW IF
Volver a la tabla de directivas
Ejemplo
goto $+3
Parntesis izquierdo
1 +(d*4)
Parntesis derecho
(longitud+1) * 256
If ! (a - b)
Negacin (complemento a 2)
-1 * longitud
Complemento
flags = ~flags
high
low
uppe
Retorna byte superior
r
Multiplica
a=b*c
Divisin
a=b/c
Mdulo
entry_len = tot_len % 16
Suma
tot_len = entry_len * 8 + 1
Resta
entry_len = (tot - 1) / 8
<<
Desplazamiento a la izquierda
>>
Desplazamiento a la derecha
>=
Mayor o igual
If entry_idx >=
num_entries
>
Mayor que
<
Menor que
<=
Menor o igual
If entry_idx <=
num_entries
==
Igual a
If entry_idx = num_entries
!=
No igual a
If entry_idx != num_entries
&
Bitwise AND
Bitwise Or-exclusiva
flags = flags ^
ERROR_BIT
Bitwise Or
&&
||
Funcin lgica OR
If (len = = 511) || (b = = c)
Hacer igual a
entry_index = 0
+=
entry_index += 1
-=
entry_index -= 1
*=
entry_index *=
entry_length
/=
entry_index /=
entry_length
%=
entry_index %= 8
<<=
flags <<=3
>>=
flags >>=3
&=
flags &=ERROR_FLAG
|=
flags |= ERROR_FLAG
^=
flags ^= ERROR_FLAG
++
incrementar
i ++
--
decrementar
i --
Words
EE RAM
$3.42 1024x14
64
68
I/O
13
ADC
0
1-8bit
0-16bit
1-WDT
Interface MHz
None
20
Interface
MHz
Words
EE
RAM
I/O ADC
16
1-8bit
2-16bit
1-WDT
USART
20
AUSART
20
16
2-8bit
1-16bit
1-WDT
PIC16F628
16
1-8bit
2-16bit
1-WDT
USART
20
2-8bit
1-16bit
1-WDT
AUSART
20
16
Com Timers
.
WDT
0
PIC16F81 $1.7
8
1
1024x1
4
12
8
PIC16F81 $1.9
9
5
2048x1
4
25
6
5/10Bit
128
16
256
5/1016
Bit
Interface
MHz
2-8bit
1-16bit
1-WDT
I2C
Compatible/SPI
20
1-8bit
2-16bit
1-WDT
I2C
Compatible/SPI
20
PIC16F874
Price Words
$4.9
7
12
8
4096x1
4
192
8/1033
Bit
Com Timers
.
WDT
0
1-8bit
2-16bit
1-WDT
Interface
MHz
USART
MI2C
Compatible/SPI
20
PIC16F874
A
$4.3
5
4096x1
4
12
8
192
33
8/10Bit
1-8bit
2-16bit
1-WDT
USART
MI2C
Compatible/SPI
20
PIC16F877
$5.1
1
8192x1
4
25
6
368
33
8/10Bit
1-8bit
2-16bit
1-WDT
USART
I2C
Compatible/SPI
20
PIC16F877
A
$4.6
8
8192x1
4
25
6
368
8/1033
Bit
2-8bit
1-16bit
1-WDT
AUSART
MI2C
Compatible/SPI
20
Words
EE
RAM
I/O ADC
1-8bit
1-16bit
1-WDT
None
20
1-8bit
1-16bit
1-WDT
None
20
12
0/10-Bit
Interface MHz
Los modelos PIC18XXX se alejan quizs demasiado del PIC16F84 como para sustituirlo pero
resultan ideales en aplicaciones que necesiten un microcontrolador potente como el PIC18F252 o
el PIC18F2550 que cuenta con un puerto USB.
Price Words
PIC18F25 $5.1
2
5
Object 1
16384x1 25
6
6
1536 23
5/10Bit
Com Timers
.
WDT
0
1-8bit
3-16bit
1-WDT
Interface
MHz
AUSART
MI2C
Compatible/SPI
40
Programar PIC
ndice de contenidos
ndice de contenidos
Introduccin
Introduccin
Con programar un PIC nos referimos a transferir y almacenar el programa en el PIC, no a generar
o escribir el programa que contiene. Este proceso comienza con un archivo de tipo HEX, que
especifica exactamente como deben quedar la memoria de programa y la memoria de datos no
volatil (EEPROM) del microcontrolador. El proceso de la programacin consiste en copiar el archivo
HEX en el PIC.
Programador de PIC
Para programar un PIC debe utilizarse un ordenador, como por ejemplo un PC. Sin embargo no
existe, en principio, forma de conectar directamente a un PIC con un PC para programarlo. Es
necesario utilizar un dispositivo hardware llamado programador el cual interconecta un puerto de
entrada/salida del PC por un lado y el PIC por el otro.
Existen muchos modelos de programadores, tanto comerciales como para construirlos uno mismo.
Conexin del lado del PC
Del lado del PC existen programadores que utilizan el puerto paralelo, otros el puerto serie (COM
port) y otros el puerto USB.
De los modelos para construir uno mismo los mas simples utilizan el puerto serie, como es el caso
de los basados en el diseo JDM.
Un problema importante es que tanto el puerto serie como el paralelo no estn disponibles en los
porttiles actuales y cada vez es menos comn en los equipos de sobremesa. Los programadores
USB pueden realizarse con un PIC con USB pero incluso estos modelos necesitan a su vez
programarse, aunque slo sea la primera vez, mediante un programador (al menos hasta donde
sabemos).
Los conversores USB-serie comerciales, que crean un puerto serie virtual en el PC, no sirven. Al
menos en pruebas realizadas con el programador serie JDM.
Conexin del lado del PIC
Por el lado del PIC este puede programarse de dos maneras:
Insertndolo directamente en un zcalo en el programador
Con el PIC insertado en el circuito de aplicacin y programndolo mediante el llamado ICSP.
Programacin por zcalo
En este caso el programador proporciona algn sistema de zcalos para insertar PIC de distintos
tamaos y proporcionar las conexiones necesarias para su programacin.
Programacin ICSP
El programador ICSP conecta el PIC mientras est conectado en el circuito de aplicacin.
Este mtodo evita tener que manipular el PIC. Al evitar tener que insertarlo en el programador con
zcalos y luego en la aplicacin no se corre el riesgo de deteriorarlo, partiendo alguna patilla o por
descargas electrostticas. Tambin permite programar PIC SMD y por ltimo permite que un
dispositivo montado se pueda programar justo antes de salir para su comercializacin y as
disponga de la ltima versin del programa del PIC.
Ver ICSP
Bootloader
El uso de un bootloader permite actualizar fcilmente el programa del PIC sin necesidad de utilizar
un programador especfico, utilizndo una conexin serie RS232 o USB.
Para mas informacin ver bootloader.
Modos de programacin
Existen dos maneras de programar un PIC, la estndar y la de baja tensin o LVP la cual slo
soportan algunos modelos de PIC (no por ejemplo el PIC16F84A).
Programacin estndar
La programacin estndar requiere de cinco seales. Una de ellas, la Vpp, a 13 voltios:
1- VPP: Tensin de programacin de unos 13 voltios; cuando es aplicada, el
microcontrolador entra en el modo Programacin.
2- VDD: Alimentacin positiva.
3- VSS: Alimentacin negativa
4- ICSPDAT o PGD: Datos de Programacin; es una lnea de datos bidireccional sncrona
serie.
5- ICSPCLK o PGC: Reloj de Programacin; es una lnea unidireccional sncrona serie de
reloj que va desde el programador hasta el microcontrolador.
Las cargas capacitivas causarn problemas. Las cargas de alta impedancia, por lo general, irn
bien. La conexin de LEDs con resistencias limitadoras de corriente son menos deseables, pero
normalmente no causan problemas.
En definitiva disearemos el circuito de tal manera que no se altere el nivel de seal en CK y DATA.
Por ejemplo utilizando resistencias en serie para aislar las seales ICSP del circuito de aplicacin.
Pin Vpp/MCLR
El pin MCLR en el PIC se pone a unos 13V durante la programacin. Esto plantea dos problemas.
El primero es que nuestro circuito debe permitir en este pin la aplicacin de los 13V. Por tanto no
se puede conectar este pin directamente a la lnea de Vdd. El segundo problema es que el resto
del circuito debe estar protegido de esta tensin. Los 13V en el pin MCLR podran poner en peligro
otros componentes en la placa.
Veamos distintas soluciones:
Si el pin Vpp es utilizado como reset (MCLR):
El circuito de aplicacin es conectado tpicamente a una resistencia y un condensador pull up, tal
como se recomienda en las especificaciones (data sheet) del microcontrolador. Hay que tener la
precaucin de que el circuito asociado no baje la velocidad y exceda el tiempo de elevacin de
Vpp. Si se coloca un botn para el pin MCLR, se recomienda que los mismos sean aislados del
voltaje Vpp mediante el empleo de un diodo o una resistencia limitante.
Si el pin Vpp es utilizado como un pin de puerto I/O:
El circuito de aplicacin que conecta al pin I/O quizs no est habilitado para manejar el voltaje de
+12V. Se recomienda utilizar un diodo o una resistencia limitante, para aislar el circuito.
Deshabilitar la programacin a baja tensin
En los microcontroladores PIC con capacidad de programacin a bajo voltaje LVP, configurar esta
funcin como LVP = off en los registros de configuracin. En su defecto es necesario conectar el
pin PGM hacia Vss para evitar errores en la programacin.
Como antes se ha dicho, en este tema se trata la programacin estndar (a 13V) y no la
programacin de baja tensin. Por ello debe ser siempre deshabilitada en los ajustes de
configuracin. Usaremos una resistencia de 1 a 100K para tirar a masa la patilla PGM en el diseo
de un circuito para ICSP. (Ver programar PIC)
Alimentacin durante la programacin
Durante la programacin ICSP es necesario que el microcontrolador sea conectado de acuerdo a
la especificacin del mismo. Tpicamente, la alimentacin del microcontrolador se conecta al
suministro de alimentacin del circuito de aplicacin. La aplicacin tambin puede ser alimentada
por el programador siempre y cuando se tenga en cuenta lo siguiente.
La corriente de alimentacin que suministran algunos programadores es limitada. No se
recomienda utilizar esta alimentacin si el consumo de la aplicacin supera unos pocos
miliamperios. As por ejemplo en los programadores basados en JDM la corriente viene dada por el
puerto serie del PC cuya capacidad es limitada.
Cuando el programador suministra el voltaje Vdd al circuito y solo lo aplica durante el proceso de
programacin debemos asegurarnos de que el condensador o los condensadores conectados
entre Vdd y Vss de la aplicacin no retarden el tiempo de subida de Vdd. En estos casos es
recomendable utilizar el suministro de tensin de la aplicacin o un suministro constante desde el
programador.
Siempre debemos conectar todas las patillas de alimentacin disponibles en el PIC a positivo o a
negativo, segn corresponda. Muchos dispositivos PIC tienen patillas etiquetadas como Vdd, Vss,
AVdd y AVSS. Si alguna de estas patillas se deja desconectada pueden darse errores de
programacin. Esto se aplica a las patillas analgicas, incluso aunque no tengamos pensado
utilizar las funciones analgicas.
Los programadores basados en JDM utilizan una tierra flotante que provocar problemas si el
circuito donde esta el PIC est tambin conectado a tierra.
Para no provocar daos debemos tenerlo en cuenta y desconectar la tierra o la alimentacin de la
aplicacin mientras se programa.
Ante posibles descuidos, una solucin es utilizar el mismo conector para la alimentacin normal de
la aplicacin y para la programacin. Esto obliga a desconectar la alimentacin para programar el
PIC. Esta solucin slo es vlida si el consumo de la aplicacin durante la programacin es bajo.
De todas maneras, normalmente la aplicacin se alimentar mediante un F.A. aislada de tierra y no
aparecern problemas.
Suministro normal de energa
Para la conexin de +5V a los pines Vdd del PIC podemos utilizar el suministro normal de energa
del circuito. El conector ICSP de los programadores suele incorporar un pin de 5V que puede ser
utilizado, pero slo si el circuito no consume demasiada corriente, de lo contrario probablemente se
producirn errores durante la programacin, y es posible que se dae el programador.
Si se alimenta el PIC con la alimentacion de la placa y no con la del programador debera dejarse
desconectada del PIC la alimentacion Vdd del programador.
Desacoplo
Debemos utilizar condensadores de desacoplo entre Vdd y Vss. Esta es una buena prctica en
cualquier caso, pero es especialmente importante para ICSP. Un nico condensador de 0.1uF es el
mnimo recomendado, aunque suelen colocarse mas.
Longitud de los cables
Debemos minimizar la longitud del cable entre el programador y del circuito de aplicacin.
Debemos tambin minimizar la distancia que deben recorrer las seales ICSP en el circuito de
aplicacin colocando el conector de ICSP tan cerca como sea posible del PIC.
El objetivo es mantener las seales ICSP dentro del nivel y las especificaciones adecuados para
que la programacin sea exitosa.
Esquemas
Para la programacin in-circuit, el circuito de aplicacin debe estar diseado para permitir que
todas las seales de programacin se conecten al microcontrolador sin que las mismas se
distorsionen. A continuacin se muestran algunos esquemas punto de partida para disear circuitos
de aplicacin para ICSP.
Finalmente indicar que siempre debemos montar un prototipo y probar la programacin ICSP para
garantizar el funcionamiento del circuito de aplicacin.
Programacin de PIC con ic-prog
Introduccin
En unin del hardware adecuado, el software IC-PROG permite programar gran cantidad de
dispositivos electrnicos.
Esta gua se va referir nicamente a la programacin de dispositivos PIC de Microchip del tipo
16F84A con un programador serie tipo JDM como el JDMD (JDM Directo).
Material necesario
El material mnimo necesario e imprescindible para la programacin de los microcontroladores PIC,
es el siguiente:
Software necesario:
Software de programacin IC-PROG.
Hardware necesario:
Programador tipo JDM.
Instalacin del software IC-PROG
La instalacin de este software es muy sencilla, y basta con descomprimir el archivo icprog.zip,
cuya ltima versin puede encontrarse en la pgina web http://www.ic-prog.com, este archivo
consta del archivo Icprog.exe que contiene todo el cdigo necesario para su funcionamiento para
Windows. Tambin puede obtenerse un archivo de ayuda Icprog.chm (en ingls, italiano y
espaol), si bien este archivo no es necesario para el funcionamiento del programa.
En el caso de utilizar este software con Windows 2000, Windows NT Windows XP, tambin es
necesario tener en el mismo directorio que el ejecutable, el archivo icprog.sys para Windows XP
(se encuentra en la misma pgina), sin el cual no se puede tener acceso a los puertos del
ordenador.
Eleccin de idioma
Una vez instalado el software, al utilizarlo por primera vez, y aceptando las configuraciones por
defecto, se nos presentarn las pantallas en ingls, y para cambiar el idioma se debern de seguir
estos pasos:
Configurar el Hardware
El paso siguiente es configurar el hardware necesario para programar los PIC.
En la pantalla principal de IC-PROG, podemos acceder a la configuracin del hardware pulsando el
icono
o bien mediante la pestaa Ajustes y despus el comando Tipo Hardware, o
bien pulsando la tecla de funcin F3, de cualquiera de las maneras accederemos a la pantalla
siguiente:
Esta es la configuracin que deberemos elegir para el correcto funcionamiento del programador
JDM.
Una vez elegido el tipo de programador como JDM y seleccionado el puerto serie adecuado, es
importante no olvidarse de elegir el tipo de Interface como Direct I/O, y en cuanto al tiempo de
Retardo I/O, si hubiese problemas se pueden probar tiempos ms largos. En ordenadores rpidos
quizs se puedan poner tiempos de retardo ms pequeos, lo que nos dara una velocidad de
grabacin ms rpida.
Explicacin de los mens
Los mens principales de IC-PROG tienen un icono grfico en la pantalla principal, de tal forma
que con estos iconos prcticamente se puede leer, borrar, programar y verificar cualquier
dispositivo.
Abrir un nuevo
archivo
Guardar el buffer a un
archivo
Configurar el
hardware
Opciones
Leer un dispositivo
Grabar un dispositivo
Borrar un dispositivo
Verificar un dispositivo
Mostrar en
ensamblador
Mostar en hexadecimal
Asistente Smartcard
Igualmente en la pantalla principal de IC-PROG se nos presenta toda la informacin relativa al
dispositivo en cuestin.
Disponemos de 5 buffers diferentes donde almacenar datos en memoria. En cada uno de estos
buffer podemos tener almacenado bien el contenido de un PIC o bien el contenido de un archivo.
Con los datos contenidos en cualquiera de estos buffer se puede realizar cualquiera de las
operaciones que hemos visto en los iconos anteriores. Es decir que se pueden guardar en un
archivo en disco, o bien se puede programar un PIC con ellos. Tambin se puede comparar el
contenido de estos buffers entre s para saber si existen diferencias entre ellos o no.
Ajustes
Cuando seleccionamos el idioma de utilizacin, vimos la pestaa Ajustes y el comando Opciones
del principal. Vamos a ver ahora un poco ms en detalle los ajustes necesarios para el correcto
funcionamiento del programa.
Activaremos la casilla de Verificar tras la programacin, para que el programa cada vez que
realice la programacin de un dispositivo, automticamente despus de escribir el dispositivo,
verifique que el contenido del dispositivo es el mismo que el buffer activo en ese momento.
Al activar tambin la casilla de Verificar durante la programacin, le indicamos al programa que
cada bloque de datos que escriba en el dispositivo vaya comparando que se ha escrito
correctamente, leyndolo y verificando su contenido con el buffer activo.
Esto hace que el tiempo empleado en programar un PIC sea mayor, pero tambin nos aseguramos
de que los errores de programacin son mnimos.
Otra de las pestaas que se pueden configurar es la de los Atajos, para que nos sea mucho ms
fcil el uso del programa.
Como el nmero de dispositivos que pueden programarse con este software es muy grande,
mediante estos atajos podemos hacer que elegir uno u otro para trabajar con l sea muy sencillo.
Basta con elegir aqu los ms utilizados y asignarles una de las combinaciones de teclas que se
muestran, para que despus desde la pantalla principal baste con teclear la combinacin de teclas
CTRL + F1 para que automticamente el dispositivo elegido quede seleccionado en el buffer
activo, con el consiguiente ahorro de tiempo.
En el caso de trabajar con los sistemas operativos Windows NT, Windows 2000 o Windows XP,
como ya se coment anteriormente, se deber tener en el mismo directorio que el archivo
ejecutable de IC-PROG, el archivo icprog.sys para Windows XP, y adems de esto, activar la
opcin de Habilitar Driver NT/2000, que se encuentra en la pestaa de Miscelnea de esta
opcin de Ajustes. Esta opcin solamente podr activarse en uno de estos sistemas operativos, ya
que en Windows 95, 98 Me no se encuentra habilitada.
El resto de opciones que puedan aparecer estn configuradas por defecto para un correcto
funcionamiento en la mayora de los ordenadores y sistemas operativos actuales, y en caso de
duda siempre se podr acceder a la ayuda del archivo icprog.chm de la pgina web http://www.icprog.com.
Programacin de un PIC 16F84A
Los pasos que se exponen a continuacin son prcticamente idnticos en cualquier tipo de
dispositivo a programar, con las nicas variaciones de las caractersticas particulares de cada uno
de los dispositivos, pero el proceso se puede generalizar para cualquier dispositivo a programar.
Se supone que el software IC-PROG ya se encuentra configurado como se ha explicado
anteriormente, y tambin el hardware de programacin se encuentra conectado y configurado
correctamente.
Abrir archivo HEX
Mediante el icono
o bien con la pestaa Archivo y el comando Abrir datos, se accede
al directorio dnde se guardan los archivos, como se observa en la figura.
Los archivos de datos que usan para programar un PIC normalmente tendrn la extensin .hex
(formato Intel hexadecimal de 8 bits).
Ajustar configuracin
Una vez cargados los datos del archivo correspondiente, la pantalla de IC-PROG presentar un
aspecto como el mostrado a continuacin.
Se observa que los datos se han cargado en el rea de cdigo de programa y si existieran, se
mostraran los datos de la EEprom interna de PIC.
En el caso de que se haya programado la palabra de configuracin, los bits correspondientes
aparecern marcados. Si se quiere cambiar alguno de ellos se puede hacer pinchando
directamente sobre l. Tambin se puede cambiar el tipo de oscilador con que trabajar la
aplicacin una vez cargada en el PIC. Si en la aplicacin no se program ninguna palabra de
configuracin, se nos mostrarn los datos por defecto del programa (oscilador tipo RC y
Watchdog WDT activados). En la aplicacin de ejemplo tenemos configurados (oscilador tipo XT,
Watchdog WDT y Power on Reset PWRT).
Cualquiera de las reas de datos (cdigo de programa o datos EEprom), puede ser aqu
modificada, ya que IC-PROG permite la edicin de los datos que estn presentes en el buffer del
ordenador antes de ser enviados al PIC. Esto deber hacerse con sumo cuidado pues la edicin de
los datos se llevar a cabo en hexadecimal directamente, con el consiguiente riesgo de cometer
errores y causar un mal funcionamiento del programa cargado.
Programar el PIC 16F84A
Para proceder a la programacin fsica del PIC, basta con pinchar sobre el icono
,o
bien activar la pestaa Comando y despus Programar todo, o bien pulsar la tecla de funcin F5,
de cualquiera de estas tres formas, y despus de solicitarnos confirmacin de la orden dada, el PIC
comenzar a ser programado con los datos cargados en el buffer activo.
El proceso de grabacin se nos ir mostrando, tal como puede verse en la figura.
El tiempo empleado en la grabacin del PIC 16F84A depender de la rapidez del ordenador en
que se est trabajando.
Despus de programar el cdigo se programarn los datos de la memoria EEprom y
posteriormente la palabra de configuracin de nuestro programa, todo ello sin requerir para nada
de la atencin del usuario.
Una vez terminada la programacin se proceder automticamente a la verificacin de los datos
escritos en el PIC (si se activ la verificacin tras la programacin). Del proceso de verificacin
tambin se nos ir informando, tal como muestra la figura.
Sern verificados igualmente el cdigo de programa, los datos de la memoria EEprom y los bits de
la palabra de configuracin.
En el caso de que la verificacin haya sido correcta se nos informar mediante la ventana
representada en la figura siguiente, y el proceso de grabacin habr finalizado.
Una buena prctica para evitar errores en la programacin, es que una vez terminado el proceso
de grabacin, como se ha descrito hasta aqu, cambiar el Buffer activo, leer el PIC programado
(esto se explica ms adelante) y proceder a la comparacin entre los contenidos de los dos buffers,
es decir comparar el archivo con el contenido del PIC. En realidad estamos volviendo a realizar la
comprobacin que ya se ha realizado automticamente al programar el dispositivo. Esta nueva
comprobacin trae consigo el empleo de ms tiempo, pero a veces ms vale prevenir.
Errores frecuentes en la programacin
Cuando por alguna causa la programacin no se realiza correctamente tambin el programa nos
informar de ello mediante el aviso oportuno.
El error ms frecuente en la programacin de un PIC es el que se muestra en la ventana siguiente,
que nos informa de que se produjo un error al verificar el contenido en la primera posicin de
memoria, la 0000h.
Este error suele estar motivado por algn fallo en la comunicacin entre el ordenador y el
programador, tal como una mala conexin del cable serie, o una colocacin errnea del PIC en el
programador, o hasta incluso por tener mal configurado el puerto serie con el que comunicamos el
ordenador y el programador. Tambin puede estar producido porque el PIC que estamos
intentando programar se encuentre defectuoso o se haya estropeado por un mal uso.
Cuando aparece este error podemos tratar de evitarlo siguiendo los pasos que se enumeran a
continuacin:
Este error en realidad est indicndonos que el sistema no puede acceder a los puertos del
ordenador y por tanto al programador conectado a ellos, y como se indic anteriormente, para
solucionarlo se deber instalar el archivo icprog.sys en la carpeta donde se encuentra el
ejecutable y adems habilitar el driver para NT/2000 en las opciones de Miscelnea en la pestaa
de Ajustes.
Una vez habilitado este driver el programa pedir volver a iniciarse, y a partir de ese momento ya
est perfectamente habilitado para realizar la programacin de los dispositivos necesarios.
Lectura de un PIC
La lectura de un dispositivo mediante el software IC-PROG y el programador adecuado, es idntica
para todos los dispositivos soportados, sin embargo en esta gua todo lo relativo a la lectura de un
dispositivo se realizar sobre un PIC tipo 16F84A.
Es muy importante seleccionar el tipo de dispositivo que vamos a leer, pues el programa IC-PROG
El buffer de cdigo de programa, y en su caso el de la EEprom interna, se llenar con los datos
ledos, y estos se mostrarn en hexadecimal. Para poder ver el cdigo en ensamblador se puede
activar el icono
de la barra de tareas.
Una buena medida es cambiar el buffer activo y volver a leer el dispositivo para posteriormente
comparar los contenidos de ambos buffers y tener seguridad de que la lectura ha sido correcta.
Recordad que al leer no se verifican los datos.
La comparacin de los dos buffers de datos se realiza en la pestaa Buffer con el comando
Comparar, y si la comparacin es correcta se nos indica el resultado tal como se muestra en la
figura siguiente.
En el caso de que la comparacin de los buffers de datos de cmo resultado que estos no son
iguales, el programa nos ir informando de las diferencias que se vayan encontrando entre uno y
otro buffer.
De esta manera podemos averiguar tambin las diferencias entre los contenidos de un
microcontrolador y otro que aunque estn programados con el mismo programa, no funcionen
correctamente, o de un archivo y otro que al ensamblarlos no sean exactamente iguales.
Lecturas especiales de datos
Si un PIC no ha sido nunca programado, o est completamente borrado, su contenido ser 3FFF
(son posiciones de 13 bits), una prueba de ello se muestra a continuacin:
Esta lectura de un PIC completamente borrado es lo que se conoce como verificacin de blanco,
y puede realizarse automticamente mediante la orden Verificar blanco, que se encuentra en la
pestaa Comando.
Ms tarde veremos la opcin de borrado de un dispositivo, que lo que realiza es una escritura de
3FFF en todas las posiciones del PIC y una posterior lectura del mismo, para verificar que est en
blanco.
Si el PIC est protegido contra lecturas (CP activado) su contenido al leerlo ser de todas las
posiciones a 0, como se muestra a continuacin:
Si solo estuviese protegida una parte del cdigo, al leer el PIC, la parte que no est protegida se
lee normalmente y la parte de cdigo que est protegida se leer con todas las posiciones a 0000.
Cuando un programa ocupa slo una parte de la memoria de cdigo, si leemos el PIC, el resto de
posiciones no ocupadas por el programa se leern como si estuviesen en blanco 3FFF.
Los datos de la memoria EEprom son de 8 bits y por eso al leerlos, si estn vacos se muestran
como se puede ver a continuacin :
Verificacin de un dispositivo
Aunque ya se ha explicado anteriormente que al realizar la programacin de un dispositivo, este es
automticamente verificado, en el men principal de IC-PROG se dispone del icono
,
mediante el cual se accede a la verificacin del dispositivo elegido. Tambin se puede realizar la
verificacin mediante la opcin Verificar dentro de la pestaa Comando o bien pulsando la tecla
de funcin F6.
De cualquiera de estas tres formas el programa IC-PROG compara el contenido del PIC colocado
en el programador, con los datos cargados en el buffer activo.
Al final de la comparacin, si no han existido diferencias entre los datos, se nos informa de que se
ha tenido xito en la verificacin del dispositivo, con una pantalla como la adjunta.
Borrado de un dispositivo
Cuando se quiere realizar el borrado completo de un PIC, antes de proceder a una nueva
El borrado del PIC se lleva a cabo en un tiempo muy breve, y al finalizar el mismo se nos informa
de que el proceso ha finalizado.
La comprobacin de este proceso se puede realizar de dos maneras:
Mediante una nueva lectura del PIC, lo cual nos dar como resultado que el buffer tendr
todas sus posiciones a 3FFF.
Realizando la verificacin del blanco. En cuyo caso se nos informar mediante una pantalla
de que el PIC est en blanco, o bien de que no lo est en una direccin determinada de
memoria.
Opciones Finales
A continuacin se muestran unas figuras con las opciones de cada una de las pestaas del men
principal de IC-PROG.
Estas figuras se dan a nivel informativo, y en ningn caso se pretende explicar exhaustivamente su
uso, ya que eso no es misin de este tema. Para una mayor informacin consultar el archivo
icprog.chm o la pgina http://www.ic-prog.com
24CXX, EEPROM
PIC12C5XX
PIC12C67X
PIC16C55X
PIC16C61
PIC16C62X
PIC16C71
PIC16C71X
PIC16C8X
PIC16F8X
Tarjetas ISO con ASF
Esquema original
Las tensiones necesarias, Vpp (tensin de programacin) y Vdd se obtienen a traves del puerto.
La tensin se estabiliza con diodos zener y condensadores.
Aspecto de un prototipo del programador JDM (PIC-Programmer 2):
El programador JDM soporta ICSP, In-Circuit Serial Programming, esto es, permite programar al
PIC en el propio circuito de utilizacin.
El puerto serie de 25 patillas no suele encontrarse ya en los PC's de sobremesa, donde slo se
presenta el de 9 patillas. Al utilizar el JDM deber tenerse en cuenta.
Ms informacin sobre el puerto serie en La comunicacin serie.
Conector DB9
Pat.
Sea
l
CD
RXD
TXD
TXD (2)
Vdd, Vpp
DTR
DTR
(20)
Salida serie
GND
DSR
Dir
Descripcin
Uso en
JDM
JDM
RTS
RTS (4)
Reloj y Vss
CTS
CTS (5)
Entrada
serie
RI
DTE (PC)
COMPONENTES
R1
10K
Resistencia
R2
1.5K
Resistencia
D2
5.1V/0.5W
Diodo zener
D3
1N4148 o 1N4448
Diodo
D4
1N4148 o 1N4448
Diodo
D5
1N4148 o 1N4448
Diodo
D6
8.2V/0.5W
Diodo zener
D7
1N4148 o 1N4448
Diodo
C2
100F/25V
Condensador electroltico
C3
22F/16V o 47F/6.3V
Condensador de tantalio
Q1
BC547B
Transistor NPN
Q2
BC547B
Transistor NPN
P1
DB25 (hembra)
Conector DB25
P2
Zcalo de 18
patillas
Esquema electrnico
Lista de componentes
R1 Resistencia 10 K
R2 Resistencia 1K5
R3 Resistencia 1 K
Z1 Diodo zener 8,2 V
Z2 Diodo zener 5,1 V
D1, D2, D3, D4 Diodo 1N4148
C1 Condensador Electroltico
100uF/63V
C2 Condensador Electroltico
22uF/63V
TR1,TR2 BC547
Conector DB9 Hembra
Carcasa para DB9 Hembra
Zcalo 18 pines
Circuito impreso 73,5mm x 30,5mm
Placa de circuito impreso
Circuito impreso 73,5mm x 30,5mm:
Pinchar aqu para obtener imagen a tamao natural (TIFF a 300 dpi)
Pinchar aqu para obtener imagen a tamao natural para 12 placas (TIFF a 300 dpi)
Comprobacin del JDMD y del PC
IMPORTANTE: Para no provocar posibles problemas sobre todo al PC, conectar y desconectar el
programador al puerto serie con el ordenador apagado. Igualmente, insertar los dispositivos en el
programador (PIC) cuando no est conectado al puerto.
Si colocamos la sonda negra del polmetro en la masa del conector, la tensin de las patillas 3, 4 y
7 ser negativa (-11,54v). En el resto de patillas la tensin es aproximadamente de 0 (0,16v)
Revisar todos los componentes, viendo que sean los correctos y que estn bien colocados y
en la posicin correcta.
Aspecto de la cara de soldaduras del primer programador montado. En los dems que se han
realizado no se han estaado las pistas sino que se han protegido mediante un barniz especfico
para ello:
Idioma: Espaol.
Shell: nada activado.
Miscelnea: Prioridad normal y sealado slo Habilitar Driver NT/2000 si se utilizan estos
sistemas operativos o Windows XP. En este caso tambin ser necesario disponer en el
mismo directorio de ICPROG.EXE de ICPROG.SYS.
Nota 1: Proteger cdigo de dispositivo crtico: Algunos dispositivos son del tipo OTP
"Programables una vez". Esto significa que se los puede programar una nica vez. Por tanto
cuando se protege el programa de un dispositivo de estas caractersticas no se podr leer el mismo
o borrarlo nunca ms. Si el cdigo de programa grabado es incorrecto deber descartar dicho
dispositivo. Mediante esta opcin podr asegurarse de no proteger accidentalmente un dispositivo,
a menos que confirme dicha accin.
Prueba de Hardware
Ir a Ajustes/Prueba de Hardware.
Pinchar en Habilitar Data OUT, al hacer esto, tiene que activarse Data IN, cuando desactive
Habilitar Data OUT se tiene que desactivar Data IN.
Mediante un polmetro medir la tensin entre las patillas del PIC 5 y 4 (VSS y /MCLR).
Cuando est activo Habilitar MCLR tiene que haber en la patilla 4 una tensin de ms de
12V (unos 13V), si es menor de 10V algo va mal.
Medir la tensin entre las patillas del PIC 5 y 13 cuando habilite Habilitar Data Out, debera
haber 5V habilitado y aprox. 0V deshabilitado.
Medir la tensin entre las patillas del PIC 5 y 12 cuando habilite Habilitar Clock debera
haber 5V habilitado y aprox. 0V deshabilitado.
Medir la tensin entre las patillas del PIC 5 y 14 cuando habilite Habilitar Vcc, debera haber
5V habilitado y aprox. 0V deshabilitado. (No se deshabilitar por defecto).
Hab.
MCLR
-0,602
v
12,26
v
DATA
-2,332
v
4,21 v
CLOCK
-0,608
v
5,24 v
VCC
4,65 v
4,65 v
Llama la atencin el valor de DATA cuando est deshabilitado, pero con el PIC conectado, este
valor no baja de -0,6 v.
Consultar Programacin de pic con Ic-Prog as como la ayuda de icprog icprog.chm o su pgina
web http://www.ic-prog.com para ms informacin.
Programador JDMI
ndice de contenidos
Introduccin
In-Circuit Serial Programming (ICSP) con el programador JDMI
A continuacin se muestra una adaptacin del programador JDM (JDMI) con conector ICSP en dos
versiones, con y sin zcalo para insertar el PIC. Se conecta al puerto serie del PC (DB9) mediante
un cable alargador (macho-hembra). Ver Tipos de cables serie
El programador JDMI puede utilizarse para la programacin serie en circuito (ICSP, In-Circuit Serial
Programming) de PIC a travs de un conector hembra tipo cabecera (head) de 6 pines, de manera
que podemos programar microcontroladores que estn instalados en el circuito de aplicacin.
La experiencia demuestra que la insercin y extraccin del microcontrolador en el zcalo del
programador JDM, si no se es muy cuidadoso, termina con alguna de sus patillas e incluso puede
destruirlo elctricamente.
Respecto al JDMD podemos proteger el programador con una funda termoretrctil (en la versin
sin zcalo) y aadirle un cable de extensin serie para manejarlo mejor.
La comunicacin ICSP (ver ICSP para mas informacin) requiere cinco seales.
La configuracin de patillas del conector es compatible pin a pin con los programadores PicKit de
Microchip:
1-VPP. Pat. 4
2-VDD. Pat. 14
3-VSS. Pat. 5
4-DATA. Pat. 13. RB7
5-CK. Pat. 12. RB6
servicio.
Reside en una memoria no volatil, esto es, que no pierde su contenido aunque se desconecte la
alimentacin, en las que slo se escribe para actualizar la versin de su contenido (normalmente
son de tipo Flash). Es siempre la primera aplicacin que se ejecuta despus de un reinicio y decide
si la aplicacin principal est lista para iniciar su ejecucin o no y si se procede a realizar una
actualizacin. El beneficio de tener un bootloader es principalmente permitir la reprogramacin del
sistema.
Firmware
A la actualizacin del programa principal de un sistema microprogramable embebido (que gobierna
y forma parte integral de un sistema electrnico) se le denomina actualizacin del firmware.
El firmware o programacin en firme, es un bloque de instrucciones de programa para propsitos
especficos, grabado en una memoria de tipo no voltil (ROM, EEPROM, flash,...), que establece la
lgica de ms bajo nivel que controla los circuitos electrnicos de un dispositivo de cualquier tipo.
Al estar integrado en la electrnica del dispositivo es en parte hardware, pero tambin es software,
ya que proporciona lgica y se dispone en algn tipo de lenguaje de programacin.
Funcionalmente, el firmware es el intermediario (interfaz) entre las rdenes externas que recibe el
dispositivo y su electrnica, ya que es el encargado de controlar a sta ltima para ejecutar
correctamente dichas rdenes externas.
El trmino firmware ha evolucionado popularmente para significar casi cualquier contenido
programable de un dispositivo hardware residente en una memoria no volatil, no slo cdigo
mquina para dispositivos de lgica programable, cargadores de arranque (bootloader), o
aplicaciones especializadas, sino tambin configuraciones y datos para los circuitos integrados tipo
PLD o para aplicaciones especficas (ASICs). Un ejemplo de ASIC sera un c.i. que encarga una
compaa a un fabricante de semiconductores para crear un decodificador de audio para sus
reproductores MP3. Ver Dispositivos PLD y ASIC
El firmware, como antes se indic al hablar del bootloader, reside en memorias no voltiles. Si no
es actualizable estar en memorias o c.i.s de slo lectura. Si es actualizable slo se escribe en
ellas para actualizar la versin de su contenido. En este caso suelen utilizarse memorias de tipo
flash, independientes o formando parte de un c.i. con mas elementos.
Actualizacin del firmware
Existe una gran cantidad de dispositivos electrnicos que cuentan con un firmware actualizable. En
primer lugar pueden actualizarse en produccin, esto garantiza que los dispositivos se colocan en
el mercado con la ltima versin disponible, posteriormente pueden actualizarse por medio de un
servicio tcnico o incluso por el usuario final.
Hasta mediados de los aos 1990 el procedimiento tpico para actualizar un firmware a una nueva
versin era reemplazar el medio de almacenamiento que contena el firmware, usualmente un chip
de memoria ROM o EPROM enchufado en un zcalo. Hoy en da este procedimiento no es habitual
ya que los fabricantes han aadido un bootloader que permite grabar las nuevas instrucciones en
la misma memoria, de tipo flash, haciendo de la actualizacin un proceso mucho ms cmodo y
dinmico.
Dependiendo del equipo puede necesitarse un PC para la actualizacin y una conexin a travs de
un puerto serie, RS232 o USB. En otros casos puede actualizarse a travs de una conexin de red,
por cable o inalmbrica, incluso utilizndo servidores en Internet. En otros casos el dispositivo
puede contar con un puerto USB HOST y la actualizacin del firmware realizarse a travs de un
pendrive.
An as el proceso de actualizacin de un firmware hay que realizarlo con mucho cuidado, ya que
al ser un componente vital, cualquier fallo puede dejar al sistema inservible. Por ejemplo, un fallo
de alimentacin a mitad del proceso de actualizacin impedira la carga completa del cdigo que
gobierna el sistema, quiz incluso la carga de una modificacin del bootloader que contiene el
cdigo que se encarga de actualizar el firmware, as que no podramos actualizarlo de nuevo ni el
sistema podra arrancar, debido a una corrupcin del cdigo del bootloader. Por lo tanto el sistema
no volvera a funcionar. La nica solucin sera reprogramar la memoria con el bootloader
mediante un programador hardware, lo que puede complicarse si el circuito integrado es de tipo
SMD y est soldado a la PCB.
Ejemplos de firmware
Encontramos firmware en memorias no voltiles de sistemas de diversos dispositivos perifricos de
un ordenador, como en monitores de video, unidades de disco, impresoras, etc., pero tambin en
los propios microprocesadores, c.i.s de memoria principal y en general en cualquier circuito
integrado.
El programa BIOS de un PC es un firmware cuyo propsito es activar la mquina desde su
encendido y preparar el entorno para la instalacin o ejecucin de un sistema operativo complejo,
as como responder a otros eventos externos (como por ejemplo el teclado) y al intercambio de
rdenes entre distintos componentes del ordenador.
Relacin de ejemplos:
Sistemas de control domsticos de "lnea blanca" como una lavadora, un microondas, un
frigorfico, un lavavajillas o industriales como un autmata programable o un regulador de
velocidad de un motor elctrico.
Sistemas de control domsticos de "lnea marrn ", como el control de sonido, video y lista
de canales en televisores modernos, TDTs, reproductores DVD y HD, equipos de msica
(control y c.i.s procesadores digitales de audio) ,videoconsolas, cmaras fotogrficas o de
video, etc.
En ordenadores: BIOS de PCs, EFI de mquinas Mac OS X basadas en Intel, Open
Firmware, usado por ordenadores de Sun Microsystems, ARCS, usado en ordenadores de
Silicon Graphics, etc.
Reproductores de msica porttiles (MP3). Las actualizaciones del firmware agregan incluso
nuevos formatos de archivos de reproduccin de sonido (codecs) actualizaciones del GUI e
incluso de la vida de la batera.
Telfonos mviles. La mayora de los telfonos mviles tienen un firmware actualizable.
Pueden incluso ser actualizados para mejorar la recepcin o la calidad de sonido. La
mayoria de las grandes empresas brindan programas gratuitos para la actualizacin del
firmware por partel del cliente final.
Automviles. Desde 1996 la mayora de los automviles han empleado un ordenador de a
bordo y varios sensores para detectar problemas mecnicos. Los vehculos modernos
emplean sistemas controlados por microprocesador, por ejemplo para el ABS o los sistemas
de control del motor, de la transmisin, etc. El conductor puede tambin recibir informacin
mientras conduce, como por ejemplo lecturas en tiempo real de la economa del combustible
y de la presin de los neumticos. La mayora del firmware del vehculo puede ser
actualizado en un distribuidor local autorizado.
Dispositivos de electrnica de red, como router o puntos de acceso WiFi.
Cuando tengamos la posibilidad de actualizar un firmware, aunque sea una versin oficial, por
ejemplo en un mvil, antes de realizar cualquier modificacin en el equipo, es importante verificar
que no se viole la garanta del fabricante o derechos de autor.
Hackeando el firmware
A veces una nueva o modificada versin no oficial de un firmware es creada por terceros para
proporcionar nuevas caractersticas o para abrir funcionalidades ocultas o restringidas. Se hace
con reproductores de audio digital, cmaras digitales, enrutadores inalmbricos (por ejemplo para
que emitan con mas potencia), consolas de videojuegos, receptores de TDT, decodificadores de
televisin, motores de auromviles (saltanso por ejemplo lmites de potencia a costa de mayores
consumos o el incumplimiento de la normativa sobre emisin de gases), etc. Hay que tener en
cuenta que en la mayora de los casos esta "actualizacin" puede vulnerar derechos y ser ilegal.
Muchos de los firmwares almacenados en memoria no volatil estn protegidos por derechos de
autor.
Bootloader en el PIC
Mediante un bootloader podemos actualizar el programa o firmware de un PIC sin necesidad de
utilizar un programador especfico, a travs de la conexin de un puerto del PC con un puerto del
PIC (puerto serie RS232 o USB).
Para lograrlo, ademas de disponer de un software adecuado en el PC, se debe programar
previamente al PIC cargndole un programa bootloader que permita por si mismo modificar la
memoria de programa, manejar el flujo de informacin entre el PC y el PIC y finalmente lanzar la
aplicacin principal del PIC.
Siempre queda que es necesario programar el PIC la primera vez para cargar el bootloader
mediante un programador hardware. Por tanto el bootloader es til para actualizar el programa de
aplicacin del microcontrolador no para programar un PIC virgen o borrado.
Lgicamente el bootloader consume un cierto porcentaje de flash y RAM y no todos los PIC lo
soportan. Hay que utilizar un modelo con suficiente memoria, donde el programa pueda
modificarse a s mismo y que cuente con puertos hardware serie RS232 o USB. El PIC16F84A no
cumple con estos requisitos . Si lo hace, por ejemplo, el PIC16F876A o el PIC16F886, donde
tpicamente ocupa unos 256 bytes de memoria.
Bootloader y boostrap. Funcionamiento tpico
Para evitar confusiones, a partir de ahora llamaremos bootloader al sistema de cargador de
arranque en general y al programa en el PC en particular. Llamaremos boostrap al programa que
implementa el cargador de arranque en el PIC.
Una vez programado el boostrap en el PIC, se trata de transferir o despus actualizar, el programa
de aplicacin principal .hex desde el PC hasta el PIC, por ejemplo a travs el puerto serie o el usb
y as directamente el PIC se entiende con el PC sin necesidad de utilizar un programador
especfico.
En la mayora de los tipos, el boostrap se carga al final de la memoria de programa, dejando libre
lo anterior para el programa principal
El boostrap dirije el flujo de informacin segn el estado en que se encuentra el PIC al inicio (esto
es, tras un reset). Si al iniciarse el PIC estn conectados PIC y PC y activo el bootloader del PC,
estonces se graba el programa que entra en las primeras posiciones de la memoria de programa,
del PIC sobreescribiendo lo que hubiese, por supuesto sin llegar a la posicin donde est el
boostrap. Despus cede el control a la aplicacin principal que funcionar normalmente. Si al inicio
no se dan las condiciones anteriores, el boostrap, despus de un tiempo (por ejemplo 0,2
segundos) lee el contenido de la memoria: si esta contiene un programa le cede el control y se
ejecutar normalmente, si est vaca no har nada.
En definitiva el bootloader es ideal para la programacin in-circuit, sin tener que retirar el PIC de la
El PIC lee o escribe estos niveles TTL mediante el hardware de su puerto serie. Podemos utilizar
un c.i. adaptador de nivel MAX232, MAX3222, o SIPEX232, siendo lo mas usual utilizar el c.i.
MAX232 y sus componentes asociados. Ver Comunicacin serie, el MAX232.
Existe tambin otra posibilidad muy interesante, utilizar un FT232 con USB y un puerto serie virtual.
Ver FT232.
mejorar comserie.htm, sacar max232 y poner pcb.
El bootloader que aqu tratamos slo necesita 2 seales, TX y RX.
Puede utilizarse un adaptador externo o uno integrado en la aplicacin. En este ltimo caso la
aplicacin principal del PIC podr utilizar la comunicacin serie para otros usos.
Bootloader para Windows
A travs de Internet podemos conseguir bootloader para Windows o Linux y tambin bajo Java.
Para Windows, entre otros, tenemos:
"Bootloader de Microchip". Es un sistema gratuito muy completo, con boostrap para todos
los PIC que lo soportan y abundante informacin (en ingls) para su uso. Puede conseguirse
en www.microchip.com
"PIC bootloader". Escrito en Delphi por el checo Petr Kolomaznik de EHL elektronika,
(www.ehl.cz/pic, email: kolomaznik@ehl.cz)
"PICBoot Plus". Basado en el anterior y desarrollado en Borland C++ Builder por el
holands Herman Aartsen. Incluye un terminal de consola para pruebas inspirado en uno
sencillo de www.castlesoft.de
La aplicacin bootloader comprueba antes de descargar el archivo en el PIC si el programa es
demasiado grande como para sobreescribir el boostrap en cuyo caso se muestra un aviso.
Se ha desarrollado un bootloader para Windows con Borland C++ Builder basado en el desarrollo
de Herman Aartsen. Ver PicBootDPE.
Boostrap para PIC16F87X
Aqu nos centraremos en boostrap para los PIC16F87X con RS232 pero tambin pueden hacerse
para el PIC16F628 con RS232 o los PIC18F con USB.
En Internet hay varios boostrap disponibles. Aqu nos basaremos en el desarrollado para
PIC16F87X por Shane Tolmie y Petr Kolomaznik de www.microchipC.com y www.ehl.cz/pic.
Existen incluso bootloader que permiten actualizar automticamente el programa principal del PIC
a travs de Internet a la ltima versin disponible.
descarga Boostrap para PIC16F87X. En este archivo est disponible el cdigo fuente en
ensamblador, comentado, as como los .hex listos para programar cada PIC segn la frecuencia de
reloj y velocidad de comunicacin serie que se utilice.
Contenido del archivo comprimido:
asm para pic16F87x
boot16F87x_261.asm
creahex.bat
asm para pic16F87xA
boot16F87xa_281.asm
creahex.bat
hex para pic16F87x
63619 - bootldr-16F876-77-03.6864Mhz-19200bps.hex
60419 - bootldr-16F876-77-04Mhz-9600bps.hex
60419 - bootldr-16F876-77-04Mhz-19200bps.hex
61019 - bootldr-16F876-77-10Mhz-19200bps.hex
61619 - bootldr-16F876-77-16Mhz-19200bps.hex
62019 - bootldr-16F876-77-20Mhz-19200bps.hex
33619 - bootldr-16F873-74-03.6864Mhz-19200bps.hex
30419 - bootldr-16F873-74-04Mhz-9600bps.hex
30419 - bootldr-16F873-74-04Mhz-19200bps.hex
31019 - bootldr-16F873-74-10Mhz-19200bps.hex
31619 - bootldr-16F873-74-16Mhz-19200bps.hex
32019 - bootldr-16F873-74-20Mhz-19200bps.hex
03619 - bootldr-16F870-71-03.6864Mhz-19200bps.hex
00419 - bootldr-16F870-71-04Mhz-9600bps.hex
00419 - bootldr-16F870-71-04Mhz-19200bps.hex
01019 - bootldr-16F870-71-10Mhz-19200bps.hex
01619 - bootldr-16F870-71-16Mhz-19200bps.hex
02019 - bootldr-16F870-71-20Mhz-19200bps.hex
hex para pic16F87xA
bootldr-16F873A-16MHz-38400bps.hex
bootldr-16F873A-20MHz-38400bps.hex
bootldr-16F873A-20MHz-56000bps.hex
bootldr-16F876A-16MHz-38400bps.hex
bootldr-16F876A-20MHz-38400bps.hex
bootldr-16F876A-20MHz-56000bps.hex
bootldr-16F877A-16MHz-38400bps.hex
bootldr-16F877A-20MHz-38400bps.hex
bootldr-16F877A-20MHz-56000bps.hex
Notas:
PIC16F87XA: El archivo para 16MHz/38400bps puede utilizarse para 8MHz/19200bps o
4MHz/9600bps. Y el archivo para 20MHz/38400bps puede utilizarse para 10MHz/19200bps.
En principio, los archivos .hex para 16F87X no sirven para el 16F87XA, pero si al contrario.
Caractersticas del boostrap para PIC16F87X:
PIC soportados: 16F870, 16F871 (2K flash) 16F872 no soportado al no disponer de UART.
16F873,16F874,16F73,16F74 (4K flash). 16F876,16F877,16F76,16F77 (8K flash). 16F873A,
16F876A y 16F877A. Hay dos versiones de ASM, una para PIC16F87X y otra para
PIC16F87XA.
Ocupa como mximo 255 instrucciones, que se colocan al final de la memoria de programa.
Los ASM utilizan directivas de MPASM para que el ensamblador cree el HEX
correspondiente a cada PIC, velocidad de reloj y velocidad de comunicacin serie. Arriba, en
el apartado "Contenido del archivo comprimido" hay una lista de HEX y sus caractersticas.
Se incluye un archivo de procesamiento por lotes (creahex.bat) para que, si se modifica el
ASM, se creen todos los HEX de forma automtica.
Es compatible con cualquier circuito previamente diseado, no necesita pines especficos ni
jumpers para activar el bootloader.
Velocidades de reloj: 3.6864, 4, 16 y 20Mhz.
Objetivos
Conocer la diferencia entre software y hardware.
Conocer los diferentes dispositivos lgicos microprogramables.
Saber cual es la arquitectura de un sistema microprogramable y su funcionamiento.
Conocer la forma de programar un sistema microprogramable.
Podemos considerar que los sistemas microprogrables son mquinas sin las cuales las
comunicaciones, el transporte, la industra, la medicina, incluso nuestros hogares no seran tal y
como ahora los conocemos.
El derrallollo de los sistemas microprogramables los ha convertido en una herramienta muy
poderosa y a su vez son un medio fundamental para continuar el progreso.
Hardware y software
Un sistema microprogramable esta formado por los siguientes componentes:
Hardware: Es el conjunto de circuitos electrnicos que forman el sistema microprogramable
o, dicho de otra forma, es la parte fsica del sistema.
Software: Es el conjunto de programas y aplicaciones formado por instrucciones y
rutinas que se utilizan para programar y coordinar al sistema microprogramable. Tambin se
denomina software al conjunto de lenguajes empleados para elaborar dichos programas.
Dispositivos PLDs
Los dos primeros, microprocesadores y microcontroladores podemos considerarlos como
Sistemas microprogramables
Microprocesadores y microcontroladores
Reloj
Unidad Central de
Proceso (CPU)
Memoria Interna
Unidad de entradas
y
salidas
Exterior
(Perifricos)
Reloj
El reloj: es un generador de ondas cuadradas peridicas, utilizado para que todo el sistema est
sincronizado.
Mdulos de memoria
RAM de un PC
Unidad de entrada/salida
La Unidad de entrada/salida (interface) permite la comunicacin del sistema
microprogramable con el exterior. Su funcin fundamental es la de adaptar las diferentes
velocidades y cdigos utilizados por los elementos externos del sistema y el interior.
Perifricos
Estrictamente hablando podramos decir que los perifricos no forman parte del sistema
microprogramable. Es un conjunto de dispositivos que realizan un trabajo en el exterior del sistema.
Estos perifricos pueden ser de entrada o de salida, aunque existen algunos que realizan ambas.
Por ejemplo, en un PC los perifricos de entrada mas importantes son el teclado y el ratn y los de
salida el monitor y la impresora.
Microprocesadores y microcontroladores
Microprocesadores
Microprocesadores y microcontroladores
Microcontroladores
Todo el sistema microprogramable est integrado en un nico
circuito integrado, de manera que un microcontrolador es un
circuito integrado que integra en la misma pastilla la CPU, la
Memoria Central, los puertos de E/S digitales y otros
elementos. Como desventaja su capacidad de trabajo es
menor que la de los microprocesadores.
Se utiliza en aquellas aplicaciones en las que necesitamos el
uso de un pequeo procesador. Se encuentra por todas partes,
por ejemplo, los autmatas programables industriales poseen
este tipo de circuitos integrados, al que se le han aadido sistemas de control de potencia tales
como rels para poder controlar mquinaria industrial.
Sistemas microprogramables
Dispositivos PLDs
Dispositivos PLDs
Aparte de los sitemas basados en CPU, existen distintas alternativas para implementar sistemas
electrnicos digitales.
Circuitos comerciales estndar: Son los circuitos integrados con
funcin lgica fija, como el 74LS00, el 4043 o el 74HCT00.
ASIC (Application Specific Integrated Circuit): Son c.i. especficos
para una aplicacin y se utilizan en realizaciones complejas que exigiran
un nmero elevado de circuitos integrados de funcin fija. Estn
diseados a medida y slo sirven para una aplicacin. Por regla general,
los producen los fabricantes de c.i. con las especificaciones
proporcionadas por el cliente.
Dispositivos PLDs
Ventajas de los PLDs
Un slo circuito integrado PLD puede sustituir desde unos pocos hasta unas decenas o cientos
de c.i. de funcin fija, mientras que los grandes ASICs pueden sustituir a cientos e incluso miles de
c.i.
Los PLDs estn situados en una zona intermedia entre los dispositivos a medida y la lgica de
catlogo formada por los c.i. de funcin fija. Tienen casi todas las ventajas de los ASICs sin estar
penalizados por un costo elevado para pequeas series. Adems el ciclo de diseo con PLDs es
mucho ms rpido que los ASIC. En ocasiones, los PLD se utilizan para realizar prototipos que
posteriormente se llevarn a un ASIC ms econmico para grandes series.
Se utilizan para resolver problemas combinacionales o secuenciales. A igualdad de costo son
muy superiores a los sistemas basados en CPU en aplicaciones de procesamiento de seales a
alta velocidad.
El trabajo con PLDs proporciona: facilidad de diseo con una importante reduccin en el tiempo
de desarrollo, altas prestaciones, fiabilidad, economa y seguridad, con una reduccin en el tamao
de los equipos que los incorporan con la consiguiente reduccin de costos.
Dispositivos PLDs
Aplicaciones I
Los PLDs hoy en da estn presentes en la mayora de los desarrollos debido a las ventajas que
los mismos presentan frente a la lgica convencional, lo cual lleva a una gran variedad de
aplicaciones.
Uno de los campos de mayor aplicacin son los sistemas de tratamiento de seal en tiempo real.
Hay PLDs que pueden tratar seales de mas de 300 MHz o de 6 Gbps. Un sistema basado en
CPU necesitara ser muy potente para poder tratar seales a esas velocidades y muchisimo mas
caro.
En muchos casos se utilizan en sitemas junto a microcontroladores.
Podemos encontrar PLDs en:
Comunicaciones inalmbricas.
Redes: Router, Switch.
Tratamiento de seales: vdeo, fotografa, TDT, DVD, mp3, consolas.
Aparatos de medida.
Aplicaciones militares.
Dispositivos PLDs
Aplicaciones II
Dispositivos PLDs
Clasificacin de PLDs
Desde el punto de vista de su complejidad vamos a
dividirlos en dos grupos:
SPLD (Simple Programmable Logic Device): Son
circuitos integrados que utilizan matrices de puertas
programables.
Dispositivos PLDs
Matrices Lgicas Programables I
Dispositivos PLDs
Matrices Lgicas Programables II
Dispositivos PLDs
Matrices Lgicas Programables III
Existen varias clases de PLDs que emplean esta estructura:
PLA (Programmable Logic Array): Tecnologa bipolar. Programable por fusible una nica vez.
Matrices AND y OR programables.
PAL (Programmable Array Logic): Tecnologa bipolar. Programable por fusible una nica vez.
Programable slo matriz AND, matriz OR fija. Ejemplos: 16L8 y 16R8 (20 patillas).
EPLD (Erasable PLD): Grabable elctricamente. Borrado por ultravioleta. Un slo EPLD
sustituye de 20 a 25 de los anteriores.
GAL (Generic Array Logic): Grabable y borrable elctricamente. Pensadas para sustituir a la
mayora de las PALs manteniendo la compatibilidad terminal a terminal. Son las que se utilizan
actualmente. Ejemplos: 16V8, 20V8 y 16Z8.
Dispositivos PLDs
Clasificacin de los HCPLD
Los HCPLD se dividen bsicamente en CPLD (Complex Programable
Logic Devices) y FPGA (Field Programable Gate Array). Su diferencia
bsica reside en como se implementan los bloques lgicos y como se
interconectan.
CPLD (Complex PLD): Alberga en su interior grupos de SPLDs y
aade otra serie de elementos que permite la interconexin en su interior
de estos grupos.
FPGA (Field Programable Gate Array): Los bloques de lgica se realizan bien mediante
memoria RAM esttica (Look-Up Table o LUT), o mediante multiplexores. La interconexin entre
bloques se realiza mediante celdas de RAM esttica y transistores o multiplexores, o bien mediante
"antifusibles". Son los PLDs mas avanzados. Pueden tener el equivalente a mas de 20.000 puertas
y un elevado nmero de registros, con integrados que pueden llegar a tener mas de 200 patillas.
Pueden tratar seales de mas de 300 MHz o 6 Gbps por un bajo costo (ejemplos tratamiento de
seales audio/vdeo y redes).
Dispositivos PLDs
Programar PLDs
Dispositivos PLDs
Fabricantes
Son varios los fabricantes de dispositivos PLD. Aqu slo ofrecemos una muestra de los mas
especializados. Especial atencin merece Altera, pues es lder del sector en algunos tipos de
PLDs, como los CPLD.
http://www.altera.com
http://www.latticesemi.co
m/
http://www.xilinx.com/
http://www.cypress.com
Microcontroladores
El microcontrolador I
Un microcontrolador es un sistema microprogramable que se
presenta en un circuito integrado de alta escala de
integracin, es decir, se trata de un ordenador completo en un
solo circuito integrado.
En su interior se encuentra una CPU, Unidad E/S y memoria
interna, normalmente memoria RAM (volatil) para guardar datos
y memoria de programa no volatil (EPROM, EEPROM o Flash)
donde reside el programa a ejecutar.
La seal de reloj puede generarse internamente o bien
mediante elementos externos, una red RC, un cristal de cuarzo o
un resonador.
Incluye otros elementos que difieren del modelo de
microcontrolador, como por ejemplo contadores,
temporizadores, conversores AD, puertos de
comunicaciones, etc.
El microcontrolador II
Aunque las prestaciones de un microcontrolador son limitadas, adems de la alta integracin,
una de sus caractersticas principales es su alto nivel de especializacin.
Aunque los hay del tamao de un sello de correos, lo normal es que sean incluso ms
pequeos, ya que, lgicamente, forman parte del dispositivo que controlan.
El microcontrolador es uno de los mayores avances de la microelectrnica e incorpora la mayor
parte de los elementos que configuran un controlador (dispositivo que se emplea para el gobierno
de uno o varios procesos). Podemos decir que contiene todos los componentes fundamentales de
un ordenador, aunque con los recursos limitados, como poca memoria o una CPU sencilla. Se
suele destinar a gobernar una sola tarea.
Fotografa de un microcontrolador sobre un dedo, el PIC12C509, un sistema
microprogramable completo con 8 patillas en una cpsula de 12x6mm, que pesa
unos 3 gramos y que cuesta menos de 1 euro (en grandes cantidades).
El microcontrolador III
Dado el pequeo tamao de los
microcontroladores suelen estar situados en la
misma aplicacin a la que gobiernan. Un buen
ejemplo son el teclado y el ratn de un PC. El
microcontrolador en el teclado se encarga de
detectar la tecla pulsada, generar el cdigo que la
identifica y enviarlo al PC. En el ratn, el
microcontrolador cuenta, registra y transmite al PC
los impulsos en el eje X y en el eje Y que se
producen al mover el ratn. Tambin detecta,
codifica y transmite la pulsacin de los botones.
Un microcontrolador incrustado en el producto que controla slo est dedicado a esa tarea, por
eso ejecuta siempre el mismo programa, maneja datos parecidos y controla los mismos perifricos.
Un PC es un sistema programable de propsito general, pues puede destinarse desde a realizar un
texto a componer msica o controlar un proceso industrial.
Un microcontrolador permite que un "pequeo ordenador" pueda controlar cualquier cosa, por
pequea o barata que sea.
Microcontroladores en un
automvil:
General:
Calefaccin....................
.
Alarma
robo/incendio/gas..
Frigorfico.....................
Aire
1
...
acondicionado............
Lavavajillas..................
Videoportero..................
1
....
.
Saln:
Automvil:
Frenos
TV.................................2
ABS.....................
Video............................
Climatizacin.................
1
.
..
DVD.............................
Alarma
2
..
antirrobo..............
Receptor
2
Airbag............................
TDT..................
Telfono
Equipo
1
fijo....................
msica.................
Telfono
Ordenador de
1
mvil.................
viaje...........
Control
Garage:
...
1
3
1
2
1
1
1
1
1
1
1
Estructura de un microrrobot
Estaciones meteorolgicas.
Sistemas de frio/calor.
Vigilancia y supervisin remota.
Controladores de procesos.
Regulacin y control industrial.
Equipos de medida remota.
Equipos de prueba.
Equipos de de audio y video.
Riego automtico.
Mquinas expendedoras automticas.
Aparatos mdicos.
Control de maquinaria.
Robtica.
Telfonos mviles y PDAs.
Automviles, GPS, etc.
Para funcionar slo necesita una alimentacin de +5V DC y un conector Ethernet especfico.
Clasificacin de microcontroladores I
Un microcontrolador es un sistema microproglamable en un circuito integrado pero de recursos y
capacidades limitados. Se emplea para controlar una aplicacin concreta y suele ir dentro del
mismo producto que controla. Dependiendo de la aplicacin a la que se destine, las carctersticas
que debe reunir deben ser diferentes:
Para gobernar un robot industrial deber contar con mucha memoria para los datos y el
programa, varios temporizadores, conversores AD, puertos de comunicacin, etc.
Para un microrrobot cortacesped como el de HUSQVARNA los requerimientos son menores,
como para controlar los motores, ajuste de altura de corte, control de posicin y obstculos
as como control de carga de bateras por energa solar.
En un mquina expendedora de refrescos slo ha de controlarse el monedero, las teclas de
seleccin, la pantalla de visualizacin y los rels que liberan los productos seleccionados,
con lo que los requerimientos son pocos.
Debido a la gran diversidad de requerimientos que pueden existir en las aplicaciones, los
fabricantes ofrecen una gran variedad de microcontroladores, desde los mas sencillos hasta los
mas complejos.
Clasificacin de microcontroladores II
Para clasificar a los microcontroladores podemos atender al tamao del bus de datos, el
conjunto de lneas por las cuales se transfiere informacin en el interior del microcontrolador. Hay
cuatro tipos:
Fabricantes I
La mayora de los fabricantes de circuitos integrados fabrican tambin microcontroladores,
debido al gran negocio que representan.
INTEL fue pionero en la fabricacin de microcontroladores, con el modelo 8048 en la dcada de
los 70, poco despus de comerzializar en 1971 el primer microprocesador del mundo, el 4004.
Posteriormente cosech un notable xito con la generacin de microcontroladores de 8 bits de la
familia 8051, a la que sigui la 80C196 de 16 bits. En la dcada de los 90 ha sido MOTOROLA la
que ha ocupado el primer puesto como fabricante de microcontroladores, sobre todo gracias al
modelo de 8 bits, 68HC11. En estos comienzas del siglo XXI es sin embargo la empresa americana
MICROCHIP quien domina el mercado, gracias a las excelentes caractersticas de sus
microcontroladores.
Fabricantes II
Ranking de produccin de microcontroladores
Microcontroladores PIC
Los PIC son una familia de microcontroladores programables basados en una arquitectura tipo
Harvard y que utilizan un repertorio de instrucciones mquina muy reducido (RISC). Son fabricados
por Microchip Technology Inc. una empresa lider en microcontroladores junto a Motorola o Intel que
se ha abierto un hueco bastante importante en el mercado de los microcontroladores por su
reducido coste, su amplia gama y la gran cantidad de informacin disponible.
El nombre PIC son las iniciales de Peripheral Interface Controller (Controlador de Interfaz
Perifrico). Derivan del PIC1650, originalmente desarrollado por la divisin de microelectrnica de
General Instruments.
Arquitectura de un microcontrolador
Procesador o CPU (Unidad Central de Proceso).
Memoria Central:
Memoria de programa de tipo ROM/EPROM/EEPROM/Flash .
Memoria de datos de tipo RAM.
Buses de control, datos y direcciones.
Lneas de E/S para comunicarse con el exterior.
Recursos auxiliares (temporizadores, Puertas Serie y Paralelo, Conversores
Analgico/Digital, Conversores Digital/Analgico, etc.).
Generador de impulsos de reloj (sincroniza el funcionamiento de todo el sistema).
Arquitectura Harvard
Este modelo, que utilizan los microcontroladores PIC, tiene la unidad central de proceso (CPU)
conectada a dos memorias (una con las instrucciones y otra con los datos) por medio de dos buses
diferentes.
Una de las memorias contiene solamente las instrucciones del programa (Memoria de
Programa), y la otra slo almacena datos (Memoria de Datos).
Ambos buses son totalmente independientes lo que permite que la CPU pueda acceder de
CPU.
Memoria Central.
Buses de control, datos y direcciones.
Lneas de E/S para comunicarse con el exterior.
Recursos auxiliares.
Generador de impulsos de reloj.
Memoria de programa
Contiene las instrucciones del programa que gobierna la aplicacin a la que se destina el
microcontrolador. Como siempre se realiza la misma tarea y no debe perderse la informacin
grabada cuando se desconecta la alimentacin debe utilizarse una memoria no volatil:
ROM con mscara: Las instrucciones se graban en la memoria durante su fabricacin y no
se puede borrar. Se utiliza para grandes series.
OTP: Las graba el usuario con ayda de un grabador y un PC. Slo se pueden grabar una
vez y no se pueden borrar. Se utilizan para pequeas series.
EPROM UV: Se graban mediante un grabador y un PC. El microcontrolador dispone de una
ventana sobre el chip para borrar la memoria mediante luz ultravioleta. Una vez borrada
puede grabarse de nuevo. En lugar de este tipo de memoria viene utilizndose el tipo Flash.
EEPROM: Se graban y borran elctricamente, sin necesidad de luz ultravioleta. En lugar de
este tipo de memoria viene utilizndose el tipo Flash.
FLASH: Similares a las EEPROM pero con mayor densidad de bit y menor coste. Se
pueden grabar y borrar con un programador y un PC. Tambin existe la programacin "in
circuit", esto es, se programa al microcontrolador cuando est montado en la aplicacin.
Esto permite mantener actualizado el producto hasta su venta e incluso despus. Se utilizan
en prototipos, pequeas series o cuando se quiere disponer de "actualizacin del firmware"
en la aplicacin.
Memoria de datos
Almacena los datos variables y los resultados temporales. Debe permitir lectura y escritura. En
un microcontrolador se suele encontrar:
RAM: Memoria de lectura y escritura muy rpida y voltil. Algunas posiciones de la memoria
se tratan como registros.
EEPROM: Memoria de lectura y escritura lenta pero no volatil.
Puertas de entrada/salida.
Temporizadores o "Timers".
Perro guardin o "Watchdog".
Proteccin ante fallo de alimentacin o
"Brownout".
Estado de reposo o de bajo consumo.
Conversor A/D.
Conversor D/A.
Comparador analgico.
Modulador de anchura de impulsos o PWM.
Puertos de comunicacin.
La memoria de programa
La pila
En los PIC la pila es una memoria interna dedicada, de tamao limitado, separada de las
memorias de datos y de programa, inaccesible al programador, que es utilizada solamente, y en
forma automtica, para guardar las direcciones de retorno de subrutinas e interrupciones. Cada
nivel de la pila permite guardar una copia completa del PC (Contador de Programa). El tamao de
la pila en el PIC16F84A es de 8 niveles y 13 bits.
El Contador de programa PC
Este registro, normalmente denominado PC (Program Counter), es equivalente al de todos los
microprocesadores y contiene la direccin de la prxima instruccin a ejecutar. Se incrementa
automticamente al ejecutar cada instruccin, de manera que la secuencia natural de ejecucin del
programa es lineal, una instruccin despus de la otra. Algunas instrucciones (que llamaremos de
control) cambian el contenido del PC alterando la secuencia lineal de ejecucin. Dentro de estas
instrucciones se encuentran GOTO y CALL que permiten cargar en forma directa un valor
constante en el PC haciendo que el programa salte a cualquier posicin de la memoria. Otras
instrucciones de control son los saltos condicionales, que producen un incremento adicional del PC
si se cumple una condicin especfica, haciendo que el programa salte, sin ejecutar, la instruccin
siguiente.
El PC del PIC16F84A es un registro de 13 bits, lo que permite direccionar 8.192 posiciones de
memoria de programa, pero que internamente solamente podr direccionar las 1.024 posiciones de
memoria de programa del PIC16F84A. Esto significa que solo hace realmente falta tener en cuenta
10 bits del PC (210=1.024). El PC est implementado por dos registros, PCLATH (5 bits) y PCL (8
bits)
La ALU
El PIC16F84A posee una ALU (Unidad Aritmtico Lgica) de 8 bits capaz de realizar
operaciones de desplazamientos, lgicas, sumas y restas. Su salida va al registro de trabajo W y
tambin a la memoria de datos, por lo tanto el resultado puede guardarse en cualquiera de los dos
destinos. Dependiendo de la instruccin ejecutada, la ALU puede afectar a los bits de Acarreo ,
Acarreo Digital (DC) y Cero (Z) del Registro de Estado (STATUS).
Registro de trabajo
El acumulador o registro de trabajo (W) es el registro mas utilizado de todos. No se trata de un
registro de la RAM ya que no tiene direccin pero se usa constantemente para mover datos y dar
valores a las variables (registros). Por ejemplo, si queremos copiar la informacin del registro 0Ch
en el registro 0Dh no podremos hacerlo directamente, deberemos usar una instruccin para cargar
el valor del registro 0Ch en el acumulador y despus otra instruccin para cargar el valor del
acumulador en el registro 0Bh.
STATUS
PCL (Parte baja del contador de programa)
PORTA (Puerto A)
PORTB (Puerto B)
TRISA
TRISB
TMR0 (Timer/contador)
STATUS
El registro de Estado (STATUS) contiene varios bits que indican el estado de la CPU y otros
elementos. Est formado por 8 bits y ocupa la posicin 03h del banco 0 y la 83h del banco 1.
Algunos de estos bits los podemos cambiar manualmente a travs del programa pero otros se
activan cuando se dan ciertos procesos. Estos bits se llaman flags (banderas).
R/W0
R/W0
R/W0
R-1 R-1
R/Wx
R/WR/W-x
x
IRP
RP1
RP0
/TO /PD
DC
bit 7
bit 6
bit 5
bit 4 bit 3
bit 2
bit 1
bit 0
R/W significa que el bit correspondiente se puede leer y escribir, mientras que R significa que
solamente puede ser ledo. Tambin se indica el estado que se establece tras un reset.
Bit 7, IRP: Seleccin del banco en direccionamiento indirecto. En el PIC16F84A no se usa y
debe programarse como 0.
Bit 6 y 5, RP0 y RP1: Register Bank Select. Seleccin de pgina o banco de la memoria con
direccionamiento directo. Cada pgina contiene 128 bytes. Como el PIC16F84A slo tiene
dos bancos nicamente se emplea RP0 de forma que cuando vale 0 se accede al banco 0 y
cuando vale 1 se accede al banco 1. Despus de un reset, RP0 se pone automticamente a
0. El bit RP1 deber ser puesto a cero.
Bit 4 (flag), TO: Time Out (Tiempo acabado)
1. Se pone a 1 tras conectar la alimentacin o al ejecutar CLRWDT o SLEEP.
0. Se pone a 0 por desbordamiento del Perro Guardin WDT.
Bit 3 (flag), PD: Power Down (Apagado).
1. Se pone automticamente a 1 tras conectar la alimentacin Vdd o ejecutar
CLRWDT, que resetea el contador WatchDog.
0. Se pone a 0 al ejecutar la instruccin SLEEP.
Bit 2 (flag), Z: Cero
1 = El resultado de una operacin aritmtica o lgica es 0.
0 = El resultado es distinto de 0.
Bit 1 (flag), DC (Digit Carry). Acarreo en el 4 bit de menos peso. Funciona igual que el bit
de Carry descrito a continuacin. De inters en operaciones en BCD
Bit 0 (flag), C (Carry). Acarreo en el 8 bit o bit de mas peso. Es el bit de "acarreo" en
operaciones de suma AADWF y ADDLW as como tambin el bit de "llevada" en las
instrucciones de sustraccin SUBWF y SUBLW. Tambin lo emplean las instrucciones RLF y
RRF de rotacin de bits.
1. Se pone a 1 cuando se ha producido acarreo en la suma en el bit de mayor
Suma: peso con las operaciones AADWF y ADDLW.
0. Se pone a 0 si en la suma no se ha producido acarreo.
1. Se pone a 1 si en la resta no se ha producido llevada.
Resta:
0. Se pone a 0 cuando se ha producido llevada en la resta con las operaciones SUBWF
y SUBLW.
TRISA
Direccin 05h, Configura el puerto A como entrada o salida. Si un bit de este registro se pone a
"0" el pin correspondiente en el puerto A ser una salida, por el contrario, si se pone a "1" el pin
correspondiente en el puerto A ser una entrada.
TRISB
Direccin 06h, Igual que el anterior pero con el puerto B
TMR0 (Timer/contador)
Direccin 01h, Aqu se puede ver el valor en tiempo real del Timer/contador. Tambin se puede
introducir un valor y alterar as el conteo. Este conteo puede ser interno (cuenta ciclos de reloj) o
externo (cuenta inpulsos introducidos por RA4).
INSTRUCCIN
CDIGO
OPERAND
OPERACIN
O
Cdigo de operacin: Este indica a la CPU que tipo de operacin debe realizarse, como
por ejemplo, una suma, una resta o una multiplicacin.
Operando: Por el contrario, este indica con que datos se deben realizar dichas operaciones,
o bien, las direcciones de donde se deben obtener dichos datos.
El cdigo de operacin, est siempre presente en cualquier tipo de instruccin. Por el contrario,
el operando puede o no estarlo. Por ejemplo, para que la CPU detenga la ejecucin de un
programa, es suficiente con el cdigo de operacin. Sin embargo, para realizar una suma, a parte
del cdigo de operacin habr que indicar con que dato se debe sumar, ya sea explcitamente
despus del cdigo de operacin o indicando en su lugar la posicin de memoria donde se
encuentra dicho dato.
Las instrucciones se pueden clasificar segn el tipo de operacin que realicen en:
Instrucciones lgicas: Realizan las operaciones lgicas entre operandos, tales como suma
lgica, complementacin, etc.
Instrucciones aritmticas: Realizan las operaciones aritmticas, tales como la suma
aritmtica, divisin aritmtica, etc. Este tipo de operaciones se realiza entre acumuladores y
posiciones de memoria.
Instrucciones de salto: Este tipo de instrucciones corresponde a los saltos condicionales
(hacen una cosa u otra segn el resultado de ciertas operaciones) e incondicionales.
Instrucciones de transferencia de datos (entrada/ salida): Estas instrucciones "ordenan"
el paso de informacin entre distintos dispositivos del sistema.
Instrucciones de control: Controlan el desarrollo del programa, lo finaliza, inicializa, no
operacin (NOP), etc.
El problema de este lenguaje es que cada CPU utiliza sus propios cdigos mquina, por lo que
los programas no son intercambiables entre los sistemas microprogramables. Aunque la mquina
solo entiende cdigos binarios (ceros y unos), este tipo de lenguaje se puede programar en
hexadecimal, que es mas manejable y su conversin al formato binario es directa.
En la tabla siguiente se da un ejemplo de cdigo de operacin de instrucciones para un
microcontrolador de la Familia PIC16X84, que utiliza una arquitectura Harvard y donde la memoria
de programa tiene una longitud de 14 bits y la de datos de 8 bits.
Estas instrucciones suman dos valores (7+8) y el resultado lo depositan en la direccin de memoria
de datos 10 h.
Binario
Hex
Operand
Cdigo
Instruccin
a
o
1100000000011
Carga en el acumulador el dato indicado en el
3007 1100xx 0000 0111
1
operando
1111100000100
3E08 11111x
0
0000
1000
000000100100
000000
Almacena el resultado contenido en el acumulador en
0090
0010000
00
1
la direccin indicada
Nota: x representa un valor indiferente, pero se ha tomado en binario como en hexadecimal
como 0, tal y como lo hace el ensamblador MPLAB de microchip.
Este formato binario, denominado lenguaje cdigo mquina, puesto que es el que realmente
entiende el sistema, es el que debe estar en la memoria de programa para que pueda funcionar.
Se comprende, no obstante, que escribir un programa, que puede constar de cientos, miles o
millones de instrucciones, a este nivel, seria extraordinariamente penoso, sujeto a errores y muy
difcil de interpretar por una persona, una vez escrito. Sin embargo, la velocidad con que se ejecuta
es muy elevada, ya que las instrucciones son ejecutadas directamente por la mquina. Otra ventaja
de este tipo de lenguaje reside en que nos podemos meter en lo mas profundo de la mquina.
Lenguaje ensamblador
El lenguaje mquina no es muy manejable por su elevada complejidad, por lo que, para facilitar
la confeccin de programas se utiliza otro tipo de lenguaje denominado lenguaje ensamblador o
simblico.
En el lenguaje ensamblador, las instrucciones se representan por nemnicos o combinaciones
de letras que recuerdan el significado de la instruccin en ingls. As, por ejemplo, en la siguiente
tabla se representan los nemnicos utilizados para las instrucciones anteriores.
Mnemnic Hex
Operand
Cdigo
Instruccin
o
a
o
movlw 0x07 3007 1100xx 0000 0111 Carga en el acumulador el dato indicado en el operando
addlw 0x08 3E08 11111x
movwf 0x10 0090
0000
1000
000000
Almacena el resultado contenido en el acumulador en la
001 0000
1
direccin indicada
Ademas, las direcciones en vez de figurar con su valor binario real, figuran bajo nombres
simblicos (etiquetas) que se pueden asignar de modo que recuerden su significado o la direccin
de las instrucciones.
La estructura de una instruccin escrita en lenguaje ensamblador constara en general de tres
campos:
Etiqueta, o nombre simblico asignado a la direccin donde se encuentra esa instruccin, y
que servir como operando a otras instrucciones de bifurcacin o salto situadas en otro
punto del programa.
Instruccin, mnemnico equivalente a la primera palabra de datos de la instruccin en
lenguaje mquina.
Operando, o nombre simblico asignado a la direccin en que se encuentran los datos.
Como ejemplo, a continuacin se representa una porcin de programa redactado para el
microcontrolador PIC16X84 y su equivalencia en lenguaje mquina.
Ensamblador
Lenguaje mquina
Etiquet Mnemnic
Operando
a
o
PC
INICIO
Cdigo+Operan
do
movlw
0x07
00000
3007 h
0
addlw
0x08
00000
3E08 h
1
movwf
RESULTAD
O
00000
0090 h
2
Notas:
PC: Direccin de la memoria de programa.
RESULTADO: El ensamblador permite sustituir valores numricos por etiquetas as RESULTADO
ser igual a 10 h.
Se comprende que, con un poco de practica, el programa en ensamblador es mucho mas fcil
de escribir y leer que el lenguaje mquina.
Dependiendo del tipo de CPU las direcciones se especifican de diversas maneras (absoluta,
directa, segmentada, como primer operando el byte bajo y como segundo el byte alto, etc).
Programa ensamblador
Una vez escrito el programa en lenguaje ensamblador, su conversin a lenguaje mquina puede
hacerse automticamente en un ordenador mediante un programa, al cual habr que indicarle,
entre otras cosas, la equivalencia numrica de los smbolos o etiquetas utilizados para representar
valores numricos como operandos (en el ejemplo anterior, RESULTADO), mientras que las
equivalencias numricas de las etiquetas con la posicin de cada instruccin en el programa
ensamblador se generarn automticamente (en el ejemplo anterior, INICIO).
Este proceso de traduccin a lenguaje mquina se conoce como "ensamblado" y el programa de
ordenador que lo realiza, ensamblador.
Proceso de programacin
Una vez escrito el programa (programa fuente) en uno de los anteriores lenguajes, este debe
"transformarse" en cdigo mquina que es lo nico que entiende el sistema microprogramable.
Para ello, disponemos de las siguientes herramientas:
Ensambladores: Se utilizan para transformar el lenguaje ensamblador a cdigo mquina.
Compiladores e interpretes: Se emplean para transformar el resto de los lenguajes a
cdigo mquina.
La diferencia entre ensambladores y compiladores con respecto a los interpretes radica en que,
el compilador y ensamblador generan el cdigo mquina de todo el programa y lo ejecutan, as que
la ejecucin es mas rpida. El interprete en cambio lee una lnea, la convierte a cdigo mquina y,
luego, la ejecuta, lee otra lnea... y as todo el programa, por ello la ejecucin es mas lenta.
Programacin de PIC
El lenguaje ensamblador del PIC16F84A
Podramos decir que el lenguaje ensamblado "es complejo por su sencillez". Esto quiere decir
que, a diferencia de los lenguajes de alto nivel, aqu no hay funciones que solucionen y
simplifiquen algoritmos, si no que hay que implementar hasta los pasos ms elementales.
Para los PIC se han creado unas instrucciones y una estructura de programa que lo hacen
sencillo y atractivo. Ms informacin en El lenguaje ensamblador del PIC16F84A
PIC16F84A
Las instrucciones se pueden dividir en tres tipos. Esta divisin viene dada por el tipo de datos
con los que trabajan:
Instrucciones orientadas a los registros o bytes (byte-oriented operations).
Instrucciones orientadas a los bits (bit-oriented operations).
Operaciones con literales y de control (literal and control operations).
Entorno de desarrollo
La empresa Microchip adems de fabricar y distribuir los microcontroladores PIC ofrece un
entorno de desarrollo para ellos, se trata del MPLAB-IDE. Con esta plataforma podemos
programar, compilar, simular y con una serie de herramientas extras incluso grabar los PIC.
Para un entorno de desarrollo bajo Windows disponemos de las siguientes herramientas:
MPLAB-IDE para editar, compilar y simular las aplicaciones. Ver MPLAB.
Icprog para grabar el fichero compilado en el PIC. Ver Icprog
Programador tipo JDM para poder grabar los PIC. Ver JDM y JDMD.
Todas ellas son gratuitas y estn disponibles en internet:
MPLAB lo ha desarrollado la empresa Microchip (http://www.microchip.com) y en su web
siempre podemos encontrar la ltima versin.
Icprog (http://www.ic-prog.com) lo ha desarrollado Bonny Gijzan y en su web podemos ver
las ltimas noticias sobre su estado.
Por ltimo un programador tipo JDM (http://www.jdm.homepage.dk/newpics.htm) puede
adquirirse en cualquier tienda de electrnica (como TE20), o bien construirlo uno mismo.
Prcticas
Prctica 0010. Suma
1. Sumar dos nmeros y depositar el resultado en una posicin de memoria. A partir de la
informacin en MPLAB escribir un programa en lenguaje ensamblado, suma.asm, compilarlo y
simularlo.
Segn el estado de las entradas de control C2, C1, C0, en las salidas Y2, Y1, Y0 aparecer el
estado que corresponder a una funcin predefinida para las variables de entrada D, C, B, A:
C2 C1 C0 Funcin lgica en Y0
0
Y=A+B+C+D OR
Y=A*B*C*D AND
Y=/[A+B+C+D] NOR
Y=/[A*B*C*D] NAND
Y=A(+)B(+)C(+)D OR-Exclusiva
Y=/[A(+)B(+)C(+)D] NORExclusiva
Y2Y1Y0 = DC + BA (Ejemplo: 11 + 11 =
110)
Cada vez que se termine una operacin y se quiera ejecutar otra primero colocamos los
interruptores C2, C1, C0, A, B, C, D en la posicin deseada y despues activamos el pulsador de
reset.
2. Estudiar someramente el programa en cdigo fuente ayudndose de la lista de instrucciones del
PIC.
3. Compilar el programa para obtener operador.hex.
4. Montar el PIC en el programador JDMD y transferirle el programa con ic-prog.
5. Montar el PIC en placa protoboard y comprobar su funcionamiento.
Resultados
o 00
0000, 0x00
Efecto 02
0010, 0x02
Efecto 03
0011, 0x03
o 01
0001, 0x01
o 04
0100, 0x04
Efecto 05
0101, 0x05
Efecto 06
0110, 0x06
o 07
0111, 0x07
Efecto 08
1000, 0x08
Efecto 09
1001, 0x09
o 10
1010, 0x0A
Efecto 11
1011, 0x0B
Efecto 12
1100, 0x0C
o 13
1101, 0x0D
Efecto 14
1110, 0x0E
Efecto 15
1111, 0x0F
Un circuito 555 como generador de onda cuadrada proporciona el control de velocidad regulable
mediante un potencimetro. Si se requiere ms velocidad se puede cambiar el condensador de 10
uf por otro mas pequeo. La salida (patilla 3) se conecta al terminal RA4 del PIC.
Los interruptores se conectan a las patillas RA0, RA1, RA2 y RA3, con su correspondiente
resistencia de 10k a positivo. Las patillas RB0 a RB7 son las salidas que atacan a los LED a travs
de sus correspondientes resistencias.
Programa:
jluzpic.asm
jluzpic.hex
Prctica 0032. Secuenciador de luces con protoboard
Para simplificar el montaje se puede prescindir del circuito integrado 555 y que sea el PIC quien
genere la temporizacin. Tambin se sustituye el oscilador a cristal por uno RC de manera que
colocando una resistencia variable en la red RC se consigue un control de velocidad.
Programa:
jluzpic2.asm
jluzpic2.hex
Seal de reloj en el osciloscopio
La perturbacin que aparece como una oscilacin amortiguada cuando la seal est a nivel alto
puede reducirse colocando un condensador de 100 nF entre las patillas de alimentacin del PIC.
Prctica 0033. Secuenciador de luces con entrenador MSE PIC'SCHOOL
Montaje con el entrenador MSE PIC'SCHOOL por puerto serie. Utiliza el cristal de cuarzo del
entrenador, a 4MHz. La temporizacin se genera mediante una rutina de retardo en el programa
con lo que se mantiene fija la velocidad de visualizacin.
PICSchool es un entrenador que permite trabajar con los PIC mas representativos de las familias
12F, 16F y 18F, para desarrollar aplicaciones tanto a nivel de software como de hardware.
Dispone los perifricos ms utilizados en las aplicaciones reales (entradas/salidas digitales a LED,
teclado, display LCD, etc) y un mdulo protoboard para el montaje de prototipos. A diferencia de
otros equipos similares, ninguno de los perifricos estn conectados de forma predeterminada a
las lneas de E/S del microcontrolador. Mediante un sencillo cableado sin soldadura, conectaremos
los distintos perifricos a las lneas de E/S del PIC segn lo requiera la aplicacin.
Mas informacin:
Manual de usuario de PICSchool
Ingeniera de Microsistemas Programados S.L.: www.microcontroladores.com
Esquema y montaje
El esquema no difiere en demasa de los anteriores:
El montaje se limita a cablear las entradas digitales con el puerto A del PIC y el puerto B del PIC
con las salidas digitales, algo parecido a esto:
Alimentacin
El entrenador necesita una fuente de alimentacin de 9 a 15 voltios en contnua con un conector de
alimentacin redondo del tamao adecuado y positivo al centro. Dispone de un interruptor y un
LED indicador:
MUY IMPORTANTE: Apagar la fuente o desconectarla cuando se inserten los PIC en sus
zcalos o se manipulen los jumper.
El microcontrolador
En este caso se utiliza un PIC16F84A que insertaremos en el zcalo de 18 pines.
Los jumper asociados al zcalo de 18 pines deben estar, JP5 en MCL y JP6 en CLK.
ATENCIN: Debemos respetar la posicin del PIC, con la muesca o pata 1 arriba e insertar el
PIC con el entrenador sin alimentar.
El oscilador
Podemos utilizar un oscilador de cristal a 4 MHz o uno RC (4K7-22pF). Para seleccionarlo se utiliza
el jumper JP2, que en este caso debe estar en CLKIN.
Programa
El programa para el PIC16F84A se puede obtener de:
jluzpic3.asm
jluzpic3.hex
Lectura/grabacin del PIC
Este entrenador utiliza un grabador tipo JDM a travs de puerto serie, para conectarlo al PC y al
software de grabacin.
Tanto para grabar como leer el PIC desde el PC debemos colocar el interruptor a la izquierda, en la
posicin PC. Un diodo led, el Vpp ON, indica la transferencia de datos entre el PC y el entrenador.
Entre los mltiples tipos de software grabadores existentes, pueden utilizarse WinPIC800 e IcProg.
Configuracin del software grabador
Si utilizamos WinPIC800, debemos seleccionar como hardware de grabacin Pic'School.
Ms informacin en Manual de usuario de PICSchool.
Si utilizamos IcProg, debemos seleccionar como hardware de grabacin JDM.
La programacin con IcProg es muy sencilla y es la que se recomienda. A continuacin se muestra
la configuracin de IcProg para adaptarlo a PICSchool: