Sunteți pe pagina 1din 40

Microcontroladores PIC Apoyo Técnico 2009

INTRODUCCIÓN A LOS MICROCONTROLADORES PIC Y


PROGRAMACIÓN DE UNA MATRIZ DE LED’s

Elaborado por:

Luis Edier Gañan Gañan


Víctor Alexander Quintana Trujillo

Grupo de Apoyo Técnico

Revisado por:

Saúl Alfredo Erazo

Instructor del Área de automatización

SENA
CENTRO DE DISEÑO E INNOVACIÓN TECNOLÓGICA INDUSTRIAL
REGIONAL RISARALDA
NOVIEMBRE 2009

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

El presente proyecto tiene como objetivo servir de manual para todas aquellas
personas interesadas en la programación de microcontroladores, consta de un
conjunto de prácticas de diferente complejidad, así como el funcionamiento de
estos dispositivos.

Los microcontroladores PIC suponen un avance significativo en la materia de


dispositivos digitales empleados en el control de sistemas. Su reducido tamaño
así como sus elevadas prestaciones lo convierten en un elemento
indispensable en el campo de los microcontroladores. Por éste motivo, el área
de Automatización del Centro de Diseño e Innovación Tecnológica del SENA
regional Risaralda, pretende realizar un conjunto de prácticas que profundicen
en las prestaciones de los microcontroladores de forma que el aprendiz asimile
los conceptos fundamentales mediante la realización de una serie de prácticas
de complejidad creciente, finalizando con la práctica sobre el funcionamiento y
programación de una matriz de led’s.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Capitulo 1
Introducción a los PIC

1. Diferencia entre el Microprocesador y Microcontrolador

El microprocesador es un chip que contiene integrado la Unidad Central de


Proceso (CPU), también llamada procesador en los computadores. Esta CPU
es la encargada de interpretar las instrucciones y procesar los datos contenidos
en el programa, que previamente se han guardado ahí.
El microprocesador permite conectarle la memoria y los módulos de entrada y
salida, estos dispositivos se conectan a los pines del microprocesador que
ponen en el exterior las líneas de sus buses de direcciones, datos y control.
Se dice que un microprocesador es un sistema abierto porque su configuración
es variable de acuerdo con la aplicación a la que se destine.

El microcontrolador es un circuito integrado que incluye en definitiva todos los


componentes de un computador. En un microcontrolador encontramos la
Unidad Central de Proceso (CPU), memoria RAM, memoria ROM, EPROM,
EEPROM, FLASH, líneas de entrada y salida para comunicarse con el exterior,
módulos para el control de periféricos, entre otros.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

2. Arquitectura de los Microcontroladores


La arquitectura de un microcontrolador se define como la estructura,
funcionalidades, y modelos de programación del Microprocesador. Más
concretamente nos referimos a su conjunto de instrucciones al número de
ciclos de reloj por instrucción, a su conjunto de Registros internos, al modelo de
gestión de la memoria etc.

2.1 Arquitectura Von Neumann

Es la arquitectura tradicional de computadores y microprocesadores, que se


basa en el esquema propuesto por John Von Neumann, en la cual la CPU
(Unidad Central de Proceso), esta conectada a una memoria única que
contiene las instrucciones del programa y los datos.
Cuando la CPU se dirige a la memoria principal, primero saca la instrucción y
después saca los datos necesarios para ejecutarla, esto retarda el
funcionamiento de la CPU.

2.2 Arquitectura Harvard

La arquitectura conocida como Harvard, consiste simplemente en un esquema


en el que el CPU esta conectado a dos memorias por intermedio de dos buses
separados. Una de las memorias contiene solamente las instrucciones del
programa, y es llamada Memoria de Programa. La otra memoria solo almacena
los datos y es llamada Memoria de Datos.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

3- Tipos de Memoria
La memoria interna de datos del PIC, también llamada archivos de registro,
esta dividida en dos grupos: Los registros especiales, y los registros de
propósito general. Los primeros ocupan por lo general los primeros lugares, por
ejemplo en el PIC 16F877, en el banco 0, los registros especiales están entre
00h y 1Fh, los registros de propósito general van desde 20h, hasta 7Fh.

3.1 Memoria ROM


La información pregrabada electrónicamente en ella (programa o lista de
instrucciones) Solamente puede ser leída y no es posible alterar su contenido
por ningún método directo.
La memoria ROM es escrita, directamente por el fabricante es no Volátil, esto
significa que su información no se pierde aun cuando se le suspende el
suministro de energía.
El precio de los microcrontroladores con este tipo de memoria es elevado.

3.2 Memoria OTP


El microcontrolador contiene una memoria no volátil de sólo lectura
“programable una sola vez” por el usuario. OTP (One Time Programmable).
El usuario puede grabar solo una vez el programa en el chip.
Es recomendable usarla en el prototipo y producción en serie del producto en
cantidades muy pequeñas.

3.3 Memoria EPROM


Los microcontroladores que disponen de memoria EPROM (Erasable
Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces.
La grabación del programa se hace igual a los OTP, con un grabador manejado
por PC. Si, posteriormente se desea borrar el contenido del programa,
disponen de una ventana de cristal en su superficie por la cual se somete la
EPROM a rayos ultravioletas durante varios segundos. Su precio es un poco
más elevado que el de los microcontroladores OTP.

3.4 Memoria EEPROM


Se trata de memorias de sólo lectura, programables y borrables eléctricamente
EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la
programación como el borrado, se realizan eléctricamente desde el propio
grabador y bajo el control programado de un PC. Es muy cómoda y rápida la
operación 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.

3.5 Memoria FLASH

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y


borrar. Funciona como una ROM y una RAM pero consume menos y es más
pequeña.

A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es


más rápida que la EEPROM.

La alternativa FLASH está recomendada frente a la EEPROM cuando se


precisa gran cantidad de memoria de programa no volátil. Es más veloz y tolera
más ciclos de escritura/borrado.

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 taxímetro de un
automóvil publico, al variar los valores del precio por recorrido, el programador
solo tendrá que reprogramar el chip en el circuito, con los valores actuales, sin
necesidad de extraer el microcontrolador, ni comprando un nuevo taxímetro.

4- Puertos de entrada y salida

La principal función de los pines de un microcontrolador es permitir la


comunicación entre si, con periféricos exteriores.
Estos pines pueden variar dependiendo del microcontrolador, pueden tener
más o menos pines, cada pin tendrá un funcionamiento diferente para el
procesamiento de las señales de entrada, salida o de control, dependiendo del
fabricante del microcontrolador y su modelo.

5- Reloj Principal
Todos los microcontroladores disponen de un circuito oscilador que genera una
onda cuadrada de alta frecuencia, que configura los impulsos de reloj usados
en la sincronización de todas las operaciones del sistema.

Generalmente, el circuito de reloj está incorporado en el microcontrolador y


sólo se necesitan unos pocos componentes exteriores para seleccionar y
estabilizar la frecuencia de trabajo. Dichos componentes suelen consistir en un
cristal de cuarzo junto a elementos pasivos o bien un resonador cerámico o una
red R-C.

Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan


las instrucciones pero lleva aparejado un incremento del consumo de energía.

6- Recursos especiales
Cada microcontrolador incorpora características diferentes a los demás, estas
características dependen del fabricante y versión del microcontrolador,
simplemente estos recursos deben representar alguna ventaja o facilidad a la
hora de hacer un diseño.
La labor del diseñador es encontrar el modelo mínimo que satisfaga todos los
requerimientos de su aplicación.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

6.1 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


continuación dicho valor se va incrementando o decrementando al ritmo de los
impulsos de reloj o algún múltiplo hasta que se desborde y llegue a 0, momento
en el que se produce un aviso.

6.2 Perro guardián o “Watchdog

Cuando el computador personal se bloquea por un fallo del software u otra


causa, se pulsa el botón del reset y se reinicializa el sistema. Pero un
microcontrolador funciona sin el control de un supervisor y de forma continuada
las 24 horas del día. El Perro guardián consiste en un temporizador que,
cuando se desborda y pasa por 0, provoca un reset automáticamente en el
sistema.
Es muy útil cuando se trabaja en ambientes con mucha interferencia o ruido
electromagnético. Es conformado por un oscilador RC que se encuentra dentro
del microcontrolador.
Este oscilador corre de manera independiente al oscilador principal. Cuando se
habilita su funcionamiento, dicho circuito hace que el microcontrolador sufra un
reset cada determinado tiempo (que se puede programar entre 18 ms y 2
segundos). Este reset lo puede evitar el usuario mediante una instrucción
especial del microcontrolador (CLRWDT: borrar conteo del watchdog), la cual
se debe ejecutar antes de que termine el período nominal de dicho
temporizador. De esta manera si el programa se ha salido de su flujo normal,
por algún ruido o interferencia externa, el sistema se reiniciará (cuando se
acabe el tiempo programado y no se haya borrado el contador) y el programa
puede restablecerse para continuar su funcionamiento normal.

6.3 Protección ante fallo de alimentación o “Brownout”


Se trata de un circuito que resetea al microcontrolador cuando el voltaje de
alimentación (VDD) es inferior a un voltaje mínimo (“brownout”). Mientras el
voltaje de alimentación sea inferior al de brownout el dispositivo se mantiene
reseteado, comenzando a funcionar normalmente cuando sobrepasa dicho
valor.

6.4 Modo de bajo consumo (Sleep)


Esta característica permite que el microcontrolador entre a un estado pasivo
donde consume muy poca potencia. Se usa en muchas aplicaciones donde el
micro debe esperar sin hacer nada, a que se produzca algún acontecimiento
externo que lo ponga de nuevo en funcionamiento.
En dicho estado se detiene el reloj principal y se “congelan” sus circuitos
asociados, quedando sumido en un profundo “sueño” el microcontrolador. Al
activarse una interrupción ocasionada por el acontecimiento esperado, el
microcontrolador se despierta y reanuda su trabajo.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

6.5 Conversor D/A (CDA)


Transforma los datos digitales obtenidos del procesamiento del computador en
su correspondiente señal analógica que saca al exterior por una de las patitas
de la cápsula.

6.6 Conversor A/D


Una conversión analógica-digital (CAD) (o ADC) consiste en la transcripción de
señales analógicas en señales digitales, con el propósito de facilitar su
procesamiento (codificación, compresión, etc.) y hacer la señal resultante (la
digital) más inmune al ruido y otras interferencias a las que son más sensibles
las señales analógicas.

6.7 Comparador analógico


Algunos modelos de microcontroladores disponen internamente de un
Amplificador Operacional que actúa como comparador entre una señal fija de
referencia y otra variable que se aplica por una de las patitas de la cápsula. La
salida del comparador proporciona un nivel lógico 1 ó 0 según una señal sea
mayor o menor que la otra.

6.8 Modulación por ancho de pulsos o PWM


La modulación por ancho de pulsos de una señal o fuente de energía es una
técnica en la que se modifica el ciclo de trabajo de una señal periódica (una
sinusoidal o una cuadrada, por ejemplo), ya sea para transmitir información a
través de un canal de comunicaciones o para controlar la cantidad de energía
que se envía a una carga.
Estos impulsos de anchura variable, se ofrecen al exterior a través de las pines
del encapsulado.

6.9 Puertos de E/S


Los puertos son el puente entre el microcontrolador y el mundo exterior. Son
líneas que trabajan entre cero y cinco voltios.
Las líneas digitales de los Puertos pueden configurarse como Entrada o como
Salida cargando un 1 ó un 0 en el BIT correspondiente de un registro destinado
a su configuración.

6.10 Puertos de comunicación


Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con
otros dispositivos externos, otros buses de microprocesadores, buses de
sistemas, buses de redes y poder adaptarlos con otros elementos bajo otras
normas y protocolos. Algunos modelos disponen de recursos que permiten
directamente esta tarea, entre los que destacan:

• UART, adaptador de comunicación serie asíncrona.

• USART, adaptador de comunicación serie síncrona y asíncrona

• Puerta paralela esclava para poder conectarse con los buses de otros
microprocesadores.

• USB (Universal Serial Bus), que es un moderno bus serie para los PC.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

• Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips.

• CAN (Controller Area Network), para permitir la adaptación con redes de


conexionado multiplexado desarrollado conjuntamente por Bosch e Intel
para el cableado de dispositivos en automóviles. En EE.UU. se usa el
J185O.

6.11 Interrupciones
Se trata de un acontecimiento que hace que el micro deje de lado lo que se
encuentra realizando, atienda ese suceso y luego regrese y continúe con lo
suyo.
Existen dos tipos de interrupciones posibles, una es mediante una acción
externa (es decir por la activación de uno de sus pines), la otra es interna (por
ejemplo cuando ocurre el desbordamiento de uno de sus registros)

7. Herramientas para el desarrollo de aplicaciones


Uno de los factores que más importancia tiene a la hora de seleccionar un
microcontrolador entre todos los demás es el soporte tanto software como
hardware de que dispone. Un buen conjunto de herramientas de desarrollo
puede ser decisivo en la elección, ya que pueden suponer una ayuda
inestimable en el desarrollo del proyecto.
Las principales herramientas de ayuda al desarrollo de sistemas basados en
microcontroladores son:

• Desarrollo del software:

Ensamblador. La programación 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 versión gratuita para los
microcontroladores más populares.

Compilador: La programación en un lenguaje de alto nivel (como el C) permite


disminuir el tiempo de desarrollo de un producto. No obstante, si no se
programa con cuidado, el código resultante puede ser mucho más ineficiente
que el programado en ensamblador. Las versiones más potentes suelen ser
muy caras, aunque para los microcontroladores más populares pueden
encontrarse versiones demo limitadas e incluso compiladores gratuitos.

Simulador: Son capaces de ejecutar en un PC programas realizados para el


microcontrolador. Los simuladores permiten tener un control absoluto sobre la
ejecución de un programa, siendo ideales para la depuración de los mismos.
No cuentan con los posibles ruidos en las entradas, pero, al menos, permiten el
paso físico de la implementación de un modo más seguro y menos costoso. En
circuitos donde se requiere mucha velocidad para poder ver un efecto, los
simuladores muchas veces no reaccionan como funcionaria en un medio físico,
tal es el caso de los displays de 7 segmentos y matrices de led’s.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Entrenadores: Se trata de pequeños 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, fácil acceso a los pines de E/S, etc.

8. Microcontroladores PIC

Son los dispositivos que más se usan en nuestra región, la realidad es que no
hay una repuesta concreta de la explicación del uso de PIC en vez del Motorola
(su uso se esta popularizando en los últimos tiempos) o cualquier otra familia
de microcontroladores. Pero puede ser su velocidad, el precio, su facilidad de
uso, la información, su pequeño tamaño… Todo esto es lo que produce esa
imagen de sencillez y utilidad que al parecer le agradan tanto a un diseñador
de microcontroladores, pero en un futuro alguna otra familia le puede arrebatar
ese “algo”.

Queremos constatar que para las aplicaciones más habituales (casi un 90%) la
elección de una versión adecuada de PIC es la mejor solución; sin embargo,
dado su carácter general, otras familias de microcontroladores son más
eficaces en aplicaciones específicas, especialmente si en ellas predomina una
característica concreta, que puede estar muy desarrollada en otra familia.

Los PIC son relativamente más baratos económicamente que el de sus


competidores, la información es fácil de conseguir y económica, buenos
parámetros de funcionamiento: velocidad, consumo tamaño, etc.; la
herramientas de software se pueden bajar libremente por su pagina:
http://www.microchip.com).

Una de las razones del éxito de los PIC se basa en su utilización. Cuando se
aprende a manejar uno de ellos, conociendo su arquitectura y su repertorio de
instrucciones, es muy fácil emplear otro modelo.

8.1 Características relevantes.

Descripción de las características más representativas de los PIC:

8.1.1 Arquitectura.

La arquitectura del procesador sigue el modelo Harvard. En esta


arquitectura, la CPU se conecta de forma independiente y con buses distintos
con la memoria de instrucciones y con la de datos.

La arquitectura Harvard permite a la CPU acceder simultáneamente a las


dos memorias. Además, propicia numerosas ventajas al funcionamiento del
sistema como se irán describiendo.
Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas
Microcontroladores PIC Apoyo Técnico 2009

8.1.2 Arquitectura basada en un “banco de registros”


Esto significa que todos los objetos del sistema (puertas de E/S,
temporizadores, posiciones de memoria, etc.) están implementados físicamente
como registros.

8.1.3 Diversidad de modelos de microcontroladores con


prestaciones y recursos diferentes
La gran variedad de modelos de microcontroladores PIC permite que el
usuario pueda seleccionar el más conveniente para su proyecto.

8.1.4 Herramientas de soporte potentes y económicas


La empresa Microchip y otras que utilizan los PIC ponen a disposición de los
usuarios numerosas herramientas para desarrollar hardware y software. Son
muy abundantes los programadores, los simuladores software, los emuladores
en tiempo real, Ensambladores, Compiladores C, Intérpretes y Compiladores
BASIC, etc.

9. Las Gamas de PIC


Una de las labores más importantes del ingeniero de diseño es la elección
del microcontrolador que mejor satisfaga las necesidades del proyecto con el
mínimo presupuesto.
Para resolver aplicaciones sencillas se precisan pocos recursos, en
cambio, las aplicaciones grandes requieren numerosos y potentes. Siguiendo
esta filosofía Microchip construye diversos modelos de microcontroladores
orientados a cubrir, de forma óptima, las necesidades de cada proyecto. Así,
hay disponibles microcontroladores sencillos y baratos para atender las
aplicaciones simples y otros complejos y más costosos para las de mucha
envergadura.
Microchip dispone de cuatro familias de microcontroladores de 8 bits para
adaptarse a las necesidades de la mayoría de los clientes potenciales.
En la mayor parte de la bibliografía encontraran tan solo tres familias de
microcontroladores, con lo que habrán despreciado la llamada gama baja, que
es en realidad una subfamilia formada por componentes pertenecientes a las
otras gamas. En nuestro caso hemos preferido comentarla dado que los PIC
bajas son muy apreciados en las aplicaciones de control de personal, en
sistemas de seguridad y en dispositivos de bajo consumo que gestionan

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

receptores y transmisores de señales. Su pequeño tamaño los hace ideales en


muchos proyectos donde esta cualidad es fundamental.

9.1 La gama baja: PIC12C (F) XXX de 8 pines

Se trata de un grupo de PIC que ha acaparado la atención del mercado. Su


principal característica es su reducido tamaño, al disponer todos sus
componentes de 8 pines. Se alimentan con un voltaje de corriente continua
comprendido entre 2,5 V y 5,5 V, y consumen menos de 2 mA cuando trabajan
a 5 V y 4 MHz. El formato de sus instrucciones puede ser de 12 o de 14 bits y
su repertorio es de 33 o 35 instrucciones, respectivamente.

Aunque los PIC bajas sólo tienen 8 pines, pueden destinar hasta 6 como
líneas de E/S para los periféricos porque disponen de un oscilador interno R-C.

En la Tabla 1.1 se presentan las principales características de los modelos


de esta subfamilia, que el fabricante tiene la intención de potenciar en un futuro
próximo. Los modelos 12C5xx pertenecen a la gama baja, siendo el tamaño de
las instrucciones de 12 bits; mientras que los 12F6xx son de la gama media y
sus instrucciones tienen 14 bits. Los modelos 12F6xx poseen memoria Flash
para el programa y EEPROM para los datos.
MODELO MEMORIA MEMORIA DATOS FRECUENCIA LINEAS ADC TEMPORIZADORE PATITAS
PROGRAMA MAXIMA E/S 8BITS S
PIC12C508 512x12 25x8 4 MHz 6 TMR0 + WDT 8
PIC12C509 1024x12 41x8 4 MHz 6 TMR0 + WDT 8
PIC12C670 512x14 80x8 4 MHz 6 TMR0 + WDT 8
PIC12C671 1024x14 128x8 4 MHz 6 2 TMR0 + WDT 8
PIC12C672 2048x14 128x8 4 MHz 6 4 TMR0 + WDT 8
PIC12C680 512X12 FLASH 80x8 16x8 EEPROM 4 MHz 6 4 TMR0 + WDT 8
PIC12C681 1024x14 FLASH 80x8 16x8 EEPROM 4 MHz 6 TMR0 + WDT 8

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

9.2 Gama baja o básica: PIC16C5X con instrucciones de 12 bits.

Se trata de una serie de PIC de recursos limitados, pero con una de la mejores
relaciones coste/prestaciones. Sus versiones están encapsuladas con 18 y 28
patitas y pueden alimentarse a partir de una tensión 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 ningún tipo de
interrupción y la Pila sólo dispone de dos niveles.

Al igual que todos los miembros de la familia PIC16/17, los componentes de la


gama baja se caracterizan por poseer los siguientes recursos: (en la Tabla 2.2
se presentan las principales características de los modelos de esta familia).

a. Sistema POR (“Power On Reset”)


Todos los PIC tienen la facultad de generar una autoreinicialización o autoreset
al conectarles la alimentación.

b. Perro guardián (Watchdog o WDT)


Existe un temporizador que produce un reset automáticamente si no es
recargado antes que pase un tiempo prefijado. Así se evita que el sistema
quede “colgado” dado en esa situación el programa no recarga dicho
temporizador y se genera un reset.

c. Código de protección
Cuando se procede a realizar la grabación del programa, puede protegerse
para evitar su lectura. También disponen los PIC de posiciones reservadas
para registrar números de serie, códigos de identificación, prueba, etc.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

d. Líneas de E/S de alta corriente


Las líneas de E/S de los PIC pueden proporcionar o absorber una corriente de
salida comprendida entre 20 y 25 mA, capaz de excitar directamente ciertos
periféricos.

e. Modo de reposo (Bajo consumo o “sleep”)


Ejecutando una instrucción (SLEEP), la CPU y el oscilador principal se
detienen y se reduce notablemente el consumo.

Para terminar el comentario introductorio sobre los componentes de la gama


baja conviene nombrar dos restricciones importantes:
• La pila o “stack” sólo dispone de dos niveles lo que supone no
poder encadenar más de dos subrutinas.
• Los microcontroladores de la gama baja no admiten
interrupciones.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

9.3 Gama media. PIC16CXXX con instrucciones de 14 bits

Es la gama más variada y completa de los PIC. Abarca modelos con


encapsulado desde 18 patitas hasta 68, cubriendo varias opciones que integran
abundantes periféricos. Dentro de esta gama se halla el «fabuloso PIC16X84»
y sus variantes. En la Figura 2.3 se muestra el diagrama de conexionado de
uno de estos PIC.

En esta gama sus componentes añaden nuevas prestaciones a las que


poseían los de la gama baja, haciéndoles más adecuados en las aplicaciones
complejas. Admiten interrupciones, poseen comparadores de magnitudes
analógicas, convertidores A/D, puertos serie y diversos temporizadores.

El repertorio de instrucciones es de 35, de 14 bits cada una y compatible con el


de la gama baja. Sus distintos modelos contienen todos los recursos que se
precisan en las aplicaciones de los microcontroladores de 8 bits. También
dispone de interrupciones y una Pila de 8 niveles que permite el anidamiento
de subrutinas. Las principales características de los modelos de esta familia:

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

El temporizador TMR1 que hay en esta gama tiene un circuito oscilador que
puede trabajar asincrónicamente y que puede incrementarse aunque el
microcontrolador se halle en el modo de reposo (“sleep”), posibilitando la
implementación de un reloj en tiempo real.
Las líneas de E/S presentan una carga “pull-up” activada por software.

9.4 Gama alta: 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 gestión de interrupciones vectoriales muy potente.
También incluyen variados controladores de periféricos, puertas de
comunicación 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.
Quizás la característica más destacable de los componentes de esta gama es
su arquitectura abierta, que consiste en la posibilidad de ampliación del
microcontrolador con elementos externos. Para este fin, las patitas sacan al
exterior las líneas de los buses de datos, direcciones y control, a las que se
conectan memorias o controladores de periféricos. Esta facultad obliga a estos
componentes a tener un elevado número de patitas comprendido entre 40 y 44.
Esta filosofía de construcción del sistema es la que se empleaba en los
microprocesadores y no suele ser una práctica habitual cuando se emplean
microcontroladores. Las características más relevantes de los modelos de esta
gama, que sólo se utilizan en aplicaciones muy especiales con grandes
requerimientos:

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

9.5 PIC18FXXX con instrucciones de 16 bits

Se alcanzan las 77 instrucciones de 16bits.


Frecuencia máxima de reloj 40 MHz. Hasta 10 MIPS (Millones de Instrucciones
por segundo).
Pila de 32 Niveles.
Periféricos de comunicación avanzadas (CAN y USB).
De 18 a 80 pines

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

10. LOS REGISTROS DE LA GAMA MEDIA

10.1 Organización de la memoria de datos

La ampliación de recursos en los PIC


Dirección BANCO 0 BANCO 1 Dirección
forzó en los catalogados como de gama 00 INDF INDF 80
media una nueva estructura y la modificación 01 TMR0 OPTION 81
02 PCL PCL 82
de algunas instrucciones (partiendo, claro 03 STATUS STATUS 83
04 FSR FSR 84
está, de la gama baja). Una de las diferencias
05 PORT A TRIS A 85
fundamentales es, precisamente, la 06 PORT B TRIS B 86
07 87
ampliación de memoria de registros, a los 08 88
que se unieron algunos nuevos de sistema, y 09 89
0A PCLATH PCLATH 8A
la accesibilidad a parte de los mismos que 0B INTCON INTCON 8B
antes quedaban ocultos, como OPTION o 0C PIR1 PIE1 8C
0D 8D
TRIS, de los que hablaremos a continuación. 0E PCON 8E
0F 8F
10 90
11 91
12 92
De este modo se optó por dos bancos de 13 93
registros de 128 posiciones cada uno, la 14 94
15 95
mayoría de los cuales son de propósito 16 96
general. En el siguiente esquema, que 17 97
18 98
muestra esta organización, las direcciones 19 99
1A 9A
con casillas blancas muestran posiciones de
1B 9B
registros específicos, y las grises generales. 1C 9C
1D 9D
1E 9E
1F CMCON VRCON 9F
. Registros Registros .
. de de .
. Propósito Propósito .
General General
7F FF

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

10.2 Registros específicos

10.2.1 PCL o Contador de programa:

Se utiliza para direccionar hasta 8K


palabras, separadas en bancos de 2K,
del programa del usuario que se
encuentran almacenadas en la
memoria ROM; Este contador de
programa es de 13 bits de ancho. El
byte de menos peso de la dirección se
guarda en el registro PCL, situado en
la posición 0x02 del banco 0, mientras
los 5 bits de más peso se guardan en
los 5 bits de menos peso del registro
PCLATH (dirección 0x08).

10.2.2 Registro STATUS

Registro de 8 bits, cada uno de sus bits (Denominados Banderas) es un


indicador de estado de la CPU o del resultado de la última operación.
La siguiente figura corresponde al STATUS del microcontrolador PIC 16F877

C: Acarreo en el 8º bit
1 = acarreo en la suma y no en la resta.
0 = acarreo en la resta y no en la suma

DC: Acarreo en el 4º bit de menor peso.


Igual que C.

Z: Zero
1 = El resultado de alguna operación es 0.
0 = El resultado es distinto de 0

/PD: Power Down.


1 = Recién encendido o tras CLRWDT.
0 = Tras ejecutar una instrucción SLEEP

/TO: Timer Out.


1 = Recién encendido, tras CLRWDT, o SLEEP.
0 = Saltó el WDT

RP1:RP0: Página de memoria de programa.


Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas
Microcontroladores PIC Apoyo Técnico 2009

IRP: Direccionamiento indirecto para acceder a la paginación de una memoria.

10.2.3 Registro OPTION:


Registro de configuración múltiple, posee varios bits para configurar el
preescalador, la interrupción externa, el timer y las características del puerto B.
PIC 16F877

RBPU: Conexión de cargas Pull-Up para la puerta B.


1 = Cargas Pull-Up desconectadas

INTDEG: Tipo de flanco para la interrupción.


1 = RB0/INT sensible a flanco ascendente.
0 = RB0/INT sensible a flanco descendente.

T0CS: Fuente de reloj para el contador (registro TMR0).


1 = Pulsos por pata T0CLK (contador).
0 = Pulsos igual a reloj interno / 4 (temporizador).

T0SE: Tipo de flanco activo del T0CLK.


1 = Incremento TMR0 en flanco descendente.
0 = Incremento en flanco ascendente

PSA: Asignación del divisor de frecuencia.


1 = Divisor asignado al WDT.
0 = Divisor asignado al TMR0.

PSA2:PSA0: Valor del divisor de frecuencia.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

10.2.4 Registro INTCON:


Registro de Interrupciones, es el encargado del control de las interrupciones y
contiene estos bits:

Bit 7 GIE: Activador general de Interrupciones.


1 = Interrupciones activadas.
0 = Interrupciones desactivadas.

Bit 6 PEIE: Habilitación de interrupción por escritura de la EEPROM


Activación de la interrupción de periféricos (comparador)
1 = Activada.
0 = Desactivada.

Bit 5 TMR0IE: Activación de la interrupción del TMR0.


1 = Activada.
0 = Desactivada.

Bit 4 INTE: Activación de la interrupción externa.


1 = Activada.
0 = Desactivada.

Bit 3 RBIE: Activación de la interrupción del puerto B.


1 = Activada.
0 = Desactivada.

Bit 2 T0IF: Indicador de TMR0 se ha desbordado.


1 = TMR0 desbordado. Borrar por software.
0 = No se ha desbordado.

Bit 1 INTF: Bandera de Interrupción INT, se pone en 1 cuando la interrupción


INT (RB0) ocurre; debe ser puesta en 0 por el programa.

Bit 0 RBIF: Bandera de Interrupción por el cambio en el puerto B, se pone en 1


cuando una de las entradas RB<7:4> cambia, debe ser puesta en 0 por
el programa.

Los demás registros que contiene el PIC 16F877, que es el microcontrolador en


el que se centra este manual, serán estudiados en el caso que los necesite.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

11. INSTRUCCIONES
11.1 Características generales

Habiendo escogido los diseñadores de PIC la filosofía RISC, su juego de


instrucciones es reducido (33 instrucciones en la gama baja), siendo éstas,
además, sencillas y rápidas, puesto que casi todas se ejecutan en un único
ciclo de máquina (equivalente a 4 del reloj principal). Sus operandos son de
gran flexibilidad, pudiendo actuar cualquier objeto como fuente y como destino.

Posee tres tipos bien diferenciados de direccionamiento, estos son:

1º Inmediato: El valor del dato está incluido en el propio código OP, junto a la
instrucción.

2º Directo: La dirección del dato está incluido en el propio código OP, junto a la
instrucción.

3º Indirecto: La dirección de la memoria de datos que guarda el operando está


contenida en un registro.

Nos centraremos en la gama media, que tiene 35 instrucciones. La mayoría


son idénticas a las de la gama baja.

11.2 Instrucciones de la gama media

ADDLW Suma un literal ADDWF W+F ANDLW W AND literal

Sintaxis: ADDLW B Sintaxis: ADDWF A, B Sintaxis: [label] ANDLW k


Operandos: 0 ≤ B ≤ 255 Operación:(W) + (A) ⇒ (dest) Operandos: 0 ≤ k ≤ 255
Operación: (W) + (B)⇒ (W) Flags afectados: C, DC, Z Operación: : (W) AND (k)⇒ (W)
Flags afectados: C, DC, Z Código OP: 00 0111 dfff ffff Flags afectados: Z
Código OP: 11 1001 kkkk kkkk
Código OP: 11 111x kkkk kkkk
Descripción: Suma el
Descripción: Realiza la operación
Descripción: Suma el contenido contenido del registro W y el
lógica AND entre el contenido del
del registro W y B, guardando el registro A. Si B es 0, el registro W y k, guardando el
resultado en W. resultado se almacena en W, resultado en W.
Ejemplo: ADDLW 0x05 si d es 1 se almacena en A.
Antes: W = 0x02 Ejemplo: ADDWF REG, 0 Ejemplo: ADDLW 0xC2
Después: W = 0x07 Antes: W=0x17, REG = 0xC2
Después: W = 0xD9, Antes: W = 0x17
REG = 0xC2 Después: W = 0xD9

ANDWF W AND F BCF Borra un bit BSF Activa un bit


Sintaxis: ANDWF f,d Sintaxis: BCF f,b Sintaxis: BSF f,b
Operandos: d ∈ [0,1], 0 ≤ f ≤ 127 Operandos: 0 ≤ f ≤ 127, 0 ≤ b ≤ 7 Operandos: 0 ≤ f ≤ 127, 0 ≤ b ≤ 7
Operación:(W) AND (f) ⇒ (dest) Operación: : 0 ⇒ (f<b>) Operación: 1 ⇒ (f<b>)
Flags afectados: Z Flags afectados: Ninguno Flags afectados: Ninguno
Código OP: 00 0101 dfff ffff Código OP: 01 00bb bfff ffff Código OP: 01 01bb bfff ffff

Descripción: Realiza la Descripción: Borra el bit b del Descripción: Activa el bit b del
operación lógica AND entre los registro f registro f
registros W y f. Si d es 0, el
resultado se almacena en W, si d Ejemplo: BSF REG,7
es 1 se almacena en f. Ejemplo: BCF REG,7
Ejemplo: ANDWF REG,0 Antes: REG = 0x0A
Antes: W = 0x17., REG = 0xC2 Antes: REG = 0xC7 Después: REG = 0x8A
Después: W = 0x17, Después: REG = 0x47
REG = 0x02

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

BTFSC Test de bit y salto BTFSS Test de bit y salto CALL Salto a subrutina
Sintaxis: BTFSC f,d Sintaxis: BTFSS f,d Sintaxis: CALL k
Operandos: d ∈ [0,1], 0 ≤ f ≤ 127 Operandos: d ∈ [0,1], 0 ≤ f ≤ 127 Operandos: 0 ≤ k ≤ 2047
Operación: Salto si (f<b>) = 0 Operación: Salto si (f<b>) = 1 Operación: PC ⇒ Pila; k ⇒ PC
Flags afectados: Ninguno Flags afectados: Ninguno Flags afectados: Ninguno
Código OP: 01 10bb bfff ffff Código OP: 01 11bb bfff ffff Código OP: 10 0kkk kkkk kkkk

Descripción: Si el bit b del Descripción: Si el bit b del Descripción: Salto a una


registro f es 0, se salta una registro f es 1, se salta una subrutina. La parte baja de k se
instrucción y se continúa con la instrucción y se continúa con la carga en PCL, y la alta en
ejecución. En caso de salto, ejecución. En caso de salto, PCLATCH. Ocupa 2 ciclos de
ocupará dos ciclos de reloj. ocupará dos ciclos de reloj. reloj.
Ejemplo: BTFSC REG,6 Ejemplo: BTFSS REG,6 Ejemplo: ORIGEN CALL
GOTO NO_ES_0 GOTO NO_ES_0 DESTINO
SI_ES_0 Instrucción SI_ES_0 Instrucción Antes: PC = ORIGEN
NO_ES_0 Instrucción NO_ES_0 Instrucción Después: PC = DESTINO

CLRF Borra un registro CLRW Borra el registro W CLRWDT Borra el WDT


Sintaxis: CLRWDT
Sintaxis: CLRF f Sintaxis: CLRW Operandos: Ninguno
Operandos: 0 ≤ f ≤ 127 Operandos: Ninguno Operación: 0x00 ⇒ WDT,
Operación: 0x00 ⇒ (f), 1 ⇒ Z Operación: 0x00 ⇒ W, 1 ⇒ Z 1 ⇒ /TO 1 ⇒ /PD
Flags afectados: Z Flags afectados: Z Flags afectados: /TO, /PD
Código OP: 00 0001 1fff ffff Código OP: 00 0001 0xxx xxxx Código OP: 00 0000 0110
0100
Descripción: El registro f se Descripción: El registro de Descripción: Esta instrucción
carga con 0x00. El flag Z se trabajo W se carga con 0x00. El borra tanto el WDT como su
activa. flag Z se activa. preescaler. Los bits /TO y /PD del
registro de estado se ponen a 1.
Ejemplo: CLRF REG Ejemplo: CLRW Ejemplo: CLRWDT
Después: Contador WDT = 0,
Antes: REG = 0x5A Antes: W = 0x5A Preescales WDT = 0,
Después: REG = 0x00, Z = 1 Después: W = 0x00, Z = 1 /TO = 1, /PD = 1

COMF Complemento de f DECF Decremento de f DECFSZ Decremento y


salto
Sintaxis: COMF f,d Sintaxis: DECF f,d Sintaxis: DECFSZ f,d
Operandos: d ∈ [0,1], 0 ≤ f ≤ 127 Operandos: d ∈ [0,1], 0 ≤ f ≤ 127 Operandos: d ∈ [0,1], 0 ≤ f ≤ 127
Operación: (/ f), 1 ⇒ (dest) Operación: (f) – 1 ⇒ (dest) Operación:(f) -1⇒ d; Salto si R=0
Flags afectados: Z Flags afectados: Z Flags afectados: Ninguno
Código OP: 00 1001 dfff ffff Código OP: 00 0011 dfff ffff Código OP: 00 1011 dfff ffff
Descripción: Decrementa el
Descripción: El registro f es Descripción: Decrementa en 1 el contenido del registro f. Si d es 0,
complementado. El flag Z se contenido de f. Si d es 0, el el resultado se almacena en W, si
activa si el resultado es 0. Si d es resultado se almacena en W, si d d es 1 se almacena en f. Si la
0, el resultado se almacena en W, es 1 se almacena en f. resta es 0 salta la siguiente
si d es 1 se almacena en f. instrucción, en cuyo caso costaría
Ejemplo: COMF REG, 0 Ejemplo: DECF CONT,1 2 ciclos.
Antes: REG = 0x13 Ejemplo: DECFSC REG,0
Después: REG = 0x13, Antes: CONT = 0x01, Z = 0 GOTO NO_ES_0
W = 0XEC Después: CONT = 0x00, Z = 1 SI_ES_0 Instrucción
NO_ES_0 Salta instrucción anterior

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

IORLW W OR literal IORWF W AND F MOVLW Cargar literal en W

Sintaxis: MOVLW f
Sintaxis: IORLW k Sintaxis: IORWF f,d
Operandos: 0 ≤ f ≤ 255
Operandos: 0 ≤ k ≤ 255 Operandos: d ∈ [0,1], 0 ≤ f ≤ 127
Operación: (k) ⇒ (W)
Operación: (W) OR (k)⇒ (W) Operación: (W) OR (f) ⇒ (dest)
Flags afectados: Ninguno
Flags afectados: Z Flags afectados: Z
Código OP: 11 00xx kkkk kkkk
Código OP: 11 1000 kkkk kkkk Código OP: 00 0100 dfff ffff
Descripción: El literal k pasa al
Descripción: Se realiza la Descripción: Realiza la
registro W.
operación lógica OR entre el operación lógica OR entre los
contenido del registro W y k, registros W y f. Si d es 0, el
Ejemplo: MOVLW 0x5A
guardando el resultado en W. resultado se almacena en W, si d
Después:
es 1 se almacena en f.
W = 0x5A
Ejemplo: IORLW 0x35
Ejemplo: IORWF REG,0
Antes: W = 0x9A Antes: W = 0x91, REG = 0x13
Después: W = 0xBF Después: W = 0x93, REG = 0x13

MOVF Mover a f MOVWF Mover a f NOP No operar

Sintaxis: MOVF f, d Sintaxis: MOVWF f Sintaxis: NOP


Operación: (f) ⇒ (dest) Operandos: 0 ≤ f ≤ 127 Operandos: Ninguno
Flags afectados: Z Operación: W ⇒ (f) Operación: No operar
Código OP: 00 1000 dfff ffff Flags afectados: Ninguno Flags afectados: Ninguno
Descripción: El contenido del Código OP: 00 0000 1fff ffff Código OP: 00 0000 0xx0 0000
registro f se mueve al destino d.
Si d es 0, el resultado se Descripción: El contenido del Descripción: No realiza
almacena en W, si d es 1 se registro W pasa el registro f. operación alguna. En realidad
almacena en f. Permite verificar el consume un ciclo de instrucción
registro, puesto que afecta a Z. Ejemplo: MOVWF REG,0 sin hacer nada.
Ejemplo: MOVF REG,0 Ejemplo: CLRWDT
Antes: REG = 0xFF, W = 0x4F
Después: W = REG Después: REG = 0x4F, W = 0x4F Después: Contador WDT = 0,
Preescales WDT = 0,
/TO = 1, /PD = 1

GOTO Salto incondicional INCF Decremento de f INCFSZ Incremento y salto


Sintaxis: INCFSZ f,d
Sintaxis: INCF f,d Operandos: d ∈ [0,1], 0 ≤ f ≤ 127
Sintaxis: GOTO k
Operandos: 0 ≤ k ≤ 2047 Operandos: d ∈ [0,1], 0 ≤ f ≤ 127 Operación:(f) -1⇒ d; Salto si R=0
Operación: (f ) + 1 ⇒ (dest) Flags afectados: Ninguno
Operación: k ⇒ PC <8:0>
Flags afectados: Z Código OP: 00 1111 dfff ffff
Flags afectados: Ninguno
Código OP: 10 1kkk kkkk kkkk Código OP: 00 1010 dfff ffff
Descripción: Incrementa el
Descripción: Incrementa en 1 el contenido del registro f. Si d es 0,
Descripción: Se trata de un salto
contenido de f. Si d es 0, el el resultado se almacena en W, si
incondicional. La parte baja de k
resultado se almacena en W, si d d es 1 se almacena en f. Si la
se carga en PCL, y la alta en
es 1 se almacena en f. resta es 0 salta la siguiente
PCLATCH. Ocupa 2 ciclos de
instrucción, en cuyo caso costaría
reloj. Ejemplo: INCF CONT,1 2 ciclos.
Ejemplo: ORIGEN GOTO DESTINO Ejemplo: INCFSC REG,0
Antes: CONT = 0xFF, Z = 0
GOTO NO_ES_0
Antes: PC = ORIGEN Después: CONT = 0x00, Z = 1
SI_ES_0 Instrucción
Después: PC = DESTINO NO_ES_0 Salta instrucción
anterior

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

RLF Rota f a la izquierda RRF Rota f a la derecha SLEEP Modo bajo consumo
Sintaxis: RLF f,d
Operandos: d ∈ [0,1], 0 ≤ f ≤ 127 Sintaxis: RRF f,d Sintaxis: SLEEP
Operación: Rotación a la Operandos: Ninguno
Operandos: d ∈ [0,1], 0 ≤ f ≤ 127
izquierda Operación: 0x00 ⇒ WDT,
Operación: Rotación a la derecha
Flags afectados: C
Flags afectados: C 1 ⇒ / TO 0 ⇒ WDT
Código OP: 00 1101 dfff ffff
Código OP: 00 1100 dfff ffff Preescaler, 0 ⇒ / PD
Descripción: El contenido de f se
Descripción: El contenido de f se Flags afectados: / PD, / TO
rota a la izquierda. El bit de
rota a la derecha. El bit de menos Código OP: 00 0000 0110 0011
menos peso de f pasa al carry
peso de f pasa al carry (C), y el Descripción: El bit de energía se
(C), y el carry se coloca en el de
carry se coloca en el de mayor pone a 0, y a 1 el de descanso. El
mayor peso. Si d es 0, el
peso. Si d es 0, el resultado se WDT y su preescaler se borran. El
resultado se almacena en W, si d
almacena en W, si d es 1 se micro para el oscilador, yendo al
es 1 se almacena en f.
almacena en f. modo “durmiente”.
Ejemplo: RRF REG,0
Ejemplo: RRF REG,0 Ejemplo: SLEEP
Antes: REG = 1110 0110, C = 1 Preescales WDT = 0,
Antes: REG = 1110 0110, C = 0
Después: REG = 1110 0110, /TO = 1, /PD = 1
Después: REG = 1110 0110,
W = 01110 0011, C = 0
W = 1100 1100, C = 1

SUBLW Resta Literal - W SUBWF Resta f – W SWAPF Intercambio de f

Sintaxis: SUBLW k Sintaxis: SUBWF f,d Sintaxis: SWAPF f,d


Operandos: 0 ≤ k ≤ 255 Operandos: d ∈ [0,1], 0 ≤ f ≤ 127 Operandos: d ∈ [0,1], 0 ≤ f ≤ 127
Operación: (k) - (W) ⇒ (W) Operación: (f) – (W)⇒ (dest) Operación: (f <3: 0>)⇔ (f <7:4>)
Flags afectados: Z, C, DC Flags afectados: C, DC, Z Flags afectados: Ninguno
Código OP: 11 110x kkkk kkkk Código OP: 00 0010 dfff ffff Código OP: 00 1110 dfff ffff
Descripción: Mediante el método Descripción: Los 4 bits de más
Descripción: Mediante el método del complemento a dos el peso y los 4 de menos son
del complemento a dos el contenido de W es restado al de f. intercambiados. Si d es 0, el
contenido de W es restado al Si d es 0, el resultado se resultado se almacena en W, si d
literal. El resultado se almacena almacena en W, si d es 1 se es 1 se almacena en f.
en W. almacena en f.
Ejemplos: SUBLW 0x02 Ejemplos: SUBWF REG,1 Ejemplo: SWAPF REG,0
Antes: W=1, C=? Después: W=1, Antes: REG=0x03, W=0x02, C=?
C=1 Después: REG=0x01,W=0x4F,C=1 Antes: REG = 0xA5
Antes: W=2,C=?. Después: W=0, Antes: REG=0x02, W =0x02,C= ? Después: REG = 0xA5,
C=1 Desp: REG=0x00,W=0x02,C= 1 W = 0x5A
Antes: W=3,C=?.Después: W=FF, Antes: REG= 0x01,W= 0x02,C= ?
C=0 Desp: REG=0xFF,W=0x02, C=0
(El resultado es negativo) (Resultado negativo)

RETFIE Retorno de interrup. RETLW Retorno, carga W RETURN Retorno de rutina

Sintaxis: RETFIE Sintaxis: RETLW k Sintaxis: RETURN


Operandos: Ninguno Operandos: 0 ≤ k ≤ 255 Operandos: Ninguno
Operación: 1 ⇒ GIE; TOS⇒PC Operación: (k)⇒ (W); TOS⇒PC Operación: TOS ⇒ PC
Flags afectados: Ninguno Flags afectados: Ninguno Flags afectados: Ninguno
Código OP: 00 0000 0000 1001 Código OP: 11 01xx kkkk kkkk Código OP: 00 0000 0000 1000
Descripción: El PC se carga con Descripción: El registro W se
el contenido de la cima de la pila carga con la constante k. El PC Descripción: El PC se carga con
(TOS): dirección de retorno. se carga con el contenido de la el contenido de la cima de la pila
Consume 2 ciclos. Las cima de la pila (TOS): dirección (TOS): dirección de retorno.
interrupciones vuelven a ser de retorno. Consume 2 ciclos. Consume 2 ciclos.
habilitadas. Ejemplo: RETLW 0x37
Ejemplo: RETFIE Ejemplo: RETURN
Después: PC= dirección de Después: PC = dirección de Después: PC = dirección de
retorno retorno retorno
GIE = 1 W = 0x37

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

XORLW W OR literal XORWF W AND F

Sintaxis: XORLW k Sintaxis: XORWF f,d


Operandos: 0 ≤ k ≤ 255 Operandos: d ∈ [0,1], 0 ≤ f ≤ 127
Operación: (W) XOR (k)⇒ (W) Operación: (W) XOR (f) ⇒ (dest)
Flags afectados: Z Flags afectados: Z
Código OP: 11 1010 kkkk kkkk Código OP: 00 0110 dfff ffff

Descripción: Se realiza la Descripción: Realiza la


operación lógica XOR entre el operación lógica XOR entre los
contenido del registro W y k, registros W y f. Si d es 0, el
guardando el resultado en W. resultado se almacena en W, si d
es 1 se almacena en f.
Ejemplo: XORLW 0xAF Ejemplo: XORWF REG,0
Antes: W = 0xB5 Antes: W = 0xB5, REG = 0xAF
Después: W = 0x1A Después: W = 0xB5,
REG = 0x1A

12. Programación de los Microcontroladores PIC

12.1 Conceptos Básicos:


• Lenguaje de Maquina: El único lenguaje que entienden los
microcontroladores, formado por ceros y unos del sistema binario.
• Lenguaje ensamblador: Expresa las instrucciones de una forma más natural
al hombre a la vez que muy cercana al Microcontrolador, ya que cada una de
sus instrucciones se corresponde con otra en código máquina.
• Nemónicos: grupos de caracteres alfanuméricos que simbolizan las órdenes
o tareas a realizar con los que trabaja el lenguaje ensamblador
• Programa ensamblador: es una aplicación Software que se encarga de la
traducción de los nemónicos a código máquina entendible por el
microcontrolador.
• Código fuente: es el programa escrito en lenguaje ensamblador al que se le
asigna una extensión (*.asm).
• Código máquina, fichero proporcionado por el programa ensamblador al que
se le asigna una extensión (*.hex.)

12.2 Introducción a la programación


Un diagrama de flujo de datos es una descripción gráfica de un procedimiento
para la resolución de un problema. Son frecuentemente usados para describir
algoritmos y programas de computador. Los diagramas de flujo de datos están
conformados por figuras conectadas con flechas. Para ejecutar un proceso
descrito por un diagrama de flujo de datos se comienza por el INICIO y se
siguen las flechas de figura a figura, ejecutándose las acciones indicadas por
cada figura; el tipo de figura indica el tipo de paso que representa.
Los diagramas de flujo son frecuentemente usados debido a que pueden
suprimir detalles innecesarios y tener un significado preciso, si son usados
correctamente.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Para el lenguaje ensamblador utilizamos el software de MPLAB, esté es un


software gratuito que se encuentra disponible en la página de microchip.
Para pasar el programa del PC al microcontrolador cada grabador tiene su
software específico, y es posible encontrar múltiples circuitos y programas en
Internet. Microchip vende sus propios equipos, así como micros programados
de fábrica.

12.3 El código fuente


Está compuesto por una sucesión de líneas de programa.
Cada línea de programa puede estar compuesta de hasta cuatro campos o
Columnas separadas por uno o más espacios o tabulaciones entre sí.

Campo de etiquetas: Expresiones alfanuméricas escogidas por el


Usuario para identificar una determinada instrucción del programa.
Todas las etiquetas tienen asignado el valor de la posición de memoria
En la que se encuentra la instrucción a la que acompañan.

Campo del código de operación: Corresponde al nemónico.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Campo de operandos y datos: Contiene los operandos que precisa el


Nemónico utilizado. Según la instrucción, puede haber dos, uno o ningún
Operando.

Campo de comentarios: Dentro de una línea, todo lo que se encuentre


a continuación de un punto y coma (;) será ignorado y considerado como
Comentario.

Directivas
• Controlan el proceso de ensamblado del programa, pero no son parte del
Mismo (también se conocen como pseudo instrucciones).

END
Es la única directiva obligatoria. Indica al ensamblador dónde debe
Detener el proceso. Debe colocarse en la última línea del programa.

<Etiqueta> EQU <expresión>


El valor <expresión> es asignado a <etiqueta>. Estas directivas se
Suelen colocar al principio del programa y habitualmente se usan
Para definir constantes y direcciones de memoria.

[<Etiqueta>] ORG <expresión>


Las instrucciones del código fuente que siguen a esta directiva se
Ensamblan a partir de la posición indicada por <expresión>.

LIST P=16F877
Indica el tipo de microcontrolador utilizado.

INCLUDE <p16F877.inc> o INCLUDE “p16F877.inc”


Incluye en el programa un fichero donde se definen las etiquetas
con las que se nombra a los diferentes registros y sus bits. Este
fichero se encuentra en el directorio principal del programa
ensamblador. Puede usarse esta directiva para incluir cualquier
Otro fichero.

13. MPLAB
El MPLAB es un entorno de desarrollo integrado que permite escribir y codificar
los microcontroladores PIC de Microchip para ejecutarlos.
Por medio de este software podremos programar microcontroladores en
lenguaje C y/o ensamblador. En este manual nos centraremos en la
programación en ASM, pero también explicaremos el lenguaje C, con un
diferente compilador.

13.1 Instalar MPLAB


MPLAB es un software gratuito, se puede descargar directamente desde la
página en Internet de Microchip.
Trabajaremos con la versión 8.30 de MPLAB, pero usted puede instalar la
versión de MPLAB que tenga en el momento, ya que los cambios físicamente
no son muy notables entre versiones.
También con este programa podemos además de ensamblar el código,
simularlo.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

13.2 Conociendo el entorno del MPLAB

13.3 Creando un nuevo proyecto en MPLAB


1- En la barra de herramientas hay un icono que nos permitirá crear el nuevo
proyecto. El New Project .
2- Al dar click sobre esté, nos aparece un cuadro al que debemos introducir el
nombre del proyecto y la ubicación donde quedara guardado.
3- Luego de aceptar nos abre el proyecto que recién hemos creado, en donde
Debemos seleccionar el icono New File , en donde haremos nuestro
programa.
4- Ahora seleccionaremos el modelo del PIC que vamos a utilizar. En la barra
de control hay una opción llamada Configure, al dar click sobre ella
buscaremos en la lista otro enlace llamado Select device…, al seleccionarlo
nos abrirá una ventana en donde aparecen en una lista todos los PIC que
permite programar el MPLAB.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

5- Antes de comenzar a programar debemos hacer algunas configuraciones al


microcontrolador. Entrando nuevamente por Configure – Configuración Bits,
haremos las configuraciones que el micro requiera, por ejemplo el tipo de
cristal oscilador que usará.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

13.4 Primer programa en MPLAB


El siguiente ejemplo será nuestro primer programa en ASM hecho en MPLAB.

Cada pulsador manejara un LED, cuando se accione un pulsador, un LED


indicara cual fue pulsado, ya que los diodos son de colores, por lo tanto si se
pulsa el botón conectado en el BIT 0 del puerto B encenderá el LED AZUL. En
este ejemplo aprenderemos a usar los puertos de entrada y salida.

Programa en ASM:
Abrimos nuevo proyecto en MPLAB, definimos nombre y la ubicación en la cual
será guardado, abrimos un nuevo documento y seleccionas el PIC 16F877,
como dispositivo a usar, y la configuración de los BITS.
En la hoja del documento nuevo empezamos a crear nuestro programa.
Cuando tenemos el programa listo, debemos guardar este fichero y para esto,
seleccionamos en la barra de herramientas: “File – Save As” luego
examinamos la ubicación donde vamos a guardar y por ultimo le asignamos un
nombre y como extensión le ponemos ASM; por ejemplo si el nombre del
archivo es display, lo guardaremos como display.asm, si no le ponemos la
extensión, el programa nos generara error al compilar.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Al compilar el programa sin error, nos generara un archivo .hex, este fichero es
el que cargamos al microcontrolador a programar o simular.

13.5 Programación de un semáforo


El siguiente programa tendrá como objetivo controlar un semáforo y crear
rutinas de temporización en ASM.
Como ejercicio propuesto para avanzar con la programación de micros se
puede realizar el programa para controlar dos semáforos en un cruce vial.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

En la programación se usan instrucciones que no se han usado, como


DECFSZ, que indica decremente el archivo hasta que la bandera Z se ponga
en 1.
CLRF, indica borrar el archivo, clear file, ejemplo: CLRF PORTB, es igual que
si ponemos MOVLW 0, MOVWF PORTB. El puerto igual queda con 0 en sus
bits.
CALL, es la instrucción de llamado, se utiliza al querer llamar una función o
subrutina.
EQU, igual, se utiliza para renombrar los registros, por ejemplo:
EJEMPLO EQU 20h en el programa va a ser lo mismo mandar un dato a 20h
que a EJEMPLO.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

14. Funcionamiento de una Matriz de Led’s

Comenzamos con la segunda parte del manual: ¿Cómo funciona una matriz de
Led?; en este apartado explicaremos el funcionamiento, ¿Cómo multiplexarla?
Y su programación.

Una matriz de Led’s, pantalla de Led’s, visualizador electrónico o publik, se


utiliza para pasar mensajes publicitarios, demarcar zonas, mostrar la hora y la
fecha, en general para pasar un mensaje informativo.

Para la construcción de un publik, se debe tener conocimientos de electrónica y


de programación de microcontroladores, en esta guia se aprenderá el
funcionamiento de una matriz de led’s, para que con este conocimiento se
puedan construir una pantalla con muchas de estas matrices.

Una matriz de led’s consiste básicamente en una matriz de pixeles similar a los
de una pantalla de televisor o de un computador, por lo general es de un solo
color (La mayoria de veces rojo), pero también hay bicolor o multicolores, estos
ultimos utilizan diodos RGB, que puede mostrar cualquier color.

Nuestra matriz será de 7 x 5, 5 columnas por 7 filas. 30 Led’s conectados


internamente.

En este caso podemos conectar los 13 pines al microcontrolador PIC16F877,


pero si trabajamos con 3 o más matrices de estas, no podríamos conectar
todos los pines de las matrices al microcontrolador, ya que 3 matrices serian 39
pines, y este micro no podría manejar esta cantidad de pines; Para este caso
se multiplexan las matrices.

Como dijimos antes, la pantalla está formada por una serie de filas y columnas.
La intersección entre ambas contiene un LED. Para que este encienda, tiene
que recibir simultáneamente un “0” en la fila, y un “1” en la columna. Cuando se
dan estas condiciones, la electrónica de la placa se encarga del encendido del
LED en cuestión.

Solo mostraremos los números del 0 al 9 en esta matriz.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Tenemos conectado en el puerto B las filas y en el puerto C las columnas,


entonces para programarla utilizamos el siguiente algoritmo:
1- Limpiamos puertos
2- Mandamos el dato a el puerto B
3- Activamos la columna en la que se va a mostrar el valor
4- Temporizamos
5- Limpiamos el puerto B
6- Activamos la columna siguiente
7- Mandamos dato a mostrar.
8- Temporizamos

Para mostrar el “0”:

El valor de la primera columna, de izquierda a derecha, seria


en decimal 65 en el puerto B.
El valor de la segunda columna: 62

El tiempo debe ser menor de 20 ms. para que se no se note el


parpadeo entre columnas.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

1 columna: 111
2 columna: 95
3 columna: 0
4 columna: 255
5 columna: 255

Números del 0 al 9 en una matriz 7x5

La programación para el número 1 seria esta:

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

Hay que tener en cuenta que esta programación se puede simplificar, por
ejemplo podemos usar una tabla, en donde se van a guardar los valores de las
letras.

Si vamos a utilizar más de dos matrices entonces debemos multiplexar.

El multiplexado consiste en utilizar unos pocos pines del microcontrolador para


manejar una serie de circuitos integrados que son los que se encargan de
encender los led´s. Hay muchas maneras y circuitos integrados para hacer
esto.

Este circuito es un ejemplo de cómo se conectarían 4 matrices con un 74LS164


y un PIC16F628.
En la programación pones los datos para que el reloj del 74LS164 comience a
encender de derecha a izquierda todas las columnas de los LED.

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas


Microcontroladores PIC Apoyo Técnico 2009

En la versión 2 de este manual:

1) Se explicará el hardware y se mostrará la programación en ASM para un


letrero con matrices de LED.

2) Comunicación I2C entre un PIC 16f877 y una memoria EEPROM


externa 24C128.

3) Construcción de un visualizador de LED fijos.

Bibliografía:

www.wikipedia.org
www.ucontrol.com.ar/
www.unicrom.com/
www.neoteo.com/
Curso Avanzado de Microcontroladores PIC (Cekit)

Centro de Diseño e Innovación Tecnológica Industrial SENA Dosquebradas

S-ar putea să vă placă și