Está en la página 1de 45

Sistemas Digitales II

Microcontroladores

PIC

uC PIC
CCS Compiler
Proteus

Ing. Emilio J. Escalante S


Sistemas Digitales II
Microcontroladores PIC

INTRODUCCIÓN.
La situación actual en el campo de los
microcontroladores se ha producido gracias al desarrollo
de la tecnología de fabricación de los circuitos
integrados. Este desarrollo ha permitido construir las
centenas de miles de transistores en un chip. Esto fue
una condición previa para la fabricación de un
microprocesador. Las primeras microcomputadoras se
fabricaron al añadirles periféricos externos, tales como
memoria, líneas de entrada/salida, temporizadores u
otros. El incremento posterior de la densidad de
integración permitió crear un circuito integrado que
contenía tanto al procesador como periféricos. Así es
cómo fue desarrollada la primera microcomputadora en un
solo chip, denominada más tarde microcontrolador.
Para entender con más facilidad las razones del éxito
tan grande de los microcontroladores, vamos a prestar
atención al siguiente ejemplo. Hace unos 10 años, diseñar
un dispositivo electrónico de control de un ascensor de
un edificio de varios pisos era muy difícil, incluso para
un equipo de expertos. ¿Ha pensado alguna vez en qué
requisitos debe cumplir un simple ascensor? ¿Cómo lidiar
con la situación cuando dos o más personas llaman al
ascensor al mismo tiempo? ¿Cuál llamada tiene la
prioridad? ¿Cómo solucionar las cuestiones de seguridad,
de pérdida de electricidad, de fallos, de uso indebido?
Lo que sucede después de resolver estos problemas básicos
es un proceso meticuloso de diseñar los dispositivos
adecuados utilizando un gran número de chips

Ing. Emilio J. Escalante S.I


1
Sistemas Digitales II
Microcontroladores PIC

especializados. Este proceso puede tardar semanas o


meses, dependiendo de la complejidad del dispositivo.
Cuando haya terminado el proceso, llega la hora de
diseñar una placa de circuito impreso y de montar el
dispositivo. ¡Un dispositivo enorme! Es otro trabajo
difícil y tardado. Por último, cuando todo está terminado
y probado adecuadamente, pasamos al momento crucial y es
cuando uno se concentra, respira profundamente y enciende
la fuente de alimentación.
Esto suele ser el punto en el que la fiesta se
convierte en un verdadero trabajo puesto que los
dispositivos electrónicos casi nunca funcionan
apropiadamente desde el inicio. Prepárese para muchas
noches sin dormir, correcciones, mejoras… y no se olvide
de que todavía estamos hablando de cómo poner en marcha
un simple ascensor.
Cuando el dispositivo finalmente empiece a funcionar
perfectamente y todo el mundo esté satisfecho, y le
paguen por el trabajo que ha hecho, muchas compañías de
desarrollo estarán interesadas en su trabajo. Por
supuesto, si tiene suerte, cada día le traerá una oferta
de trabajo de un nuevo inversionista. Sin embargo, si lo
requieren para trabajar en el control de los elevadores
de un nuevo edificio que tiene cuatro pisos más de los
que ya maneja su sistema de control. ¿Sabe cómo proceder?
¿Cree acaso que se pueden controlar las demandas de sus
clientes? Suponiendo que se va a construir un dispositivo
universal, que se puede utilizar en los edificios de 4 a
40 pisos, una obra maestra de electrónica. Bueno, incluso
si se consigue construir esta joya electrónica, el

Ing. Emilio J. Escalante S.I


2
Sistemas Digitales II
Microcontroladores PIC

inversionista esperará delante de la puerta pidiendo una


cámara en el ascensor o una música relajante en caso de
fallo de ascensor, u un ascensor con dos puertas.
De todos modos, la ley de Murphy es inexorable y sin
duda usted no podrá tomar ventaja a pesar de todos los
esfuerzos que ha hecho. Por desgracia, todo lo que se ha
dicho hasta ahora sucede en la realidad. Esto es lo que
“dedicarse a la ingeniería electrónica” realmente
significa. Es así como se hacían las cosas hasta la
aparición de los microcontroladores (dispositivos
pequeños, potentes y baratos).
El dispositivo electrónico capaz de controlar un
pequeño submarino, una grúa o un ascensor como el
anteriormente mencionado, ahora está incorporado en un
sólo chip. Los microcontroladores ofrecen una amplia gama
de aplicaciones y sólo algunas se exploran normalmente.

¿Cómo elegir un microcontrolador?

Bueno, si se es principiante, y se ha tomado la


decisión de trabajar con los microcontroladores,
¡Felicitaciones por la elección! No obstante, a primera
vista, no es fácil la elección del microcontrolador más
adecuado. ¡El problema no es el pequeño rango de
dispositivos a elegir, sino todo lo contrario! Antes de
empezar a diseñar un dispositivo basado en un
microcontrolador, se debe tomar en cuenta lo siguiente:
cuántas entradas/salidas son necesarias para su
funcionamiento, realizaría el dispositivo otras

Ing. Emilio J. Escalante S.I


3
Sistemas Digitales II
Microcontroladores PIC

operaciones además de activar/desactivar un relé,


necesita algún modulo especializado tal como el de
comunicación en serie, convertidor A/D, modulación de
ancho de pulso, entre otros. Cuando se tiene una clara
imagen de lo que se quiere, el rango de selección se
reduce considerablemente, y queda pensar es en el precio.
Si se piensa en todas estas cosas por primera vez,
todo parecerá un poco confuso, por esa razón, se va paso
a paso. Antes que nada, se selecciona el fabricante, es
decir, la familia de microcontroladores que ofrece, luego
se aprende a trabajar con un modelo particular. Sólo es
necesario aprender lo que se necesite aprender, con ello
se es capaz de manejar cualquier modelo del mismo
fabricante.
Más o menos, todo se parece a montar en bicicleta:
después de varias caídas inevitables en el principio,
luego se tendrá la capacidad de mantener el equilibrio y
montar en cualquier otra bicicleta. ¡Por supuesto, nunca
se olvida tanto de montar en bicicleta, como de la
destreza de programación!
Ahora toca decidir qué se quiere que haga el
microcontrolador, cargar un programa en él con las
instrucciones apropiadas. Antes de encender el
dispositivo es recomendable verificar su funcionamiento
con ayuda de un simulador. Si todo funciona como es
debido, se incorpora el microcontrolador al sistema. Si
alguna vez se necesita cambiar, mejorar o actualizar el
programa, se puede hacer, ¿Hasta cuándo? Hasta quedar
satisfecho con el resultado.

Ing. Emilio J. Escalante S.I


4
Sistemas Digitales II
Microcontroladores PIC

MICROCONTROLADORES

Historia e importancia de los microcontroladores

Hasta antes de la aparición de los microprocesadores


(1971), la mayor parte de las aplicaciones digitales en
electrónica se basaban en la llamada lógica cableada, es
decir, si existía un problema este era analizado y se
sintetizaba una función en base a la lógica de Boole que
era la solución al problema planteado.
Con la aparición de los microprocesadores, se varió el
esquema de diseño de tal forma que un problema era
descompuesto en una serie de tareas más simples, el
microprocesador ejecutaba una serie de pasos o
instrucciones para llevar a efecto cada una de las
tareas, en ocasiones no era necesario volver a armar un
circuito para solucionar otro problema sino que se
cambiaba las instrucciones (programa) para obtener otra
aplicación.
Desde luego el microprocesador es como el cerebro que
ejecuta operaciones de índole aritméticas y lógicas, por
tanto, no manejaba líneas externas (periféricos), más aún
tampoco tenía un lugar donde almacenar el programa y los
datos que necesitaba el programa para encontrar la
respuesta al problema. El microprocesador buscaba una
instrucción y la ejecutaba; al conjunto de circuitos
(hardware) que daban el soporte necesario al
microprocesador se le llamo sistema mínimo.

Ing. Emilio J. Escalante S.I


5
Sistemas Digitales II
Microcontroladores PIC

Con el pasar de los años el sistema mínimo se


convirtió en un estándar, por otro lado, la escala de
integración mejoro y posibilito (1976) sintetizar en un
solo chip un sistema mínimo, al cual se le llamo SISTEMA
A que no era otra cosa que el primer microcontrolador.
Los principiantes en electrónica creen que un
microcontrolador es igual a un microprocesador. Esto no
es cierto. Difieren uno del otro en muchos sentidos. La
primera y la más importante diferencia es su
funcionalidad. Para utilizar al microprocesador en una
aplicación real, se debe de conectar con componentes
tales como memoria o componentes buses de transmisión de
datos. Aunque el microprocesador se considera una máquina
de computación poderosa, no está preparado para la
comunicación con los dispositivos periféricos que se le
conectan. Para que el microprocesador se comunique con
algún periférico, se deben utilizar los circuitos
especiales. Así era en el principio y esta práctica sigue
vigente en la actualidad.
Por otro lado, al microcontrolador se le diseña de tal
manera que tenga todas las componentes integradas en el
mismo chip. No necesita de otros componentes
especializados para su aplicación, porque todos los
circuitos necesarios, que de otra manera correspondan a
los periféricos, ya se encuentran incorporados. Así se
ahorra tiempo y espacio necesario para construir un
dispositivo.
En consecuencia definimos así a un microcontrolador;
como un procesador con su sistema mínimo en un chip
(incluye memoria para programa y datos, periféricos de

Ing. Emilio J. Escalante S.I


6
Sistemas Digitales II
Microcontroladores PIC

entrada/salida, conversores AD y DA, módulos


especializados en la transmisión y recepción de datos).
Desde luego que hay diferencias sustanciales como la
arquitectura cerrada de un microcontrolador, en cambio en
un microprocesador es abierta, podemos sumar nuevos
dispositivos en hardware en función a las necesidades que
la aplicación demande.

Figura 1. Estructura interna de un microcontrolador.

Otra diferencia entre los microcontroladores y los


microprocesadores es que los primeros cuentan con un set
de instrucciones reducido en cambio la mayoría de los
microprocesadores tienen mayor cantidad de instrucciones.
Por otro lado la mayoría de los microcontroladores posee

Ing. Emilio J. Escalante S.I


7
Sistemas Digitales II
Microcontroladores PIC

una arquitectura Harvard frente a una arquitectura Von


Neumann de los microprocesadores.
Los microcontroladores se especializan en
aplicaciones industriales para resolver problemas
planteados específicos, por ejemplo: los encontramos en
los teclados o mouse de las computadoras, son el cerebro
de electrodomésticos, también los encontramos en la
industria automotriz, en el procesamiento de imagen y
video. Cabe señalar que el aumento progresivo de la
escala de integración y las técnicas de fabricación hacen
que cada vez aparezcan microcontroladores más poderosos y
rápidos.
El mundo que nos rodea está basado en sistemas
digitales desarrollados entorno a microcontroladores, por
tanto, un microcontrolador no es más que un dispositivo
electrónico encargado de “controlar” un proceso
especifico, es por ello que surge la necesidad de
analizar y entender dichos elementos.
La presente obra está desarrollada con la finalidad
de dar las nociones básicas a la programación de
microcontroladores PIC utilizando un compilador C,
concretamente el compilador CCS Compiler. A lo largo del
desarrollo de cada uno de los temas se ira analizando los
rudimentos del lenguaje y el repertorio de instrucciones
incluidas en él. Este puede ser un buen punto de partida
para aquellos programadores que están empleando algún
otro dialecto (Basic, Ensamblador, PicC18).
Lo habitual, hasta ahora, es que los usuarios que se
inician en este apasionante mundo de la programación de
Microcontroladores, sin tomar en cuenta la marca que sea,

Ing. Emilio J. Escalante S.I


8
Sistemas Digitales II
Microcontroladores PIC

primero lo hacían utilizando el lenguaje ensamblador,


especifico no solo para cada marca de microcontrolador
sino para cada modelo, ya que hay que conocer
perfectamente los recursos de cada Microcontrolador
(Número de puertos de Entrada/Salida, Relojes internos,
entre otros), al principio de los tiempos de estos
dispositivos esto era obligatorio, ya que los recursos de
memoria y velocidad de procesamiento no eran muy grandes
y había que optimizar el código al máximo, esto implicaba
la utilización de un lenguaje de programación de bajo
nivel, que bien utilizado explota los recursos de estos
dispositivos sin desperdiciar memoria y velocidad de
procesamiento, pero al igual que ha ocurrido con los
computadores personales, las prestaciones de estos
dispositivos ha ido creciendo exponencialmente con el
tiempo, siendo ya perfectamente factible el utilizar un
lenguaje de alto nivel para programar estos dispositivos
y aprovechar las ventajas de portabilidad que ofrecen
este tipo de lenguajes, de esta manera por ejemplo,
podemos hacer un programa para un PIC en concreto y
utilizarlo en otro de mayores prestaciones sin modificar
apenas nada del código fuente.
Cualquiera que comience en este mundo de la
programación pensara que para aprender a programar en
lenguaje C vale cualquier compilador de uso general y lo
que realmente interesa es saber las instrucciones de C
que se tienen que utilizar para configurar, por ejemplo,
un puerto como entrada o salida, o que código tengo que
emplear para utilizar los convertidores A/D, que
incorporan ya casi todos los microcontroladores, pero hay

Ing. Emilio J. Escalante S.I


9
Sistemas Digitales II
Microcontroladores PIC

que tener en cuenta que los compiladores para


microcontroladores son específicos para estos
dispositivos embebidos y no cumplen con el Estándar ANSI
C al ciento por ciento, por lo que cuando se comience a
programar, lo más seguro es que se observe que una
función del C estándar no funciona perfectamente, dando
un error al compilar.

Ing. Emilio J. Escalante S.I


10
Sistemas Digitales II
Microcontroladores PIC

MICROCONTROLADORES PIC

Los PIC son una familia de microcontroladores tipo


RISC (del inglés Reduced Instruction Set Computer, en
español Computador con Conjunto de Instrucciones
Reducidas) fabricados por Microchip Technology Inc. y
derivados del PIC1650, originalmente desarrollado por la
división de microelectrónica de General Instrument. El
nombre actual no es un acrónimo. En realidad, el nombre
completo es PICmicro, aunque generalmente se utiliza como
Peripheral Interface Controller (controlador de interfaz
periférico). El PIC original se diseñó para ser usado con
la nueva CPU (Central Processing Unit, Unidad Central de
Procesamiento) de 16 bits CP16000. Siendo en general una
buena CPU, ésta tenía malas prestaciones de entrada y
salida, y el PIC de 8 bits se desarrolló en 1975 para
mejorar el rendimiento del sistema quitando peso de
Entradas/Salidas (E/S) a la CPU. El PIC utilizaba
microcódigo simple, almacenado en ROM para realizar estas
tareas; y aunque el término no se usaba por aquel
entonces, se trata de un diseño RISC que ejecuta una
instrucción cada 4 ciclos del oscilador.

Figura 2. General Instrument PIC1650.

Ing. Emilio J. Escalante S.I


11
Sistemas Digitales II
Microcontroladores PIC

En 1985 la división de microelectrónica de General


Instrument se separa como compañía independiente que es
incorporada como filial (el 14 de diciembre de 1987
cambia el nombre a Microchip Technology y en 1989 es
adquirida por un grupo de inversores) y el nuevo
propietario canceló casi todos los desarrollos, que para
esas fechas la mayoría estaban obsoletos. El PIC, sin
embargo, se mejoró con EPROM (Erasable Programmable Read-
Only Memory; Memoria de solo lectura programable
borrable) para conseguir un controlador de canal
programable. Hoy en día multitud de PICs vienen con
varios periféricos incluidos (módulos de comunicación
serie, UARTs, núcleos de control de motores, entre
otros.) y con memoria de programa desde 512 a 32.000
palabras (una palabra corresponde a una instrucción en
lenguaje ensamblador, y puede ser de 12, 14, 16 ó 32
bits, dependiendo de la familia específica de PICmicro).

Figura 3. PIC® Microcontrollers

Ing. Emilio J. Escalante S.I


12
Sistemas Digitales II
Microcontroladores PIC

Arquitectura Microcontroladores PIC

El PIC usa un juego de instrucciones tipo RISC


(Reduced Instruction Set Computer / Computador con
Conjunto de Instrucciones Reducidas), cuyo número puede
variar desde 35 para PICs de gama baja a 70 para los de
gama alta. Las instrucciones se clasifican en las que
realizan operaciones entre el acumulador y una constante,
entre el acumulador y una posición de memoria,
instrucciones de condicionamiento y de salto/retorno,
implementación de interrupciones y una para pasar a modo
de bajo consumo llamada sleep. La arquitectura del PIC es
sumamente minimalista. Está caracterizada por las
siguientes prestaciones:
- Área de código y de datos separadas (Arquitectura
Harvard).
- Un reducido número de instrucciones de longitud
fija.
- Implementa segmentación de tal modo que la mayoría
de instrucciones duran 1 tiempo de instrucción (o 4
tiempos de reloj). Puede haber instrucciones de dos
tiempos de instrucción (saltos, llamadas y retornos de
subrutinas y otras) o inclusive con más tiempo de
instrucción en PICs de gama alta. Esto implica que el
rendimiento real de instrucciones por segundo del
procesador es de al menos 1/4 de la frecuencia del
oscilador.
- -Un solo acumulador (W), cuyo uso (como operador de
origen) es implícito (no está especificado en la
instrucción).

Ing. Emilio J. Escalante S.I


13
Sistemas Digitales II
Microcontroladores PIC

- Todas las posiciones de la RAM funcionan como


registros de origen y/o de destino de operaciones
matemáticas y otras funciones.
- Una pila de hardware para almacenar instrucciones de
regreso de funciones.
- Una relativamente pequeña cantidad de espacio de datos
direccionable (típicamente, 256 bytes), extensible a
través de manipulación de bancos de memoria.
- El espacio de datos está relacionado con el CPU,
puertos, y los registros de los periféricos.
- El contador de programa está también relacionado
dentro del espacio de datos, y es posible escribir en
él (permitiendo saltos indirectos).

A diferencia de la mayoría de otros CPU, no hay


distinción entre los espacios de memoria y los espacios
de registros, ya que la RAM cumple ambas funciones, y
esta es normalmente referida como "archivo de registros"
o simplemente, registros.
Los microcontroladores PIC16F de Microchip pertenecen
a una gran familia de microcontroladores de 8 bits (bus
de datos) que tienen las siguientes características
generales que los distinguen de otras familias:
- Arquitectura Harvard
- Tecnología RISC
- Tecnología CMOS

Estas características se conjugan para lograr un


dispositivo altamente eficiente en el uso de la memoria

Ing. Emilio J. Escalante S.I


14
Sistemas Digitales II
Microcontroladores PIC

de datos y programa y por lo tanto en la velocidad de


ejecución.
Los microcontroladores que produce Microchip cubren un
amplio rango de dispositivos cuyas características pueden
variar según:
- Empaquetado
- Tecnología de la memoria incluida
- Voltajes de operación
- Frecuencia de operación

Microchip ha dividido sus microcontroladores en tres


grandes subfamilias de acuerdo al número de bits de su
bus de instrucciones:

Tabla 1. Subfamilias microcontroladores Microchip

Subfamilia Bits del bus de instrucciones Nomenclatura

Base – Line 12 PIC12XXX y PIC14XXX


Mid – Range 14 PIC16XXX
High – End 16 PIC17XXX y PIC18XXX

En el nombre específico del microcontrolador pueden


aparecer algunas siglas, las cuales determinan ciertas
características eléctricas y funcionales del
microcontrolador, como se muestra en la siguiente tabla:

Tabla 2. Características eléctricas y funcionales de los PIC


Memoria/ Rango de
EPROM ROM Flash
voltaje
Estándar C 4.5 a 6v CR 4.5 a 6v F 4.5 a 6v
Extendido LC 2.5 a 6v LCR 2.5 a 6v LF 2 a 6v

Ing. Emilio J. Escalante S.I


15
Sistemas Digitales II
Microcontroladores PIC

Empaquetados
Aunque cada empaquetado tiene variantes, especialmente
en lo relativo a las dimensiones del espesor del paquete,
en general se pueden encontrar paquetes tipo PDIP
(Plastic Dual In Line Package), PLCC (Plastic Leaded Chip
Carrier) y QFP (Quad Flat Package), los cuales se
muestran en las figuras siguientes:

Figura 4. Paquetes tipo PDIP, PLCC, SOIC, y QFP.

Oscilador
Los PIC permiten diferentes modos para el oscilador.
El usuario puede seleccionar alguno de estos modos

Ing. Emilio J. Escalante S.I


16
Sistemas Digitales II
Microcontroladores PIC

programando 3 bits de configuración del dispositivo


denominados: FOSC2, FOSC1 y FOSC0. En algunos de estos
modos el usuario puede indicar que se genere o no una
salida del oscilador (CLKOUT) a través de un pin de
Entrada/Salida. Los modos de operación se muestran en la
siguiente lista:

Tabla 3. Osciladores
LP Baja frecuencia (y bajo consumo de potencia)
Cristal / Resonador cerámico externos, (Media
XT
frecuencia)
HS Alta velocidad (y alta potencia) Cristal/resonador
Resistencia / capacitor externos (mismo que EXTRC
RC
con CLKOUT)
EXTRC Resistencia / capacitor externos
EXTRC Resistencia / Capacitor externos con CLCKOUT
INTRC Resistencia / Capacitor internos para 4 MHz
Resistencia / Capacitor internos para 4 MHz con
INTRC
CLKOUT

Los tres modos LP, XT y HS usan un cristal o resonador


externo, la diferencia sin embargo es la ganancia de los
drivers internos, lo cual se ve reflejado en el rango de
frecuencia admitido y la potencia consumida. En la
siguiente tabla se muestran los rangos de frecuencia así
como los capacitores recomendados para un oscilador en
base a cristal.

Ing. Emilio J. Escalante S.I


17
Sistemas Digitales II
Microcontroladores PIC

Tabla 4. Rangos de frecuencia y capacitores recomendados


Capacitores recomendados
Modo Frecuencia típica
C1 C2
32 kHz 68 a 100 pf 68 a 100 pf
LP
200 kHz 15 a 30 pf 15 a 30 pf
100 kHz 68 a 150 pf 150 a 200 pf
XT 2 MHz 15 a 30 pf 15 a 30 pf
4 MHz 15 a 30 pf 15 a 30 pf
8 MHz 15 a 30 pf 15 a 30 pf
HS 10 MHz 15 a 30 pf 15 a 30 pf
20 MHz 15 a 30 pf 15 a 30 pf

Cristal externo: En los tres modos mostrados en la


tabla anterior se puede usar un cristal o resonador
cerámico externo. En la siguiente figura se muestra la
conexión de un cristal a las patitas OSC1 y OS2 del PIC.

Figura 5. Conexión oscilador XT.

Figura 6. Cristales de uso comercial.

Ing. Emilio J. Escalante S.I


18
Sistemas Digitales II
Microcontroladores PIC

Circuito RC externo: En los modos RC y EXTRC el PIC


puede generar su señal oscilatoria basado en un arreglo
RC externo conectado a la patita OSC1 como se muestra en
la siguiente figura:

Figura 7. Oscilador RC externo

Este modo sólo se recomienda cuando la aplicación no


requiera una gran precisión en la medición de tiempos. La
frecuencia de oscilación depende no sólo de los valores
de Rext y Cext, sino también del voltaje de la fuente
Vdd. Los rangos admisibles para resistencia y capacitor
son: Rext: de 3 a 100 Kohms y Cext: mayor de 20 pf

Oscilador externo: También es posible conectar una


señal de reloj generada mediante un oscilador externo a
la patita OSC1 del PIC. Para ello el PIC deberá estar en
uno de los tres modos que admiten cristal (LP, XT o HS).
La conexión se muestra en la siguiente figura:

Ing. Emilio J. Escalante S.I


19
Sistemas Digitales II
Microcontroladores PIC

Figura 8. Oscilador externo

Características generales del PIC16F877


La siguiente es una lista de las características que
comparte el PIC16F877 con los dispositivos más cercanos
de su familia (PIC16F873, PIC16F874, PIC16F876,
PIC16F877)
- CPU RISC. Sólo 35 instrucciones que aprender (En
lenguaje ensamblador)
- Todas las instrucciones se ejecutan en un ciclo de
reloj, excepto los saltos que requieren dos
- Frecuencia de operación de 0 a 20 MHz (DC a 200 nseg
de ciclo de instrucción)
- Hasta 8k x 14 bits de memoria Flash de programa
- Hasta 368 bytes de memoria de datos (RAM)
- Hasta 256 bytes de memoria de datos EEPROM
- Hasta 4 fuentes de interrupción
- Stack de hardware de 8 niveles
- Reset de encendido (POR)
- Timer de encendido (PWRT)
- Timer de arranque del oscilador (OST)
- Sistema de vigilancia Watchdog timer.

Ing. Emilio J. Escalante S.I


20
Sistemas Digitales II
Microcontroladores PIC

- Protección programable de código


- Modo SEP de bajo consumo de energía
- Opciones de selección del oscilador
- Programación y depuración serie “In-Circuit” (ICSP) a
través de dos patitas
- Lectura/escritura de la CPU a la memoria flash de
programa
- Rango de voltaje de operación de 2.0 a 5.5 volts
- Alta disipación de corriente de la fuente: 25mA
- Rangos de temperatura: Comercial, Industrial y
Extendido
- Bajo consumo de potencia, Menos de:
- 0.6mA a 3V, 4 Mhz
- 20 µA a 3V, 32 Khz
- menos de 1µA corriente de standby.
- Periféricos
- Timer0: Contador/Temporizador de 8 bits con pre-
escalador de 8 bits
- Timer1: Contador/Temporizador de 16 bits con pre-
escalador
- Timer0: Contador/Temporizador de 8 bits con pre-
escalador y post-escalador de 8 bits y registro
de periodo.
- Dos módulos de Captura, Comparación y PWM
- Convertidor Analógico/Digital: de 10 bits, hasta
8 canales
- Puerto Serie Síncrono (SSP)
- Puerto Serie Universal (USART/SCI).
- Puerto Paralelo Esclavo (PSP): de 8 bits con
líneas de protocolo

Ing. Emilio J. Escalante S.I


21
Sistemas Digitales II
Microcontroladores PIC

Diagrama de Bloques del PIC16F877


En la siguiente figura se muestra a manera de bloques
la organización interna del PIC16F877, Se muestra también
junto a este diagrama su diagrama de patitas, para tener
una visión conjunta del interior y exterior del Chip.

Figura 9. Diagrama de bloques

Descripción de la CPU
Unidad Central De Procesamiento (Central Processor
Unit). Como indica su nombre, esto es una unidad que
controla todos los procesos dentro del microcontrolador.
La CPU es la responsable de la interpretación y ejecución
de la información (instrucciones) guardada en la memoria
de programa. Muchas de estas instrucciones operan sobre

Ing. Emilio J. Escalante S.I


22
Sistemas Digitales II
Microcontroladores PIC

la memoria de datos. El CPU Consiste en varias unidades


más pequeñas, de las que las más importantes son:
Decodificador de instrucciones es la parte que
descodifica las instrucciones del programa y acciona
otros circuitos basándose en esto. El “conjunto de
instrucciones” que es diferente para cada familia de
microcontrolador expresa las capacidades de este
circuito.
Unidad lógica aritmética (Arithmetical Logical Unit -
ALU) realiza todas las operaciones matemáticas y lógicas
sobre datos.
Acumulador o registro de trabajo. Es un registro SFR
estrechamente relacionado con el funcionamiento de la
ALU. Es utilizado para almacenar todos los datos sobre
los que se debe realizar alguna operación (sumar, mover).
También almacena los resultados preparados para el
procesamiento futuro. Uno de los registros SFR,
denominado Registro Status (PSW), está estrechamente
relacionado con el acumulador. Muestra el “estado” de un
número almacenado en el acumulador (el número es mayor o
menor que cero entre otros.) en cualquier instante dado.

Figura 10. Componentes de una CPU

Ing. Emilio J. Escalante S.I


23
Sistemas Digitales II
Microcontroladores PIC

BUS
El bus está formado por 8, 16 o más cables. Hay dos
tipos de buses: el bus de direcciones y el bus de datos.
El bus de direcciones consiste en tantas líneas como sean
necesarias para direccionar la memoria. Se utiliza para
transmitir la dirección de la CPU a la memoria. El bus de
datos es tan ancho como los datos, en este caso es de 8
bits o líneas de ancho. Se utiliza para conectar todos
los circuitos dentro del microcontrolador.

Ciclo de instrucción
El registro Program Counter (PC) es gobernado por el
ciclo de instrucción como se muestra en la siguiente
figura. Cada ciclo de instrucción la CPU lee (ciclo
Fetch) la instrucción guardada en la memoria de programa
apuntada por PC y al mismo tiempo ejecuta la instrucción
anterior, esto debido a una cola de instrucciones que le
permite ejecutar una instrucción mientras lee la próxima.

Figura 11. Ciclo de instrucción

Como puede verse, cada ciclo de instrucción (Tcy) se


compone a su vez de cuatro ciclos del oscilador (Tosc).

Ing. Emilio J. Escalante S.I


24
Sistemas Digitales II
Microcontroladores PIC

Cada ciclo Q provee la sincronización para los siguientes


eventos:
Q1: Decodificación de la instrucción
Q2: Lectura del dato (si lo hay)
Q3: Procesa el dato
Q4: Escribe el dato

Debido a esto cada ciclo de instrucción consume 4


ciclos de reloj, de manera que si la frecuencia de
oscilación es Fosc, Tcy será 4/Fosc.

Registros de la CPU.
Registro PC. Registro de 13 bits que siempre apunta a
la siguiente instrucción a ejecutarse. En la siguiente
sección se dan mayores detalles en el manejo de este
registro.
Registro de Instrucción. Registro de 14 bits. Todas
las instrucciones se colocan en el para ser
decodificadas por la CPU antes de ejecutarlas.
Registro W. Registro de 8 bits que guarda resultados
temporales de las operaciones realizadas por la ALU
Registro de Estado (03h y 83h, STATUS) contienen
varios bits de estado de la unidad central, el estado
aritmético de la ALU, el estado del reset y un par de
bits de selección de página denominados RP1 y RP0. Ocupa
la posición 03h del banco 0 y la 83h del banco 1. Algunos
de estos bits se pueden cambiar manualmente a través del
programa. Otros los activa automáticamente el PIC cuando
se dan ciertos procesos. Estos bits se llaman flags
(banderas). Para dar una idea práctica, una bandera se

Ing. Emilio J. Escalante S.I


25
Sistemas Digitales II
Microcontroladores PIC

levanta (se pone a 1) cuando ha pasado algo. El registro


STATUS está formado por 8 bits.

Tabla 5. Registro STATUS

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x


IRP RP1 RP0 /TO /PD Z DC C
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 leído. También se indica el estado que se establece
tras un reset.
- Bit 7, IRP: Selección del banco en direccionamiento
indirecto. Este bit junto con el de más 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.
Selección de página o banco de la memoria con
direccionamiento directo. Cada página contiene 128 bytes.
Como el PIC16X84 sólo 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. Después de un
reset, RP0 se pone automáticamente a 0. RP1 debe
mantenerse a 0. El bit RP1 deberá ser puesto a cero, ya
que si no nos saldríamos del rango de memoria.
- Bit 4 (flag), TO: Time Out (Tiempo acabado)
o Se pone a 1 tras conectar la alimentación o al
ejecutar CLRWDT o SLEEP.

Ing. Emilio J. Escalante S.I


26
Sistemas Digitales II
Microcontroladores PIC

o 0. Se pone a 0 por desbordamiento del Perro Guardián


WDT.
- Bit 3 (flag), PD: Power Down (Apagado).
o Se pone automáticamente a 1 tras conectar la
alimentación Vdd o ejecutar CLRWDT, que resetea el
contador WatchDog.
o Se pone a 0 al ejecutar la instrucción SLEEP.
- Bit 2 (flag), Z: Cero
o 1 = El resultado de una operación aritmética o
lógica es 0.
o 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 continuación. De interés 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 también el bit de "llevada"
en las instrucciones de sustracción SUBWF y SUBLW.
También lo emplean las instrucciones RLF y RRF de
rotación de bits.
o Suma
 1. Se pone a 1 cuando se ha producido acarreo en la
suma en el bit de mayor peso con las operaciones AADWF y
ADDLW.
 0. Se pone a 0 si en la suma no se ha producido
acarreo.
o Resta
 1. Se pone a 1 si en la resta no se ha producido
llevada.

Ing. Emilio J. Escalante S.I


27
Sistemas Digitales II
Microcontroladores PIC

 0. Se pone a 0 cuando se ha producido llevada en la


resta con las operaciones SUBWF y SUBLW.

Organización de la memoria del PIC


Los PIC tienen dos tipos de memoria: Memoria de Datos
y Memoria de programa, cada bloque con su propio bus: Bus
de datos y Bus de programa; por lo cual cada bloque puede
ser accesado durante un mismo ciclo de oscilación.
La memoria de datos consta de dos áreas mezcladas y
destinadas a funciones distintas. Un registro o una celda
de memoria es un circuito electrónico que puede memorizar
el estado de un byte. En los microcontroladores se
emplean dos tipos de registros: los registros de
funciones especiales (SFR) y los Registro de Propósito
General (GPR)

Figura 12. Registros de 8 bits

Registros de Propósito Especial (SFR)


Los SFR son localidades asociadas específicamente a
los diferentes periféricos y funciones de configuración
del PIC y tienen un nombre específico asociado con su
función. Mientras que los GPR son memoria RAM de uso

Ing. Emilio J. Escalante S.I


28
Sistemas Digitales II
Microcontroladores PIC

general. Cada microcontrolador dispone de un número de


registros de funciones especiales (SFR), con la función
predeterminada por el fabricante. Sus bits están
conectados a los circuitos internos del microcontrolador
tales como temporizadores, convertidores A/D, osciladores
entre otros, lo que significa que directamente manejan el
funcionamiento de estos circuitos, o sea del
microcontrolador. Imagínese ocho interruptores que
manejan el funcionamiento de un circuito pequeño dentro
del microcontrolador.

Figura 13. Registros de función especial SFR

Ing. Emilio J. Escalante S.I


29
Sistemas Digitales II
Microcontroladores PIC

Tabla 6. Tabla de registros de función especial SFR

Registro de Propósito General (GPR)


Los GPR También son registros de 1 byte cada uno. Los
registros GPR (General Purpose Register) sirven para
almacenar los datos o variables que se procesan en el
programa. El PIC16F84A tiene 68 registros GPR, todos

Ing. Emilio J. Escalante S.I


30
Sistemas Digitales II
Microcontroladores PIC

ubicados en el banco 0, entre las direcciones 0x0C y


0x4F. En el banco 1 no hay registros GPR, solo hay
accesos a los registros del banco 0. Dicho en otras
palabras, los registros GPR del banco 1 son un reflejo de
los GPR del banco 0. Los PIC16F877A/876A tienen 368
registros GPR. Los últimos 16 registros de los bancos 1,
2 y 3 son los mismos que del banco 0. Los PIC16F874A/873A
tienen 192 registros GPR. Su mapa de RAM es un poco
diferente debido principalmente a los accesos repetidos.
Todas estas diferencias serán de preocupación solo cuando
se programe en ensamblador.
Los registros GPR no tienen nombres propios, pero los
compiladores de alto nivel saben cómo administrarlos para
almacenar las variables del programa. Por otro lado, si
se programa en ensamblador, se les debe acceder mediante
sus direcciones, ya sea directamente usando números, o
asignándoles nombres a las direcciones con algunas
directivas, como equ o cblock. Por ejemplo, en el
siguiente código se designan los nombres var1 y var2 a
los registros de direcciones 0x25 y 0x30,
respectivamente.
var1 equ 0x25
var2 equ 0x30
Luego se podrán usar esos nombres para acceder a los
registros designados. Por ejemplo, el siguiente código
copia el contenido del primer registro al segundo.
movf var1, W ; Mover var1 a W
movwf var2 ; Mover W a var2
El diseñador puede elegir cualquier registro GPR como
sus variables de programa. Para ello debe recordar

Ing. Emilio J. Escalante S.I


31
Sistemas Digitales II
Microcontroladores PIC

siempre dónde se localizan, en el PIC16F84A están


mapeados a partir de la dirección 0x0C, en los PIC16F87xA
empiezan en la dirección 0x20 en el banco 0; los otros
bancos se usan raramente en ensamblador.

Figura 14. Memorias de los Microcontroladores PIC.

Bancos de memoria
Toda la memoria de datos está organizada en 4 bancos
numerados 0, 1, 2 y 3. Para seleccionar un banco se debe
hacer uso de los bits del registro STATUS<7:5>
denominados IRP, RP1 y RP0. Hay dos maneras de acceder a
la memoria de datos: Direccionamiento directo e

Ing. Emilio J. Escalante S.I


32
Sistemas Digitales II
Microcontroladores PIC

indirecto. La selección de bancos se basa en la siguiente


tabla

Tabla 7. Bits del registro STATUS<7:5>

Direccionamiento
RP1:RP0 Banco
Indirecto (IRP)
0 0 0
0
0 1 1
1 0 2
1
1 1 3

Cada banco consta de 128 bytes (de 00h a 7Fh). En las


posiciones más bajas de cada banco se encuentran los SFR,
y arriba de éstos se encuentran los GPR. Toda la memoria
de datos está implementada en RAM estática.

Figura 15. Memoria de Programa

Ing. Emilio J. Escalante S.I


33
Sistemas Digitales II
Microcontroladores PIC

Memoria ROM
La memoria ROM se utiliza para guardar permanente el
programa que se está ejecutando. Es la razón por la que
es frecuentemente llamada “memoria de programa”. El
PIC16F887 tiene 8Kb de memoria ROM (en total 8192
localidades). Como la memoria ROM está fabricada con
tecnología FLASH, su contenido se puede cambiar al
proporcionarle un voltaje de programación especial (13V).
No obstante, no es necesario explicarlo en detalles
puesto que se realiza automáticamente por un programa
especial en la PC y un simple dispositivo electrónico
denominado programador.
La Memoria de Programa en los PIC16Fxxx es de tipo
flash, aquí es donde se aloja el programa que el CPU
ejecutará. En los PIC16 la memoria de programa se
cuantifica en palabras, de 14 bits cada una. Son de 14
bits porque cada instrucción es de 14 bits. Esto suele
impresionar un poco al novel, quien está habituado a
medir la capacidad de las memorias en bytes (8 bits).
El PIC16F84A tiene 1 k (1024) palabras de memoria. En
tiempo de ejecución son de solo lectura. Con 1 k puede
almacenar hasta 1024 instrucciones de código ensamblador.
Los PIC16F877A/876A tienen 8 k (8192) palabras de memoria
de programa mientras que los PIC16F874A/873A tienen 4 k
(4192). Los cuatro PICmicros ofrecen la posibilidad de
escribir en su memoria de programa incluso en tiempo de
ejecución. Esta función puede ser aprovechada para
almacenar datos procesados por el usuario o para permitir
la autoprogramación del PIC.

Ing. Emilio J. Escalante S.I


34
Sistemas Digitales II
Microcontroladores PIC

En las siguientes figuras las memorias de programa del


PIC están acompañadas por el PC (Program Counter) y la
Pila (Stack). Es así porque hay una estrecha relación en
su trabajo.

Figura 16. Contador de Programa, Pila y Memoria de programa.

El Contador de Programa, PC
El PC es un registro que indica la siguiente
instrucción que debe ejecutar el CPU. Al arrancar
microcontrolador, el PC vale 0x0000 y se va incrementando
automáticamente, con lo que el PIC debería ejecutar una a

Ing. Emilio J. Escalante S.I


35
Sistemas Digitales II
Microcontroladores PIC

una todas las instrucciones del programa. En los PICs de


la familia Mid-Range el PC es de 13 bits, pudiendo
direccionar un máximo de 8 k palabras de memoria de
programa.

La Pila o STACK
Es una memoria que almacena temporalmente el valor del
PC (Program Counter) cuando el programa llama a una
subrutina o cuando salta al Vector de Interrupción, en
una interrupción. En los PICs de la familia Mid-Range la
Pila tiene únicamente 8 niveles y se administra a nivel
hardware, esto es, no hay instrucciones para acceder a
ella directamente. Su operación es enteramente en
background. Solo debemos cuidar de que no se llegue a
desbordar.
Cuando se ejecuta una instrucción CALL o es reconocida
una interrupción el PC es guardado en el stack y el
apuntador de stack es incrementado en 1 para apuntar a la
siguiente posición vacía. A la inversa, cuando se ejecuta
una instrucción RETURN, RETLW o RETFIE el contenido de la
posición actual del stack es colocado en el PC. El PCLATH
no se modifica en ninguna de estas operaciones, cuando el
apuntador de stack ya está en la posición 8 y se ejecuta
otro CALL se reinicia a la posición 1 sobrescribiendo en
dicha posición. No existe ningún indicador que avise de
esta situación. Así que el usuario deberá llevar el
control para que esto no ocurra.
Vector de Reset. Cuando ocurre un reset el contenido
del PC es forzado a cero, ésta es la dirección donde la

Ing. Emilio J. Escalante S.I


36
Sistemas Digitales II
Microcontroladores PIC

ejecución del programa continuará después del reset, por


ello se le llama “dirección del vector de reset”.

Vector de interrupción. Cuando la CPU acepta una


solicitud de interrupción ejecuta un salto a la dirección
0004h, por lo cual a esta se le conoce como “dirección
del vector de interrupción”. El registro PCLATH no es
modificado en esta circunstancia, por lo cual habrá que
tener cuidado al manipular el PC dentro de la Rutina de
Atención a la Interrupción (Interrupt Service Routine
(ISR)).
Aunque el archivo de registros en RAM puede variar de
un PIC a otro, la familia del PIC16F87x coincide casi en
su totalidad. En la siguiente figura se muestra a detalle
el mapa de este archivo de registros y su organización en
los cuatro bancos que ya se describieron.
El PIC16F84A es de los muy pocos que tienen 2 bancos
de RAM; el resto de los PIC16F, que son la gran mayoría,
tienen 4 bancos. La existencia de los bancos solo es de
consideración (y un dolor de cabeza) cuando se programa
en lenguaje ensamblador.
Al apagar la fuente de alimentación, se pierde el
contenido de la memoria RAM. Se utiliza para almacenar
temporalmente los datos y los resultados inmediatos
creados y utilizados durante el funcionamiento del
microcontrolador.
Además los microcontroladores cuentan con una memoria
EEPROM (MEMORIA EEPROM (Electrically Erasable
Programmable Rom / rom programable y borrable
eléctricamente). El contenido de la EEPROM se puede

Ing. Emilio J. Escalante S.I


37
Sistemas Digitales II
Microcontroladores PIC

cambiar durante el funcionamiento (similar a la RAM),


pero se queda permanentemente guardado después de la
pérdida de la fuente de alimentación (similar a la ROM).
Por lo tanto, la EEPROM se utiliza con frecuencia para
almacenar los valores creados durante el funcionamiento,
que tienen que estar permanentemente guardados. Por
ejemplo, si se ha diseñado una llave electrónica o una
alarma, sería estupendo permitir al usuario crear e
introducir una contraseña por su cuenta. Por supuesto, la
nueva contraseña tiene que estar guardada al apagar la
fuente de alimentación. En tal caso una solución perfecta
es el microcontrolador con una EEPROM embebida.

Puertos De Entrada/Salida (E/S)


Para hacer útil un microcontrolador, hay que
conectarlo a un dispositivo externo, es decir, a un
periférico. Cada microcontrolador tiene uno o más
registros (denominados puertos) conectados a los pines en
el microcontrolador. ¿Por qué se denominan como puertos
de entrada/salida? Porque se puede cambiar la función de
cada pin como se requiera. Por ejemplo, se desea que el
dispositivo encienda y apague las tres indicadores LED’s
y que simultáneamente monitoree el estado lógico de 5
sensores o botones de presión. Uno de los puertos debe
estar configurado de tal manera que haya tres salidas
(conectadas a los LEDs) y cinco entradas (conectadas a
los sensores). Eso se realiza simplemente por medio de
software, lo que significa que la función de algún pin
puede ser cambiada durante el funcionamiento.

Ing. Emilio J. Escalante S.I


38
Sistemas Digitales II
Microcontroladores PIC

Figura 17. Pines de entrada/salida (E/S)

Una de las características más importantes de los


pines de entrada/salida (E/S) es la corriente máxima que
pueden entregar/recibir. En la mayoría de los
microcontroladores la corriente obtenida de un pin es
suficiente para activar un LED u otro dispositivo de baja
corriente (10-20mA). Mientras más pines de E/S haya, más
baja es la corriente máxima de un pin. En otras palabras,
todos los puertos de E/S comparten la corriente máxima
declarada en la hoja de especificación técnica del
microprocesador.
Otra característica importante de los pines es que
pueden disponer de los resistores pull-up. Estos
resistores conectan los pines al polo positivo del
voltaje de la fuente de alimentación y su efecto se puede
ver al configurar el pin como una entrada conectada a un
interruptor mecánico o a un botón de presión. Las últimas
versiones de los microcontroladores tienen las
resistencias pull-up configurables por software.

Ing. Emilio J. Escalante S.I


39
Sistemas Digitales II
Microcontroladores PIC

Cada puerto de E/S normalmente está bajo el control de


un registro SFR especializado, lo que significa que cada
bit de ese registro determina el estado del pin
correspondiente en el el microcontrolador. Por ejemplo,
al escribir un uno lógico (1) a un bit del registro de
control (SFR), el pin apropiado del puerto se configura
automáticamente como salida. Eso significa que el voltaje
llevado a ese pin se puede leer como 0 o 1 lógico. En
caso contrario, al escribir 0 al registro SFR, el pin
apropiado del puerto se configura como salida. Su voltaje
(0V o 5V) corresponde al estado del bit apropiado del
registro del puerto.
La mayoría de los pines del microcontrolador son
multipropósito, por ejemplo, la asignación
RA3/AN3/Vref+/C1IN+ para el quinto pin del
microcontrolador indica que éste dispone de las
siguientes funciones:
- RA3 Tercera entrada/salida digital del puerto A
- AN3 Tercera entrada analógica
- Vref+ Referencia positiva de voltaje
- C1IN+ Entrada positiva del comparador C1

La funcionalidad de los pines presentados


anteriormente es muy útil puesto que permite un mejor
aprovechamiento de los recursos del microcontrolador sin
afectar a su funcionamiento. Estas funciones de los pines
no se pueden utilizar simultáneamente, sin embargo se
pueden cambiar en cualquier instante durante el
funcionamiento.

Ing. Emilio J. Escalante S.I


40
Sistemas Digitales II
Microcontroladores PIC

Figura 18. Arquitectura de los microcontroladores PIC.

Ing. Emilio J. Escalante S.I


41
Sistemas Digitales II
Microcontroladores PIC

Las siguientes tablas se refieren a las funciones


establecidas en los pines de microcontroladores DIP de 40
pines.

Tabla 8. Pines Microcontroladores PIC

Ing. Emilio J. Escalante S.I


42
Sistemas Digitales II
Microcontroladores PIC

Tabla 9. Cont. Pines Microcontroladores PIC

Ing. Emilio J. Escalante S.I


43
Sistemas Digitales II
Microcontroladores PIC

Tabla 10. Cont. Pines Microcontroladores PIC

Ing. Emilio J. Escalante S.I


44