Вы находитесь на странице: 1из 197

LOS PIC DE LA GAMA MEDIA.

ARQUITECTURA Y TCNICAS DE
PROGRAMACIN.





Santiago Salamanca Mio
David Arroyo Muoz

Octubre de 2002








Este libro es el resultado del Proyecto Fin de Carrera realizado por el alumno David
Arroyo Muoz y dirigido por Santiago Salamanca Mio. Est basado en los apuntes de
clase de la asignatura Informtica Industrial de la Titulacin de Ingeniero Tcnico
Industrial, especialidad Electrnica Industrial, que se imparte en la Escuela de
Ingenieras Industriales de la Universidad de Extremadura.

Si encuentras alguna errata o quieres hacer algn comentario, puedes escribir al
siguiente correo electrnico:
ssalaman@unex.es


Microcontroladores PIC de la Gama Media. NDICE GENERAL.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
I
NDICE GENERAL

1 Introduccin a los Microcontroladores. ..................................................................... 1
1.1 Qu es un microcontrolador? ................................................................. 1
1.2 Aplicaciones............................................................................................. 3
1.3 Los microcontroladores PIC. ................................................................... 3
1.4 Las Gamas de los PIC. ............................................................................. 5
1.5 Los PIC de la Gama Media...................................................................... 6
2 La Arquitectura de los PIC de la Gama Media. ........................................................ 11
2.1 Introduccin. ........................................................................................... 11
2.2 Organizacin de la memoria. .................................................................. 13
2.2.1 Organizacin de la memoria de programa. ..................... 13
2.2.2 Organizacin de la memoria de datos............................. 16
2.2.3 Registros y recursos comunes......................................... 19
2.2.3.1 Registro de Estado. ....................................... 19
2.2.3.2 Registro de Opciones. ................................... 20
2.2.3.3 Palabra de configuracin. ............................. 21
2.3 Oscilador. ................................................................................................ 22
2.4 Reset........................................................................................................ 26
2.5 Temporizador y Perro Guardin. ............................................................ 34
2.6 Puertas E/S. ............................................................................................. 36
2.7 Modo de reposo o SLEEP....................................................................... 37
3 Juego de Instrucciones de los PIC de la Gama Media. ............................................. 39
3.1 Introduccin. ........................................................................................... 39
3.2 Flujo de instrucciones. Segmentacin. ................................................... 40
3.3 El formato de las instrucciones. .............................................................. 41
3.4 Juego de instrucciones. ........................................................................... 43
3.4.1 Descripcin detallada de las instrucciones
por orden alfabtico. ....................................................... 45
4 Los Perifricos de los PIC de la Gama Media. ......................................................... 63
4.1 Introduccin. ........................................................................................... 63


Microcontroladores PIC de la Gama Media. NDICE GENERAL.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
II
4.2 Interrupciones. ........................................................................................ 63
4.2.1 Registros de control. ....................................................... 65
4.2.1.1 Registro INTCON......................................... 65
4.2.1.2 Registros PIE. ............................................... 66
4.2.1.3 Registros PIR. ............................................... 67
4.2.2 Fases de una interrupcin. .............................................. 70
4.3 Puertas de E/S. ........................................................................................ 72
4.3.1 Puerta A. ......................................................................... 73
4.3.2 Puerta B. ......................................................................... 75
4.3.3 Puerta C. ......................................................................... 77
4.3.4 Puerta D. ......................................................................... 78
4.3.5 Puerta E........................................................................... 78
4.3.6 Puertas F y G. ................................................................. 79
4.3.7 Puerta GPIO.................................................................... 80
4.3.8 Operaciones sucesivas en un Puerto E/S. ....................... 81
4.4 Puerto Paralelo Esclavo. ......................................................................... 83
4.5 Temporizadores ...................................................................................... 86
4.5.1 TMR0.............................................................................. 86
4.5.2 TMR1.............................................................................. 90
4.5.3 TMR2.............................................................................. 92
4.6 Mdulos CCP.......................................................................................... 93
4.6.1 Modo de captura. ............................................................ 94
4.6.2 Modo de comparacin. ................................................... 96
4.6.3 Modo PWM. ................................................................... 97
4.7 Mdulo de Tensin de Referencia. ........................................................ 100
4.8 Mdulo Comparador Analgico. ........................................................... 102
4.9 Convertidor A/D. ................................................................................... 106
4.10 Mdulos de comunicacin serie. ......................................................... 112
4.10.1 Puerto Serie Sncrono (SSP). .......................................... 112
4.10.1.1 Modo SPI. .................................................................... 115
4.10.1.2 Modo I
2
C. .................................................................... 117


Microcontroladores PIC de la Gama Media. NDICE GENERAL.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
III
4.10.2 USART. .......................................................................... 125
4.10.2.1 Modo asncrono. ................................... 128
4.10.2.2 Modo sncrono...................................... 133
5 Programacin con PIC. ............................................................................................ 137
5.1 Introduccin. .......................................................................................... 137
5.2 Directivas del ensamblador MPASM. ................................................... 137
5.3 Creacin de programas. ......................................................................... 156
5.3.1 Un solo cdigo fuente (ensamblador). ........................... 156
5.3.2 Varios cdigos fuente (linkador). .................................. 157
5.3.3 Utilizacin de libreras................................................... 158
5.4 Estructuras bsicas de programacin. .................................................... 160
5.4.1 Estructuras iterativas...................................................... 160
5.4.1.1 While............................................................ 160
5.4.1.2 Do while....................................................... 161
5.4.1.3 For. ............................................................... 161
5.4.2 Estructuras condicionales. ............................................. 162
5.4.2.1 If................................................................... 162
5.4.2.2 If ... else........................................................ 163
5.4.3 Cdigos de condicin..................................................... 164
5.4.3.1 Igual. ............................................................ 164
5.4.3.2 Distinto......................................................... 164
5.4.3.3 Mayor........................................................... 164
5.4.3.4 Mayor o igual............................................... 165
5.4.3.5 Menor........................................................... 165
5.4.3.6 Menor o igual............................................... 165
5.4.3.7 Condiciones ms complejas......................... 165
5.5 Ejemplo de libreras: librera matemtica. ............................................. 166
5.5.1 Rutinas de coma flotante................................................ 166
5.5.1.1 Manejo de excepciones................................ 168
5.5.1.2 Redondeo. .................................................... 168
5.5.1.3 Conversin de entero a flotante. .................. 168


Microcontroladores PIC de la Gama Media. NDICE GENERAL.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
IV
5.5.1.4 Normalizacin.............................................. 168
5.5.1.5 Conversin de flotante a entero. .................. 169
5.5.1.6 Suma/Resta. ................................................. 169
5.5.1.7 Multiplicacin.............................................. 169
5.5.1.8 Divisin........................................................ 170
5.5.2 Rutinas en coma fija. ..................................................... 171
5.5.2.1 Multiplicacin.............................................. 171
5.5.2.2 Divisin........................................................ 172
5.5.3 Funciones matemticas en coma flotante. ..................... 173
5.5.3.1 Funcin raz cuadrada.................................. 174
5.5.3.2 Funciones exponenciales. ........................... 175
5.5.3.3 Funciones logartmicas. ............................... 176
5.5.3.4 Funcione trigonomtricas. ........................... 178
5.5.3.5 Funcin potencia.......................................... 179
5.5.3.6 Funcin parte entera por defecto. ................ 182
5.5.3.7 Comparacin lgica en coma flotante. ........ 182
5.5.3.8 Generador aleatorio de nmeros enteros. .... 183
5.5.4 Conversin de coma flotante a ASCII. .......................... 183
5.5.4.1 Conversin de coma flotante
a ASCII en base 10. ..................................... 184
5.5.4.2 Personalizacin de la rutina. ........................ 184
5.5.4.3 Resumen. ..................................................... 185

APNDICE A: Protocolo I
2
C........................................................................................ 187
A.1 Introduccin......................................................................................... 187
A.2 Inicializacin y fin de transferencia de datos....................................... 187
A.3 Direccionamiento de dispositivos en I
2
C............................................. 188
A.4 Reconocimiento de transferencia......................................................... 189



Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
1


Captulo 1. Introduccin a los microcontroladores.


1.1 Qu es un microcontrolador?

Hace unos aos, los sistemas de control se implementaban usando exclusivamente lgica de
componentes, lo que haca que fuesen dispositivos de gran tamao y muy pesados. Para
facilitar una velocidad ms alta y mejorar la eficiencia de estos dispositivos de control, se
trat de reducir su tamao, apareciendo as los microprocesadores. Siguiendo con el proceso
de miniaturizacin, el siguiente paso consisti en la fabricacin de un controlador que
integrase todos sus componentes en un slo chip. A esto es a lo que se le conoce con el
nombre de microcontrolador, un computador dentro de un slo chip.

Las principales caractersticas que diferencian a un microcontrolador de un microprocesador
son:
1. Son sistemas cerrados, ya que contiene todos los elementos de un computador en
un solo chip, frente a los microprocesadores que son sistemas abiertos, ya que
sacan las lneas de los buses de datos, direcciones y control al exterior, para la
conexin de memorias, interfaces de E/S, etc.
2. Son de propsito especfico, es decir, son programados para realizar una nica
tarea, mientras que los microprocesadores son de propsito general.

La historia de los microcontroladores surge desde dos vas de desarrollo paralelas; una desde
Intel y otra desde Texas Instruments. Los primeros microcontroladores son el 4004 y 4040 de
Intel que dieron lugar al 8048, a su vez predecesor del 8051. An as el primer
microcontrolador fue el TMS1000 de Texas Instruments. ste integraba un reloj, procesador,
ROM, RAM, y soportes de E/S en un solo chip.



Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
2
Un microcontrolador, tpicamente consta de:
-CPU o procesador.- Es el cerebro del sistema que procesa todos los datos que viajan a
lo largo del bus.
-Memorias.- Est formada por una no voltil (ROM, EEPROM, FLASH) donde se
almacenan los programas y una voltil (RAM) donde se almacenan los datos.
-Reloj principal.- Normalmente todos los microcontroladores tienen incorporados
circuitos osciladores para el funcionamiento de stos.
-Puertos E/S (Entrada/Salida).- Soportan las lneas que comunican al microcontrolador
con los perifricos externos.
-Perro guardin o Watchdog.- Contador que resetea al microcontrolador cada vez que
rebosa. Sirve para evitar fallos de funcionamiento, por lo que hay que
inicializarlo peridicamente antes de que rebose.
-Proteccin ante fallo de alimentacin o Browout.- Circuito que resetea al
microcontrolador cuando la tensin de alimentacin baja de un cierto lmite.
-Temporizadores.- Para controlar periodos de tiempo.
-Convertidores A/D y D/A. (Analgico/Digital y Digital/Analgico)
-Comparadores analgicos
-Moduladores de anchura de impulsos.
-Puertos de comunicacin.- Tanto serie como paralelo.
-Control de interrupciones

Debido a que los microcontroladores slo incluyen las caractersticas especficas para una
tarea, su coste es relativamente bajo. Un microcontrolador tpico realiza funciones de
manipulacin de instrucciones, posee E/S de accesos fciles y directos, y un proceso de
interrupciones rpido y eficiente. Adems tambin reducen de manera notable los costes de
diseo. Hay gran variedad de microcontroladores. Dependiendo de la potencia y
caractersticas que se necesiten, se pueden elegir microcontroladores de 4, 8, 16 32 bits.
Adems existen versiones especializadas que incluyen mdulos especiales para
comunicaciones, teclados, procesamiento de seales, procesamiento de video, y otras tareas.




Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
3

1.2 Aplicaciones

El mercado de los microcontroladores est creciendo cada ao y parece no tener barreras. Los
microcontroladores a menudo se encuentran en aplicaciones domsticas ( microondas,
refrigeradores, televisin, equipos de msica), ordenadores con sus componentes (impresoras,
mdems, lectores de discos), coches (ingeniera de control, diagnostico, control de
climatizacin), control medioambiental (invernaderos, fabricas, casas), instrumentacin,
aeronutica, y miles de usos ms. En muchos podemos encontrar ms de un microcontrolador.

Los microcontroladores son muy usados en robtica, donde la comunicacin entre
controladores es una gran ventaja. Esto hace posible muchas tareas especficas al distribuir un
gran nmero de microcontroladores por todo el sistema. La comunicacin entre cada
microcontrolador y uno central permitira procesar la informacin por un ordenador central, o
transmitirlo a otros microcontroladores del sistema.

Otro ejemplo de aplicacin de los microcontroladores, es la de utilizarlos para monitorizar y
gravar parmetros medioambientales (temperatura, humedad, precipitaciones, etc.). Pequeo
tamao, bajo consumo de potencia, y flexibilidad hacen de este dispositivo ideal para este tipo
de aplicaciones.

1.3 Los microcontroladores PIC (Microchip)

Los microcontroladores PIC fueron los primeros microcontroladores RISC, es decir,
microcontroladores con un juego de instrucciones reducido. El hecho de ser procesadores de
tipo RISC generalmente implica simplicidad en los diseos, permitiendo ms caractersticas a
bajo coste.

Los principales beneficios de esta simplicidad en el diseo son que los microcontroladores se
implementan en chip muy pequeos, con pocos pines, y tienen un consumo de potencia muy
bajo.


Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
4

Los microcontroladores PIC ganaron popularidad rpidamente. Aparecan con frecuencia en
revistas de ocio, y su uso era cada vez mayor en gran nmero de diseos. Debido a su bajo
costo, pequeo tamao, y bajo consumo, estos microcontroladores pueden ahora ser usados en
reas en las que previamente no habran sido apropiados (tal como circuitos lgicos).

Las principales caractersticas de los PIC son:

-Arquitectura Harvard.- Consiste en la existencia de dos memorias independientes,
una de datos y otra de instrucciones, con sus respectivos buses. Esto permite el
acceso simultaneo al programa y los datos, y solapar algunas operaciones para
mejorar el proceso.
-Segmentacin de instrucciones.- Consiste en dividir la ejecucin de las
instrucciones en varias fases, en el caso concreto de los PIC dos fases, de
manera que se realizan simultneamente distintas fases de distintas
instrucciones. As cada instruccin se ejecuta en un ciclo de instruccin (4
ciclos de reloj), excepto las de salto que ocupan tantos ciclos de instruccin
como necesite para calcular la direccin de salto.
-Formato de instrucciones de longitud constante.- Permite optimizar la memoria de
instrucciones y el diseo de ensambladores y compiladores.
-RISC (computador de reducido juego de instrucciones)
-Instrucciones ortogonales.- Todas las instrucciones pueden manejar cualquier
elemento de la arquitectura como fuente o destino.
-Arquitectura basada en un banco de registros.- Todos los objetos del sistema se
encuentran implementados fsicamente como registros.
-Gran variedad de microcontroladores y muchas herramientas de soporte.







Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
5

1.4 Las gamas de los PIC

La forma de designacin de los PIC en general obedece a la siguiente estructura:

PIC nn LLL xxx

Siendo :
nn un nmero propio de la gama del PIC.
LLL cdigo de letras donde la primera indica la tensin de alimentacin y las otras
dos el tipo de memoria que utiliza. En la tabla 1.1 se puede ver las distintas
opciones que se pueden dar.

TABLA 1.1 Nomenclatura de los PIC.
LETRAS ALIMENTACIN MEMORIA
C Standard (4.5-6.0 V) EPROM
CR Standard (4.5-6.0 V) ROM
F Standard (4.5-6.0 V) FLASH
LC Extendida (2.5-6.0 V) EPROM
LCR Extendida (2.5-6.0 V) ROM
LF Extendida (2.0-6.0 V) FLASH
xxx nmero que indica el modelo.

Los PIC se clasifican en distintas gamas atendiendo a los recursos disponibles en cada uno de
ellos. Las gamas son:
a) Gama Enana (PIC12Cxxx): La principal caracterstica es que son muy pequeos,
con encapsulados de 8 pines, y un juego de 33 instrucciones de 12 bits.
b) Gama Baja (PIC16C5xx): Los encapsulados son de 18, 20 28 pines. Al igual
que en los anteriores el nmero de instrucciones es de 33 con un ancho de 12 bits.
La memoria de programa es de 512 palabras, 1K 2K, y la de datos est
comprendida entre 25 y 73 bytes. No permite interrupciones.





Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
6

c) Gama Media (PIC16Cxxx): Es la gama ms variada y completa de los PIC, con
encapsulados desde 18 a 68 pines. Tiene un conjunto de 35 instrucciones de 14
bits de ancho. Permite adems caractersticas importantes que no soportaban los
anteriores como son:
- Interrupciones
- Pila de 8 niveles que permite anidamiento de subrutinas.
Esta familia a su vez se puede dividir en subfamilias en funcin de los recursos de
que se dispongan.
d) Gama Alta (PIC17Cxxx): Tienen unas caractersticas muy diferentes a las
anteriores, ya que son microcontroladores de arquitectura abierta, es decir, que
sacan sus buses al exterior.
El nmero de instrucciones es de 58 con una anchura de 16 bits. Tienen
instrucciones vectorizadas.
e) Gama Mejorada (PIC18Cxxx): Es la ltima gama que ha salido. Tiene memoria
de programa de hasta 1M palabras. La mayora de las instrucciones son de 16 bits,
aunque las hay tambin de 32 bits. El nmero total de instrucciones es de 76.
Esta gama est diseada para aplicaciones de control. Todos ellos tienen
convertidores A/D y, por ejemplo, estn en fase de desarrollo algunos modelos que
tienen interface para el bus CAN.

1.5 Los PIC de la gama media.

A lo largo de este proyecto slo se hablar de los PIC de la Gama Media, siendo esta la ms
variada y completa. En la tabla 1.2 se muestran las caractersticas que definen a cada modelo
de los PIC de la Gama Media. Aparecen slo los ms significantes, ya que la variedad es muy
amplia.






Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
7

TABLA 1.2 Principales caractersticas de los PIC de la Gama Media.
Reloj Memoria Perifricos Caractersticas
M
e
m
o
r
i
a

d
e

p
r
o
g
r
a
m
a

C

p
s
u
l
a
s



M

x
i
m
a

f
r
e
c
u
e
n
c
i
a

d
e

t
r
a
b
a
j
o

E
P
R
O
M

E
E
R
O
M

M
e
m
o
r
i
a

d
e

d
a
t
o
s

(
b
y
t
e
s
)

E
E
P
R
O
M

d
e

d
a
t
o
s

(
b
y
t
e
s
)

M

d
u
l
o
s

d
e

t
e
m
p
o
r
i
z
a
c
i

n

M

d
u
l
o
s

C
C
P

P
u
e
r
t
o
s

s
e
r
i
e

P
u
e
r
t
o

P
a
r
a
l
e
l
o

C
o
n
v
e
r
t
i
d
o
r

A
/
D

d
e

8

b
i
t
s

C
o
m
p
a
r
a
d
o
r
e
s

T
e
n
s
i

n

i
n
t
e
r
n
a

d
e

r
e
f
e
r
e
n
c
i
a

F
u
e
n
t
e
s

d
e

i
n
t
e
r
r
u
p
c
i

n

P
a
t
i
l
l
a
s

d
e

E
/
S

R
a
n
g
o

d
e

v
o
l
t
a
j
e

(
v
o
l
t
i
o
s
)

D
e
t
e
c
t
o
r

d
e

f
a
l
l
o

e
n

V
D
D

B
r
o
w
n
-
o
u
t


P
i
n
e
s

D
I
P

P
i
n
e
s

P
L
C
C

P
i
n
e
s

Q
F
P

PIC16C61 20 1K --- 36 --- TMR0 -- --- -- -- -- -- 3 13
3,0-
6,0
--- 18 18 --
PIC16C62 20 2K --- 128 ---
TMR0,TMR1
,TMR2
2 SPI/I
2
C/SCI -- -- -- -- 10 22
2,5-
6,0
--- 28 28 --
PIC16C63 20 4K --- 192 ---
TMR0,TMR1
,TMR2
2 SPI/I
2
C/SCI --- -- -- -- 10 22
3,0-
6,0
--- 28 28 --
PIC16C64 20 2K --- 128 ---
TMR0,TMR1
,TMR2
1 SPI/I
2
C Si -- -- -- 8 33
3,0-
6,0
--- 40 44 44
PIC16C65 20 4K --- 192 ---
TMR0,TMR1
,TMR2
2 SPI/I
2
C/SCI Si -- -- -- 11 33
3,0-
6,0
--- 40 44 44
PIC16C620 20 512 --- 80 --- TMR0 -- ---- -- -- 2 Si 4 13
3,0-
6,0
Si 18 18 20
PIC16C621 20 1K --- 80 --- TMR0 -- ---- -- -- 2 Si 4 13
3,0-
6,0
Si 18 18 20
PIC16C622 20 2K --- 128 --- TMR0 -- ---- -- -- 2 Si 4 13
3,0-
6,0
Si 18 18 20
PIC16C71 20 1K --- 36 --- TMR0 -- ---- -- 4ch -- -- 4 13
3,0-
6,0
--- 18 18 --
PIC16C73 20 4K --- 192 ---
TMR0,TMR1
,TMR2
2 SPI/I
2
C/SCI -- 5ch -- -- 11 22
3,0-
6,0
--- 28 28 --
PIC16C74 20 4K --- 192 ---
TMR0,TMR1
,TMR2
2 SPI/I
2
C/SCI Si 8ch -- -- 12 33
3,0-
6,0
--- 40 44 44
PIC16C76 20 8K --- 368 ---
TMR0,TMR1
,TMR2
2 SPI/I
2
C/SCI -- 5ch -- -- 11 22
2,5-
6,0
Si 28 28 --
PIC16C84 20 -- 1K 36 64 TMR0 -- ---- -- -- -- -- 4 13
3,0-
6,0
--- 18 18 --


A continuacin en la figura 1.1 se muestran algunos de los encapsulados utilizados en los PIC
de la Gama Media. Como ya se ha dicho anteriormente, stos van desde los 18 a 68 pines.


Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
8

Figura 1.1 Principales diagramas de patillas.

La descripcin de las funciones de las distintas patillas del microcontrolador son:
RA0/AN0-RA2/AN2: Lneas de E/S digitales del Puerto A, o entradas analgicas.
RA3/AN3/V
REF
: E/S digital, analgica o entrada externa de V
REF
.
RA4/T0CKI: E/S digital o entrada de reloj externo para TMR0.
RA5/AN4/ SS : E/S digital, analgica o seleccin del puerto sncrono.
RB0/INT-RB7: E/S digitales del Puerto B. RB0/INT puede actuar como entrada de
interrupcin externa. RB4-Rb7 pueden provocar una interrupcin cuando cambian de
estado.
RC0/T1OSO/T1CKI: E/S digital del Puerto C. Conexin del oscilador externo para
el temporizador TMR1 o entrada de reloj para el TMR1.


Microcontroladores PIC de la Gama Media. 1. Introduccin a los Microcontroladores

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
9
RC1/T1OSI/CCP2: E/S digital. Conexin del oscilador externo para el TMR1 o
salida del mdulo 2 de captura/comparacin.
RC2/CCP1: E/S digital. Salida del mdulo 1 de captura/comparacin.
RC3/SCK/SCL: E/S digital. E/S de reloj para el Puerto Serie Sncrono (SSP) en los
mdulos SPI o I
2
C.
RC4/SDI/SDA: E/S digital. Entrada de datos serie en el modo SPI. E/S de datos serie
en el modo I
2
C.
RC5/SDO: E/S digital. Salida de datos serie en el modo SPI.
RC6/TX/CK: E/S digital. Transmisin serie asncrona. Entrada de reloj para
comunicacin serie sncrona.
RC7/RX/DT: E/S digital. Recepcin serie asncrona. Lnea de datos en la
comunicacin serie sncrona.
RD0/PSP0-RD7/PSP7: E/S digitales del Puerto D. Este puerto puede trabajar como
puerto paralelo esclavo para interconexin con un bus de datos de 8 bits de otro
microprocesador.
RE0/ RD/AN5: E/S digital del Puerto E. Seal de lectura del puerto paralelo esclavo.
Entrada analgica.
RE1/ WR/AN6: E/S digital. Seal de escritura del puerto paralelo esclavo. Entrada
analgica.
RE2/ CS /AN7: E/S digital. Seal de activacin del puerto paralelo esclavo. Entrada
analgica.



Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
11

Captulo 2. La Arquitectura de los PIC de la Gama Media.


2.1 Introduccin

Desde el punto de vista de la arquitectura, la caracterstica ms importante de los PIC es que
utilizan la Harvard, frente a la Von Neumann que es la habitual.

La arquitectura Harvard tiene la memoria de programa y la memoria de datos separadas y se
accede a ellas mediante buses distintos. Esto mejora el ancho de banda sobre la tradicional
arquitectura secuencial, en la cual los programas y datos son buscados en la misma memoria,
utilizando el mismo bus. En la arquitectura Harvard mientras se accede a la memoria de
programa, sobre la memoria de datos se puede estar leyendo o escribiendo, lo que permite
ejecutar una instruccin a la vez que se busca la siguiente.

En la figura 2.1 se muestra el esquema de la arquitectura general de los PIC de la Gama
Media.

Adems de las caractersticas antes mencionadas, otras caractersticas que poseen los PIC de
la Gama Media son:
a) Memoria no voltil de programa de hasta 8K x 14 de tamao, direccionada por el
contador de programa (PC) de 13 bits.
b) Memoria RAM de datos de hasta 368 x 8 de tamao, direccionada por el cdigo de
operacin o por el registro FSR y parte del registro STATUS.
c) Unidad aritmtico-lgica de 8 bits con un registro acumulador de trabajo asociado
tambin de 8 bits. Realiza operaciones aritmticas y lgicas utilizando siempre
como operando el registro acumulador y otro dato perteneciente a cualquier
registro. Realiza operaciones de suma, resta y desplazamiento. Opera en
complemento a 2 (C2). Dependiendo del resultado, afecta a algunos bits del
registro de estado.


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
12

Figura 2.1 Diagrama de bloques general de los PIC de la gama media.
Nota 1: Los bits de mayor orden en el direccionamiento directo de la RAM se obtienen del Registro de Estado.
2: No todos los dispositivos tienen estas caractersticas, habr que consultar las hojas de caractersticas.
3: Muchos de los pines de las puertas E/S de propsito general estn multiplexadas con una o ms
funciones de los mdulos perifricos. La combinacin de las funciones multiplexadas dependen del
dispositivo.


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
13

d) Oscilador encargado de las generaciones de tiempo del sistema.
e) Circuitos controladores del RESET.
f) Puertos E/S. Existen hasta 7 puertos de E/S, aunque no existe ningn dispositivo
que los implemente todos. Adems se multiplexan con distintos elementos del
sistema.
g) Mdulos perifricos. Son la caracterstica que diferencia a los distintos
microcontroladores. stos facilitan la comunicacin con el mundo exterior, tal
como las E/S de propsito general, y tareas internas tal como puede ser la
generacin de las distintas bases de tiempo. Los perifricos sobre los que se est
hablando son; E/S de propsito general, hasta tres temporizadores, mdulo de
captura, comparacin, y PWM (CCP), puerto serie sncrono (SSP), USART (SCI),
mdulo para generacin de voltajes de referencia, mdulos comparadores
analgicos, conversores analgico digital (A/D), mdulo para control de Display
de cristal lquido (LCD) y puerto paralelo esclavo (PSP).
h) Registros generales del sistema.

2.2 Organizacin de la memoria.

La memoria de los PIC est dividida en dos bloques; la memoria de programa y la memoria
de datos. Cada uno de los bloques tiene su propio bus, pudiendo tener acceso a ambos bloques
de memoria en el mismo ciclo de reloj.

2.2.1 Organizacin de la memoria de programa.

En los PIC de la gama media el contador de programa es de 13 bits, con lo que se puede
direccionar una capacidad de memoria de 8K x 14 palabras. El ancho de la memoria de
programa va a ser la longitud de una instruccin que es de 14 bits, por lo se podrn almacenar
hasta 8K instrucciones. De esta forma es fcil determinar si el dispositivo tiene suficiente
memoria de programa para una aplicacin deseada.



Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
14
Esta memoria de programa a su vez est dividida en cuatro pginas de 2K palabras cada una
(0h 7FFh, 800h FFFh, 1000h 17FFh, y 1800h 1FFFh). En la figura 2.2 se muestra el
mapa de memoria con la pila de 8 niveles. No todos los dispositivos tienen implementados
estos cuatro bancos.


Figura 2.2 Organizacin de la memoria de programa y la pila.

Para realizar los saltos entre las pginas de la memoria de programa se utilizan los tres bits
ms altos del contador de programa (PC <11:12>), los cuales son implementados fsicamente
en la memoria de datos en el registro PCLATCH <4:3>. Si el programa se ejecuta
secuencialmente no es necesario modificarlo.

Dentro de la memoria de programa existen dos direcciones reservadas:
1. Vector de Reset .- En un dispositivo, un reset pone el contador de programa (PC)
a cero. A esta direccin se la denomina Direccin del Vector de Reset, donde


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
15
est la direccin de inicio para la ejecucin del programa. Cualquier reset borrar
tambin el contenido del registro PCLATH, de modo que cuando se produzca un
reset la direccin inicial a de estar localizada en la pgina 0 de la memoria de
programa.
2. Vector de Interrupcin .- Cuando una interrupcin es reconocida el PC es
forzado a la direccin 0004h. A esto es a lo que se le llama Direccin del Vector
de Interrupcin. Cuando el PC es forzado con la direccin del vector de
interrupcin, el PCLATH no es modificado. Por eso mismo en la direccin del
vector de interrupcin, el registro PCLATH debera ser escrito con el valor que
especificar la localizacin deseada en la memoria de programa. Antes de realizar
esta operacin, el PCLATH debera ser salvado para volverlo a restaurar al
terminar el tratamiento de la rutina de interrupcin.

El contador de programa (PC) es un registro que especifica la direccin de la instruccin que
ha de ser ejecutada. El PC tiene un ancho de 13 bits, correspondiendo el byte ms bajo con el
registro de lectura-escritura PCL, implementado en la memoria de datos, y el byte ms alto
con el registro PCH. Este ltimo contiene slo los bits <12:8> del PC y no se puede leer ni
escribir directamente, sino que son cargados a travs del PCLATH.

Existen varias instrucciones que modifican el flujo normal del sistema, y por tanto afectan al
PC. Estas instrucciones son:

1. Instrucciones de salto relativo: Son aquellas instrucciones que usan como
operando destino al PC. En estas instrucciones se cargan los 8 bits menos
significativos desde la UAL. El resto de los bits que coinciden con los del
PCLATH, habra que modificarlos manualmente.

2. Instruccin GOTO de salto incondicional: Carga desde el cdigo de operacin
los 11 bits menos significativos. Los dos que quedan se cargan desde el PCLATH
<4:3>. Si se hace un GOTO a una direccin que est en una pgina distinta,
primero hay que modificar estos bits del PCLATH.


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
16
3. Instruccin CALL de salto a subrutina: Es igual que la anterior con la diferencia
de que antes de modificar el PC, el valor que tuviese se lleva a la pila.
4. Instrucciones RETURN, RETLW y RETFIE de retornos de subrutinas y rutinas
de tratamiento de interrupcin: Cargan directamente en el PC el valor que se halla
guardado anteriormente en la pila. No es necesario modificar el PCLATH.

Los PIC de la Gama Media poseen una pila de 8 niveles con un ancho de 13 bits, la cual nos
permite guardar las direcciones de retorno a un programa, cuando en ste se produce un salto
a una subrutina. Esto nos da capacidad para anidar hasta 8 subrutinas producidas por
programa o mediante interrupciones. Si en la pila ya se han almacenado 8 valores, el nuevo
valor se cargar sobre el primer nivel de la pila, de modo que puede dar problemas en el
funcionamiento de un programa.

2.2.2 Organizacin de la memoria de datos.

La memoria de datos (figura 2.3) est dividida en dos partes:
a) Memoria de registros especiales (FSR Memory): Est formada por aquellos
registros que son usados por la CPU y los perifricos para controlar una operacin.
b) Memoria de propsito general: Est formada por la memoria que puede usar el
programador.

En ambos casos, est dividida hasta en 4 bancos de memoria de hasta 128 bytes, aunque
muchos de los modelos no traen implementados estos dos ltimos bancos. En algunos
modelos de PIC la memoria de propsito general, est slo implementado fsicamente en el
banco0, estando el resto de los bancos mapeados en ste.


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
17

Figura 2.3 Organizacin de la memoria de datos.
Nota 1: Los registros en negrita estn presentes en todos los dispositivos.
2: Puede que no todas las posiciones estn implementadas. Las localizaciones no implementadas se
leen como 0.



Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
18
El modo de acceso a cada uno de los bancos depender del tipo de direccionamiento que se
use.

Estos tipos de direccionamiento son:
1. Direccionamiento directo: La direccin final se obtiene con:
a. Los bits IRP1-IRP0 del registro de estado (STATUS), los cuales
seleccionan el banco de memoria.
b. Los 7 bits del cdigo de operacin, los cuales indican la posicin del dato
dentro del banco.
2. Direccionamiento indirecto: Con este tipo de direccionamiento lo que se da es la
direccin donde se encuentra la direccin del dato. Para ello se usa el registro
INDF. Al usar este registro (que no est implementado fsicamente), lo que se hace
es acceder al registro de datos FSR de 8 bits. Los 7 bits con menos peso del FSR
seleccionan la posicin dentro del banco, y el bit de mayor peso junto con el bit
IRP del registro de estado, seleccionan el banco.

Un programa que borra una zona de memoria puede ser un ejemplo de aplicacin
de direccionamiento indirecto. El programa sera como el siguiente:

BCF STATUS,IRP ; Seleccin del banco 0 de memoria.
MOVLW 0X20 ; Mueve el valor 20h al registro W
MOVWF FSR ; Carga valor de W en FSR
SIGUIENTE CLRF INDF ; Borra la posicin de memoria que marca FSR
INCF FSR,1 ; Incrementa valor del FSR
BTFSS FSR,4 ; Test del bit 4 del FSR, si es 1, no ejecuta la
; siguiente instruccin y salta.
GOTO SIGUIENTE ; Vuelve a SIGUIENTE.


Este programa ejemplo borrara la memoria de datos desde la posicin h20 hasta
h2F.






Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
19
2.2.3 Registros y recursos comunes.

2.2.3.1 Registro de Estado.

Es un registro formado por 8 bits, que contiene el estado de la UAL, del RESET y selecciona
el banco de la memoria de datos sobre la que queremos trabajar.. Por esta ltima causa, el
registro de estado se encuentra en todos los bancos, y en la misma posicin.

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

bit7 bit0
A continuacin se muestra la funcin de cada bit del registro de estado.
bit 7 IRP: Seleccin de bancos para el direccionamiento indirecto.
1 = Banco 2,3 (100h 1FFh)
0 = Banco 0,1 (00h FFh)
bit 6:5 RP1:RP0: Seleccin del banco de la memoria de datos para el
direccionamiento directo.
11 = Banco 3 (180h 1FFh)
10 = Banco 2 (100h 17Fh)
01 = Banco 1 (80h FFh)
00 = Banco 0 (00h 7Fh)
bit 4 TO: Timer Out.
1 = Tras conectar Vdd o ejecutar CLRWDT o SLEEP.
0 = Al rebasar el WDT
bit 3 PD: Power Down
1 = Tras conectar Vdd o ejecutar CLRWDT.
0 = Al ejecutar la instruccin SLEEP".
bit 2 Z: Bit de cero.
1 = El resultado de una operacin es 0.
0 = El resultado es distinto de 0.
bit 1 DC: Acarreo en el 4 bit de menos peso.
1 = Acarreo en la suma y no en la resta.
0 = Acarreo en la suma y no en la resta.
bit 0 C: Acarreo en el 8 bit.
1 = Acarreo en la suma y no en la resta.
0 = Acarreo en la suma y no en la resta.
Estos dos ltimos bits, en la suma representan lo que se conoce comnmente con acarreo, sin
embargo en la resta realizan la funcin de bit de signo (bit de Borrow), indicando que el
resultado es negativo si Borrowes 0, y positivo si es 1.


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
20
2.2.3.2 Registro de Opciones.

El registro de opciones es un registro de lectura-escritura, que contiene los bits de
configuracin del divisor de frecuencia del TMR0/WDT, de las interrupciones externas, del
TMR0, y la configuracin de las Puerta B con cargas Pull-Up.

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
RBPU INTEDG T0CS T0SE

PSA

PS2 PS1

PS0

bit7 bit0
bit 7 RBPU: Conexin de cargas Pull-Up para la Puerta B.
1 = Todas las cargas Pull-Up desconectadas.
0 = Todas las cargas Pull-Up conectadas.
bit 6 INTEDG: Tipo de flanco para la interrupcin.
1 = RB0/INT sensible a flanco ascendente.
0 = RB0/INT sensible a flanco descendente.
bit 5 T0CS: Fuente de reloj para el TMR0.
1 = Pulsos introducidos por T0CKI (contador).
0 = Pulsos de reloj interno Fosc/4 (temporizador).
bit 4 T0SE: Tipo de flanco activo del T0CKI.
1 = Incremento del TMR0 cada flanco descendente.
0 = Incremento del TMR0 cada flanco ascendente.
bit 3 PSA: Asignacin del divisor de frecuencia.
1 = Se le asigna al WDT.
0 = Se le asigna al TMR0.
bit 2-0 PS2:PS0: Valor del divisor de frecuencia.

Valor Divisin del TMR0 Divisin del WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128

Para conseguir asignar 1:1 al divisor de frecuencia en el TMR0, se le asigna el
divisor al WDT.




Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
21
2.2.3.3 Palabra de configuracin.

La Palabra de Configuracin est formada por 14 bits. Se utiliza para la seleccin de distintos
aspectos de la configuracin del dispositivo segn las necesidades de la aplicacin. Su
localizacin en la memoria de programa es la 2007h. Esta posicin no es accesible durante el
modo de funcionamiento normal, por lo que estos registros debern ser configurados en la
fase de programacin.

CP1 CP0 CP1
CP0 CP1
CP0 - BODEN CP1 CP0
PWRTE
WDTE FOSC1 FOSC0
bit13 bit0

bit 13-8 CP<1:0>: Bits de proteccin de cdigo.
5-4:





bit 7 No implementado: Su lectura es 1.
bit 6 BODEN: Deteccin del Brown-Out (Fallo de alimentacin)
1 = deteccin activada.
0 = Deteccin desactivada.
bit 3 PWRTE: Activacin del temporizador Power-Up
1 = Desactivado.
0 = Activado.
bit 2 WDTE: Activacin del Watchdog (perro guardin)
1 = Activado
0 = Desactivado.
bit 1-0 FOSC1-FOSC0: Seleccin del tipo de oscilador.
11 = Oscilador RC.
10 = Oscilador HS
01 = Oscilador XT
00 = Oscilador LP






512 1k 2k
11 Off Off Off
10 Off Off alta On
01 Off alta On alta On
00 On On On


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
22
2.3 Oscilador.

El circuito de oscilacin se utiliza para generar las seales de reloj en el sistema necesarias
para la ejecucin de instrucciones y para el funcionamiento de los perifricos.

Existen hasta ocho tipos de osciladores. Los distintos tipos permiten mayor flexibilidad del
dispositivo segn las necesidades, as los hay de muy bajo coste, como las redes RC, y otros
de bajo consumo como son los cristales de cuarzo del modo LP.

La configuracin de un oscilador u otro se realiza mediante los bits FOSC2, FOSC1 Y
FOSC0 de la palabra de configuracin. No todos los modelos poseen la posibilidad de
configurar cualquier tipo de oscilador, en estos casos slo tienen los bit FOSC1 Y FOSC0 en
la palabra de configuracin. Los valores de estos bits para la configuracin de los distintos
osciladores son los que se pueden ver en las tablas 2.1 y 2.2.

TABLA 2.1 Seleccin del modo de oscilacin con FOSC1:FOSC0.
Bits de
configuracin
FOSC1:FOSC0
Modo
OSC
Ganancia de los
inversores internos
Comentarios
11 RC
Solucin ms barata (slo requiere una resistencia y
un condensador). Mxima variacin del tiempo
base.
Modo del dispositivo por defecto
10 HS Ganancia alta
Cristal de cuarzo para aplicaciones de alta
frecuencia. Es el modo que ms potencia consume
de los tres cristales.
01 XT Ganancia media
Cristal de cuarzo para un rango de frecuencias
estndar.
00 LP Ganancia baja
Cristal de cuarzo para aplicaciones de baja
frecuencia. Es el modo que menos potencia
consume de los tres cristales.









Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
23

TABLA 2.2 Seleccin del modo de oscilacin con FOSC2:FOSC0.
Bits de
configuracin
FOSC2:FOSC0
Modo
OSC
Ganancia de
los
inversores
internos
Comentarios
111
EXTRC con
CLKOUT

Red RC externa sacando la seal de oscilacin por la
patilla CLKOUT. Solucin barata. Mxima variacin
en el tiempo base. Modo del dispositivo por defecto
110 EXTRC
Red RC externa. Barata solucin. Mxima variacin
en el tiempo base. La seal de oscilacin no sale al
exterior.
101
INTRC con
CLKOUT

Red RC interna sacando la seal de oscilacin por la
patilla CLKOUT. Es la solucin ms barata.
Oscilador de 4MHz.
100 INTRC
Red RC interna. La seal de oscilacin no sale al
exterior. Solucin ms barata. Oscilador de 4MHz.
011 Reservado
10 HS Ganancia alta
Cristal de cuarzo para aplicaciones de alta frecuencia.
Es el modo que ms potencia consume de los tres
cristales.
01 XT
Ganancia
media
Cristal de cuarzo para un rango de frecuencias
estndar.
00 LP
Ganancia
baja
Cristal de cuarzo para aplicaciones de baja frecuencia.
Es el modo que menos potencia consume de los tres
cristales.

La diferencia entre los tres ltimos viene dada por la ganancia de los inversores internos, que
son los que modifican la frecuencia. En general siempre se opta por la opcin con menor
ganancia posible que cumpla las especificaciones. Esto implicar menores corrientes y con
ello menor consumo de potencia.

En la figura 2.4 se ve el modo de conexin para resonadores de cristal o de cuarzo. En este
caso se conectan a las patillas OSC1 y OSC2, usando esta ltima como realimentacin.



Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
24


Figura 2.4 Operacin de osciladores en los modos HS, XT o LP.
Nota 1: La resistencia en serie, R
S,
es necesaria para cristales de alta tecnologa.
2: La resistencia de realimentacin, R
F
, vara entre 2 y 10 M.
3: Dependiendo del dispositivo, el buffer de la lgica interna puede estar tanto antes
como despus del inversor.

Para una red RC el modo de conexin utilizar nicamente la patilla OSC1. La frecuencia de
oscilacin depender de V
DD
, R
EXT
y de C
EXT
(figura 2.5). El fabricante recomienda que R
EXT

tenga un valor de entre 3K y 100K y que C
EXT
sea mayor de 20pF. Adems la frecuencia
del oscilador/4 se obtiene a travs de la patilla OSC2, en caso de que est configurada en los
modos EXTRC o INTRC con CLKOUT, se puede usar para sincronizacin de otras lgicas.




Figura 2.5 Operacin en modo RC.
Nota 1: Esta patilla tambin puede ser configurada como una E/S de propsito general.


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
25
Como un dispositivo incrementa su voltaje de alimentacin desde 0 hasta V
DD
, el oscilador
tardar un tiempo en funcionar correctamente. Este tiempo de comienzo o Start-Up depende
de muchos factores:
a) Para los osciladores RC depende del valor de la resistencia y condensador usado,
tiempo de subida de V
DD
, y temperatura del sistema.
b) Para los osciladores de cristales los factores que intervienen son la frecuencia del
cristal, los valores de la resistencia en serie, R
S
y de los condensadores C1 y C2, el
tiempo de subida de V
DD
, la temperatura del sistema, la seleccin del modo de
oscilador, la composicin del circuito oscilador, y el ruido del sistema.

En la figura 2.6 se muestra un ejemplo de StartUp. Se puede ver que la seal de oscilacin
est centrada en V
DD
/2, siendo el valor pico a pico durante el arranque del oscilador bastante
bajo (menos del 50% de V
DD
).



Figura 2.6 Caracterstica Start-Up de un oscilador.

Siempre que se quiera grabar un PIC es necesario consultar las hojas de caractersticas para la
configuracin del oscilador.



Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
26
2.4 Reset

La funcin del reset es la de dejar al sistema en un estado conocido. Existen varias fuentes de
RESET:
a) Power On Reset (POR).
b) Activacin de MCLR durante funcionamiento normal.
c) Activacin de MCLR en el modo de reposo
d) Desbordamiento del WDT durante funcionamiento normal.
e) Reset de Brown-Out (BOR).
f) Reset por error de paridad (PER).

La figura 2.7 se muestra un bloque simplificado de la lgica que gobierna el reset del sistema,
para un caso general.

En esta figura se puede ver una zona denominada OST/PWRT, que consiste en:
a) Power-up Timer (PWRT): Es un temporizador que proporciona un retardo de
72ms a partir de un reset de tipo POR o BOR, de tal forma que el PIC se mantiene
reseteado durante este tiempo, as al finalizar la temporizacin la tensin de
alimentacin tendr un valor aceptable. Este temporizador se habilita mediante el
bit PWRT de la palabra de configuracin. Para generar este retardo existe un
circuito interno RC dedicado.
b) Oscilador Start-Up Timer (OST): Este oscilador proporciona un retardo de 1024
veces el periodo de oscilacin (desde OSC1) despus del retardo PWRT. De esta
forma se asegura que el oscilador cristal o cermico es estable cuando el PIC
empieza a funcionar. Este retardo slo funciona cuando el PIC se ha configurado
para usar un oscilador XT, HS o LP y el reset es tipo POR, BOR o de wake-up
desde el modo de reposo (sleep).




Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
27

Figura 2.7 Lgica que gobierna el Reset de un sistema.
Nota 1: Este es un oscilador distinto al oscilador del pin CLKIN o al oscilador interno INTRC.
2: Las caractersticas que estn encerrados en cuadros no estn disponibles en todos los modelos,
ver hoja de caractersticas del dispositivo.
3: En algunos modelos, este pin puede estar configurado como entrada de propsito general.
4: En los primeros microcontroladores PIC tenan la configuracin de modo que para PWRTE =1
estuviera habilitado, mientras que el resto de los modelos, la configuracin estaba definida
para PWRTE =0.

A continuacin (tabla 2.3) se muestran los distintos retardos para las posibles situaciones en
las que se puede ver el sistema.

TABLA 2.3 Retardos tpicos segn las situaciones.
TIEMPO DE POWER-UP
CONFIGURACIN
DEL OSCILADOR
Habilitado Deshabilitado
BROWN-OUT
RESET
WAKE-UP
DESDE SLEEP
XT, HS, LP 72 ms + 1024T
OSC
1024T
OSC
72 ms + 1024T
OSC
1024T
OSC

RC 72 ms
(1)
72 ms
(1)

Nota 1: Dispositivos con oscilador Interno/Externo RC tienen un retardo de 250s.


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
28
El Power-on Reset consiste en la activacin del reset cuando se detecta la conexin de la
alimentacin al dispositivo. Dos topologas para el circuito de POR se pueden ver en la figura
2.8, siendo la primera para el caso general y la segunda para el caso en que V
DD
crezca de
forma lenta.


Nota 1: La resistencia es opcional.
Figura 2.8 Topologas para el circuito de POR.
En el segundo caso el diodo ayuda a la descarga del condensador cuando V
DD
disminuye su
valor.

Las siguientes figuras (2.9 2.12) muestran el comportamiento temporal de las seales segn
el caso.


Figura 2.9 Secuencia de Time-out en subida de alimentacin. MCLRconectado a V
DD
.



Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
29
Figura 2.10 Secuencia de Time-out en subida de alimentacin. MCLRno conectado a V
DD
.
(Caso1).


Figura 2.11 Secuencia de Time-out en subida de alimentacin. MCLRno conectado a V
DD
.
(Caso2).

Figura 2.12 Secuencia de Time-out en subida de alimentacin. MCLRconectado a V
DD

(tiempo de subida lento).


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
30
El Brown-out Reset consiste en producir un reset en el sistema cuando la tensin de
alimentacin V
DD
cae por debajo de un determinado valor, especfico para cada PIC. Los que
tengan implementados el BOR, tienen un parmetro (35), que es el tiempo mnimo que debe
estar V
DD
por debajo de la tensin de reset, para que ste se produzca. Esto asegura que el
elemento no continua la ejecucin del programa fuera de los rangos vlidos de operacin.

Este tipo de reset se puede habilitar con el bit BODEN de la Palabra de Configuracin. Una
vez que el nivel de la alimentacin se restablezca, hay un retardo de 72ms en desactivarse el
reset interno.

Algunas de las situaciones de Brown-Out Reset se muestran en la figura 2.13.


Figura 2.13 Situaciones de Brown-out Reset.

Posibles circuitos usados para un BOR, cuando el circuito no tiene internamente el detector
implementado, o cuando la tensin que venga configurada no nos interesa, se muestran en las
figuras 2.14 y 2.15.




Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
31

Figura 2.14 Circuito externo 1 de Brown-out.
Este circuito activar el reset cuando V
DD
est por debajo de (Vz + 0.7V), donde Vz
es el voltaje Zener del diodo.
Nota 1: El circuito de Brown-out Reset interno debe de estar deshabilitado
cuando se use esta configuracin.
2: Los valores de las resistencias dependen de las caractersticas del
transistor.



Figura 2.15 Circuito externo 2 de Brown-out.
Nota 1: Este circuito de BOR es ms barato, pero menos exacto. El transistor Q1 se
corta cuando V
DD
baja de cierto nivel tal como:
V 7 . 0
R2 R1
R1
VDD =
+

2: El circuito de Brown-out Reset interno debe de estar deshabilitado cuando
se use esta configuracin.
3: Los valores de las resistencias dependen de las caractersticas del
transistor.






Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
32
Debido a que existen distintas fuentes de reset, es necesario en determinadas ocasiones, saber
que tipo de reset se ha producido. Esto se hace consultando los bits POR y BOR del registro
PCON, y PD del Registro de Estado (tabla 2.4). La tabla 2.5 muestra la forma en que afecta
el Reset a los distintos registros.

TABLA 2.4 Bits de estado y su significado.
POR BOR TO PD
Tipo de Reset
0 x 1 1 Power-On Reset.
0 x 0 x
Incorrecto, TO est a 1 en POR .
0 x x 0
Incorrecto, PD est a 1 en POR .
1 0 1 1 Brown-Out Reset.
1 1 0 1 WDT Reset.
1 1 0 0 WDT Wake-Up.
1 1 u u
MCLR reset en funcionamiento normal.
1 1 1 0
MCLR reset durante SLEEP.
Legenda: u: valor anterior. x: desconocido.

TABLA 2.5 Condiciones de inicializacin de los registros especiales.
Registro
Power-On Reset
Brown-Out Reset
MCLR durante:
-funcionamiento normal
-SLEEP
WDT Reset
Wake-up desde SLEEP
mediante:
-Interrupciones
-Temporizador del WDT
ADCAPL 0000 0000 0000 0000 uuuu uuuu
ADCAPH 0000 0000 0000 0000 uuuu uuuu
ADCON0 0000 00-0 0000 00-0 uuuu uu-u
ADCON ---- -000 ---- -000 ---- -uuu
ADRES xxxx xxxx uuuu uuuu uuuu uuuu
ADTMRL 0000 0000 0000 0000 uuuu uuuu
ADMRH 0000 0000 0000 0000 uuuu uuuu
CCP1CON --00 0000 --00 0000 --uu uuuu
CCP2CON 0000 0000 0000 0000 uuuu uuuu
CCPR1L xxxx xxxx uuuu uuuu uuuu uuuu
CCPR1H xxxx xxxx uuuu uuuu uuuu uuuu
CCPR2L xxxx xxxx uuuu uuuu uuuu uuuu
CCPR2H xxxx xxxx uuuu uuuu uuuu uuuu
CMCON 00-- 0000 000000 uu-- uuuu
EEADR xxxx xxxx uuuu uuuu uuuu uuuu
EECON1 ---0 x000 ---0 q000 ---0 uuuu
EECON2 - - -
EEDATA xxxx xxxx uuuu uuuu uuuu uuuu
FSR xxxx xxxx uuuu uuuu uuuu uuuu
GPIO --xx xxxx --uu uuuu --uu uuuu
I2CADD 0000 0000 0000 0000 uuuu uuuu
I2CBUF xxxx xxxx uuuu uuuu uuuu uuuu
I2CCON 0000 0000 0000 0000 uuuu uuuu
I2CSTAT --00 0000 --00 0000 --uu uuuu
INDF - - -
INTCON 0000 000x 0000 000u uuuu uuuu

LCDCON 00-0 0000 00-0 0000 uu-u uuuu


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
33
Registro
Power-On Reset
Brown-Out Reset
MCLR durante:
-funcionamiento normal
-SLEEP
WDT Reset
Wake-up desde SLEEP
mediante:
-Interrupciones
-Temporizador del WDT
LCDD00 a LCDD15 xxxx xxxx uuuu uuuu uuuu uuuu
LCDPS ---- 0000 ---- 0000 ----uuuu
LCDPS 1111 1111 1111 1111 uuuu uuuu
OPTION_REG 1111 1111 1111 1111 uuuu uuuu
OSCCAL 0111 00-- uuuu uu-- uuuu uu--
PCL 0000 0000 0000 0000 PC+1
(2)
PCLATH ---0 0000 ---0 0000 ---u uuuu
PCON ---- --0u ---- --uu ---- --uu
PIE1 0000 0000 0000 0000 uuuu uuuu
PIE2 ---- ---0 ---- ---0 ---- ---u
PIR1 0000 0000 0000 0000 uuuu uuuu
PIR2 ---- ---0 ---- ---0 ---- ---u
PORTA --xx xxxx --uu uuuu --uu uuuu
PORTB xxxx xxxx uuuu uuuu uuuu uuuu
PORTC xxxx xxxx uuuu uuuu uuuu uuuu
PORTD xxxx xxxx uuuu uuuu uuuu uuuu
PORTE ---- -xxx ---- -uuu ---- -uuu
POTF 0000 0000 0000 0000 uuuu uuuu
PORTG 0000 0000 0000 0000 uuuu uuuu
PR2 1111 1111 1111 1111 1111 1111
PREFA 0000 0000 0000 0000 uuuu uuuu
PREFB 0000 0000 0000 0000 uuuu uuuu
RCSTA 0000 --00x 0000 --00x uuuu uuu
RCREG 0000 0000 0000 0000 uuuu uuuu
SLPCON 0011 1111 0011 1111 uuuu uuuu
SPBRG 0000 0000 0000 0000 uuuu uuuu
SSPBUF xxxx xxxx uuuu uuuu uuuu uuuu
SSPCON 0000 0000 0000 0000 uuuu uuuu
SSPADD 0000 0000 0000 0000 uuuu uuuu
SSPSTAT 0000 0000 0000 0000 uuuu uuuu
STATUS 0001 1xxx 000q quuu

uuuq quuu

T1CON --00 0000 --uu uuuu --uu uuuu
T2CON -000 0000 -000 0000 -uuu uuuu
TMR0 xxxx xxxx uuuu uuuu uuuu uuuu
TMR1L xxxx xxxx uuuu uuuu uuuu uuuu
TMR1H xxxx xxxx uuuu uuuu uuuu uuuu
TMR2 0000 0000 0000 0000 uuuu uuuu
TRIS --11 1111 --11 1111 --uu uuuu
TRISA --11 1111 --11 1111 --uu uuuu
TRISB 1111 1111 1111 1111 uuuu uuuu
TRISC 1111 1111 1111 1111 uuuu uuuu
TRISE 0000 111 0000 111 uuuu uuu
TRISF 1111 1111 1111 1111 uuuu uuuu
TRISG 1111 1111 1111 1111 uuuu uuuu
TXREG 0000 0000 0000 0000 uuuu uuuu
TXSTA 0000 010 0000 010 uuuu uuu
VRCON 000- 0000 000- 0000 uuu- uuuu
W xxxx xxxx uuuu uuuu uuuu uuuu
Legenda: u = valor anterior x = desconocido = no implementado q = depende de las condiciones


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
34
2.5 Temporizador y Perro Guardin.

En este apartado se tratar el funcionamiento del TMR0 en conjuncin con el Perro Guardin
o Watchdog.
El TMR0 en su forma general tiene las siguientes caractersticas:
a) Contador/Temporizador de 8 bits.
b) Permite su lectura y escritura.
c) La fuente de reloj se puede seleccionar, pudiendo ser externa (contador) o interna
(temporizador).
d) La fuente externa puede ser seleccionada para que acte cuando aparezca un flanco
de bajada o un flanco de subida.
e) Se puede seleccionar que se produzca una interrupcin cuando haya rebose, es
decir, pase de FFh a 00h.
f) Se le puede asignar un divisor de frecuencia de 8 bits programable.

Por otro lado el perro guardin o Watchdog (WDT) es un temporizador con un oscilador RC,
que no requiere ningn elemento externo, funcionando incluso cuando el oscilador principal
del sistema no lo hace (modo de reposo).
La habilitacin del perro guardin se realiza con el bit WDTE de la palabra de configuracin.
Si el WDT est funcionando, cuando ste rebose se producir un reset del PIC. En caso de que
el PIC en el momento del rebose del WDT se encuentre en modo de reposo, lo que se
producir es el despertar de ste, continuando la ejecucin del programa.
El periodo nominal del WDT es de 18 ms, que puede variar en funcin de la temperatura,
V
DD
, etc. (habr que ver las caractersticas elctricas). Adems si se quieren tiempos mayores
se le puede asignar el divisor de frecuencia que lo puede aumentar hasta 1:128.

Este divisor de frecuencia es el mismo que funcionar con el TMR0, con lo cual, o acta
sobre el TMR0 o sobre el WDT, pero nunca puede hacerlo sobre los dos a la vez.





Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
35
La forma de programar el divisor es con el registro de opciones:

bit 3 PSA: Asignacin del divisor de frecuencia.
1 = Se le asigna al WDT.
0 = Se le asigna al TMR0.
bit 2-0 PS2:PS0: Valor del divisor de frecuencia.
Valor Divisin del TMR0 Divisin del WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128

Para conseguir asignar 1:1 al divisor de frecuencia en el TMR0, se le asigna el
divisor al WDT.

En la figura 2.16 se puede ver el diagrama de bloques del funcionamiento del WDT y el
TMR0, con el divisor de frecuencias.


Figura 2.16 Diagrama de bloques del TMR0/WDT con el predivisor.


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
36
Como se puede ver, para el TMR0, el divisor de frecuencia acta como un prescaler, es decir,
primero divide la fuente de reloj y luego esta fuente dividida acta sobre el TMR0. Para el
WDT, sin embargo, es al revs, primero cuenta y luego acta sobre la seal, es decir, lo hace
como postscaler.

Cuando tenemos habilitado el perro guardin, para que el sistema no se resetee, se ha de
inicializar peridicamente el WDT. Esto se consigue con las instrucciones CLRWDT o
SLEEP. Adems se recomienda por parte del fabricante, que antes de modificar el postscaler
se debe ejecutar la instruccin CLRWDT, ya que si no, se puede producir el reset del PIC.

2.6 Puertas E/S.

Las puertas de E/S digital son el perifrico ms simple de todos los que aparecen en los PIC y
nos servirn para leer o escribir valores digitales desde o hacia el exterior. En algunos puertos
estos pines estn multiplexados con otras funciones alternativas (convertidores A/D, E/S
serie, etc.). En el caso que lo tengamos para esa funcin, el pin no podr funcionar como E/S
digital.

Los pines de las puertas E/S pueden ser seleccionados de forma individual para que acten
como pines de entrada o de salida, a travs de los registros TRIS, de tal forma que si
TRISX<n> es:
0 => Pin n de la puerta X acta como salida.
1 => Pin n de la puerta X acta como entrada.

Cuando se produce un reset TRIS se pone a 1, configurando as las puertas como entradas y
evitando que se active indebidamente algn dispositivo externo que estuviera conectado al
PIC.






Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
37
La configuracin tpica para las puertas E/S se ve en la figura 2.17.


Figura 2.17 Diagrama de bloques tpico de una puerta E/S.

2.7 Modo de reposo o SLEEP.

El modo de reposo o SLEEP, hace entrar al dispositivo en el estado de menor consumo de
potencia. En este modo deja de funcionar el oscilador principal, as como los temporizadores
del dispositivo, salvo el Watchdog, y adems las lneas E/S mantienen su estado. Para acceder
al modo de reposo se utiliza la instruccin SLEEP.

Para obtener el mnimo consumo habra que desconectar los perifricos y las lneas E/S
deberan conectarse a V
DD
o V
SS
.

Las formas de salir del modo de reposo son:
1. Cualquier reset del dispositivo.
2. Rebose del Watchdog (si ste est activado).


Microcontroladores PIC de la Gama Media. 2. La Arquitectura de los PIC de la Gama Media

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
38
3. Mediante cualquier interrupcin producida mientras el dispositivo est en el modo
de reposo, tal como:
a. Flanco en el pin RB0/INT.
b. Cambio de estado en lneas de puerta.
c. Comparadores.
d. Conversores A/D.
e. Overflow en TMR1.
f. LCD.
g. Interrupcin por puerto serie sncrono, SSP.
h. Mdulos de captura.

Al salir del modo de reposo se ejecuta la siguiente instruccin a SLEEP.



Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
39

Captulo 3. Juego de instrucciones de los PIC de la Gama
Media.


3.1 Introduccin.

Las caractersticas del juego de instrucciones vienen determinadas por el tipo de arquitectura
que tienen los PIC:
La arquitectura Harvard,
Conjunto de instrucciones reducido (RISC).

Esto implica que:
a) Normalmente el bus de instrucciones es mayor que el de datos. De esta forma se
obtiene una mayor eficiencia adaptando los anchos de los buses a los
requerimientos de la arquitectura y, por tanto, se optimiza el funcionamiento.
b) Las instrucciones son de una nica palabra. Debido a lo anterior se disearn
memorias de un ancho igual al cdigo de operacin de las instrucciones, pudiendo
acceder a su lectura en un solo ciclo. Adems el tamao de la memoria coincidir
con el nmero de instrucciones que podemos almacenar, a diferencia de la
arquitectura Von Neumann, en donde suele existir, de forma general, un ratio de
2:1 (siendo la memoria de 4Kbytes, aproximadamente 2Kbytes son instrucciones).
c) Segmentacin de instrucciones. Esto consiste en ejecutar las instrucciones en
distintas fases, unas con acceso a memoria de instrucciones y otras con acceso a
memoria de datos. Al poder realizarse accesos simultneos a ambas memorias,
podemos ejecutar las instrucciones en un nico ciclo de instruccin.
d) El hecho de tener pocas instrucciones facilita el aprendizaje.
e) Arquitectura basada en registros. Todos los elementos de la arquitectura, incluido
el contador de programa (PC), se encuentran mapeados en la memoria de datos,
que a su vez est implementada fsicamente como registros.


Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
40
f) Instrucciones ortogonales: Son aquellas que permiten trabajar con todos los
registros del sistema y con todos los direccionamientos existentes. Esta simetra
permite una programacin ms eficiente. En la gama media existen nicamente
dos instrucciones no orientadas a registros, que son las instrucciones CLRWDT y
SLEEP.

3.2 Flujo de instrucciones. Segmentacin.

La entrada de reloj, se divide internamente por cuatro, obtenindose cuatro seales de reloj
denominadas Q1, Q2, Q3 y Q4. Internamente, el PC se incrementa cada Q1, la instruccin es
leda de la memoria de instrucciones y almacenada en el registro de instrucciones en Q4. Esa
instruccin es decodificada y ejecutada durante los siguientes Q1-Q4.

El flujo de instrucciones y el reloj se muestran en las figuras 3.1 y 3.2. Adems, estos ciclos
son los que denominaremos periodos de oscilacin del PIC (T
osc
).


Figura 3.1 Flujo de instrucciones y reloj.

Un ciclo de instruccin consiste precisamente en estos 4 ciclos de reloj Q1-Q4, y cada una de
las fases de la instruccin ocupa un ciclo.



Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
41
Estas dos fases son:
Fase de bsqueda (Fetch): Se incrementa en Q1 el PC, se lee y se lleva en Q4 a
registro de instrucciones.
Fase de ejecucin: En Q2 se lee la memoria de datos para los operandos y en Q4 se
almacena en la memoria de datos el resultado.

Debido a que en cada una de las fases se accede a una memoria, y que los accesos a memoria
pueden solaparse, aparece la segmentacin, es decir, se ejecuta una instruccin por ciclo de
instruccin, excepto las instrucciones de salto incondicional, ya que es en la fase de ejecucin
donde se calcula la direccin destino. En este caso tarda dos ciclos de instruccin.


T
OSC
0 T
OSC
1 T
OSC
2 T
OSC
3 T
OSC
4
T
OSC
5

Buscar 1 Ejecutar 1 1. MOVLW 55h
2. MOVWF PORTB Buscar 2 Ejecutar 2
Buscar 3 Ejecutar 3 3. CALL SUB_1
4. BSF PORTA,3

Buscar 4 Detencin


Buscar SUB_1 Ejecutar SUB_1


Buscar SUB_1+1


Figura 3.2 Segmentacin de instrucciones

Existen adems las instrucciones de salto condicional, que pueden durar 1 2 ciclos en
funcin del resultado (btfss, btfsc, decfsz y incfsz).

3.3 El formato de las instrucciones.

Las instrucciones de los PIC se pueden dividir en cuatro categoras:
Instrucciones sobre registros orientadas a bytes.
Instrucciones sobre registros orientadas a bits.
Instrucciones para operaciones con literales.
Instrucciones de control.



Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
42
Todas ellas tienen un ancho de 14 bits (ancho de la memoria de programa), pero los campos
varan entre ellos.

Los formatos de los distintos tipos de instrucciones son:
Instrucciones sobre registros orientadas a bytes.
13 8 7 6 0
Cdigo de operacin d f

d = 0, resultado se almacena en el acumulador (w).
d = 1, resultado se almacena sobre el propio registro.
f = 7 bits de la direccin del registro sobre el que se realiza la operacin.
El resto de la direccin viene dada por los bits IRP1, IRP0 o IRP.

Instrucciones sobre registros orientadas a bits.
13 10 9 7 6 0
Cdigo de operacin b f

b = 3 bits que indican la posicin dentro del registro del bit a modificar.
f = 7 bits de la direccin del registro sobre el que se realiza la operacin.
El resto de la direccin viene dada por los bits IRP1, IRP0 o IRP.

Instrucciones con literales y de control.
o General.
13 8 7 0
Cdigo de operacin k (literal)

k = literal (direccionamiento inmediato).

o Instrucciones GOTO y CALL.
13 11 10 0
Cdigo de operacin k (literal)

k = 11 bits menos significativos del PC. El resto se obtiene del PCLATCH.





Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
43
3.4 Juego de instrucciones.

Primero hay que hacer algunas consideraciones:
Se puede usar cualquier registro especial como fuente o destino en una instruccin.
Si usamos el registro de Estado como registro destino, los bits C, Z y DC
obtendrn los valores propios del resultado de la operacin. Por ejemplo:
clrf STATUS ; despus de su ejecucin STATUS = 00001000
; correspondiendo ese 1 con el bit Z.


Todas las instrucciones que manipulan bit son instrucciones de tipo lectura-
modificacin-escritura, es decir, primero se lee el registro, luego se opera y por
ltimo se escribe el resultado. Esto hay que tenerlo en cuenta fundamentalmente
cuando se trabaja sobre las puertas y en stas se cambian los bits del TRIS
asociadas a ellas.

En la tabla 3.1 se especifica el significado de las distintas abreviaturas que van a ser utilizadas
posteriormente para la descripcin detallada de cada una de las instrucciones de los PIC.

TABLA 3.1 Descripcin de las abreviaturas utilizadas.
Campo Descripcin
f Direccin del registro (0x00 a 0x7F)
w Registro de trabaja (acumulador)
b Posicin de un bit de un registro (0 a 7)
k Literal, dato inmediato o direccin de una etiqueta.
x Valor indeterminado (0 1)
d
Seleccin el destino;
d = 0; el resultado se almacena en W.
d = 1; el resultado se almacena en el registro f.
dest Destino (registro W f)
TOS Nivel superior de la Pila.
PC Contador de Programa.
PCLATCH Parte alta del Contador de Programa
GIE Bit de activacin global de interrupciones.
WDT Perro guardin (Watchdog).
TO
Bit Time Out del Registro de Estado.
PD
Bit Power Down del Registro de Estado
[ ] Opciones
( ) Contenido
Se asigna a
< > Campo de bits de un registro.


Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
44
La tabla 3.2 muestra un resumen de todas las instrucciones que componen el lenguaje de
programacin de los microcontroladores PIC de la Gama Media.

TABLA 3.2 Instrucciones de la Gama Media.
INSTRUCCIONES SOBRE REGISTROS ORIENTADAS A BYTES
14 bits de la palabra de la
instruccin
Nemnicos,
Operandos
Descripcin Ciclos
MSb LSb
Bits de
Estado
afectados
ADDWF f, d Suma W y f 1 00 0111 dfff ffff C, DC, Z
ANDWF f, d Y lgica entre W y f 1 00 0101 dfff ffff Z
CLRF f Borra el registro f 1 00 0001 1fff ffff Z
CLRW - Borra el registro W 1 00 0001 0xxx xxxx Z
COMF f, d Complementa f 1 00 1001 dfff ffff Z
DECF f, d Decrementa f 1 00 0011 dfff ffff Z
DECFSZ f, d Decrementa f y salta si es 0 1 (2) 00 1011 dfff ffff
INCF f, d Incrementa f 1 00 1010 dfff ffff Z
INCFSZ f, d Incrementa f y salta si es 0 1 (2) 00 1111 dfff ffff
IORWF f, d O lgica entre W y f 1 00 0100 dfff ffff Z
MOVF f, d Mueve f 1 00 1000 dfff ffff Z
MOVWF f Mueve W a f 1 00 0000 lfff ffff
NOP - No hace nada 1 00 0000 0xx0 0000
RLF f, d Rota f a la izquierda 1 00 1101 dfff ffff C
RRF f, d Rota f a la derecha 1 00 1100 dfff ffff C
SUBWF f, d Resta W de f 1 00 0010 dfff ffff C, DC, Z
SWAPF f, d Intercambia los bytes de f 1 00 1110 dfff ffff
XORWF f, d O lgica exclusiva de W y f 1 00 0110 dfff ffff Z
INSTRUCCIONES SOBRE REGISTROS ORIENTADAS A BITS
BCF f, b Borra el bit b del registro f 1 01 00bb bfff ffff
BSF f, b Pone a 1 el bit b del registro f 1 01 01bb bfff ffff
BTFSC f, b Testea el bit, y salta si es 0 1 (2) 01 10bb bfff ffff
BTFSS f, b Testea el bit y salta si es 1 1 (2) 01 11bb bfff ffff
INSTRUCCIONES CON LITERALES Y DE CONTROL
ADDLW k Suma un literal con el W 1 11 111x kkkk kkkk C, DC, Z
ANDLW k Y lgica entre k y W 1 11 1001 kkkk kkkk Z
CALL k Salto a subrutina 2 10 0kkk kkkk kkkk
CLRWDT - Pone a cero el WDT 1 00 0000 0110 0100
TO , PD
GOTO k Salto incondicional 2 10 1kkk kkkk kkkk
IORLW k O lgica entre k y W 1 11 1000 kkkk kkkk Z
MOVLW k Mueve el literal k a W 1 11 00xx kkkk kkkk
RETFIE - Retorno de interrupcin 2 00 0000 0000 1001
RETLW k Retorno con k en W 2 11 01xx kkkk kkkk
RETURN - Retorno de subrutina 2 00 0000 0000 1000
SLEEP - Modo de reposo 1 00 0000 0110 0011
TO , PD
SUBLW k 1 11 110x kkkk kkkk C, DC, Z
XORLW k O exclusiva entre k y W 1 11 1010 kkkk kkkk Z







Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
45
3.4.1 Descripcin detallada de las instrucciones por orden alfabtico.


ADDLW Suma Literal con el W
Sintaxis: [etiqueta] ADDLW k
Operandos: 0 k 255
Operacin: (W) + k W
Flags afectados: C, DC, Z
Cdigo OP: 11 111x kkkk kkkk
Descripcin: El contenido del registro W se suma con los ocho bits del literal
k, almacenando el resultado en W.
Ejemplo
ADDLW 0X15
Antes de la instruccin W = 0x10
Despus de la instruccin W= 0x25




ADDWF Suma W y el registro f
Sintaxis: [etiqueta] ADDWF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (W) + (f) dest
Flags afectados: C, DC, Z
Cdigo OP: 00 0111 dfff ffff
Descripcin: Suma el contenido del registro W y el registro f. Si d es 0,
el resultado se almacena en el registro W, mientras que si es 1
se almacena en el registro f.
Ejemplo:
ADDWF FSR, 0
Antes de la instruccin W = 0x17
FSR = 0xC2
Despus de la instruccin W = 0xD9
FSR = 0xC2








Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
46

ANDLW Y lgica entre Literal y W
Sintaxis: [etiqueta] ANDLW k
Operandos: 0 k 255
Operacin: (W) AND (k) W
Flags afectados: Z
Cdigo OP: 11 1001 kkkk kkkk
Descripcin: Realiza la operacin lgica AND entre el registro W y los ocho
bits del literal k. El resultado se almacena en el registro W.
Ejemplo:
ANDLW 0x5F
Antes de la instruccin W = 0xA3 ;0101 1111 (0x5F)
Despus de la instruccin W = 0x03 ;1010 0011 (0xA3)
;0000 0011 (0x03)





ANDWF Y lgica entre W y f
Sintaxis: [etiqueta] ANDWF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (W) AND (f) dest
Flags afectados: Z
Cdigo OP: 00 0101 dfff ffff
Descripcin: Realiza la operacin lgica AND entre W y el registro f. Si
d es 0, el resultado se almacena en el registro W, mientras
que si es 1 se almacena en el registro f.
Ejemplo:
ANDWF FSR, 1
Antes de la instruccin W = 0x17 ;0001 0111 (0x17)
FSR = 0xC2 ;1100 0010 (0xC2)
Despus de la instruccin W = 0x17 ;0000 0010 (0x02)
FSR = 0x02









Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
47

BCF Borra un bit
Sintaxis: [etiqueta] BCF f, b
Operandos: 0 f 127
0 b 7
Operacin: 0 f<b>
Flags afectados: Ninguno
Cdigo OP: 01 00bb bfff ffff
Descripcin: Borra el bit b del registro f.
Ejemplo:
BCF FLAG_REG, 7
Antes de la instruccin FLAG_REG = 0xC7 ;1100 0111
Despus de la instruccin FLAG_REG = 0x47 ;0100 0111





BSF Pone a 1 un bit
Sintaxis: [etiqueta] BSF f, b
Operandos: 0 f 127
0 b 7
Operacin: 1 f<b>
Flags afectados: Ninguno
Cdigo OP: 01 01bb bfff ffff
Descripcin: Pone a 1 el bit b del registro f.
Ejemplo:
BSF FLAG_REG, 7
Antes de la instruccin FLAG_REG = 0x0A ;0000 1010
Despus de la instruccin FLAG_REG = 0x8A ;1000 1010











Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
48

BTFSC Testeo de bit y salto si es 0
Sintaxis: [etiqueta] BTFSC f, b
Operandos: 0 f 127
0 b 7
Operacin: Salta si (f<b>) = 0
Flags afectados: Ninguno
Cdigo OP: 01 10bb bfff ffff
Descripcin: Si el bit b del registro f es 0, se salta una instruccin y se
continua con la ejecucin.
Ejemplo:
AQU BTFSC FLAG, 4
FALSO GOTO REPETIR
VERDAD ..........
..................................
Antes de la instruccin PC = direccin de AQU
Despus de la instruccin Si FLAG, 4 =0
PC = direccin de VERDAD
Si FLAG, 4 = 1
PC = direccin de FALSO


BTFSS Testeo de bit y salto si es 1
Sintaxis: [etiqueta] BTFSS f, b
Operandos: 0 f 127
0 b 7
Operacin: Salta si (f<b>) = 1
Flags afectados: Ninguno
Cdigo OP: 01 11bb bfff ffff
Descripcin: Si el bit b del registro f es 1, se salta una instruccin y se
continua con la ejecucin.
Ejemplo:
AQU BTFSS FLAG, 4
FALSO GOTO REPETIR
VERDAD ..........
..................................
Antes de la instruccin PC = direccin de AQU
Despus de la instruccin Si FLAG, 4 =1
PC = direccin de VERDAD
Si FLAG, 4 = 0
PC = direccin de FALSO






Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
49

CALL Salto a subrutina
Sintaxis: [etiqueta] CALL k
Operandos: 0 k 2047
Operacin: (PC) + 1 TOS,
k PC<10:0>,
(PCLATCH<4:3>) PC<12:11>
Flags afectados: Ninguno
Cdigo OP: 10 0kkk kkkk kkkk
Descripcin: Salto a subrutina. Primero se guardan en la pila los 13 bits de
la direccin de retorno (PC + 1). Despus se carga en el PC los
11 bits del inmediato k, los dos bits ms significativos los
proporciona el PCLATCH<4:3>. CALL tarda dos ciclos de
instruccin en ejecutarse.
Ejemplo:
PROGRAMA CALL SUBRUTINA
Antes de la instruccin PC =direccin de PROGRAMA
Despus de la instruccin TOS = direccin de PROGRAMA + 1
PC = direccin de SUBRUTINA


CLRF Borra un registro f
Sintaxis: [etiqueta] CLRF f
Operandos: 0 f 127
Operacin: 00h f
1 Z
Flags afectados: Z
Cdigo OP: 00 0001 1fff ffff
Descripcin: Se borra el contenido del registro f y el flag Z de estado se
activa.
Ejemplo:
CLRF FLAG_REG
Antes de la instruccin FLAG_REG = 0x5A
Despus de la instruccin FLAG_REG = 0x00
Z = 1









Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
50

CLRW Borra el registro W
Sintaxis: [etiqueta] CLRW
Operandos: Ninguno
Operacin: 00h W
1 Z
Flags afectados: Z
Cdigo OP: 00 0001 1xxx xxxx
Descripcin: Se borra el contenido del registro W y el flag Z de estado se
activa.
Ejemplo:
CLRW
Antes de la instruccin W = 0x5A
Despus de la instruccin W = 0x00
Z = 1





CLRWDT Borra el Watchdog
Sintaxis: [etiqueta] CLRWDT
Operandos: Ninguno
Operacin: 00h WDT
0 predivisor del WDT
1 TO


1 PD
Flags afectados: TO
,
PD
Cdigo OP: 00 0000 0110 01000
Descripcin: Se borra el contenido tanto del Watchdog como de su
predivisor. Los bits TOy PDdel Registro de Estado se ponen
a 1.
Ejemplo:
CLRWDT
Antes de la instruccin Temporizador WDT = x
Predivisor WDT = 1:128
Despus de la instruccin Temporizador WDT = 0x00
Registro predivisor WDT = 0
TO = 1
PD = 1
Predivisor WDT = 1:128





Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
51

COMF Complementa el registro f
Sintaxis: [etiqueta] COMF f, d
Operandos: 0 f 127
d [0, 1]
Operacin:
( f ) dest
Flags afectados: Z
Cdigo OP: 00 1001 dfff ffff
Descripcin: Complementa el contenido del registro f. Si d es 0, el
resultado se almacena en el registro W, mientras que si es 1 se
almacena en el registro f.
Ejemplo:
COMF REG1, 0
Antes de la instruccin REG1 = 0x13
Despus de la instruccin REG1 = 0x13
W = 0xEC






DECF Decrementa el registro f
Sintaxis: [etiqueta] DECF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (f) - 1 dest
Flags afectados: Z
Cdigo OP: 00 0011 dfff ffff
Descripcin: Decrementa el contenido del registro f. Si d es 0, el
resultado se almacena en el registro W, mientras que si es 1 se
almacena en el registro f.
Ejemplo:
DECF CONT, 1
Antes de la instruccin CONT = 0x01
Z = 0
Despus de la instruccin CONT = 0x00
Z = 1









Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
52

DECFSZ Decrementa el registro f y salta si es 0
Sintaxis: [etiqueta] DECFSC f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (f) 1 dest; salta si el resultado es 0
Flags afectados: Ninguno
Cdigo OP: 00 1011 dfff ffff
Descripcin: Decrementa el contenido del registro f. Si d es 0, el
resultado se almacena en el registro W, mientras que si es 1 se
almacena en el registro f. Si el resultado es 0, se salta la
siguiente instruccin y se continua con la ejecucin.
Ejemplo:
RESTA DECFSZ CONT, 1
GOTO LAZO
CONTINUAR ...........
..............................................
Antes de la instruccin PC = direccin de RESTA
CONT = 0x01
Despus de la instruccin CONT = 0x00
PC = direccin de CONTINUAR


GOTO Salto Incondicional
Sintaxis: [etiqueta] GOTO k
Operandos: 0 k 2047
Operacin: k PC<10:0>
PCLATCH<4:3> PC<12:11>
Flags afectados: Ninguno
Cdigo OP: 10 1kkk kkkk kkkk
Descripcin: Salto incondicional. Se carga en el PC<10:0> los 11 bits del
inmediato k. Los dos bits restantes los proporciona el
PCLATCH<4:3>. GOTO tarda dos ciclos de instruccin en
ejecutarse.
Ejemplo:
GOTO SALTO
Despus de la instruccin PC = direccin SALTO











Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
53

INCF Incrementa el registro f
Sintaxis: [etiqueta] INCF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (f) + 1 dest
Flags afectados: Z
Cdigo OP: 00 1010 dfff ffff
Descripcin: Incrementa el contenido del registro f. Si d es 0, el
resultado se almacena en el registro W, mientras que si es 1 se
almacena en el registro f.
Ejemplo:
INCF CONT, 1
Antes de la instruccin CONT = 0xFF
Z = 0
Despus de la instruccin CONT = 0x00
Z = 1




INCFSZ Incrementa el registro f y salta si es 0
Sintaxis: [etiqueta] INCFSC f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (f) + 1 dest; salta si el resultado es 0
Flags afectados: Ninguno
Cdigo OP: 00 1111 dfff ffff
Descripcin: Incrementa el contenido del registro f. Si d es 0, el
resultado se almacena en el registro W, mientras que si es 1 se
almacena en el registro f. Si el resultado es 0, se salta la
siguiente instruccin y se continua con la ejecucin.
Ejemplo:
SUMA INCFSZ CONT, 1
GOTO LAZO
CONTINUAR ...........
..............................................
Antes de la instruccin PC = direccin de RESTA
CONT = 0xFF
Despus de la instruccin CONT = 0x00
PC = direccin de CONTINUAR





Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
54

IORLW O lgica entre Literal y W
Sintaxis: [etiqueta] IORLW k
Operandos: 0 k 255
Operacin: (W) OR (k) W
Flags afectados: Z
Cdigo OP: 11 1000 kkkk kkkk
Descripcin: Realiza la operacin lgica OR entre el registro W y los ocho
bits del literal k. El resultado se almacena en el registro W.
Ejemplo:
ANDLW 0x35
Antes de la instruccin W = 0x9A
Despus de la instruccin W = 0xBF
Z = 0





IORWF O lgica entre W y f
Sintaxis: [etiqueta] IORWF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (W) OR (f) dest
Flags afectados: Z
Cdigo OP: 00 0100 dfff ffff
Descripcin: Realiza la operacin lgica OR entre W y el registro f. Si
d es 0, el resultado se almacena en el registro W, mientras
que si es 1 se almacena en el registro f.
Ejemplo:
IORWF REG, 0
Antes de la instruccin REG = 0x13
W = 0x91
Despus de la instruccin REG = 0x13
W = 0x93
Z = 0








Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
55

MOVLW Mueve un Literal a W
Sintaxis: [etiqueta] MOVLW k
Operandos: 0 k 255
Operacin: k W
Flags afectados: Ninguno
Cdigo OP: 11 00xx kkkk kkkk
Descripcin: El registro W se carga con el valor de los ocho bits del literal
k.
Ejemplo:
MOVLW 0x5A
Despus de la instruccin W = 0x5A










MOVF Mover a f
Sintaxis: [etiqueta] MOVF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (f) dest
Flags afectados: Z
Cdigo OP: 00 1000 dfff ffff
Descripcin: El contenido del registro f se mueve al destino. Si d es 0,
el resultado se almacena en el registro W, mientras que si es 1
se almacena en el registro f.
Ejemplo:
MOVF FSR, 0
Antes de la instruccin W = 0x00
FSR = 0xC2
Despus de la instruccin W = 0xC2
Z = 0








Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
56

MOVWF Mueve W al registro f
Sintaxis: [etiqueta] MOVWF f
Operandos: 0 f 127
Operacin: (W) f
Flags afectados: Ninguno
Cdigo OP: 00 0000 1fff ffff
Descripcin: Mueve el contenido del registro W al registro f.
Ejemplo:
MOVWF OPTION_REG
Antes de la instruccin OPTION_REG = 0xFF
W = 0x4F
Despus de la instruccin OPTION_REG = 0x4F
W = 0x4F






NOP No operar
Sintaxis: [etiqueta] NOP
Operandos: Ninguno
Operacin: No realiza ninguna operacin
Flags afectados: Ninguno
Cdigo OP: 00 000 0xx0 0000
Descripcin: No realiza ninguna operacin.
Ejemplo:
ETIQUETA NOP
Antes de la instruccin PC = direccin de ETIQUETA
Despus de la instruccin PC = direccin de ETIQUETA + 1











Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
57

RETFIE Retorno de rutina de interrupcin
Sintaxis: [etiqueta] RETFIE
Operandos: Ninguno
Operacin: TOS PC
1 GIE
Flags afectados: Ninguno
Cdigo OP: 00 0000 0000 1001
Descripcin: Retorno de una rutina de interrupcin. Los 13 bits de la
direccin de retorno los carga en el PC desde la pila. El bit
GIE (INTCON<7>) se pone automticamente a 1, habilitando
nuevas interrupciones. Requiere dos ciclos de instruccin para
su ejecucin.
Ejemplo:
RETFIE
Despus de la instruccin PC = TOS
GIE = 1




RETLW Retorno de subrutina con Literal en el W
Sintaxis: [etiqueta] RETLW k
Operandos: 0 k 255
Operacin: k W
TOS PC
Flags afectados: Ninguno
Cdigo OP: 11 01xx kkkk kkkk
Descripcin: El registro W se carga con los ocho bits del literal k. El PC
toma los 13 bits de la direccin de retorno del nivel superior de
la pila. Requiere dos ciclos de instruccin para su ejecucin.
Ejemplo:
PROGRAMA CALL TABLA
.................
.................
TABLA ADDWF PC
RETLW k0
RETLW k1
...........................
RETLW kn
Antes de la instruccin W = 0x07
Despus de la instruccin W = valor de k7
PC= TOS = direccin de PROGRAMA +1




Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
58

RETURN Retorno de subrutina
Sintaxis: [etiqueta] RETURN
Operandos: Ninguno
Operacin: TOS PC
Flags afectados: Ninguno
Cdigo OP: 00 0000 0000 1000
Descripcin: Retorno de una subrutina de interrupcin. Los 13 bits de la
direccin de retorno los carga en el PC desde la pila. Requiere
dos ciclos de instruccin para su ejecucin.
Ejemplo:
FIN RETURN
Despus de la instruccin PC = TOS






RLF Rota f a la izquierda a travs del Carry
Sintaxis: [etiqueta] RLF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: Rotacin a la izquierda de f.
Flags afectados: C
Cdigo OP: 00 1101 dfff ffff
Descripcin: El contenido del registro f se rota una posicin a la izquierda
a travs del flag de carry. Si d es 0, el resultado se almacena
en el registro W, mientras que si es 1 se almacena en el
registro f.


Ejemplo:
RLF REG1, 0
Antes de la instruccin REG1 = 1110 0110
C = 0
Despus de la instruccin REG1 = 1110 0110
W = 1100 1100
C = 1



Registro f C


Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
59

RRF Rota f a la derecha a travs del Carry
Sintaxis: [etiqueta] RRF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: Rotacin a la derecha de f.
Flags afectados: C
Cdigo OP: 00 1100 dfff ffff
Descripcin: El contenido del registro f se rota una posicin a la derecha a
travs del flag de carry. Si d es 0, el resultado se almacena
en el registro W, mientras que si es 1 se almacena en el
registro f.


Ejemplo:
RLF REG1, 0
Antes de la instruccin REG1 = 1110 0110
C = 0
Despus de la instruccin REG1 = 1110 0110
W = 0111 0011
C = 0


SLEEP Modo de reposo
Sintaxis: [etiqueta] SLEEP
Operandos: Ninguno
Operacin: 00h WDT
0 predivisor del WDT
1 TO
0 PD
Flags afectados: TO, PD
Cdigo OP: 00 0000 0110 0011
Descripcin: El bit TO se pone a 1, y el bit PD del registro de Estado se
pone a 0. Adems tambin se pone a cero el predivisor del
predivisor del WDT. El procesador entra en el modo SLEEP o
de reposo, dejando el oscilador principal de funcionar.
Ejemplo:
SLEEP





Registro f C


Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
60

SUBLW Resta W de un Literal
Sintaxis: [etiqueta] SUBLW k
Operandos: 0 k 255
Operacin: k (W) W
Flags afectados: C, DC, Z
Cdigo OP: 11 110x kkkk kkkk
Descripcin: El registro W se resta (mediante complemento a 2) de los ocho
bits del literal k. El resultado es almacenado en el registro
W.
Ejemplo:
SUBLW 0x02
Antes de la instruccin W = 0x01
C =x
Z = x
Despus de la instruccin W = 0x01
C = 1 ;el resultado es positivo
Z = 0



SUBWF Resta W del registro f
Sintaxis: [etiqueta] SUBWF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (f) - (W) dest
Flags afectados: C, DC, Z
Cdigo OP: 00 0010 dfff ffff
Descripcin: El registro W se resta (mediante complemento a 2) del registro
f. Si d es 0, el resultado se almacena en el registro W,
mientras que si es 1 se almacena en el registro f.
Ejemplo:
SUBWF REG1, 1
Antes de la instruccin REG1 =3
W = 2
C = x
Z = x
Despus de la instruccin REG1 = 1
W = 2
C = 1 ;el resultado es positivo
Z = 0






Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
61

SWAPF Intercambio de los Nibbles del registro f
Sintaxis: [etiqueta] SWAPF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (f<3:0>) dest<7:4>
(f<7:4>) dest<3:0>
Flags afectados: Ninguno
Cdigo OP: 00 1110 dfff ffff
Descripcin: Los cuatro bits ms significativos y menos significativos del
registro f, son intercambiados entre si. Si d es 0, el
resultado se almacena en el registro W, mientras que si es 1 se
almacena en el registro f.
Ejemplo:
SWAPF REG1, 0
Antes de la instruccin REG1 = 0xA5
Despus de la instruccin REG1 = 0xA5
W = 0x5A



XORLW O exclusiva entre un Literal y W
Sintaxis: [etiqueta] XORLW k
Operandos: 0 k 255
Operacin: (W) XOR (k) W
Flags afectados: Z
Cdigo OP: 11 1010 kkkk kkkk
Descripcin: Realiza la operacin lgica O exclusiva entre el registro W y
los ocho bits del literal k. El resultado es almacenado en el
registro W.
Ejemplo:
XORLW 0xAF ;1010 1111 (0xAF)
Antes de la instruccin W = 0xB5 ;1011 1010 (0xB5)
Despus de la instruccin W = 0x1A ;--------------- ---------
Z = 0 ;0001 1010 (0x1A)









Microcontroladores PIC de la Gama Media. 3. Juego de instrucciones de los PIC de la Gama Media.

Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
62

XORWF O exclusiva entre W y el registro f
Sintaxis: [etiqueta] XORWF f, d
Operandos: 0 f 127
d [0, 1]
Operacin: (W) XOR (f) dest
Flags afectados: Z
Cdigo OP: 00 0110 dfff ffff
Descripcin: Realiza la operacin lgica O exclusiva entre el registro W y el
registro f. Si d es 0, el resultado se almacena en el registro
W, mientras que si es 1 se almacena en el registro f.
Ejemplo:
XORWF REG, 1
Antes de la instruccin REG = 0xAF ;1010 1111 (0xAF)
W = 0xB5 ;1011 1010 (0xB5)
Despus de la instruccin REG = 0x1A ;--------------- ---------
W = 0xB5 ;0001 1010 (0x1A)



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
63

Captulo 4. Los Perifricos de los PIC de la Gama Media


4.1 Introduccin.

En este captulo se tratar el estudio de los distintos perifricos de los PIC de la Gama Media.
Una de las ventajas que tienen los PIC es la gran cantidad de perifricos asociados a los
modelos que hay. Estos perifricos sirven para interactuar con el exterior a travs de una
circuitera externa adecuada.

4.2 Interrupciones.

Existen fundamentalmente dos mtodos de E/S:

E/S controlada por programa, en la cual se testea de forma continua mediante un
bucle el estado de los elementos externos o perifricos, actuando en
correspondencia a los valores obtenidos.
E/S controlada por interrupciones. En este caso el elemento externo o perifrico
le indica al microcontrolador cuando est preparado, pudiendo mientras realizar
otras tareas. Cuando se produce la interrupcin el microcontrolador atiende al
perifrico que la ha producido y luego continua con la tarea que estaba haciendo
anteriormente.

Este ltimo mtodo es el ms potente para realizar operaciones de E/S, y los PIC de la Gama
Media permiten la posibilidad de usarlo. A diferencia de otros sistemas, estas interrupciones
no estn vectorizadas.





Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
64
Segn el modelo que se use, se podrn producir distintas interrupciones. Las fuentes posibles
de generacin de interrupciones son:
Interrupcin por flanco en el pin RB0/INT (interrupcin externa).
Interrupcin por rebose del TMR0.
Interrupcin por cambio de nivel en PORTB(RB7:RB4).
Interrupcin por cambio en el comparador.
Interrupcin del puerto paralelo esclavo.
Interrupcin de la USART (tanto recepcin como transmisin).
Interrupcin por finalizacin de conversin A/D.
Interrupcin de LCD.
Interrupcin por finalizacin de escritura en memoria de datos EEPROM.
Interrupcin por rebose del TMR1.
Interrupcin por rebose del TMR2.
Interrupcin del mdulo CCPx.
Interrupcin del mdulo SSP (comunicacin serie).

Cada una de estas interrupciones tiene dos bits asociados:
- <nombre>E Habilitacin de la interrupcin.
- <nombre>F Flag de interrupcin (indica que se ha producido el
evento de esa interrupcin).
Los bits de habilitacin van ha venir almacenados en los registros INTCON, PIE1 y PIE2, y
los flags lo harn en los registros INTCON, PIR1 y PIR2. De estos registros el ms corriente
es el registro INTCON que aparece siempre, almacenando tanto habilitaciones como flags,
mientras que los otros dependern del modelo que se tenga.

Existen dos flags que habilitan de forma global las interrupciones, estos son:
GIE (INTCON<7>): Habilita de forma global todas las interrupciones del PIC
(GIE=1).
PEIE (INTCON<6>): Habilita de forma global todas las interrupciones de los
perifricos, es decir, todas excepto las asociadas a la puerta A, flanco por


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
65
RB0/INT, cambio de estado en RB4:RB7 y rebose del TMR0. Estas estn todas en
el registro INTCON.
Existen algunos PIC que nicamente tienen un perifrico (memoria de datos
EEPROM o conversor A/D). En este caso, este flag de habilitacin est sustituido
por el de habilitacin de interrupcin por ese perifrico, EEIE o ADIE.

4.2.1 Registros de control.

Los registros de control de las interrupciones, como se ha dicho anteriormente, son el registro
INTCON, y los registros PIR y PIE.

4.2.1.1 Registro INTCON.

En este registro se encuentran las habilitaciones y sealizadores de las interrupciones ms
comunes, as como las habilitaciones globales de las interrupciones.

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
GIE PEIE
(3)
T0IE INTE
(2)
RBIE
(1,2)
T0IF INTF
(2)
RBIF
(1,2)
bit7 bit0

bit 7 GIE: Bit de habilitacin global de interrupciones.
1 = Interrupciones habilitadas.
0 = Interrupciones deshabilitadas.
bit 6 PEIE: Bit de habilitacin de interrupciones de los perifricos.
1 = Habilitadas interrupciones de los perifricos.
0 = Deshabilitadas interrupciones por los perifricos.
bit 5 T0IE: Habilitacin de interrupcin por rebose del TMR0
1 = Habilitada interrupcin por rebose del TMR0
0 = Deshabilitada interrupcin por rebose del TMR0.
bit 4 INTE: Habilitacin de interrupcin por flanco en RB0/INT.
1 = Habilitada.
0 = Deshabilitada.
bit 3 RBIE
(1)
: Habilitacin de interrupcin por cambio de estado en
PORTB<7:4>.
1 = Habilitada.
0 = Deshabilitada.




Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
66
bit 2 T0IF: Sealizador de rebose del TMR0.
1 = TMR0 ha rebosado. Se borra por software.
0 = No se ha producido rebose.
bit 1 INTF: Sealizador de interrupcin por flanco en RB0/INT.
1 = La interrupcin se ha producido. Se borra por software.
0 = No se ha producido interrupcin.
bit 0 RBIF
(1)
: Sealizador de cambio de estado en PORTB<7:4>.
1 = Ha cambiado de estado alguna de las lneas, RB<7:4> .
0 = No ha cambiado ninguna entrada.

Nota 1: En algunos dispositivos, los bits RBIE y RBIF son conocidos como GPIE y GPIF respectivamente.
Nota 2: Algunos dispositivos no tienen esta caracterstica. En este caso el bit est reservado.
Nota 3: En dispositivos con una sola interrupcin de perifricos, este bit puede ser EEIE o ADIE.


4.2.1.2 Registros PIE.

Dependiendo del nmero de fuentes de interrupcin producidas por perifricos que posea el
dispositivo, puede haber mltiples registros para la habilitacin de stas (PIE1, PIE2). Para
que la configuracin de estos registros PIE sea vlida, el bit PEIE del registro INTCON ha de
estar a 1, en caso contrario las interrupciones estarn deshabilitadas.

R/W-0
(Nota 1)
bit 7 bit 0

bit TMR1IE: Habilitacin de interrupcin por rebose del TMR1.
1 = Habilitada interrupcin por rebose del TMR1.
0 = Deshabilitada interrupcin por rebose del TMR1.
bit TMR2IE: Habilitacin de interrupcin por igualacin del TMR2 y
PR2.
1 = Habilitada
0 = Deshabilitada
bit CCP1IE: Habilitacin de interrupcin del mdulo CCP1.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit CCP2IE: Habilitacin de interrupcin del mdulo CCP2.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit SSPIE: Habilitacin de interrupcin del Puerto Serie Sncrono.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
67
bit RCIE: Habilitacin de interrupcin por recepcin de la USART.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit TXIE: Habilitacin de interrupcin por transmisin de la USART.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit ADIE: Habilitacin de interrupcin por conversin A/D.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit ADCIE: Habilitacin de interrupcin en el convertidor de rampa A/D.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit OVFIE: Habilitacin de interrupcin por rebose del temporizador del
convertidor de rampa A/D.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit PSPIE: Habilitacin de interrupcin por lectura/escritura del Puerto
Paralelo Esclavo.
1 = Habilitada interrupcin por lectura/escritura del PSP.
0 = Interrupcin deshabilitada.
bit EEIE: Habilitacin de interrupcin por escritura en EEPROM.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit LCDIE: Habilitacin de interrupcin del LCD.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.
bit CMIE: Habilitacin de interrupcin del comparador.
1 = Interrupcin habilitada.
0 = Interrupcin deshabilitada.

Nota 1: La posicin de los distintos bits dentro de los registros PIE1 y PIE2 dependen del modelo del
que se trate, por lo que habr que consultar las hojas de caractersticas.


4.2.1.3 Registros PIR.

Al igual que ocurre con los registros PIE, dependiendo del nmero de fuentes de interrupcin
producidas por perifricos que posea el dispositivo, puede haber mltiples registros para la
sealizacin de stas (PIR1, PIR2).

Estos flags de sealizacin han de ser borrados por software.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
68
R/W-0
(Nota 1)
bit 7 bit 0

bit TMR1IF: Sealizacin de interrupcin por rebose del TMR1.
1 = Se ha producido rebose del TMR1. Se borra por software.
0 = No ha habido rebose del TMR1.

bit TMR2IF: Flag de interrupcin por igualacin del TMR2 con PR2.
1 = TMR2 se ha igualado con PR2. Se borra por software.
0 = El TMR2 no se ha igualado con el PR2.
bit CCP1IF: Flag de interrupcin CCP1.
modo captura.
1 = Se ha producido una captura del TMR1. Se borra por software.
0 = No se ha producido ninguna captura.
modo comparacin.
1 = El TMR1 se ha igualado con el registro de comparacin.
Se borra por software.
0 = No se ha igualado el TMR1 con el registro de comparacin.
modo PWM.
No se utiliza en este modo.
bit CCP2IF: Flag de interrupcin CCP2.
modo de captura.
1 = Se ha producido una captura del TMR1. Se borra por software.
0 = No se ha producido ninguna captura.
modo de comparacin.
1 = El TMR1 se ha igualado con el registro de comparacin.
Se borra por software.
0 = No se ha igualado el TMR1 con el registro de comparacin.
modo PWM.
No se utiliza en este modo.
bit SSPIF: Flag de interrupcin del puerto serie sncrono.
1 = La transmisin/recepcin se ha realizado.
0 = Esperando a transmitir/recibir.
bit RCIF: Flag de interrupcin por recepcin de la USART.
1 = El buffer de recepcin de la USART est lleno. Se borra leyendo el
registro RCREG.
0 = El buffer de recepcin de la USART est vaco.
bit TXIF: Flag de interrupcin por transmisin de la USART.
1 = El buffer de transmisin de la USART, TXREG, est vaco. Se
borra escribiendo en el registro TXREG.
0 = El buffer de transmisin de la USART est lleno.
bit ADIF: Flag de interrupcin del convertidor A/D.
1 = Conversin A/D completa. Se borra por software.
0 = La conversin no se ha completado.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
69
bit ADCIF: Flag de interrupcin del convertidor por rampa A/D.
1 = La conversin A/D se ha completado. Se borra por software.
0 = La conversin no ha terminado..
bit OVFIF: Flag de interrupcin por rebose del temporizador del
convertidor de rampa A/D.
1 = El temporizador del convertidor A/D ha rebosado.
(Se borra por software).
0 = El temporizador no ha rebosado.
bit PSPIF: Sealizacin de interrupcin por lectura/escritura del Puerto
Paralelo Esclavo.
1 = Se ha realizado una operacin de lectura o escritura.
(Se borra por software).
0 = No se ha realizado ninguna operacin de lectura ni escritura.
bit EEIF: Sealizador de escritura completa en la EEPROM de datos.
1 = La operacin de escritura de la EEPROM de datos ha terminado.
(Se borra por software).
0 = La operacin de escritura de la EEPROM de datos no ha terminado.
bit LCDIF: Flag de interrupcin del LCD.
1 = Se ha producido una interrupcin del LCD. Se borra por software.
0 = No se ha producido una interrupcin del LCD.
bit CMIF: Sealizacin de interrupcin por el comparador.
1 = Cambio en la salida del comparador.
0 = La salida del comparador no ha cambiado.

Nota 1: La posicin de los distintos bits dentro de los registros PIE1 y PIE2 dependen del modelo del
que se trate, por lo que habr que consultar las hojas de caractersticas.

En la figura 4.1 se muestran todos los bits implicados en la activacin y deteccin de las
interrupciones en los PIC de la Gama Media. Cada bit slo aparece en determinados modelos,
segn los perifricos que tenga implementado, por lo que ser necesario consultar las hojas
caractersticas de cada dispositivo.

Algunos modelos tienen una sola interrupcin por perifricos, en este caso el bit PEIE suele
ser sustituido por el bit concreto del perifrico (EEIE o ADIE).


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
70

Figura 4.1 Lgica de control de interrupciones.

4.2.2 Fases de una interrupcin.

Las fases de ejecucin de una interrupcin, partiendo de que GIE=1, <interrupcin>E=1 y
PEIE=1 si fuese necesario, son:
1. Se produce el suceso que desencadena la interrupcin. <interrupcin>F=1.
2. Aproximadamente pasado un ciclo de instruccin GIE se pone a 0. De esta forma,
no se producirn interrupciones mientras tratemos a la actual.
3. En el siguiente ciclo de instruccin el Contador de Programa se guarda en la pila, y
se carga en l la direccin 0004h (vector de interrupcin).
4. En el siguiente ciclo se empieza a ejecutar la instruccin que se encuentra en el
vector de interrupcin.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
71
5. Antes de realizar el retorno de la rutina de interrupcin se han de borrar los
sealizadores por software, para que no vuelva a entrar en la rutina.
6. Para terminar se recupera el valor del PC de la pila y se pone el bit GIE de nuevo a
1.

Desde que ocurre una interrupcin hasta que empieza a ejecutarse la rutina correspondiente,
en el mejor de los casos, pasa un tiempo igual a tres veces el periodo del ciclo de instruccin,
para interrupciones sncronas de tipo internas. En el caso de interrupciones asncronas
externas puede ir desde los 3T
CY
hasta 3.75T
CY
. A esto es a lo que se le conoce como latencia
de interrupcin. El tiempo exacto de latencia depende de en que fase del ciclo de instruccin
se produzca la interrupcin (figura 4.2 ).

Figura 4.2 Flujo de seales de una interrupcin por el pin INT.

Nota 1: El flag INTF se testea aqu (en todos los Q1).
2: Latencia = 3-4 T
CY
, donde T
CY
es un ciclo de instruccin.
3: CLKOUT est slo disponible en el modo de oscilador RC.
4: Ver caractersticas en AC para saber en mnimo ancho de impulso de INT.





Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
72
Cuando se produce una interrupcin, el nico valor que se almacena en la pila es el PC. Esto
lleva a que va a ser necesario almacenar el acumulador y el Registro de Estado en posiciones
de la memoria de datos, volvindolos a restaurar antes de salir de la rutina de tratamiento de la
interrupcin.

Cuando haya varias fuentes de interrupcin, habr que testear cual de ellas es la que se ha
producido. Esto normalmente se hace testeando los flags asociados a las fuentes de
interrupcin. El orden de testeo es el que fija la prioridad de las interrupciones. Por ejemplo:

BTFSC INTCON,<BIT fuente1> ; La mayor prioridad corresponde a la fuente1, ya que es la
GOTO FUENTE1 ; primera en ser testeada.
BTFSC INTCON,<BIT fuente2>
GOTO FUENTE2
GOTO FUENTE3

4.3 Puertas de E/S.

Las puertas de E/S son los perifricos ms sencillos, permitiendo monitorizar y actuar sobre
otros elementos. Adems tienen multiplexadas otras funciones alternativas, en funcin del
dispositivo del cual se trate, relacionadas con otros perifricos.

Para configurar los pines de las distintas puertas como entradas o como salidas, se utilizan los
registros TRIS. En estos registros un 1 configura la patilla como entrada, mientras que un 0 lo
hace como salida.

Existen siete tipos distintos de puertas E/S, aunque nunca aparecen de forma conjunta todas.
A las puertas E/S se las denomina como PORT<x>, siendo x una letra de la A a la G. Para
poder trabajar adecuadamente con las puertas habr que ver los consumos mximos
permitidos, tanto en lectura como en escritura, teniendo tambin en cuenta el nmero de pines
del puerto que se usen.

Los pines de estas puertas, individualmente, pueden aportar una corriente mxima de salida de
20 mA, y absorber hasta 25 mA. Si trabajan simultneamente, el mximo valor de corriente


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
73
que pueden absorber y aportar entre todas es de 200 mA, para el caso de los puertos A, B, C,
D y E, y de 100 mA para los puertos F y G.

En lo que se refiere a tensiones de entrada en los pines, stas aceptan valores comprendidos
desde 0.3 a 7.5V en todos los pines salvo en RA4 cuyo rango es desde 0 a 14V. Estos valores
de corrientes y tensin pueden variar segn el modelo, por lo que siempre habr que consultar
las hojas caractersticas.

4.3.1 Puerta A.

Son puertas de E/S de hasta 6 pines (en funcin del modelo) RA0:RA5. Las patillas RA0-
RA3 y RA5 (figura 4.3) pueden actuar como E/S digital compatibles con niveles TTL y
CMOS, o como canales de entrada para el Convertidor A/D, en caso de que ste exista.

Figura 4.3 Diagrama de bloques de las patillas RA3:RA0 y RA5.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
74
La patilla RA4 (figura 4.4) est configurada en drenador abierto, por lo que es necesario
cargarlo en el exterior. A la entrada tiene un buffer de tipo Trigger de Schmitt para
inmunizarlo del ruido.

Esta patilla puede funcionar tambin como E/S digital y adems como entrada del reloj
externo para el TMR0 cuando este acta como contador.


Figura 4.4 Diagrama de bloques de la patilla RA4.


El registro TRIS asociado a esta puerta es el TRISA. Los bits 6 y 7 de este se leen como 0.






Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
75
4.3.2 Puerta B.

La puerta B (figura 4.5) est formada por ocho pines de E/S configurables a travs del registro
TRISB. Todas ellas disponen de una carga activa interna (carga pull-up) implementada con
un CMOS, habilitada siempre que est actuando como entrada y el bit RBPUdel registro
OPTION est a 0. Se desconecta siempre que el pin trabaje como salida o con un Power-on
Reset.


Figura 4.5 Diagrama de bloques de las patillas RB3:RB0.






Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
76
Esta puerta tiene asociada dos tipos de interrupciones:
A travs de RB0/INT: Mediante un flanco de bajada o de subida, segn como se
haya configurado en el bit INTEDG (OPTION<6>). El bit para su habilitacin es
el RBIE (INTCON <3>) y el flag asociado RBIF (INTVON<0>).
A travs de los pines RB7:RB4 (figura 4.6): En este caso cada vez que hay un
cambio de nivel se producir la interrupcin, siempre que est habilitada mediante
el bit INTE (INTCON<4>). El flag asociado es INTF (INTCON<1>). La forma de
borrar este bit, adems de forzndolo ha 0, es realizando una lectura del PORTB.
Mediante este tipo de interrupcin se pueden tener distintas fuentes externas que la
produzcan, utilizando un pin distinto para cada una de ellas.


Figura 4.6 Diagrama de bloques de las patillas RB7:RB4.




Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
77
4.3.3 Puerta C.

La puerta C (figura 4.7) es una puerta de E/S bidireccional de 8 bits configurable a travs del
registro TRISC. Este puerto cuando funciona como entrada tiene en ella un Trigger de
Schmitt. Adems todos los pines tienen multiplexados la salida y/o la entrada para actuar con
los perifricos.

En la figura 4.7 se puede ver un multiplexor para cuando acta como salida. Estos perifricos
dependern del modelo que se est usando, por lo que habr que consultar las hojas de
caractersticas. Al usar estos perifricos hay que configurar de forma correcta el registro
TRISC, segn el perifrico necesite un pin de salida o entrada.

Figura 4.7 Diagrama de bloque de los pines del PORTC.





Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
78
El PORTC tiene sus pines multiplexados con distintos mdulos perifricos. Por ejemplo para
el PIC16C74 los mdulos perifricos con los que funciona el PORTC son:

RC0/T1OSO/T1CKI: E/S digital. Salida para el oscilador del TMR1. Entrada de
reloj para el TMR1.
RC1/T1OSI/CCP2: E/S digital. Entrada para el oscilador del TMR1. E/S del
mdulo CCP2.
RC2/CCP1: E/S digital. E/S del mdulo CCP1.
RC3/SKC/SCL: E/S digital. Reloj serie sncrono para mdulos SPI e I
2
C.
RC4/SDI/SDA: E/S digital. Entrada de datos para el modo SPI. E/S serie para el
modo I
2
C.
RC5/SDO: E/S digital. Salida de datos serie para el modo SPI.
RC6/TX/CK: E/S digital. Lnea de transmisin asncrona de la USART. Entrada
del reloj sncrono para la USART.
RC7/RX/DT: E/S digital. Lnea de recepcin asncrona para la USART. Lnea de
datos sncronos de la USART.

4.3.4 Puerta D.

La puerta D (figura 4.8) est formada por ocho pines de E/S digitales configurables a travs
del TRISD. Tambin puede actuar como Puerto Paralelo Esclavo para soportar la conexin
directa con el bus de datos de ocho bits de otro microprocesador.

4.3.5 Puerta E.

Es una puerta de E/S digital de hasta ocho bits (figura 4.8), aunque normalmente slo tiene
tres. Su funcin principal es la de actuar como bit de control para la puerta paralela esclava.
Adems puede actuar como entrada analgica para el convertidor A/D.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
79

Figura 4.8 Diagrama de bloque de las Puertas D y E.


4.3.6 Puertas F y G.

Las puertas F y G estn formadas por ocho pines, los cuales funcionan slo como entradas.
Cada pin est multiplexado con un controlador para los mdulos de LCD. A la entrada, estos
pines tienen un buffer del tipo Trigger de Schmitt (figura 4.9).




Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
80

Figura 4.9 Diagrama de bloque de los pines del PORTF LCD y PORTG LCD.


4.3.7 Puerta GPIO.

La Puerta GPIO (figura 4.10) es un registro E/S de ocho bits, aunque slo tiene
implementados los seis ms bajos (GP5:GP0). Los bits 7 y 6 se leen como 0. Los pines del
puerto GPIO son programables individualmente como entrada o como salida, excepto el pin
GP3 que es slo de entrada.

El registro de configuracin de esta puerta es el TRISGP que funciona igual que en las
anteriores puertas.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
81

Figura 4.10 Diagrama de bloques de los pines GP5:GP0.

Algunos pines pueden tener funciones alternadas. En este caso la lectura de estos pines del
puerto ser 0. Los pines pueden ser configuradas con cargas Pull-up y con generacin de
interrupcin por cambio de nivel. Estas interrupciones se habilitan con el bit INTCON<3>. Si
se selecciona un oscilador externo en la palabra de configuracin del dispositivo, los pines
GP4 y GP5, dejan de funcionar como pines E/S, y lo hacen como entradas para el oscilador.

4.3.9 Operaciones sucesivas en un Puerto E/S.

La escritura en un puerto E/S se realizan al final de un ciclo de instruccin, mientras que las
lecturas lo hacen al principio (figura 4.11). Por esta razn hay que tener cuidado con las
operaciones de escritura en un puerto, seguidas por la lectura de ese mismo puerto. La
secuencia de las instrucciones debe permitir que se estabilicen los voltajes en los pines E/S.
Este tiempo depender de la carga que se tenga conectada a la salida. En caso de duda lo ms
aconsejable es intercalar instrucciones NOP.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
82

Figura 4.11 Operaciones E/S sucesivas.


Este ejemplo muestra la escritura del puerto B seguido de su lectura. De aqu vemos que el
tiempo para la estabilizacin de la tensin de salida es de un ciclo de reloj, por lo que altas
frecuencias de reloj estas operaciones de lectura despus de las de escritura pueden resultar
problemticas. Un ejemplo de esto se puede ver en la figura 4.12.

Figura 4.12 Resultado de la activacin de una E/S.







Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
83
4.4 Puerto Paralelo Esclavo.

Los puertos D y E se pueden configurar de modo conjunto para trabajar como Puerto Paralelo
Esclavo (PSP), normalmente controlado por un microprocesador (figura 4.13). En este modo
se podrn leer o escribir de modo asncrono, ocho bits a travs de la Puerta D, utilizando los
bits de control de la Puerta E:
RD = Lectura (RE0).
WR = Escritura (RE1).
CS = Chip Select (RE2).

Para que los puertos D y E trabajen en este modo, hay que poner a 1 el bit PSPMODE
(TRISE<4>). Adems las puertas han de estar configuradas como E/S, es decir, que la entrada
del convertidor A/D multiplexada en la puerta E debe de estar deshabilitada. En este modo,
como el flujo de datos a travs del PORTD es controlado por el microprocesador, el TRISD
no tiene efecto.

Todos los bits de control se encuentran en el TRISE. Estos bits son:

R-0 R-0 R/W-0 R/W-0 U-0 R/W-1 R/W-1 R/W-1
IBF OBF IBOV PSPMODE -- TRISE2 TRISE1 TRISE0
bit 7 bit 0

bit 7 IBF: Bit de estado del buffer de entrada.
1 = Una palabra ha sido recibida y se est esperando a ser leda por la
CPU.
0 = No se ha recibido ningn dato.
bit 6 OBF: Bit de estado del buffer de salida.
1 = El buffer de salida todava retiene una palabra previamente escrita.
0 = El buffer de salida ha sido ledo.
bit 5 IBOV: Bit de deteccin de overflow en el buffer de entrada.
1 = A habido una escritura sin que previamente se haya ledo el puerto
(Se borra por software).
0 = No ha habido overflow.
bit 4 PSPMODE: Bit de seleccin del modo Puerto Paralelo Esclavo.
1 = Modo Puerto Paralelo Esclavo.
0 = Modo E/S de propsito general.
bit 3 No implementado: Se lee como 0.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
84
bit 2 TRISE2: Bit de control de direccin del pin RE2.
1 = Entrada.
0 = Salida.
bit 1 TRISE1: Bit de control de direccin del pin RE1.
1 = Entrada.
0 = Salida.
bit 0 TRISE0: Bit de control de direccin del pin RE0.
1 = Entrada.
0 = Salida.


Figura 4.13 Diagrama de bloques de los Puertos D y E (Puerto Paralelo Esclavo).

a) Operacin de escritura:

Para que se produzca una escritura el microprocesador debe poner a cero las lneas
CS y WR . En este momento se carga el registro del PORTD. Al ponerse a uno la
lnea CS o WR , se activa el flag IBF (TRISE<7>), indicando que la escritura se ha
completado. El borrado de este flag se produce cuando se realiza una lectura del
Puerto D.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
85
Si se vuelve a producir una escritura del microprocesador sin que se haya ledo el
puerto, se producir un error de overflow del buffer, indicado por el bit IBOV
(TRISE<5>).

Por otra parte al producirse la escritura se activar el flag PSPIF (PIR), que producir
una interrupcin en caso de que esta est habilitada, es decir PSPIE (PIE) = PEIE =
GIE = 1.

La secuencia de las seales en una operacin de escritura se pueden ver en la figura
4.14
Figura 4.14 Flujo de seales de una operacin de escritura en modo PSP.

b) Operacin de lectura:

Cuando las lneas CS y RDestn a cero, se produce el borrado del flag OBF
(TRISE<6>), indicando que se ha realizado una operacin de lectura. Cuando alguna
de estas dos lneas se pone a uno, se activa el flag de interrupcin PSPIF (PIR). El bit
OBF se mantiene a cero hasta que no se produzca una nueva escritura del PORTD.

En la figura 4.15 se pueden ver las formas de onda de las distintas seales en una
operacin de lectura.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
86
Figura 4.15 Flujo de seales en una operacin de lectura en el modo PSP.

Los bits IBF y OBF son bit de slo lectura, por lo que su borrado o activacin se produce de
forma automtica cuando se realizan operaciones sobre estos puertos.

4.5 Temporizadores.

En los PIC de la Gama Media puede haber hasta tres temporizadores denominados TMR0,
TMR1 y TMR2. Las principales caractersticas de cada uno de ellos se muestran a
continuacin.

4.5.1 TMR0.

El temporizador TMR0 (Figura 4.16) tiene las siguientes caractersticas:
Contador / temporizador de 8 bits.
Permite la lectura y escritura.
Prescaler de 8 bits programable por software.
Fuente de reloj interna o externa.
Interrupcin por rebose (overflow). De FFh a 00h.
Seleccin de flanco para la fuente externa.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
87
Figura 4.16 Diagrama de bloque del TMR0.

Para la configuracin del TMR0 se utilizan los bits del registro OPTION<5:0>
bit 5 T0CS: Fuente de reloj para el TMR0.
1 = Pulsos introducidos por T0CKI (contador).
0 = Pulsos de reloj interno Fosc/4 (temporizador).
bit 4 T0SE: Tipo de flanco activo del T0CKI.
1 = Incremento del TMR0 cada flanco descendente.
0 = Incremento del TMR0 cada flanco ascendente.
bit 3 PSA: Asignacin del divisor de frecuencia.
1 = Se le asigna al WDT.
0 = Se le asigna al TMR0.
bit 2-0 PS2:PS0: Valor del divisor de frecuencia.

Valor Divisin del TMR0
000 1:2
001 1:4
010 1:8
011 1:16
100 1:32
101 1:64
110 1:128
111 1:256
Para conseguir un valor del prescaler 1:1, se asigna el divisor de
frecuencia al Perro Guardin.

Cuando se opera con el TMR0 como temporizador (T0CS=0), se produce un incremento de
este cada ciclo de instruccin, siempre que el predivisor est a 1:1. Al producirse una escritura
sobre el TMR0, este incremento se inhibe durante los dos siguientes ciclos de instruccin
(figura 4.17).



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
88
Figura 4.17 Diagrama de tiempos el TMR0, con reloj interno y sin predivisor.

En el caso de que el predivisor de frecuencia est asignado al TMR0, cuando se escribe sobre
l, el registro del predivisor se pone a cero, y se produce un retardo de dos ciclos de
instruccin ms el valor del predivisor hasta que se reinicia la temporizacin (figura 4.18). En
este caso el incremento del TMR0 se produce cada tantos ciclos de instruccin como valor
tenga el predivisor.

Figura 4.18 Diagrama de tiempos del TMR0 con reloj interno y predivisor 1:2.

Cuando el TMR0 est configurado como contador (T0CS=1), se incrementar cada vez que se
produzca un flanco de bajada o subida, segn como este configurado (T0SE), por el pin
T0CKI. Cuando no est configurado el predivisor de frecuencia con el TMR0, la entrada del
reloj externo coincide con la salida del predivisor. La sincronizacin de la seal T0CKI con la
fase interna del reloj se realiza haciendo un muestreo en la salida del predivisor en cada ciclo
Q2 y Q4. Por esta razn es necesario que los pulsos tengan un ancho mnimo para que se
puedan detectar.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
89
Debido a que la salida del predivisor est sincronizada con el reloj interno, aparece un retardo
desde que se detecta la seal T0CKI hasta que se incrementa el TMR0 (figura 4.19).

Figura 4.19 Diagrama de tiempos del TMR0 con reloj externo.

El temporizador TMR0 tiene asociados los bits T0IE (INTCON<5>) y T0IF (INTCON<2>)
para la habilitacin y sealizacin de interrupcin cuando ste rebose, es decir, pase de FFh a
00h.

Como ya se vio en el captulo 2, el TMR0 tiene un predivisor de frecuencia asociado a l y
compartido con el Perro Guardin o Watchdog.

Para lograr una temporizacin en concreto hay que inicializar el valor del TMR0 con el valor
adecuado. Para calcular este valor a cargar se utiliza la siguiente expresin:
T
temp
= (256 V
TMR0
) 4 T
OSC
Valor del Predivisor (4.1)

Suponiendo una temporizacin de 20ms, y un T
OSC
de 4 MHz, se obtiene:
125 . 78
256
10 20
visor ValorPredi
3

= (4.2)
El valor siguiente al obtenido es el de predivisor 128, con lo que se obtiene:
20 10
-3
= (256 V
TMR0
) 10
-6
128 (4.3)
V
TMR0
= 256 156 = 100 (4.4)


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
90
4.5.2 TMR1.

Es un contador/temporizador ascendente de 16 bits, el cual est implementado con dos
registros de ocho bits que son TMR1H y el TMR1L (figura 4.20).


Figura 4.20 Diagrama de bloques del TMR1.

Como fuentes de los impulsos del reloj existen tres alternativas:
El oscilador interno del PIC, de modo que el TMR1 se incrementar en cada ciclo
de instruccin.
Un oscilador externo de tipo XT conectado a RC0/T1OSO/T1CKI y a
RC1/T1OSI/CCP2.
Contando pulsos externos a travs de la patilla RC0/T1OSO/T1CKI.

Para configurar el TMR1 se utiliza el registro T1CON. La estructura de este registro es la
siguiente:






Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
91
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
-- -- T1CKPS1 T1CKPS0 T1OSCEN SYNC 1 T TMR1CS TMR1ON
bit 7 bit 0

bit 7:6 Bits no implementados: Se leen como 0,
bit 5:4 T1CKPS1:T1CKPS0: Seleccin del valor del predivisor del reloj de
entrada.
11 = Valor del predivisor 1:8.
10 = Valor del predivisor 1:4.
01 = Valor del predivisor 1:2.
00 = Valor del predivisor 1:1.
bit 3 T1OSCEN: Habilitacin del oscilador del TMR1.
1 = Oscilador habilitado.
0 = El oscilador es parado.
bit 2 T1SYNC: Sincronizacin de la entrada de reloj externa.
Cuando TMR1CS = 1:
1 = No sincronizado con la entrada de reloj interno.
0 = Sincronizacin de la entrada del reloj externo.
Cuando TMR1CS = 0:
Este bit es ignorado. Ya que utiliza el reloj interno.
bit 1 TMR1CS: Seleccin de la fuente de reloj para el TMR0.
1 = Reloj externo desde el pin T1OSO/T1CKI (en el flanco de subida).
0 = Reloj interno (F
OSC
).
bit 0 TMR1ON: Activacin del TMR1.
1 = TMR1 activado.
0 = TMR1 parado.

Este perifrico cuando pasa de FFFFh a 0000h puede producir una interrupcin mediante el
flag TMR1IF (PIR) siempre que estn habilitados los bits TMR1IE (PIE), PEIE
(INTCON<6>) y GIE (INTCON<7>).

Como se puede ver el TMR1 permite funcionar con un predivisor de frecuencia de hasta 1:8.
Cuando acta con un oscilador externo de tipo XT, dicho reloj puede estar o no sincronizado
con el reloj interno. En el caso de que no lo est, se puede utilizar para despertar al micro del
modo SLEEP. En caso contrario no, ya que al dejar de funcionar el oscilador principal
tambin lo hara el TMR1. En modo sncrono se puede utilizar como base de tiempos en
operaciones de Captura y Comparacin.




Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
92
4.5.3 TMR2.

Es un temporizador de 8 bits con un predivisor y un postdivisor asociados (figura 4.21). Si se
usan ambos con su mximo valor, el tiempo para rebosar el TMR2 ser semejante a tener un
temporizador de 16 bits.


Figura 4.21 Diagrama de bloque del TMR2.

El registro de configuracin del TMR2 es el T2CON que se describe a continuacin:

U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
-- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
bit 7 bit 0

bit 7 Bit no implementado: Se lee como 0.
bit 6:3 TOUTPS3:TOUTPS0: Seleccin del valor del postdivisor del TMR2.
0000 = Valor del postdivisor 1:1.
0001 = Valor del postdivisor 1:2.
.......
.......
1110 = Valor del postdivisor 1:15.
1111 = Valor del postdivisor 1:16.
bit 2 TMR2ON: Activacin del TMR2.
1 = TMR2 activado.
0 = TMR2 parado.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
93
bit 1:0 T2CKPS1:T2CKPS0: Seleccin del valor del predivisor del TMR2.
00 = Valor del predivisor 1:1.
01 = Valor del predivisor 1:4.
1x = Valor del predivisor 1:16.

En el TMR2 aparece un registro llamado PR2 (registro de periodos), que resetear al TMR2
cuando sean iguales sus valores. A su vez se incrementa el registro del postdivisor, que
cuando rebosa produce una interrupcin activando el bit TMR2IF (PIR), siempre que estn
activados los bits TMR2IE (PIE), PEIE y GIE.

Este temporizador nicamente funciona con F
OSC
/4 del oscilador principal, por lo que a
diferencia del TMR1, no se puede utilizar para sacar al micro del modo SLEEP.

Este temporizador se utiliza como base de tiempos en el modo PWM de los mdulos CCP y
es el encargado de generar la seal de reloj sncrona del mdulo SSP.

4.6 Mdulos CCP.

Los mdulos CCP (siendo CCP1 y CCP2) contienen un registro de 16 bits que puede actuar
en los siguientes modos:
Modo de captura..
Modo de comparacin
Modo PWM.

Cada uno de los registros CCP tiene asociados tres registros:
CCPxCON: Registro de control del mdulo CCPx.
CCPRxH: Byte alto del registro de 16 bits.
CCPRxL: Byte bajo del registro de 16 bits.
CCPx: pin.





Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
94
El registro de control CCPCON consta de los siguientes bits:

U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
-- -- DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0
bit 7 bit 0

bit 7:6 Bits no implementados: Se leen como 0.
bit 5:4 DCxB1:DCxB0: Bit1 y bit0 del Duty Cycle del PWM.
Modo captura:
No se usa.
Modo comparacin:
No se usa.
Modo PWM:
Son los dos bits menos significativos de los 10 bits que se
utilizan para el Duty Cycle del PWM. Los ocho bits superiores
(DCx9:DCx2) del Duty Cycle se encuentran en CCPRxL.
bit 3:0 CCPxM3:CCPxM0: Bits de seleccin del modo CCPx.
0000 = Captura/Comparacin/PWM apagado (reset del Mdulo CCPx).
0100 = Modo de captura, cada flanco de bajada.
0101 = Modo de captura, cada flanco de subida.
0110 = Modo de captura, cada 4 flancos de subida.
0111 = Modo de captura, cada 16 flancos de subida.
1000 = Modo de comparacin, inicializar el pin CCP en bajo, y forzarlo
a alto cuando se produzca la igualacin.
1001 = Modo de comparacin, inicializar el pin CCP en alto, y forzarlo
a bajo cuando se produzca la igualacin.
1010 = Modo de comparacin, el pin CCP no se ve afectado.
1011 = Modo de comparacin
11xx = Modo PWM.

4.6.1 Modo de captura.

En el modo de captura CCPRxH:CCPRxL capturan los 16 bits del registro TMR1 cuando
ocurre un evento en el pin CCPx. Los posibles eventos son:
Flanco de bajada.
flanco de subida.
4 flancos de subida.
16 flancos de subida.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
95

Estos eventos se seleccionan con los bits CCPxM3:CCPxM0 (CCPxCON<3:0>).

Debido a que se trabaja con el TMR1, es necesario que ste funcione como temporizador o
como contador en modo sncrono. En modo asncrono no funcionara.

En el momento de la captura en bit CCPxIF (PIR) se activa, produciendo una interrupcin en
el caso de que CCPxIE (PIE), GIE y PEIE estn activados tambin. El flag ha de ser borrado
por software. Si sucede otra captura antes de haber ledo el registro CCPRx, el valor de la
captura previa se habr perdido.

En la figura 4.22 se puede ver el diagrama de bloques del mdulo CCPx en modo Captura.

Figura 4.22 Diagrama de bloques en el modo captura.

En este caso el pin CCPx tiene que estar configurado a travs del TRISC como entrada. Si
estuviese como salida una escritura en el puerto producira una condicin de captura.

El predivisor se puede utilizar para obtener una resolucin media ms exacta sobre
frecuencias de entrada constantes. Por ejemplo con un predivisor de 1:16 la resolucin
efectiva es de T
CY
/16, mientras que sin predivisor es de T
CY
. Cuando el mdulo CCP se
apaga o el CCP no est en modo captura, el contador del predivisor se borra. Para cambiar


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
96
el valor del predivisor habr que apagar antes el mdulo y luego modificarlo, ya que si no se
puede producir una interrupcin.
El modo de captura se puede usar para realizar clculos de tiempos entre varios eventos.

Cuando el dispositivo se encuentra en modo de reposo y aparece en evento externo, el mdulo
produce la interrupcin que despierta al dispositivo, pero el registro de captura no se
actualiza, ya que el TMR1 no funciona, y el valor cargado carecera de significado.

4.6.2 Modo de comparacin.

En este modo los 16 bits del registro CCPRx son comparados constantemente con el
temporizador TMR1. Cuando ambos valores son iguales en el pin CCPx pueden pasar las
siguientes cosas:
Se pone a valor alto.
Se pone a valor bajo.
No cambia.
La accin de pin se controla con los pines de control CCPxM3:CCPxM0 (CCPxCON<3:0>).
Adems en cualquier caso se activa el flag CCPxIF, que producir la interrupcin en caso de
que sta est habilitada. Para el funcionamiento en este modo el pin CCPx se ha de configurar
como salida mediante el TRIS correspondiente.

En la figura 4.23 muestra el diagrama de bloques del mdulo CCP en modo de comparacin.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
97

Figura 4.23 Diagrama de bloque en el modo de comparacin.
Existe un modo especial que produce un trigger especial, el cual resetea el registro TMR1 (los
16 bits), el cual puede ser utilizado como un temporizador mdulo-n. Adems en algunos
modelos este trigger dispara la conversin A/D.

4.6.3 Modo PWM.

El modo de modulacin por anchura de impulso se utiliza para atacar elementos continuos
con seales discretas. Esto se hace que a travs de un puente en H.

En la figura 4.25 se puede ver el diagrama de bloques simplificado del mdulo PWM, y en la
figura 4.24 la seal de salida de ste mdulo.

Con este mdulo se puede obtener una resolucin de salida de hasta 10 bits. Para que este
mdulo funcione correctamente el pin tiene que estar configurado como salida, mediante el
TRIS correspondiente.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
98

Figura 4.24 Seal PWM.


Figura 4.25 Diagrama de bloques simplificado del mdulo PWM.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
99
La generacin de la secuencia PWM se obtiene de la siguiente forma:
En PR2 se escribe el valor del periodo de la seal, el cual se puede calcular con la
siguiente expresin.
PWM
T
= (PR2 + 1) 4 T
OSC
(Valor del Predivisor del TMR2) (4.5)
Cuando TMR2 = PR2:
o TMR2 se borra.
o El pin CCPx se pone a 1 ( redivi si el Duty Cycle es 0).
o El valor de CCPRxL junto a CCPxCON<5:4>, se carga sobre CCPRxH, de
forma que se carga el valor del Duty Cycle. Como se puede ver, esto nos da
una resolucin de 10 bits, representados por DCxB9:DCxB0.
Para realizar el clculo del Duty Cycle se utiliza la siguiente ecuacin:
PWM
DC.
= (DCxB9:DCxB0) T
OSC
(Predivisor del TMR2) (4.6)
Cuando CCPRxH + 2bits = TMR2 + 2bits Qclock (o dos bits del predivisor), la
salida CCPx se pone a 0, terminando con el Duty Cycle.

No todas las resoluciones estn permitidas para una frecuencia determinada de PWM. La
resolucin mxima en bits viene dada por la expresin:
( )
bits
2 log
F
F
log
PWM
osc

= Resolucin (4.7)

La resolucin mnima depender del predivisor asociado al TMR2, tal y como se muestra en
la tabla 4.1.
TABLA 4.1 Mnimo tiempo del duty cycle en funcin del valor del predivisor.
Valor del
Predivisor
T2CKPS1:T2CHPS0
Mnima resolucin
(en tiempo)
1 00 T
OSC
4 01 T
CY
16 1x 4 T
CY


Como ejemplo se realiza el clculo del periodo de una seal PWM, el Duty Cycle, y su
resolucin.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
100

Se desea un PWM con una frecuencia de 78.125 KHz, siendo F
OSC
= 20 MHz y el
predivisor del TMR2=1.

[ ] 1
10 20
1
4 1 ) 2 (PR
KHz 125 . 78
1
6

+ =
s
=> PR2 = 63. (4.8)

( )
( )
bits 8
2 log
10 125 . 78
10 20
log
Mxima Resolucin
3
6
=

= (4.9)
Para cualquier valor mayor de 255 se producir un Duty Cycle del 100%.
Para terminar con este modo de operacin se describen los pasos a seguir para configurar un
PWM.

Estos son:
1. Establecer el periodo PWM escribiendo el registro PR2.
2. Establecer el Duty Cycle escribiendo los bits DCxB9:DCxB0.
3. Configurar CCPx como salida.
4. Establecer el predivisor del TMR2 y habilitarlo escribiendo en T2CON.
5. Configurar el mdulo CCP para la operacin en modo PWM.

4.7 Mdulo de Tensin de Referencia.

Este mdulo proporciona una tensin seleccionable que se obtiene mediante el uso de 16
resistencias en serie. En la figura 4.26 se ve el hardware de este mdulo.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
101
Figura 4.26 Diagrama de bloques de mdulo de tensin de referencia.

Los distintos valores que pueden obtener, en funcin de los bits VR3:VR0 (VRCON<3:0>) y
VRR (VRCON<5>), con una alimentacin de 5V son los indicados en la tabla 4.2.


TABLA 4.2 Voltajes de referencia tpicos con V
DD
= 5.0 V
V
REF
VR3:VR0
VRR = 1 VRR = 0
0000 0.00 V 1.25 V
0001 0.21 V 1.41 V
0010 0.42 V 1.56 V
0011 0.63 V 1.72 V
0100 0.83 V 1.88 V
0101 1.04 V 2.03 V
0110 1.25 V 2.19 V
0111 1.46 V 2.34 V
1000 1.67 V 2.50 V
1001 1.88 V 2.66 V
1010 2.08 V 2.81 V
1011 2.29 V 2.97 V
1100 2.50 V 3.13 V
1101 2.71 V 3.28 V
1110 2.92 V 3.44 V
1111 3.13 V 3.59 V

El registro de control de este mdulo es el registro VRCON que consta de los siguientes bits:
R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
102
VREN VROE VRR -- VR3 VR2 VR1 VR0
bit 7 bit 0
bit 7 VREN: Habilitacin del mdulo V
REF
.
1 = El mdulo V
REF
est conectado.
0 = El mdulo V
REF
est desconectado.
bit 6 VROE: Activacin de la salida del mdulo V
REF
.
1 = V
REF
est conectado internamente con el mdulo de comparacin.
Tambin est conectado el pin de salida de V
REF
.
0 = Tanto el comparador como el pin de salida estn desconectados.
bit 5 VRR: Seleccin del rango de V
REF
.
1 = De 0V a 0.66 V
DD
, con un paso de V
DD
/24.
0 = De 0.25 V
DD
a 0.75 V
DD
, con un paso de V
DD
/32.
bit 4 Bit no implementado: Se lee como 0.
bit 3:0 VR3:VR0: Seleccin del valor de V
REF
.
Cuando VRR = 1:
V
REF
= (VR<3:0>/24) V
DD

Cuando VRR = 0:
V
REF
= V
DD
+ (VR<3:0>/32) V
DD


Como se puede ver, no se pueden obtener todo el rango de tensiones desde V
DD
hasta V
SS
.
Hay que tener en cuenta los consumos de potencia al habilitar el pin de salida de V
REF
.
Adems tambin puede utilizarse como salida del convertidor D/A con una capacidad
asociada. Debido a sta capacidad, la tensin de referencia del mdulo debe ser utilizada
mediante un buffer como se muestra en la figura 4.27.


Figura 4.27 Ejemplo de buffer de salida del mdulo V
REF
.

4.8 Mdulo Comparador Analgico.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
103

ste mdulo contiene dos comparadores analgicos, cuyas entradas estn multiplexadas con
pines E/S. El registro que se utiliza para su configuracin es el registro CMCON, que se
describe a continuacin:

R-0 R-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
C2OUT C1OUT -- -- CIS CM2 CM1 CM0
bit 7 bit 0
bit 7 C2OUT: Bit indicador de la salida del comparador 2.
1 = C2 V
IN
+ > C2 V
IN

0 = C2 V
IN
+ < C2 V
IN

bit 6 C1OUT: Bit indicador de la salida del comparador 1.
1 = C1 V
IN
+ > C1 V
IN
-
0 = C1 V
IN
+ < C1 V
IN
-
bits 5:4 Bits no implementados: Se leen como 0.
bit 3 CIS: Seleccin de la entrada del comparador.
Cuando CM2:CM0 = 001:
1 = C1 V
IN
se conecta a AN3.
0 = C1 V
IN
se conecta a AN0.
Cuando CM2:CM0 = 010:
1 = C1 V
IN
se conecta a AN3.
C2 V
IN
se conecta a AN2.
0 = C1 V
IN
se conecta a AN0.
C2 V
IN
se conecta a AN1.
bits 3:0 CM2:CM0: Seleccin del modo del comparador.
Ver figura 4.28.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
104

Figura 4.28 Modos de operacin del comparador.

En la figura 4.29 se muestra la relacin entre las entradas analgicas y la salida digital de un
comparador. Como se puede ver cuando la entrada analgica V
IN
+ es menor que V
IN
, la
salida del comparador est a nivel bajo. En caso contrario la salida est en nivel alto. Las


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
105
reas sombreadas de la salida del comparador representan una incertidumbre, debida al offset
del operacional y al tiempo de respuesta.


Figura 4.29 Comparador simple.

La seal de referencia puede ser tanto externa como interna. En el primer caso hay que tener
en cuenta que esta seal externa debe estar entre V
DD
y V
SS
. Tambin se puede utilizar una
seal de referencia interna cuando CM2:CM0 = 010, usando la salida del mdulo de tensin
de referencia.

Las salidas del comparador se leen en el registro CMCON<7:6>, estando adems
multiplexadas hacia los puertos E/S si CM2:CM0 = 110. La figura 4.30 muestra el diagrama
de bloques de la salida del comparador.

Este mdulo puede generar interrupciones activando el flag CMIF (PIR), cuando su salida
cambie con respecto al ltimo valor almacenado en CMCON. Para que se produzca la
interrupcin debe estar habilitada por el bit CMIE (PIE), y estar tambin activados los bits
GIE y PEIE.

El flag CMIF puede borrarse de las siguientes formas:
Por software.
Realizando una lectura o escritura sobre el registro CMCON.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
106
Esta interrupcin se puede utilizar para despertar al procesador del modo SLEEP, ya que el
comparador sigue funcionando. Para minimizar la potencia que se consume en este modo,
antes de entrar en l, el comprador se debe configurar en modo CM2:CM0 = 111.


Figura 4.30 Diagrama de bloques de la salida del comparador.





4.9 Convertidor A/D.

Este convertidor permite la conversin de hasta 8 entradas analgicas. El convertidor (figura
4.31) es de ocho bits y convierte por aproximaciones sucesivas. La seal de referencia para el
convertidor puede ser V
DD
o el valor ledo a travs de la patilla AN3/V
REF
.

Tiene la caracterstica especial de que puede funcionar en modo de reposo.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
107

Figura 4.31 Diagrama de bloques del convertidor A/D de 8 bits.

Los registros asociados al convertidor son:
ADCON0: Registro de control 0: Controlan la operacin A/D del mdulo.
ADCON1: Registro de control 1: Configura las funciones de los pines de los
puertos.
ADRES: Resultado de la conversin.


A continuacin se realiza la descripcin de cada uno de ellos.

El registro ADCON0 consta de los siguientes bits:

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/ DONE Reservado ADON
bit 7 bit 0



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
108
bits 7:6 ADCS1:ADCS0: Bits de seleccin del reloj para la conversin A/D.
00 = F
OSC
/2.
01 = F
OSC
/8.
10 = F
OSC
/32.
11 = F
RC
(Reloj del oscilador interno RC).
bits 5:3 CHS2:CHS0: Bits de seleccin del canal.
000 = Canal 0, (AN0).
001 = Canal 1, (AN1).
000 = Canal 2, (AN2).
000 = Canal 3, (AN3).
000 = Canal 4, (AN4).
000 = Canal 5, (AN5).
000 = Canal 6, (AN6).
000 = Canal 7, (AN7).
bit 2 GO/ DONE: Bits de estado de la conversin.
Cuando ADCON = 1
1 = Conversin en proceso (poner a 1 para iniciar una conversin).
0 = La conversin ha finalizado.
bit 1 Reservado: Siempre se mantiene a cero.
bit 0 ADCON: Activacin del conversor A/D.
1 = El comparador est activado.
0 =El comparador no est activado.


En el caso del registro ADCON1 los bits que lo componen son:

U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0
-- -- -- -- -- PCFG2 PCFG1 PCF0
bit 7 bit 0




bits 7:3 Bits no implementados: Se leen como 0.
bit 2:0 PCFG2:PCFG0: Bit de configuracin de los pines del puerto.
PCFG2:PCFG0 AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
000 A A A A A A A A
001 A A A A V
REF
A A A
010 D D D A A A A A
011 D D A A V
REF
A A A
100 D D D D A D A A
101 D D D D V
REF
D A A
11x D D D D D D D D
A = Entrada analgica. D = E/S digital.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
109
Nota: Cuando AN3 est seleccionada como V
REF
, la tensin de referencia es la que hay en el pin
AN3. Cuando AN3 est seleccionada como entrada analgica (A), la tensin de referencia para
el conversor A/D es la V
DD
del dispositivo.

Los pasos a seguir para realizar una conversin A/D son :
1. Configurar mdulo A/D:
a. Configuracin de pines analgicos/ Tensin de referencia/ E/S digitales
(ADCON1).
b. Seleccin de la entrada A/D (ADCON0).
c. Seleccin de reloj para la conversin A/D (ADCON0).
d. Habilitar mdulo A/D (ADON (ADCON0<0>)
2. Configurar las interrupciones (si se quiere):
a. ADIF =0
b. GIE = PEIE = ADIE = 1
3. Esperar el tiempo de adquisicin.
4. Comenzar la conversin poniendo a 1 el bit GO/ DONE(ADCON0<2>).
5. Esperar a que termine la conversin. Puede ser de dos formas:
a. Leyendo constantemente el bit GO/ DONEhasta que se ponga a 0,
indicando el fin de la conversin.
b. Esperando a que se produzca la interrupcin.
6. Leer registro de conversin ADRES y borrar en flag ADIF si es necesario.
7. Para la siguiente conversin se salta a los puntos 1, 2 3 en funcin de lo que se
necesite. El tiempo de conversin por bit se define como T
AD
. Un mnimo de 2T
AD

son necesarios antes de la conversin.

Para la conversin existen ciertos requerimientos de tiempos:
Tiempo de adquisicin (T
ACQ
): Es el tiempo que tarda en cargarse el condensador
de retencin con la tensin de la salida. Esta carga depende de varios factores,
como pueden ser las impedancias asociadas a la fuente de tensin y a los
interruptores de muestreo,. Se calcula as:
T
ACQ
= T
AMP
+ T
C
+ T
COFF



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
110
Siendo T
AMP
el tiempo de establecimiento del amplificador, T
C
el tiempo de carga
del condensador y T
COFF
el coeficiente de temperatura.
El tiempo de adquisicin es del orden de 11s.
Tiempo de conversin por bit (T
AD
): Para convertir 8 bits se requiere un tiempo de
9.5T
AD
. Por otro lado, el T
AD
va a depender de la fuente de reloj que se seleccione
para la conversin. Para una correcta conversin A/D, el reloj debe seleccionarse
para asegurar un tiempo T
AD
de 1,6 s. En la tabla 4.3 se muestran las distintas
fuentes que se pueden seleccionar junto con el T
AD
asociado a cada una de ellas.

TABLA 4.3 T
AD
frente a la frecuencia de operacin del dispositivo.
Fuente de reloj Frecuencia del dispositivo
Operacin ADCS1:ADCS0 20MHz 5MHz 1.25MHz 333.33kHz
2T
OSC
00 100 ns
(2)
400 ns
(2)
1.6 s 6 s
8T
OSC
01 400 ns
(2)
1.6 s 6.4 s 24 s
(3)

32T
OSC
10 1.6 s 6.4 s 25.6 s
(3)
96 s
(3)

RC 11 2-6s
(1,4)

2-6s
(1,4)
2-6s
(1,4)
2-6s
(1)

Nota 1: El T
AD
tpico de una fuente RC es de 4s.
2: Estos valores violan el mnimo tiempo requerido de T
AD
.
3: Para conversiones ms rpidas se recomienda utilizar otra fuente de reloj.
4: Para dispositivos de frecuencias superiores a 1MHz, el dispositivo debe de estar en modo
SLEEP para la conversin completa, o la precisin del convertidor A/D puede estar fuera de
las especificaciones.

El tiempo necesario para la conversin tambin depende de la resolucin con que se quiera
realizar dicha conversin. De este modo:
Tiempo de conversin = T
AD
+ N T
AD
+ (10 N) (2T
OSC
), (4.10)
siendo N el nmero de bits a convertir. Este tiempo de conversin se puede forzar violando
los requerimientos de T
AD
.

En la figura 4.32 se muestra la secuencia de la conversin A/D.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
111

Figura 4.32 Secuencia de conversin A/D.

La funcin de transferencia ideal del convertidor A/D es aquella cuya primera transicin
ocurre cuando la tensin analgica de entrada es 1 unidad del bit menos significativo del
resultado (V
REF
/256) (figura 4.33).


Figura 4.33 Funcin de transferencia A/D.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
112
Para la conversin, los TRIS asociados tienen que configurase como entradas. Adems
Si el mdulo CCPx est configurado en modo de comparacin con trigger interno, ste
disparar la conversin A/D.

4.10 Mdulos de comunicacin serie.

En los PIC de la gama Media existen los mdulos fundamentales para la comunicacin serie:
Puerto serie sncrono (SSP).
Receptor transmisor serie sncrono-asncrono universal (USART).

4.10.1 Puerto Serie Sncrono (SSP).

El mdulo SSP es un interface serie de comunicacin muy til para la comunicacin con otros
perifricos o microcontroladores. Existen dos formas de operacin de ste perifrico:
Interface serie de perifricos (SPI).
Inter-Integrated Circuit (I
2
C).

Los registros de control asociados a este mdulo son:
El registro SSPSTAT: Registro de estado del puerto serie sncrono.
R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0
SMP CKE D/ A P S R/ W UA BF
bit 7 bit 0
bit 7 SMP: Fase de muestreo de los datos de entrada.
SPI en modo maestro:
1 = El dato se muestrea al final de ciclo.
0 = El dato se muestrea en el medio del ciclo,
SPI en modo esclavo:
SMP debe ponerse a 0 cuando se trabaje en modo esclavo.
bit 6 CKE: Seleccin de flanco de reloj en modo SPI.
CPK =0 (SSPCON<4>).
1 = El dato se transmite en el flanco de subida de CKS.
0 = El dato se transmite en el flanco de bajada de CKS.
CKP =1 (SSPCON<4>).
1 = El dato se transmite en el flanco de bajada de CKS.
0 = El dato se transmite en el flanco de subida de CKS.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
113
bit 5 D/ A: Bit de datos/ direccin (slo en el modo I
2
C).
1 = Indica que el ltimo byte recibido o transmitido era un dato.
0 = Indica que el ltimo byte recibido o transmitido era una direccin.
bit 4 P: Bit de Stop. (slo en el modo I
2
C).
1 = Indica que ha sido detectada una condicin de Stop.
0 = No se ha detectado la condicin de Stop.
bit 3 S: Bit de Start. (slo en el modo I
2
C).
1 = Indica que ha sido detectada una condicin de Start.
0 = No se ha detectado la condicin de Start.
bit 2 R/ W: Bit de Lectura/ Escritura . (slo en el modo I
2
C).
Este bit retiene la informacin de lectura o escritura despus de la
ltima deteccin de direccin correcta. Es slo vlido desde la
confirmacin de direccin hasta el siguiente bit de start, stop, o no
ACK.
1 = Lectura.
0 = Escritura.
bit 1 UA: Actualizacin de direccin.
(slo en el modo I
2
C de 10 bits de direccin)
1 = Se necesita una actualizacin de la direccin en el reg. SSPADD.
0 = La direccin no necesita una actualizacin.
bit 0 BF: Bit de buffer lleno.
Recepcin (modos SPI e I
2
C).
1 = Recepcin completada, SSPBUF est lleno.
0 = La recepcin no ha finalizado, SSPBUF est vaco.
Transmisin
1 = Transmisin en proceso, SSPBUF lleno.
0 = Transmisin completa, SSPBUF vaco

El registro SSPCON: Registro de control del puerto serie sncrono.

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SPM0
bit 7 bit 0

bit 7 WCOL: Bit de colisin.
1 = El registro SSPBUF ha sido escrito mientras se realizaba una
transmisin previa (Se borra por software).
0 = No hay colisin.






Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
114
bit 6 SSPOV: Bit de overflow. (Se borra por software).
En modo SPI:
1 = Un nuevo dato se ha recibido cuando an no se ha ledo el dato
anterior almacenado en SSPBUF. El dato del registro SSPSR se
pierde y se mantiene el anterior. Slo se produce overflow en modo
esclavo.
0 = No hay overflow.
En modo I
2
C:
1 = Un nuevo byte es recibido cuando an no se ha ledo el registro
SSPBUF donde se encuentra el byte anteriormente recibido.
0 = No hay overflow.
bit 5 SSPEN: Bit de habilitacin del puerto serie sncrono. En ambos
modos, los pines han de ser correctamente configurados como entradas
o salidas.
En modo SPI:
1 = Habilitacin del puerto serie y configuracin de los pines SCK,
SDO, SDI y SS como fuente de ste.
0 = Puerto serie deshabilitado y pines configurados como E/S.
En modo I
2
C:
1 = Habilitacin del puerto serie y configuracin de los pines SDA y
SCL como fuente de ste.
0 = Puerto serie deshabilitado y pines configurados como E/S.
bit 4 CKP: Bit de seleccin de la polaridad del reloj.
En modo SPI:
1 = El estado de reposo para el reloj es el nivel alto.
0 = El estado de reposo para el reloj es el nivel bajo.
En modo I
2
C: (control de liberacin de la lnea de reloj).
1 = Habilitacin del reloj.
0 = Mantiene el reloj en estado bajo.
bits 3:0 SSPM3:SSPM0: Seleccin del modo del mdulo SSP.
0000 = SPI, modo maestro, reloj = F
OSC
/4.
0001 = SPI, modo maestro, reloj = F
OSC
/16.
0010 = SPI, modo maestro, reloj = F
OSC
/64.
0011 = SPI, modo maestro, reloj = Salida del TMR2 /2.
0100 = SPI, modo esclavo, reloj = pin SCK, pin SShabilitado.
0101 = SPI, modo esclavo, reloj = pin SCK, pin SSdeshabilitado.
Puede usarse como pin de E/S.
0110 = I
2
C, modo esclavo, direccin de 7 bits.
0111 = I
2
C, modo esclavo, direccin de 10 bits.
1000 = Reservado.
1001 = Reservado.
1010 = Reservado.
1011 = I
2
C en modo maestro controlado por firmware (esclavo inactivo)
1100 = Reservado.
1101 = Reservado.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
115
1110 = I
2
C, modo esclavo, direccin de 7 bits con interrupciones de
start y stop habilitadas.
1111 = I
2
C, modo esclavo, direccin de 10 bits con interrupciones de
start y stop habilitadas.

4.10.1.1 Modo SPI.

El modo SPI permite la transmisin y recepcin serie simultanea (full-duplex) de datos de
ocho bits. Tpicamente para la comunicacin se utilizan tres pines:
Salida de datos serie (SDO).
Entrada de datos serie (SDI).
Reloj serie (SCK).
Adems se puede utilizar un cuarto pin cuando se trabaja en el modo esclavo:
Seleccin de esclavo ( SS).

Al inicializar SPI, es necesario especificar varias opciones a travs de los registros
SSPCON<5:0> y SSPSTAT<7:6>. Estos bits permiten obtener las siguientes
especificaciones:
Modo maestro (SCK acta como salida).
Modo esclavo (SCK acta como entrada).
Polaridad del reloj (cuando el reloj est parado).
Flanco de reloj (captura del dato).
Fase de muestreo de los datos de entrada.
Seleccin de la fuente de reloj (slo en modo maestro).
Seleccin del modo esclavo.

El mdulo consiste en un registro de desplazamiento para recepcin/transmisin (SSPSR) y
un registro que acta como buffer (SSPBUF).

En SSPSR se desplaza el dato en escritura y lectura enviando primero el bit ms significativo.
En el registro SSPBUF se mantiene el dato que fue escrito en SSPSR hasta que el dato


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
116
recibido est listo. Una vez recibido, el contenido de SSPSR se carga en SSPBUF, activando
adems el bit BF (SSPSTAT<0>), y el flag de interrupcin SSPIF (PIR).

En la figura 4.34 se puede ver el diagrama de bloques para este modo.

Figura 4.34 Diagrama de bloques del mdulo SSP (Modo SPI).

El hecho de tener doble buffer permite que contine la recepcin de datos sin haber realizado
la lectura del byte recibido. Si se produce una escritura en SSPBUF durante la recepcin o
transmisin de un dato, sta ser ignorada y se activar el bit de colisin WCOL
(SSPCON<7>). El dato debe leerse antes de que se escriba el siguiente byte en SSPBUF. Al
leerse este registro se borrar el bit BF (SSPSTAT<0>).



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
117
Este mdulo deja de funcionar en modo SLEEP, si se trata del maestro, continuando una vez
que ha regresado al modo de funcionamiento normal. En caso de que se trate del esclavo,
puede transmitir y recibir estando en modo de reposo produciendo una interrupcin al final de
la operacin que lo despertar.

La figura 4.35 muestra la forma habitual de conexin entre dos microcontroladores en una
comunicacin serie con un modo de operacin SPI.


Figura 4.35 Conexin maestro/esclavo en modo SPI.

4.10.1.2 Modo I
2
C.

Se trata de un protocolo de comunicaciones mediante un par de hilos trenzados. En modo
estndar se pueden alcanzar transmisiones de 100Kbps, aunque en un modo superior se han
llegado a los 400 Kbps. Los pines usados para la transferencia de datos son SCL, que es la
lnea de reloj, y SDA, que es la de datos.






Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
118
En el mdulo SSP funcionando en el modo I
2
C intervienen cinco registros, los cuales se
describen a continuacin:
Registro de control del mdulo SSP (SSPCON): Mediante los bits SSPCON<3:0>,
se realiza la seleccin de uno de los siguientes modos de operacin I
2
C:
o I
2
C, modo esclavo, direccin de 7 bits.
o I
2
C, modo esclavo, direccin de 10 bits.
o I
2
C, modo multimaestro controlado por firmware, con 7 bits de direccin e
interrupciones en STOP y START.
o I
2
C, modo multimaestro controlado por firmware, con 10 bits de direccin
e interrupciones en STOP y START.
o I
2
C, modo maestro controlado por firmware.
Adems en este registro, mediante el bit SSPEN, se habilita el puerto serie para
que funcione como tal.
Registro de estado del mdulo SSP (SSPSTAT): Este registro muestra informacin
sobre el estado de la transferencia. Se incluye la deteccin de las condiciones de
Start y Stop, especifica si lo que se recibe es un dato o una direccin , si el
prximo byte es para completar la direccin de 10 bits, y si es una transferencia de
lectura o escritura.
Buffer de transmisin/recepcin serie (SSPBUF): Es el registro desde el cual se
leen o escriben los datos a transmitir.
Registro de desplazamiento (SSPSR): Este registro no es directamente accesible.
Es el que desplaza el dato para transmitirlo hacia el exterior del dispositivo, o
recibirlo de otro. En una transmisin se escribe desde el registro SSPBUF,
mientras que en una recepcin carga el dato de SSPSR a SSPBUF.
Registro de direccin (SSPADD): En este registro se almacena la direccin del
esclavo. En el modo de la direccin de 10 bits, primero se debe cargar el byte alto
(1111 0 A9 A8 0), y despus el byte bajo (A7:A0).






Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
119
La figura 4.36 muestra el diagrama de bloques del mdulo SSP funcionando en modo I
2
C.


Figura 4.36 Diagrama de bloques del mdulo SSP (modo I
2
C).

Como en todos los protocolos, el elemento que transmite es el maestro, y el que recibe el
esclavo. Se permite que existan varios maestros, es lo que se denomina modo multimaestro.
El maestro es el que enva la seal de reloj e inicia la transferencia.

En estado de no transferencia las lneas SDA y SCL estn en estado alto. Las condiciones de
Start y Stop (figura 4.37) determinan el comienzo y fin de las transferencias:
Condicin de Start: Transicin de alto a bajo en la lnea SDA cuando la lnea SCL
est en el estado alto.
Condicin de Stop: Transicin de bajo a alto en la lnea SDA cuando la lnea SCL
est en el estado alto.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
120

Figura 4.37 Condiciones de Start y Stop.

Debido a la propia definicin de estas condiciones, cuando los datos estn siendo
transmitidos, la lnea SDA nicamente puede cambiar de estado cuando la lnea SCL est a
nivel bajo.

En este protocolo cada elemento tiene asociada una direccin. As a la hora de realizar una
transferencia el maestro lo que hace es enviar la direccin del elemento con el que quiere
hablar. El resto de elementos deben estar escuchando para ver si se trata de su direccin.
Adems en esta trama se enva un bit para indicar que la operacin a realizar es de lectura o
escritura. Existen dos tipos de operaciones entre el maestro y el esclavo:
Maestro transmite y esclavo recibe.
Esclavo transmite y maestro recibe.

En ambos casos el maestro es el que enva la seal de reloj. Las lneas SCL de reloj y SDA de
datos tienen que estar en colector abierto para implementar de esta forma una Y-cableada
sobre el bus (Ser necesario usar resistencias pull-up externamente).

El mximo nmero de elementos conectados al bus viene dado por la mxima carga que
permite el bus que es de 400pF as como por la capacidad de direccionamiento.

En modo esclavo SDA y SCL deben configurarse como entradas a travs de los registros
TRIS. En caso de que se necesite transmitir el mdulo SSP se encargar de sobrescribir el
registro TRIS.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
121
Cuando el mdulo SSP reciba un dato o una direccin vlida, enva automticamente un bit
de reconocimiento ( ACK ) y carga el registro SSPBUF con el valor del registro SPPSR. En
caso de que el maestro no reciba la seal de ACK despus de haber enviado un byte, ste
aborta la transmisin y genera la condicin de Stop.

Existen dos condiciones en las cuales no se genera el bit ACK:
a) El bit BF (SSPSTAT<0>) =1 antes de la recepcin
del dato actual.
b) El bit SSPOV (SSPCON<6>) =1 antes de la
recepcin del dato actual.

Si el maestro es el que recibe los bytes, ste genera un bit ACK por cada byte recibido,
excepto para el ltimo. Cuando el esclavo detecta que no ha recibido el bit de reconocimiento,
deja la lnea SDA libre para que el maestro pueda generar la condicin de Stop.

Una vez que el mdulo SSP est habilitado, se espera a la aparicin del bit de Start. Al
detectarse, se empiezan a muestrear los datos de la lnea SDA en cada flanco de subida de
SCL, introducindolos en el registro SSPSR, que una vez lleno se comparar con el registro
SSPADD en el flanco de bajada del octavo pulso. Si ambas direcciones coinciden, BF y
SSPOV se pondrn a cero, y se sucedern los siguientes eventos:
a) El valor del registro SSPSR ser cargado en SSPBUF en el flanco de bajada del
octavo pulso de SCL.
b) El bit de buffer lleno BF se pondr a 1 en el flanco de bajada del octavo pulso de
SCL.
c) Se genera el bit de reconocimiento ACK.
d) El flag de interrupcin SSPIF se activar (produciendo una interrupcin si sta est
habilitada) en el flanco de bajada del noveno pulso de SCL.

En el caso de que las direcciones sean de 10 bits, es necesario recibir dos bytes. El primer
byte (11110 A9 A8 0) ha de ser cargado sobre el registro SSPADD. Los cinco bits ms


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
122
significativos indican que se trata de un direccionamiento de 10 bits. Los bits A9 y A8 son los
dos bits ms significativos de la direccin del esclavo, y por ltimo se enva el bit R/ W. La
secuencia que se sigue es al siguiente:
a) Se recibe el byte alto de la direccin. Los bits SSPIF, BF y UA se ponen a 1.
b) Se actualiza SSPADD con el byte bajo de la direccin (A7:A0) y se borra el bit
UA al realizarse esta escritura.
c) Se lee SSPBUF (BF=0) y se borra el flag SSPIF por software.
d) Se recibe el segundo byte de la direccin. Los bits SSPIF, BF y UA se ponen a 1.
e) Se actualiza SSPADD con el byte alto de la direccin, con lo que se borra UA.
f) Se lee SSPBUF (BF=0) y se borra el flag SSPIF por software.
g) Se recibe la condicin de Start repetida.
h) Se recibe de nuevo la parte alta de la direccin. Los bits SSPIF, BF y UA se ponen
a 1.
i) Se lee SSPBUF (BF=0) y se borra el flag SSPIF por software.

En una operacin de recepcin, cuando el bit R/ Wdel byte de direccin est a cero, y ocurra
una validacin de direccin, el bit R/ Wdel registro SSPSTAT se pondr a cero. Las figuras
4.38 y 4.39 muestran las seales de una recepcin con el protocolo I
2
C.


Figura 4.38 Secuencia de seales en una recepcin I
2
C. (7 bits de direccin).



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
123

Figura 4.39 Secuencia de seales en una recepcin I
2
C. (10 bits de direccin).

En la transmisin, cuando el bit R/ Wdel byte de direccin est a uno, y ocurra una validacin
de direccin, el bit R/ Wdel registro SSPSTAT se pondr a uno. El bit de reconocimiento
ACK ser enviado en el noveno pulso, y la lnea SCL se mantendr a nivel bajo. El dato a
transmitir debe ser cargado en el registro SSPBUF, de donde se cargar en SSPSR. Entonces
el pin SCL se habilitar poniendo a 1 el bit CKP (SSPCON<4>). Las figuras 4.40 y 4.41
muestran las seales de una transmisin con el protocolo I
2
C.


Figura 4.40 Secuencia de seales de una transmisin en I
2
C. (7 bits de direccin).



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
124

Figura 4.41 Secuencia de seales de una transmisin en I
2
C (10 bits de direccin).

El modo de operacin como maestro se controla por software mediante interrupciones. Estas
fuentes de interrupcin para el control del modo maestro son:
Condicin de Start.
Condicin de Stop.
Por cada byte recibido o transmitido.

Este protocolo tambin permite que existan varios maestros en el sistema. Cuando varios
maestros intentan acceder al bus, es necesario un protocolo de arbitraje y una sincronizacin
del reloj.

El arbitraje se realiza en la lnea SDA cuando la lnea SCL est en estado alto. Cada maestro
debe chequear constantemente las lneas SDA y SCL. Aquel que transmita un 1 frente al que
transmita un 0 pierde el bus, por lo que tendra preferencia el maestro que enve la direccin
ms baja. En caso de que dos maestros se comuniquen con el mismo elemento, se quedara
con el bus aquel que mande el dato de menor valor. Un ejemplo de arbitraje entre dos
maestros se muestra en la figura 4.42.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
125

Figura 4.42 Arbitraje entre dos maestros.

La sincronizacin del reloj se realiza mediante una Y-cableada de las lneas SCL de todos los
maestros.

Slo se puede hacer uso del bus cuando el bit P (SSPSTAT<4>) est a1 o si el bus est en
reposo, es decir S (SSPSTAT<3>) = P (SSPSTAT<4>) = 0.

Para terminar, mencionar que este mdulo puede estar recibiendo datos en modo SLEEP y
despertarse mediante la interrupcin que indica la transmisin completa del byte. Un RESET
en el sistema deshabilitara el mdulo SSP.

4.10.2 USART.

La USART (Transmisor Receptor Serie Sncrono Asncrono Universal), tambin conocido
como el interface de comunicacin serie (SCI), es el otro de los mdulos de comunicacin
serie que poseen los PIC. Puede configurarse para que trabaje en modo full duplex
asncrono para comunicarse con un PC o terminal y en modo half duplex para perifricos.





Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
126
Tiene tres modos de trabajo:
Asncrono (full duplex).
Maestro sncrono (half duplex).
Esclavo sncrono (half duplex).

Los registros asociados a este mdulo son:
TXSTA: Registro de control y estado de la transmisin.

R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-1 R/W-0
CSRC TX9 TXEN SYNC -- BRGH TRMT TX9D
bit 7 bit 0

bit 7 CSRC: Seleccin de la fuente de reloj.
Modo asncrono:
No se tiene en cuenta.
Modo sncrono:
1 = Modo maestro (reloj generado internamente por BRG).
0 = Modo esclavo ( fuente de reloj externa).
bit 6 TX9: Habilitacin de la transmisin de 9 bits.
1 = Transmisin de 9 bits.
0 = Transmisin de 8 bits.
bit 5 TXEN: Bit de habilitacin del transmisor.
1 = Transmisor activado.
0 = Transmisor desactivado.
bit 4 SYNC: Seleccin del modo de la USART.
1 = Modo sncrono.
0 = Modo asncrono.
bit 3 Bit no implementado: Se lee como 0.
bit 2 BRGH: Seleccin de baudios de alta velocidad.
Modo asncrono:
1 = Alta velocidad.
0 = Baja velocidad.
Modo Sncrono:
No se utiliza en este modo.
bit 1 TRMT: Estado del registro de desplazamiento TSR.
1 = TSR lleno.
0 = TSR vaco.
bit 0 TX9D: 9 bit de datos en la transmisin. Puede ser un bit de paridad.




Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
127
RCSTA: Registro de control y estado de recepcin.

R/W-0 R/W-0 R/W-0 R/W-0 U-0 R-0 R-0 R-0
SPEN RX9 SREN CREN -- FERR OERR RX9D
bit 7 bit 0

bit 7 SPEN: Habilitacin del puerto serie.
1 = Puerto serie habilitado (configura los pines RX/DT y TX/CK como
pines del puerto serie).
0 = Puerto serie deshabilitado.
bit 6 RX9: Habilitacin de la recepcin de 9 bits.
1 = Recepcin de 9 bits.
0 = Recepcin de 8 bits.
bit 5 SREN: Activacin de recepcin simple
Modo asncrono:
No se tiene en cuenta.
Modo sncrono:
1 = Activa la recepcin.
0 = Desactiva la recepcin.
Este bit se pone a 0 despus de que la recepcin ha sido completada.
bit 4 CREN: Activacin de recepcin continua.
Modo asncrono:
1 = Activada la recepcin.
0 = Desactivada la recepcin.
Modo sncrono:
1 = Activa la recepcin continua
0 = Desactiva la recepcin continua.
bit 3 Bit no implementado: Se lee como 0.
bit 2 FERR: Error de framing.
1 = Se ha producido error (se actualiza leyendo el registro RCREG y
recibiendo el siguiente dato vlido).
0 = No hay error.
bit 1 OERR: Error de overrun.
1 = Se ha producido error (se borra borrando CREN).
0 = No hay error.
bit 0 RX9D: 9 bit de datos en la recepcin. Puede ser un bit de paridad.

SPBRG: Registro de seleccin de baudios.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
128
Este ltimo registro controla el periodo de funcionamiento del generador de baudios. El
generador de baudios es un registro de ocho bits llamado BRG. Para saber que valor hay que
cargar en el registro SPBRG hay que usar las siguientes expresiones:
Modo asncrono (SYNC = 1).
o Baja velocidad (BRGH = 0);
) 1 (x 64
F
Baudios
OSC
+
= (4.11)
o Alta velocidad (BRGH = 1);
) 1 (x 16
F
Baudios
OSC
+
= (4.12)
Modo sncrono (SYNC = 0).
o Baja velocidad (BRGH = 0);
) 1 (x 4
F
Baudios
OSC
+
= (4.13)
o Alta velocidad (BRGH = 1);
No implementado.

As por ejemplo si se quieren obtener 9600 baudios, con una F
OSC
de 16MHz, en modo
asncrono, a baja velocidad, el valor que se deber cargar en el registro SPBRG se calcula de
la siguiente forma:
;
1) (x 64
10 16
9600
6
+

= (4.14)
de donde x = 25.042 25 con un error del 0.16%.

Normalmente suele ser ms ventajoso usar el modo rpido, an cuando la velocidad sea baja,
ya que la expresin (4.12) reduce el error del generador de baudios el algunos casos. Cuando
se produce una nueva escritura sobre SPBRG, el temporizador BRG se resetea.

4.10.2.1 Modo asncrono.

En este modo la USART utiliza el formato estndar NRZ (nonreturntozero), que consta de
un bit de start, ocho o nueve bits de datos y un bit de stop. Los datos son transmitidos y
recibidos comenzando por el bit menos significativo. El transmisor y receptor son
funcionalmente independientes pero utilizan el mismo formato y generador de baudios,


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
129
pudiendo utilizar este reloj entre x16 o x64, dependiendo del bit BRGH (TXSTA<2>). La
paridad no est implementada por hardware, pero se puede realizar mediante software y
almacenarse como el noveno bit de datos. Este mdulo asncrono permanece inactivo cuando
el sistema se encuentra en modo SLEEP.

El modo asncrono se selecciona poniendo a cero el bit SYNC (TXSTA<4>).

Transmisin
El registro usado para transmitir es el registro de desplazamiento TSR (figura 4.43), el cual
recibe el dato del registro de lectura/escritura TXREG que se carga mediante software. La
transferencia de TXREG a TSR no se produce hasta que no se transmita el bit de Stop del
carcter anterior. Una vez cargado el registro TSR con el valor de TXREG, este ltimo se
queda vaco y el flag TXIF (PIR) se pone a 1.En el caso de que TXIE, PEIE y GIE estn
activados, se producir una interrupcin. El flag TXIF slo se puede borrar haciendo una
nueva escritura sobre el registro TXREG.


Figura 4.43 Diagrama de bloques de la USART transmitiendo.

El flag TRMT (TXSTA<1>) indica si el registro TSR est lleno o vaco. Para poder transmitir
el noveno bit se usan los flags TX9 (TXSTA<6>) que habilita la transmisin de este bit y


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
130
TX9D (TXSTA<0>). Este bit tiene que ser escrito antes de los ocho bits de datos, ya que una
escritura en el registro TXREG puede producir una escritura inmediata de TSR si este se
encuentra vaco. Los pasos a seguir para la configuracin de una transmisin asncrona son:
1. Inicializacin de SPBRG con los baudios que se deseen. Si se quiere
velocidad alta el bit BRGH (TXSTA<2>) se deber poner a 1.
2. Habilitar el puerto serie asncrono borrando el bit SYNC (TXSTA<4>) y
poniendo a 1 el bit SPEN (RCSTA<7>).
3. Si se quieren interrupciones se debern habilitar los bits TXIE, GIE y
PEIE.
4. Si la transmisin va a ser de 9 bits, habr que poner a 1 el bit TX9
(TXSTA<6>).
5. Habilitacin de la transmisin por medio del bit TXEN (TXSTA<5>). Al
hacer esto el bit TXIF se pondr a 1 ya que TXREG est vaco.
6. En el caso de que se quiera transmitir el noveno bit, se escribe sobre el bit
TX9D (TXSTA<0>).
7. Se carga el byte a transmitir en el registro TXREG, con lo que comienza la
transmisin.

La figura 4.44 muestra un ejemplo de una secuencia de transmisin asncrona de una USART
en modo maestro.


Figura 4.44 Transmisin asncrona.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
131

Recepcin
El mdulo de recepcin asncrono recibe los datos a travs del pin RX/DT mediante el
mdulo de recuperacin de datos (figura 4.45). Este bloque no es ms que un registro de
desplazamiento de alta velocidad que opera a 16 veces la velocidad en baudios del mdulo de
transferencia. Una vez que se tiene seleccionado el modo asncrono la recepcin se habilita a
travs del bit CREN (RCSTA<4>).

Figura 4.45 Diagrama de bloques de la USART en recepcin asncrona.

El bloque fundamental de esta recepcin es el registro de desplazamiento RSR. Una vez
detectado el bit de Stop que indica el fin de la transferencia, el byte ledo en RSR se transfiere
a RCREG, activndose el flag RCIF (PIR) y produciendo una interrupcin en el caso de que
RCIE (PIR), GIE y PEIE estn activados. El flag RCIF es un bit de slo lectura, la forma de
borrarlo es leyendo el registro RCREG, dejndolo vaco. Este ltimo registro es un doble
buffer que permite recibir dos bytes y transferirlos a RCREG y estar recibiendo un tercer byte
en RSR. Cuando se detecta el bit de Stop de este tercer byte, si el registro RCREG est lleno,
se produce un error de overrun y se activa el flag OERR (RCSTA<1>). En este caso la


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
132
palabra de RSR se pierde. Este bit se borra poniendo a 0 y luego a 1 el bit CREN
(RCSTA<4>). Otro tipo de error que se puede producir es el error de framing, que consiste en
leer el bit de Stop a nivel bajo. Este error se refleja activando el bit FERR (RCSTA<2>). El
bit FERR y el noveno bit del dato se cargan sobre el registro RCSTA. Esta carga de RX9D y
FERR se produce al realizar la lectura del registro RCREG, por lo que es fundamental leer el
registro RCSTA antes de leer de nuevo RCREG, ya que se perdera esta informacin. Los
pasos a seguir en una recepcin asncrona son:
1. Inicializar SPBRG con el valor de baudios apropiado. Si se quiere velocidad alta el
bit BRGH (TXSTA<2>) se deber poner a 1.
2. Habilitar el funcionamiento en modo sncrono borrando el bit SYNC (TXSTA<4>)
y activando SPEN (RCSTA<7>).
3. Si se van ha utilizar interrupciones habr que habilitarlas activando los bits RCIE,
GIE y PEIE.
4. En caso de querer recibir el noveno bit se pondr RX9 (RCSTA<6>) a 1.
5. Habilitar la recepcin activando el bit CREN (RCSTA<4>).
6. Despus de cada carcter recibido el flag RCIF (PIR) se pondr a 1, activando
una interrupcin en caso de que sta est habilitada.
7. Leer el registro RCSTA para obtener el noveno bits, si ste est habilitado, y ver si
ha aparecido algn error.
8. Leer los ocho bits restantes mediante la lectura de RCREG.
9. Si se ha producido algn error, borrar el flag a travs del bit CREN (RCSTA<4>).

La figura 4.46 muestra un ejemplo de una secuencia de recepcin asncrona.

Figura 4.46 Recepcin asncrona.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
133
4.10.2.2 Modo sncrono.

En el modo sncrono la comunicacin es de tipo half-duplex, por lo que la transmisin y la
recepcin no pueden realizarse al mismo tiempo. La diferencia sustancial entre el modo
sncrono y el asncrono es que ahora el reloj es generado por el maestro y el esclavo lo utiliza.
Este reloj se recibe a travs de la patilla TX/CK. Para configurar la USART para que trabaje
en modo sncrono hay activar el bit SYNC (TXSTA<4>).

Modo Maestro
Para configurar el modo maestro se pone a 1 el bit SPEN (RCSTA<7>), con lo que se
configura TX/CK y RX/DT como lneas para reloj y datos respectivamente. Adems el modo
maestro se configura tambin mediante la activacin del bit CSRC (TXSTA<7>).

Con respecto a la transmisin, no existen diferencias sustanciales con respecto al modo
asncrono, salvo que ahora el reloj se propaga a los esclavos a travs de TX/CK.

Los pasos necesarios para llevar a cabo una transmisin sncrona son:
1. Inicializar el registro SPBRG con el valor apropiado. Para el modo de alta
velocidad ser necesario poner a 1 el bit BRGH.
2. Habilitar el puerto serie sncrono en modo maestro poniendo a 1 los bits SYNC,
SPEN y CSRC.
3. Si se desea utilizar interrupciones, habr que habilitar el bit TXIE.
4. Si se quiere realizar la transmisin del noveno bit activar el bit TX9 (TXSTA<6>).
5. Habilitar la transmisin mediante el bit TXEN.
6. Si se ha seleccionado la transmisin del noveno bit, habr que cargar el valor de
ste en TX9D.
7. Cargar el dato en el registro TXREG, con lo que se iniciar la transmisin.

En la figura 4.47 se muestra la secuencia de una transmisin sncrona.



Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
134

Figura 4.47 Transmisin sncrona.

Con respecto a la recepcin, una vez que el maestro se ha configurado, se habilita con el flag
SCREN (RCSTA<5>), si est a 1 recibir un carcter y se pondr a 0 deshabilitando la
recepcin, o mediante la activacin del bit CREN (RCSTA<4>) que habilitar la recepcin
continua hasta que se ponga a 0. El resto es igual que en la recepcin asncrona. Los pasos a
llevar a cabo en una recepcin sncrona son:
1. Inicializar el registro SPBRG con el valor apropiado. Para el modo de alta
velocidad ser necesario poner a 1 el bit BRGH.
2. Habilitar el puerto serie sncrono en modo maestro poniendo a 1 los bits SYNC,
SPEN y CSRC.
3. Asegurarse de que los bits CREN y SCREN estn a 0.
4. Si se desea utilizar interrupciones, habr que habilitar el bit RCIE..
5. Si se quiere realizar la recepcin del noveno bit activar el bit RX9 (RCSTA<6>).
6. Si se necesita la recepcin nica se pondr a 1 en bit SCREN, mientras que para
recepcin continua se activar CREN
7. El flag RCIF se activar cuando la recepcin se haya completado dando lugar a
una interrupcin si esta estuviese activada.
8. Leer el registro RCSTA para obtener el noveno bit y determinar si hubo algn
error en la recepcin.
9. Leer la palabra recibida en el registro RCREG.
10. En el caso de que se hubiera producido algn error, desactivarlo poniendo a cero el
bit CREN.


Microcontroladores PIC de la Gama Media. 4. Los Perifricos de los PIC de la Gama Media.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
135
En la figura 4.48 se muestra la secuencia de una recepcin sncrona.


Figura 4.48 Recepcin sncrona.

Modo esclavo
Este modo difiere del modo maestro en que reloj se recibe por el pin TX/CK, pudiendo
transmitir y recibir en modo de reposo (SLEEP). Para entrar en modo esclavo es necesario
poner a 0 el bit CSRC (TXSTA<7>).

Tanto la transmisin como la recepcin es igual que en el modo maestro salvo cuando trabaja
en modo de reposo.
Transmisin en reposo: Se pueden escribir dos caracteres, uno en TXREG que
pasa a TSR, y otro que quedar en TXREG. Una vez que el segundo carcter pase
a TSR se producir una interrupcin que despertar al sistema.
Recepcin en reposo: Para poder recibir datos el bit CREN ha de estar activado.
Una vez recibido un carcter, ste pasa del registro RSR a RCREG produciendo
una interrupcin que saca al sistema del modo de reposo.






Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
137

Captulo 5. Programacin con PIC.


5.1 Introduccin.

Una vez que se ha visto la estructura y las caractersticas del funcionamiento de los
microprocesadores PIC de la gama Media, hay que hacer mencin a la forma de
programarlos.

A lo largo de este captulo se tratar el ensamblador de los PIC, MPASM, que es el que
produce el cdigo mquina para poder programar el dispositivo. Tambin se ver algo sobre
el montador de enlaces MPLINK, el cual permite programar un dispositivo a partir de varios
cdigos objeto o hacer uso de libreras.

Debido a la gran variedad de situaciones que se pueden dar a la hora de realizar un programa,
se darn una nociones de cmo programar, a partir del juego de instrucciones reducido de los
microcontroladores PIC, estructuras de cierta complejidad, como estructuras iterativas,
condicionales, creacin de cdigos de condicin, etc.

Otro punto de gran utilidad a la hora de programar es la utilizacin de libreras, ya que
ofrecen multitud de aplicaciones ya programadas.

5.2 Directivas del ensamblador MPASM.

Las directivas son comandos del ensamblador que aparecen en el cdigo fuente, pero que no
son traducidas a cdigo mquina. stas son usadas para el control del ensamblador; entradas,
salidas y localizacin de datos. Muchas de las directivas del ensamblador tienen distintos
nombres y formatos, para ofrecer compatibilidad con ensambladores anteriores de Microchip.



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
138
A continuacin se muestra la tabla 5.1 con todas las directivas del ensamblador.
TABLA 5.1 Resumen de las directivas.
Directiva Descripcin Sintaxis
_ _BADRAM
Especifica las localizaciones invlidas de la
RAM.
_ _badram <expr>
BANKISEL
Genera cdigo para la seleccin del banco de
RAM para un direccionamiento indirecto.
bankisel <etiqueta>
BANKSEL Genera cdigo para la seleccin de banco RAM. banksel <etiqueta>
CBLOCK Define un bloque de constantes. cblock [<expr>]
CODE Comienzo de seccin de cdigo ejecutable. [<etiqueta>] code [<direccin>]
_ _CONFIG Especifica los bits de configuracin. _ _config <expr>
CONSTANT Declara smbolos constantes.
constant <etiqueta>[=<expr>,...
...,<etiqueta>[=<expr>]
DATA Crea datos numricos y textos.
[<etiqueta>]data<expr>[,<expr>,.., expr>]
[<etiqueta>]data<cadena_de_texto>
[,<cadena_de_texto>, ...]
DB Declara datos de un byte.
[<etiqueta>] db<expr>[,<expr>,...,<expr>]
[<etiqueta>] db<texto>[,<texto>,...]
DE Define datos EEPROM.
[<etiqueta>] de<expr>[,<expr>,...,<expr>]
[<etiqueta>] de<texto>[,<texto>,...]
#DEFINE Define etiquetas.
define <nombre> [<valor>]
define <nombre> [<arg>,...,<arg>]<valor>
DT Define una tabla.
[<etiqueta>] dt<expr>[,<expr>,...,<expr>]
[<etiqueta>] dt<texto>[,<texto>,...]
DW Declara datos de una palabra.
[<etiqueta>]dw<expr>[,<expr>,...,<expr>]
[<etiqueta>]dw<texto>[,<texto>,...]
ELSE Comienzo de bloque alternativo a IF. else
END Fin del bloque de programa. end
ENDC Fin de un bloque de definicin de constantes. endc
ENDIF Fin de un bloque condicional. endif
ENDM Fin de la definicin de una macro. endm
ENDW Fin de un lazo while endw
EQU Define y ensambla constantes. <etiqueta> equ <expr>
ERROR Emisin de un mensaje de error. error <cadena_de_texto>
ERRORLEVEL Fija niveles de error. errorlevel 0 | 1 | 2 <+ | -><nummsj>
EXITM Sale de una macro. exitm
EXPAND Expansin de macros. expand
EXTERN Declara una etiqueta externa. extern <etiqueta>[,<etiqueta>]
FILL Ocupa memoria. [<etiqueta>] fill <expr>, <cuenta>
GLOBAL Exporta una etiqueta definida. global <etiqueta> [, <etiqueta>]
IDATA Comienza una seccin de datos inicializados. [<nombre>] idata [<direccin>]
_ _IDLOCS Especifica localizaciones ID. _ _idlocs <expr>
IF
Comienza un bloque de ensamblado de cdigo
condicional.
if <expr>
IFDEF Ejecuta si el smbolo ha sido definido. ifdef <etiqueta>
IFNDEF Ejecuta si el smbolo no ha sido definido. ifndef <etiqueta>
#INCLUDE Incluye archivos fuente adicionales.
include <<archivo_include>> |
<archivo_include>
LIST Listado de opciones. list [<opcin_list>, ..., <opcin_list>]
LOCAL Declara una variable local de una macro. local <etiqueta> [,<etiqueta>]
MACRO Define una macro. <etiqueta> macro [<arg>, ..., <arg>]
_ _MAXRAM Especifica la direccin mxima de RAM. _ _maxram <expr>


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
139
Directiva Descripcin Sintaxis
MESSG Crea mensaje definido por el usuario messg <texto_del_mensaje>
NOEXPAND Fin de la expansin de macros. noexpand
NOLIST Desactiva las opciones de salida. nolist
ORG Fija el origen del programa. <etiqueta> org <expr>
PAGE Inserta una salida de pgina. page
PAGESEL
Genera el cdigo para la seleccin de la pgina
de ROM.
pagesel <etiqueta>
PROCESSOR Indica tipo de procesador. processor <tipo_de_procesador>
RADIX Especifica la base de numeracin por defecto. radix <radix_defecto>
RES Reserva memoria. [etiqueta>] res <unidades_de_memoria>
SET Define y ensambla variables. <etiqueta> set <expr>
SPACE Inserta lneas en blanco en el listado. space <expr>
SUBTITLE Especifica el subttulo del programa. subtitle <texto_de_subttulo>
TITLE Especifica el ttulo del programa. title <texto_de_ttulo>
UDATA Comienza una seccin de datos no inicializados. [<nombre>] udata [<direccin>]
UDATA_OVR
Comienza una seccin de datos no inicializados
reutilizables.
[<nombre>] udata_ovr [<direccin>]
UDATA_SHR
Comienza una seccin de datos no inicializados
compartidos.
[<nombre>] udata_shr [<direccin>]
#UNDEFINE Borra una etiqueta de substitucin. #undefine <etiqueta>
VARIABLE Declara un smbolo variable.
variable <etiqueta>[=<expr>, ...,
<etiqueta> [=<expr>]]
WHILE Ejecuta un lazo mientras la condicin sea verdad while <expr>

A continuacin se muestra una descripcin detallada de cada una de ellas:

_ _BADRAM y _ _MAXRAM
1
: Ambas directivas juntas marcan los registros que
no estn implementados. _ _MAXRAM define la direccin mxima de RAM
vlida, iniciando el mapa de RAM, validando todas las direcciones menores que
<expr>. El valor marcado por <expr> debe ser mayor o igual que la mxima
direccin de la pgina 0 de la memoria RAM y menor que 1000H. _ _BADRAM
define la localizacin de las direcciones de la RAM que no son vlidas. Una
directiva _ _BADRAM debe estar precedida por una _ _MAXRAM. Cada <expr>
usada por _ _BADRAM debe ser menor o igual al valor especificado por la <expr>
de _ _MAXRAM.
_ _ MAXRAM puede ser usada ms de una vez, redefiniendo la mxima direccin
vlida de RAM y reseteando el mapa entero de RAM.


1
En las directivas que estn precedidas por dos guiones bajos _ _, no hay ningn espacio entre ellos, pero en este
documento se incluyen, ya que si no, no se distinguen bien.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
140
La sintaxis de estas directivas es:
_ _maxram <expr>
_ _badram <expr>
Ejemplo:
list p=16c622
_ _maxram H0BF
_ _badram H07 H09, H0D H1E
_ _badram H87 H89, H8D, H8F H9E
movwf H07 ; Genera un warning de RAM invlida
movwf H87 ; Genera un warning de RAM invlida
; y un mensaje de truncamiento
BANKISEL: Se usa cuando se genera un cdigo objeto. Esta directiva es una
instruccin que genera la seleccin adecuada del banco para el acceso indirecto
una direccin especificada por una <etiqueta>. Slo una <etiqueta> puede ser
especificada, y debe ser previamente definida. El linkador generar el cdigo
apropiado para seleccionar el banco.
La sintaxis es:
bankisel <etiqueta>
Ejemplo:
movlw Var1
movwf FSR
bankisel Var1
...
movwf INDF
BANKSEL: Se usa para generar el cdigo objeto de un programa. Esta directiva
es una instruccin para que el linkador genere el cdigo para ir de banco a banco
designando una <etiqueta>. Slo puede ser especificada una <etiqueta>, que debe
ser previamente definida.
La sintaxis es la siguiente:
banksel <etiqueta>
Ejemplo:
banksel Var1
movwf Var1





Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
141
CBLOCK y ENDC: Sirve para definir una lista de constantes en la memoria de
datos.
La sintaxis es la siguiente:
cblock [<expr>]
<etiqueta>[:incremento][,<etiqueta>[:<incremento>]]
endc
[<expr>] indica la direccin inicial de la memoria de datos para la primera
etiqueta. En el caso de no ser especificada, se pueden dar dos situaciones:
a) Si anteriormente se ha utilizado esta misma directiva, entonces a la primera
etiqueta se le asigna la direccin inmediatamente superior a la de la ltima
etiqueta de la directiva CBLOK anterior.
b) En el caso de que sea la primera vez que se utilice, entonces se le asigna la
direccin 0x00.
Todas las etiquetas dentro de la definicin de CBLOCK tendrn posiciones de
memoria consecutivas, a no ser que se haya definido [:<incremento>], en cuyo
caso se incrementar la direccin con el valor indicado.
La definicin de etiquetas termina cuando el ensamblador se encuentre con la
directiva ENDC.
Ejemplo:
cblock 0x0C ; nombre_1 ser
; asignada a la direccin 0x0C
nombre_1, nombre_2 ; nombre_2 a 0E, nombre_3 a 0F
nombre_3, nombre_4 ; y nombre_4 a 10.
endc
CODE: Se utiliza en la generacin de cdigo objeto. Indica el principio de la
seccin de un cdigo de programa. Si no se especifica la <etiqueta>, la seccin se
nombra como code. La direccin donde empieza la seccin de programa es la
direccin especificada, siendo cero si no se indica.
La sintaxis es:
[<etiqueta>] code [<direccin de ROM>]
Ejemplo:
RESET code H01FF
goto INICIO


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
142
_ _CONFIG: Pone los bits de configuracin del microprocesador al valor indicado
por <expr>. Hay que referirse a las hojas de caractersticas de los
microcontroladores PIC para la descripcin de los bits de configuracin de cada
procesador.
Antes del uso de esta directiva, el procesador debe de ser declarado a travs de la
lnea de comandos, con la directiva LIST o PROCESOR. Si estas directivas son
usadas con la familia PIC17CXX, el formato de salida del archivo hex debe estar
fijado a INHX32 mediante una directiva LIST.
La sintaxis de esta directiva es:
_ _config <expr>
Ejemplo:
list p=17c42, f=INHX32
_ _config HFFFF ; Bits de configuracin por defecto.
CONSTANT y VARIABLE: Sirve para definir smbolos que pueden ser usados
en expresiones de MPASM. La diferencia entre usar una u otra, es que con
CONSTANT no se puede modificar su valor una vez asignado. Adems al definir
variables no es necesario iniciarlas.
La sintaxis es la siguiente:
constant <etiqueta>=<expr>[,<etiqueta>=<expr>]
variable <etiqueta>[=<expr>][,<etiqueta>[=<expr>]]
Ejemplo:
variable RECLONG=64 ; Establece el valor por defecto de RECLONG.
constant BUFLONG=512 ; Inicializa BUFLONG.
constant MAXMEM=RECLONG+BUFLONG ; Calcula MAXMEM
DATA: Inicializa con datos una o ms palabras de la memoria de programa. Estos
datos pueden ser constantes, etiquetas o expresiones de alguna de las anteriores. El
dato puede consistir tambin en una cadena de caracteres en cdigo ASCII,
<cadena_de_texto>, encerrado en comillas simples para un solo carcter o dobles
comillas para una cadena. Los elementos de un solo carcter se guardan en el byte
bajo de la palabra, mientras que las cadenas de caracteres son guardas de dos en
dos en cada palabra, con el primer carcter en el byte ms significativo. Si el


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
143
nmero de caracteres es impar, el ltimo byte es cero. Cuando se genera el cdigo
objeto, esta directiva tambin puede utilizarse para inicializar valores de datos.
La sintaxis de esta directiva es:
[<etiqueta>] data <expr>[,<expr>, ..., <expr>]
[<etiqueta>] data <cadena_de_texto>[, <cadena_de_texto>, ...]
Ejemplo:
data etiqueta_reubicablel+10 ; constantes
data 1,2,etiqueta_ext l ; constantes, externas
data testeando 1,2,3 ; cadena de texto
data N ; carcter simple
data inicio_de_programa ; etiqueta reubicable
DB: Reserva palabras en la memoria de programa con valores de ocho bits. Para
expresiones mltiples se guardan en bytes consecutivos hasta el final de la
expresin. Si son un nmero impar de expresiones, el ltimo byte ser cero.
Cuando se genera el cdigo objeto, esta directiva tambin se puede utilizar para
inicializar el valor de los datos.
Su sintaxis es:
[<etiqueta>] db <expr>[,<expr>, ..., <expr>]
Ejemplo:
db t, 0x0f, e, 0x0f, s, 0x0f, t, \n
DE: Reserva palabras en memoria con datos de ocho bits. Cada <expr> debe
evaluarse con un valor de ocho bits. Los bits altos de la palabra son ceros. Cada
carcter en una cadena de caracteres se guarda en una palabra distinta.
Aunque se dise originalmente para inicializar datos EEPROM en los PIC16C8X,
esta directiva puede utilizarse para cualquier localizacin y en cualquier
procesador.
Su sintaxis es:
[<etiqueta>] de <expr>[,<expr>, ..., <expr>]
Ejemplo:
org H2100 ; Inicializar datos EEPROM.
de Mi Programa, v1.0, 0
#DEFINE: Esta directiva sustituye un nombre por un valor. Donde quiera que
aparezca <nombre> en el cdigo ensamblador, ser sustituido por <valor>.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
144
Si no se aade el valor al que sustituir simplemente se define un <nombre>,
pudindolo testear usando la directiva IFDEF.
Su sintaxis es:
#define <nombre> [<valor>]
Ejemplo:
#define longitud 20
#define control 0x19,7
#define posicin (X,Y,Z) (Y-(2 * Z +X))
.
.
.
test dw posicin (1, longitud, 512)
bsf control ; pone a 1 el bit 7 en f19
DT: Genera una serie de instrucciones RETLW, una por cada <expr>. stas deben
ser un valor de ocho bits. En una cadena de caracteres, cada uno se guarda en su
propia instruccin RETLW.
Su sintaxis es:
[<etiqueta>] dt <expr> [,<expr>, ..., <expr>]
Ejemplo:
dt Mensaje, 0
dt PrimerValor, SegundoValor, UltimoValor
DW: Reserva palabras de la memoria de programa para datos, inicializando estos
espacios a valores especficos. Los datos son guardados en posiciones de memoria
consecutivas, incrementando el contador en uno. Las expresiones pueden ser
cadenas de literales y se guardan como se describe en la directiva DATA.
Sintaxis:
[<etiqueta>] dw <expr>[,<expr>, ..., <expr>]
Ejemplo:
dw 39, diagnostico 39, (d_list*2+d_offset)
dw diagbase-1
ELSE: Se usa junto con la directiva IF para proporcionar un camino alternativo a
la ensamblacin si se evala el IF como falso.
Sintaxis:
else



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
145
Ejemplo:
velocidad macro kmh
if kmh < 50
dw despacio
else
dw rapido
endif
endm
END: Indica el fin del programa fuente. Esta directiva debe ponerse siempre al
final del cdigo de programa a ensamblar.
ENDIF: Esta directiva marca el final de un bloque condicional de ensamblador.

ENDM: Termina una definicin de una macro iniciada con MACRO.
Sintaxis:
endm
Ejemplo:
tabla macro arg1, arg2 ;
dw arg1, 0 ;
endm
EQU y SET: Define y ensambla variables y constantes.
La sintaxis es:
<etiqueta> set <expr>
<etiqueta> equ <expr>
La diferencia entre ambas es que set puede ser redefinida las veces que se quieran,
sin embargo, con equ, una vez definida no se puede modificar su valor.
ERROR: La <cadena_de_texto> se imprime en el mismo formato que cualquier
mensaje de error del MPASM. La <cadena_de_texto> puede ser desde uno hasta
80 caracteres.
Sintaxis:
error <cadena_de_texto>
Ejemplo:
error_verificacin macro arg1
if arg1>= 55 ; si arg est fuera del rango.
error error_verificacin argumento fuera de rango
endif


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
146
ERRORLEVEL: Fija el tipo de mensajes que aparecen en el listado del programa
y en el archivo de errores.
Sintaxis:
errorlevel 0|1|2|<+|-><nummsj>
La tabla 5.2 indica como afecta cada una de las opciones que se pueden dar en el
uso de esta directiva.
TABLA 5.2 Opciones de la directiva ERRORLEVEL.
Seleccin Afecta
0 Mensajes, peligro, y errores de impresin.
1 Peligros y errores de impresin.
2 Errores de impresin.
-<nummsj> Inhabilita la impresin de mensaje <nummsj>.
+<nummsj> Habilita la impresin del mensaje <nummsj>.

Los mensajes de error no pueden ser deshabilitados. La seleccin de 0, 1, 2 anula
la habilitacin o deshabilitacin individual de los mensajes.
Ejemplo:
errorlevel 1, -202
EXITM: Fuerza el retorno inmediato de una macro durante el ensamblado. El
efecto es el mismo que si se encontrara con la directiva ENDM.
Sintaxis:
exitm
Ejemplo:
test macro registro
if registro = = 1 ; comprobacin de registro vlido.
exitm
else
error asignacin de registro incorrecta
endif
endm
EXPAND: Extiende todas las macros en el registro del listado, es decir incluye en
el listado la secuencia de instrucciones de la macro. Esta directiva es
aproximadamente equivalente a la opcin /m en MPASM, pero puede estar
limitada en su alcance por una posterior directiva NOEXPAND.
EXTERN: Declara nombre de smbolos que pueden ser usados en el mdulo
actual, pero que son definidos como global en mdulos diferentes. La declaracin


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
147
EXTERN debe ser incluida antes de que la <etiqueta> sea usada. Al menos una
etiqueta debe ser especificada en la lnea.
Sintaxis:
extern <etiqueta>[,<etiqueta>]
Ejemplo:
extern Funcion
. . .
call Funcion
FILL: Genera <cuenta> ocurrencias de la palabra o byte de programa <expr>. Si
est limitada por parntesis, <expr> puede ser una instruccin de ensamblador.
Sintaxis:
[<etiqueta>] fill <expr>, <cuenta>
Ejemplo:
fill 0x1009, 5 ; ocupa con una constante.
fill (GOTO VECTOR_RESET), SIGUIENTE_BLOQUE-$
GLOBAL: Se usa en la generacin de cdigo objeto. Declara nombres de
smbolos que son definidos en el mdulo actual, estando disponibles en otros
mdulos. La declaracin GLOBAL debe de ser despus de que la <etiqueta> sea
definida. Al menos una etiqueta debe de ser especificada en la lnea.
Sintaxis:
global <etiqueta> [, <etiqueta>]
Ejemplo:
udata
Var1 res 1
Var2 res 1
global Var1, Var2
code
SumaTres
global SumaTres
addlw 3
return
IDATA: Se usa en la generacin de cdigo objeto. Declara el comienzo de una
seccin de datos inicializados. Si no se especifica ninguna <etiqueta> la seccin es
nombrada idata. La direccin de comienzo se inicializa con la direccin
especificada o cero si esta no se indica. En este segmento no puede generarse
ningn cdigo.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
148
El linkador generar una tabla de consulta por cada byte especificado en la seccin
idata. El usuario debe entonces linkar o incluir el apropiado cdigo de
inicializacin.
Sintaxis:
[<etiqueta>] idata [<direccin RAM>]
Ejemplo:
idata
LimiteV dw 0
LimiteH dw D300
Ganancia dw D5
Flags db 0
Cadena db Hola all!
_ _IDLOCS: Fija cuatro localizaciones ID a los valores de los dgitos en
hexadecimal de <expr>. Por ejemplo, si <expr> es 1AF, la primera localizacin ID
(direccin ms baja) es cero, la segunda uno, la tercera diez, y la cuarta quince.
Antes de usar esta directiva, el tipo de procesador debe ser indicado mediante la
directiva LIST o PROCESSOR. Esta directiva no es vlida para la familia de los
PIC17CXX.
Sintaxis:
_ _idlocs <expr>
Ejemplo:
_ _idlocs H1234
IF: Empieza la ejecucin de un bloque de ensamblado condicional. Si la
evaluacin de <expr> es verdadera, el cdigo que sigue a la directiva IF ser
ensamblado. Si no, este cdigo ser saltado hasta encontrar una directiva ELSE o
ENDIF.
Una expresin que se evala como cero es considerada falsa, siendo verdadera
para cualquier otro valor.
Sintaxis:
if <expr>





Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
149
Ejemplo:
if version = = 100 ; chequea la versin actual.
movlw 0x0a
movwf io_1
else
movlw 0x01a
movwf io_2
endif
IFDEF: Si <etiqueta> se ha definido anteriormente, normalmente mediante la
directiva #DEFINE, se toma el camino de la condicional. El ensamblado continua
hasta encontrar la directiva ELSE o ENDIF.
Sintaxis:
ifdef <etiqueta>
Ejemplo:
#define testeo ; testeo activado.
.
.
.
ifdef testeo
<ejecuta el cdigo de test> ; esta parte deber ser ejecutada.
endif
IFNDEF: Si <etiqueta> no ha sido previamente definida, o ha sido indefinida por
el uso de la directiva #UNDEFINE, el cdigo que sigue a la directiva ser
ensamblado. El ensamblado estar habilitado o deshabilitado hasta la aparicin de
la directiva ELSE o ENDIF.
Sintaxis:
ifndef <etiqueta>
Ejemplo:
#define testeo1 ; testeo activado.
.
.
.
#undefine testing1 ; testeo desactivado
ifndef testing1 ; si no est en modo testeo.
. ; ejecuta
. ; esta parte
. ;
endif ;
end ; fin de la fuente.



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
150
INCLUDE: Incluye un fichero adicional a aquel en el que aparezca aquella
directiva.
La sintaxis es:
include <<include_file>>
include <include_file>
Si se especifica el directorio donde se encuentra el fichero a incluir, entonces dicho
fichero nicamente se buscar en ese directorio. Si no se especifica ningn
directorio, entonces, el fichero se buscar en primer lugar en el directorio donde
actualmente se est trabajando, en segundo lugar en el directorio donde se
encuentre el fichero fuente, y en tercer lugar en el directorio donde se encuentra el
fichero ejecutable MPASM.
Ejemplos:
include c:\sys\sysdefs.inc
include <regs.h>
LIST: Permite listar un nmero determinado de opciones para el programa a
ensamblar, como puede ser por ejemplo especificar el tipo de PIC a usar. Las
distintas opciones que se pueden dar con esta directiva se describen en la tabla 5.3:
TABLA 5.3 Opciones de la directiva LIST.
Opcin Por defecto Descripcin
b = nnn 8 Fija los espacios de tabulacin.
c = nnn 132 Fija el ancho de columna.
f =<formato> INHX8M
Fija el formato de salida del archivo hex, puede
ser INHX32, INHX8M, o INHX8S.
free FIXED
Uso de formato libre(parser). Proporciona
compatibilidad con anteriores.
fixed FIXED Uso de formato fijo.
mm = ON | OFF On
Imprime el mapa de memoria en el archivo del
listado.
n = nnn 60 Fija las lneas por pgina.
p =<tipo> Ninguno
Fija el tipo de procesador; por ejemplo,
PIC16C54.
r = <radix> hex Fija el radix por defecto: hex, dec, oct.
st = ON | OFF On Imprime una tabla en el archivo del listado.
t = ON | OFF Off Trunca lneas del listado.
w = 0 | 1 | 2 0 Fija el nivel d errores. Ver ERRORLEVEL.
x = ON | OFF On Pone macro expansin en on u off.
Nota: Todas las opciones de LIST son evaluadas en nmeros decimales.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
151
Sintaxis:
list [<opcin_list>, ..., <opcin_list>]
Ejemplo:
list p =17c42, f =INHX32, r =DEC
LOCAL: Declara que los elementos de los datos especificados sern considerados
en el contexto local de la macro. La <etiqueta> puede ser idntica a otra etiqueta
declarada fuera de la macro, sin haber ningn conflicto entre las dos.
Si la macro es llamada reiteradamente, cada llamada tendr su propia copia local.
Sintaxis:
local <etiqueta> [, <etiqueta>]
Ejemplo:
<segmento de cdigo principal>
.
.
.
longitud equ 10 ; versin global
tamao equ 20 ; notar que es una variable local
test macro tamao
local longitud, etiqueta ; local longitud y etiqueta
longitud set tamao ; modifica local longitud
etiqueta res longitud
longitud set longitud-20
endm ; fin de la macro

MACRO: Una macro es una secuencia de instrucciones que puede ser insertada en
el cdigo fuente del ensamblador usando una simple llamada a la macro. La macro
debe de ser definida previamente. Una macro puede a su vez llamar a otra, o a si
misma.
Sintaxis:
<etiqueta> macro [<arg>,..., <arg>]
Ejemplo:
Leer macro dispositivo, buffer, contador
movlw dispositivo
movwf ram_20
movlw buffer ; direccin de buffer.
movwf ram_21
movlw contador ; byte del contador.
call sis_21 ; leer fila call.
MESSG: Provoca la impresin de un mensaje de informacin en el archivo del
listado. El texto del mensaje puede ser de hasta 80 caracteres.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
152
Sintaxis:
messg <texto_de_mensaje>
Ejemplo:
mssg_macro macro
messg mssg_macro no tiene argumentos
endm
NOEXPAND: Final de la expansin de la macro en el archivo del listado.
NOLIST: Desactiva las opciones fijadas por la directiva LIST.
ORG: Establece el origen a partir del cual debe cargarse el programa. Si la
<etiqueta> es especificada, a esta se le dar el valor <expr>. Si no se especifica la
ORG, el cdigo comenzar en la direccin cero.
La sintaxis es la siguiente:
[<etiqueta>] org <expr>
Ejemplo:
entero_1 org 0x20
. ; El cdigo del vector 20 ir aqu.
entero_2 org entero_1+ 0x10
. ; El cdigo del vector 30 ir aqu.
PAGE: Inserta un salto de pgina dentro del archivo del listado.
PAGESEL: Es una instruccin del linkador para generar cdigo de seleccin de
pgina, fijando los bits de seleccin de pgina, a la pgina que contiene la
designada <etiqueta>. Slo se puede especificar una <etiqueta>, la cual debe estar
previamente definida.
Sintaxis:
pagesel <etiqueta>
Ejemplo:
pagesel IrDestino
...
pagesel CallDestino
call CallDestino.
PROCESSOR: Indica el tipo de procesador.
La sintaxis es:
processor <tipo_de_procesador>
Ejemplo:
processor 16C54


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
153
RADIX: Fija la base de numeracin por defecto de las expresiones de datos. Los
valores vlidos para radix son: hex, dec, oct.
Sintaxis:
radix <radix_defecto>
Ejemplo:
radix dec
RES: Produce que el contador de programa avance desde la actual localizacin
tantas posiciones como se especifican en <unidades_memoria>. La <etiqueta> se
inicializar como una direccin.
Sintaxis:
[<etiqueta>] res <unidades_memoria>
Ejemplo:
buffer res 64 ; reserva 64 palabras de almacenaje.
SPACE: Inserta <expr> nmeros de lneas en blanco en el archivo de listado.
Sintaxis:
space <expr>
Ejemplo:
space 3 ; Inserta tres lneas en blanco.
TITLE y SUBTITLE: <texto_de_ttulo> y <texto_subttulo> son cadenas
imprimibles de caracteres ASCII encerradas por un doble entrecomillado. stas
deben ser de 60 caracteres como mximo. Estas directivas imprimen en la cabecera
de cada pgina del archivo de listado el texto del ttulo y subttulo, siendo este
ltimo en la segunda lnea.
Sintaxis:
title <texto_de_ttulo>
subtitle <texto_subttulo>
Ejemplo:
title Cdigo operacional, rev 5.0
subtitle seccin de diagnstico




Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
154
UDATA: Se utiliza en la generacin de cdigo objeto. Indica el comienzo de una
seccin de datos no inicializados. Si <etiqueta> no se especifica, a la seccin se la
nombrar udata. Si no se indica la direccin, sta se inicializar a cero. En este
segmento no se puede producir cdigo.
Sintaxis:
[<etiqueta>] udata [<direccin RAM>]
Ejemplo:
udata
Var1 res 1
Doble res 2
UDATA_OVR: Se utiliza en la generacin de cdigo objeto. Indica el inicio de
una seccin de datos no inicializados reutilizables. Si <etiqueta> no se especifica, a
la seccin se la nombrar udata_ovr. Si no se indica la direccin, sta se
inicializar a cero. El espacio ocupado por esta seccin puede ser cubierto por otra
seccin udata_ovr del mismo nombre. Esto es una buena forma de crear variables
temporales, permitiendo declarar mltiples variables en la misma localizacin de
memoria. En este segmento no se puede producir cdigo.
Sintaxis:
[<etiqueta>] udata_ovr [<direccin RAM>]
Ejemplo:
Temps udata_ovr
Temp1 res 1
Temp2 res 1
Temp3 res 1
Temps udata_ovr
LargoTemp1 res 2
LargoTemp2 res 2
UDATA_SHR: Se utiliza en la generacin de cdigo objeto. Indica el inicio de
una seccin de datos no inicializados compartidos. Si <etiqueta> no se especifica,
a la seccin se la nombrar udata_shr. Si no se indica la direccin, sta se
inicializar a cero. Esta directiva se usa para declarar variables que estn situadas
en RAM que est compartida por todos los bancos. En este segmento no se puede
producir cdigo.
Sintaxis:
[<etiqueta>] udata_shr [<direccin RAM>]


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
155
Ejemplo:
Temps udata_shr
Temp1 res 1
Temp2 res 1
Temp3 res 1
#UNDEFINE: <etiqueta> es un identificador previamente definido por la
directiva #DEFINE. El smbolo nombrado es borrado de la tabla de smbolos.
Sintaxis:
#undefine <etiqueta>
Ejemplo:
#define largo 20
.
.
.
#undefine largo
WHILE y ENDW: Las lneas que se encuentren entre las directivas WHILE y
ENDW sern ensambladas con tal de que la evaluacin de <expr> sea verdadera.
Una expresin evaluada como cero se considera falsa, cualquier otro valor es
verdadero. Un lazo WHILE puede contener hasta 100 lneas y repetirse un mximo
de 256 veces.
Sintaxis:
while <expr>
.
.
.
endw
Ejemplo:
test_macro macro contador
variable I
i = 0
while i < contador
movlw i
i + = 1
endw
endm
inicio
test_macro 5
end





Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
156
5.3 Creacin de programas

A la hora de crear un programa se pueden dar varias situaciones. Se puede partir o bien de un
slo cdigo fuente, o de varios de stos. La forma de actuar en cada caso es distinta ya que
habr que en un caso bastar con el ensamblador, mientras que en el otro se necesitar adems
en linkador o montador de enlaces.

La utilizacin de libreras precompiladas es una solucin de gran utilidad a la hora de crear
programas, ya que facilitan notablemente el trabajo del programador.

5.3.1 Un solo cdigo fuente (ensamblador).

La traduccin del cdigo nemnico al cdigo mquina se realiza con la ayuda de un
ordenador sobre el que corre un programa ensamblador.

Los datos de entrada del ordenador son las lneas de programa escritos en lenguaje
ensamblador. Se trata, por tanto, de caracteres alfanumricos codificados en cdigo ASCII. El
ordenador que est ejecutando el programa ensamblador interpreta estos datos y los traduce al
cdigo mquina del procesador. El ensamblador de los microprocesadores PIC es el MPASM.
ste produce el cdigo necesario para programar el dispositivo directamente de los archivos
con extensin .HEX.

MPASM puede ser utilizado de dos maneras:
Generando un cdigo absoluto que puede ser ejecutado directamente por el
microcontrolador.
Generando cdigo objeto que puede ser linkado junto con otro programa
ensamblador o mdulos compilados.

La opcin ms comn del uso de MPASM es la generacin de cdigo absoluto. Cuando un
archivo fuente es ensamblado de esta manera, todos los valores usados en este deben estar
definidos dentro del mismo archivo fuente, o en los archivos que son implcitamente


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
157
incluidos. Si el proceso de ensamblado se produce sin errores, se generar un archivo .HEX,
que contiene el cdigo mquina ejecutable. Este archivo puede ser, entonces, usado junto con
un programador para programar el microcontrolador. Este proceso se ilustra en la figura 5.1.



Figura 5.1 Generacin de cdigo absoluto.

MPASM tambin tiene la habilidad de generar mdulos objeto que pueden ser linkados junto
con otros mdulos para generar el cdigo ejecutable, usando el linkador MPLINK. Tambin
pueden agruparse los mdulos relacionados y guardarse juntos en una biblioteca utilizando
MPLIB. Las bibliotecas requeridas pueden especificarse en el momento del linkado, y slo se
incluirn las rutinas necesarias en el archivo ejecutable final.

5.3.2 Varios cdigos fuente (linkador).

Por regla general, el cdigo objeto producido por los ensambladores, aunque es cdigo
mquina, no es directamente ejecutable, debido a que incluye una serie de informaciones
dirigidas a otro programa, el montador de enlaces o linkador, que en base a esta informacin
adicional, organiza el cdigo mquina de uno o varios cdigos objeto para generar un
programa ejecutable.

Una de las razones que justifican este modo de trabajo, consiste en la posibilidad de
desarrollar programas voluminosos en varios mdulos de tamao razonable. Por otro lado,
permite la inclusin de mdulos, desarrollados para otras aplicaciones y ya depurados, en
nuevos programas, sin necesidad de incluirlos en los fuentes y volver a ensamblarlos.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
158
Otra caracterstica importante del programa montador de enlaces es que, como su informacin
de entrada son mdulos objeto, stos pueden proceder de programas fuentes escritos en
distintos lenguajes, lo que permite escribir la mayor parte de un programa en lenguaje de alto
nivel, y las rutinas ms conflictivas en lenguaje ensamblador. Esto es una solucin muy
interesante para simplificar el desarrollo de programas.

El ensamblador de los microcontroladores PIC es el MPLINK. MPLINK combina la entrada
de mltiples cdigos objeto generados por MPLAB-C o MPASM, dentro de un solo archivo
ejecutable. Las direcciones de los datos y la localizacin de las funciones sern asignadas al
ejecutar MPLINK. Una vez que el linkador sabe que regiones de la memoria RAM y ROM
estn disponibles y analiza todos los archivos de entrada, intentar encajar las rutinas de
aplicacin dentro de la ROM y asignar los datos y variables en la memoria RAM disponible.
Si hay demasiado cdigo o demasiadas variables para encajar, MPLINK dar un mensaje de
error.

MPLINK tambin permite flexibilidad especificando que ciertos bloques de la memoria de
datos sean reutilizables, as rutinas diferentes (que nunca se llamen simultneamente y los
datos no sea necesario tenerlos retenidos entre cada ejecucin) pueden compartir el espacio
limitado de RAM. En las figuras 5.2 se puede ver el proceso de generacin de cdigo a partir
de varias fuentes.

5.3.3 Utilizacin de libreras.

MPLIB son libreras en cdigo precompilado para usar con MPLINK. Cuando una rutina de
una librera es llamada por otra fuente, slo los mdulos que contienen a la rutina sern
linkados con la aplicacin. Esto permite grandes libreras usadas eficazmente en muchas
aplicaciones. En la figura 5.3 se ilustra el proceso de creacin de libreras.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
159

Figura 5.2 Generacin de cdigo ejecutable a partir de mdulos objeto.


Figura 5.3 Creacin de libreras de cdigo reusable.



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
160
5.4 Estructuras bsicas de programacin.

5.4.1 Estructuras iterativas.

Este tipo de estructuras se caracteriza porque son bucles que se repiten mientras que una
condicin se est cumpliendo. Existen tres tipos de estructuras, while, do while y for.

5.4.1.1 While.

La estructura while consiste en la repeticin de un bucle mientras que se cumpla una
condicin.

La forma de programar una estructura de este tipo en los PIC sera testeando un flag que
indique si la condicin para la ejecucin del bucle se cumple o no. Si esta condicin se
cumple se ejecuta el bucle terminando ste con un retorno a la lnea de testeo del flag. Si no se
cumple la condicin, mediante una instruccin de salto incondicional se salta el bucle
continuando con la ejecucin del programa. Durante la ejecucin del bucle el flag deber ser
actualizado ya que si no se formara un bucle infinito.

El listado de programa de una estructura while quedara aproximadamente de la siguiente
forma:
...
BUCLE BTFSS FLAG,0 ; Se testea el bit menos significativo de la variable FLAG.
GOTO FIN ; Si este bit es 0 se salta al final del bucle.
... ; Si no se ejecuta el bucle.
...
...
GOTO BUCLE ; Se realiza un salto al principio del bucle para ver si la condicin se
; sigue cumpliendo.
FIN ... ; Continua la ejecucin del programa.
...







Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
161
5.4.1.2 Do while.

La estructura do while es similar a la anterior, diferencindose en que en la estructura while
puede no ejecutarse nunca, mientras que con do while el bucle se ejecuta por lo menos una
vez.

La forma de programar esta estructura es igual que el caso anterior, cambiando la condicin
de testeo al final del bucle, asegurando de esta forma que el bucle se ejecuta por lo menos una
vez. Si se cumple la condicin se vuelve al principio del bucle y si no se continua con la
ejecucin del programa. Al igual que en el caso anterior, el flag deber ser actualizado durante
el bucle ya que si no se formara un bucle infinito.

El listado del programa quedara as:
...
BUCLE ... ; Comienza la ejecucin del bucle.
...
...
BTFSC FLAG,0 ; Se testea el bit 0 de la variable FLAG
GOTO BUCLE ; Si se cumple la condicin se salta al principio del bucle.
... ; Si no se continua la ejecucin del programa.

5.4.1.3 For.

La estructura for consiste en la repeticin de un bucle mientras una variable, inicializada al
principio del bloque for y modificada en cada ciclo de ejecucin del bucle, cumpla una
determinada condicin.

La forma de programar una estructura de este tipo en los PIC sera inicializando una variable
y a continuacin escribir todas las instrucciones que componen este bucle. Al final del bucle
se modifica el valor de la variable, y se comprueba si se cumple la condicin del bucle. Esto
ltimo se hace mediante los cdigos de condicin que se vern ms adelante. En el caso de
que la condicin se cumpla, se repite de nuevo el bucle sin actualizar la variable, si no se
continua con la ejecucin del programa.



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
162
Un ejemplo de este tipo de estructura sera:
...
CLRF VAR ; Se inicializa la variable a 0.
BUCLE ... ; Comienza la secuencia de instrucciones del bucle.
...
...
INCF VAR,1 ; Se modifica la variable.
... ; Aqu debe ir el cdigo de condicin que terminar con la
... ; instruccin de testeo.
BTFSC FLAG,0 ; Instruccin de testeo. FLAG puede ser cualquier variable, segn el
; tipo de condicin.
GOTO BUCLE ; Si se cumple la condicin se salta al principio del bucle.
... ; Si no continua la ejecucin del programa.
...

5.4.2 Estructuras condicionales.

5.4.2.1 If .

La estructura condicional if consiste en la ejecucin de las secuencias que tenga asociada si se
cumple una condicin, en caso contrario esta parte del programa se salta y no es ejecutada.

La forma de programar una estructura de este tipo en los PIC sera testeando un flag que
indique si la condicin para la ejecucin se cumple o no. Si esta condicin se cumple se sigue
ejecutando las instrucciones, mientras que si no se cumple la condicin se realiza un salto
incondicional hasta el final de la zona de programa de la estructura if, continuando con la
ejecucin del programa.

El listado del programa quedara as:
...
BTFSS FLAG,0 ; Se testea el bit 0
GOTO FIN ; Si no se cumple la condicin se salta hasta el fin de la condicional.
... ; Si se cumple se ejecuta todo.
...
...
FIN ... ; Continua la ejecucin del programa principal.






Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
163
5.4.2.2 If ... else.

La estructura if ...else es similar a la anterior, salvo que si no se cumple la condicin, en vez
de continuar con el programa, se ejecuta otra parte antes de seguir con el programa.

La forma de programarlo sera muy parecida al caso anterior. Se testea el flag de condicin, si
se cumple la condicin se ejecutan las secuencias asociadas a la condicin, terminando con un
salto incondicional al final de la estructura. Si la condicin no se cumple, se salta a la
instruccin siguiente a donde termin la condicional y se ejecuta la parte del else, continuando
despus con la ejecucin normal del programa.

El listado del programa quedara as:
...
BTFSS FLAG,0 ; Se testea el bit 0
GOTO ELSE ; Si no se cumple la condicin se salta hasta el fin de la condicional.
... ; Si se cumple se ejecuta esta parte.
...
...
GOTO FIN ; Se salta hasta el final del bloque if ...else.
ELSE ... ; Si no se cumple la condicin se ejecuta esta parte.
...
...
FIN ... ; Continua la ejecucin del programa principal.

La encadenacin de bloques if ... else da lugar a la estructura conocida en el lenguaje C como
switch. En esta estructura segn los distintos valores que pueda tener la variable se ejecutar
una serie de sentencias.

Un ejemplo de la programacin de esta estructura es el siguiente:
...
MOVLW CASO1 ; mueve el valor de la variable en el 1 caso al acumulador.
SUBWF VAR,0 ; Resta el valor de la variable y el valor en el caso1.
BTFSS STATUS,Z ; Comprueba si son iguales.
GOTO SIGUE_2 ; Si no lo es salta hasta la posicin del siguiente caso.
.... ; Si son iguales se ejecuta esta secuencia de instrucciones.
....
GOTO FIN ; Al final de la secuencia se sale de la estructura.
SIGUE_ 2 MOVLW CASO2 ; Se repite hasta que se den todos los casos posibles.
...
...
SIGUE_N ... ; Si se llega al ltimo caso se ejecutan las instrucciones que


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
164
... ; haya sin necesidad de ninguna comparacin.
FIN ... ; Continua el programa principal.
...

5.4.3 Cdigos de condicin.

En este apartado se va a tratar la forma de realizar el cdigo para saber si una condicin se
cumple o no. Este cdigo depender del tipo de condicin que se quiera verificar.

5.4.3.1 Igual.

Para verificar mediante la programacin que dos valores son iguales, se procede restndolos
entre si, y testeando el bit de cero del registro de Estado. Si son iguales, ste se pondr a 1.

Por ejemplo:
MOVF VALOR_1,0 ; Mueve el VALOR_1 al registro de trabajo.
SUBWF VALOR_2,0 ; Resta los valores entre si.
BTFSS STATUS,Z ; Testea bit de cero.
GOTO DISTINTO ; Salta a la zona de programa correspondiente si no se
; cumple la condicin de igualdad.
... ; Se ejecuta esta instruccin correspondiente a la igualdad
; de los dos valores.

5.4.3.2 Distinto.

La forma de programar una condicin de no igualdad es la misma que la de igualdad. Esto se
puede ver en el ejemplo del apartado anterior, cuando no se cumple la igualdad, se salta a la
posicin DISTINTO, donde se ejecutar las secuencias correspondientes.

5.4.3.3 Mayor.

Para realizar el cdigo de la condicin mayor lo que se hace es restar los dos nmeros a
comparar y testear el bit de carry del registro de Estado. Al hacer esto hay que tener en cuenta
que la resta en los PIC se realiza mediante el complemento a dos. Teniendo dos nmeros A y
B, se resta el primero del segundo y si el bit C = 0, se cumplir que A>B.



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
165
5.4.3.4 Mayor o igual.

Si lo que se quiere es que A sea mayor o igual que B, entonces la operacin a realizar sera la
contraria, es decir A B, si el carry es 1, la condicin se cumple.

5.4.3.5 Menor.

Para comprobar que el valor A es menor que B, al igual que en el caso anterior, se resta B de
A, cumplindose la condicin A<B si el carry es 0.

5.4.3.6 Menor o igual.

El caso que queda es el de querer que A sea menor o igual que B. Para esto se resta A de B y
se comprueba que el carry est a 1.

5.4.3.7 Condiciones ms complejas.

Por ltimo, puede haber cdigos de condicin ms complejos que los anteriormente
mencionados, que consisten en operaciones lgicas y/o aritmticas.

Para este tipo de condicionales no existe una estructura fija. Como norma general para realizar
su programacin se ha de proceder de forma que se realicen primero las operaciones incluidas
dentro de los parntesis, y las operaciones lgicas y aritmticas. Por ltimo se realizan las
operaciones de comparacin.

A continuacin se muestra un ejemplo de programacin de una condicional compleja de la
forma (A || B) = = ( A&& (BC)):
...
...
MOVF A,0 ; Mueve A al acumulador.
IORWF B,0 ; Realiza la o lgica entre A y B.
MOVWF DRCH ; Guarda el resultado de la parte derecha de la igualdad en DRCH.
MOVF B,0 ; Mueve B al acumulador.
XORWF C,0 ; Realiza la o exclusiva entre B y C.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
166
MOVWF PARENT ; Guarda el resultado del parntesis en PARENT.
COMF A,0 ; Complementa A.
ANDWF PAREN,0 ; Realiza la y lgica entre el complemento e A y PARENT
SUBWF DRCH,0 ; Resta PARENT de DRCHA.
BTFSS STATUS,Z ; Testea en bit de cero.
BCF FLAG,0 ; Si Z =0 no se cumple la condicin y borra el FLAG.
GOTO SIGUE
BSF FLAG,0 ; Si Z =1 activa el FLAG.
SIGUE ...
...

5.5 Ejemplo de libreras: libreras matemticas.

5.5.1 Rutinas de coma flotante.

Dentro de esta librara se pueden encontrar las siguientes rutinas matemticas para la familia
de los microcontroladores PIC:
Conversin de flotante a entero.
Conversin de entero a flotante.
Normalizacin.
Suma/resta.
Multiplicacin.
Divisin.

Los formatos de coma flotante que se van a utilizar se resumen en la tabla 5.4:

TABLA 5.4 Formatos de coma flotante.
eb f0 f1 f2
IEEE754 32-bits sxxx xxxx yxxx xxxx xxxx xxxx xxxx xxxx
Microchip 32-bits xxxx xxxx sxxx xxxx xxxx xxxx xxxx xxxx
Microchip 24-bits xxxx xxxx sxxx xxxx xxxx xxxx

Siendo eb los 8 bits del exponente, s el bit de signo, y el bit menos significativo del registro
eb, y la coma . Los bytes f0, f1 y f2 constituyen la fraccin del nmero siendo f0 el byte ms
significativo.




Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
167
Los registros asociados a las operaciones en coma flotante son los siguientes:
AARGB7 = ACCB7 = REMB3 Del LSB al MSB.
AARGB6 = ACCB6 = REMB2
AARGB5 = ACCB5 = REMB1
AARGB4 = ACCB4 = REMB0 Resto.
AARGB3 = ACCB3
AARGB2 = ACCB2
AARGB1 = ACCB1
AARGB0 = ACCB0 = ACC Fraccin de AARG y ACC.
AEXP = EXP Exponente de AARG y ACC.

SIGN Signo en MSb.
FPFLAGS Flags de excepciones y bits de opciones.

BARGB3 Del LSB al MSB
BARGB2
BARGB1
BARGB0 Fraccin de BARG
BEXP Exponente de BARG.

TEMPB3
TEMPB2
TEMPB1
TEMPB0 = TEMP Almacenamiento temporal.
Los flags de excepcin y los bits de opciones de FPFLAGS estn definidos de la siguiente
manera:
FPFLAGS SAT RND DOM NAN FDZ FUN FOV IOV
7 6 5 4 3 2 1 0
SAT Bit de habilitacin de Saturacin.
RND Bit de habilitacin de redondeo.
DOM Flag de error de dominio.
NAN Flag de excepcin No es un Nmero
FDZ Divisin por cero.
FUN Flag de underflow en coma flotante.
FOV Flag de overflow en coma flotante.
IOV Flag de overflow en enteros.

Para operaciones unarias (un slo operando), la entrada del argumento y el resultado estn en
AARG. Para operaciones binarias la entrada de datos se realiza en AARG y BARG,
cargndose el resultado en AARG. De este modo se simplifican la secuencia de las
operaciones.






Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
168
5.5.1.1 Manejo de excepciones.

Todas las rutinas devuelven en WREG = 0x00, en una operacin correcta, y WREG = 0xFF
en caso de que se produzcan excepciones junto con los bits implicados de FPFLAGS a 1. Si
SAT = 0, la saturacin est deshabilitada y en una excepcin se obtiene un resultado falso en
AARG. Si SAT = 1, saturacin habilitada, en todas las excepciones de overflow o underflow
producen la saturacin del resultado en AARG.

5.5.1.2 Redondeo.

Con RND = 0, el redondeo est deshabilitado, obteniendo algunas mejoras en la velocidad. Si
RND = 1, el redondeo est habilitado, producindose este en el LSb ms cercano al resultado.

5.5.1.3 Conversin de entero a flotante.

La rutina FLOxxyy convierte los xx-bits de un entero en complemento a dos contenidos en
AARG, en un nmero de yy-bits a coma flotante, guardando el resultado en AEXP, AARG.
La rutina inicializa el exponente al mover la coma a la derecha del bit ms significativo y
llama a la rutina de normalizacin. Por ejemplo:
FLO1624 (12106) = FLO1624 (0x2F4A) = 0x8C3D28 = 12106.0 (5.1)

5.5.1.4 Normalizacin.

La rutina NRMxxyy toma un nmero en coma flotante de xx-bits no normalizado de AEXP,
AARG y rota hacia la izquierda la fraccin ajustando el exponente hasta que el resultado tiene
un 1 en el bit ms significativo, convirtindolo de este modo en un nmero de yy-bits en
coma flotante normalizado.






Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
169
5.5.1.5 Conversin de flotante a entero.

La rutina INTxxyy convierte un nmero en coma flotante de xx-bits AEXP, AARG, en un
nmero entero en complemento a dos de yy-bits en AARG. Despus de quitar el sesgo de
AEXP, la fraccin en AARG es desplazada a la izquierda tantas posiciones como indique
AEXP, pasndolo despus a complemento a dos. Por ejemplo:
INT2416 (123.45) = INT2416 (0x8576E6) = 0x7B = 123 (5.2)

5.5.1.6 Suma/Resta.

La rutina de suma en coma flotante FPAxx, toma los datos de AEXP, AARG y BEXP,
BARG, devolviendo el resultado de la operacin en AEXP, AARG. Si es necesario los datos
son intercambiados entre si, de modo que se cumpla que AEXPBEXP. Una vez que se ha
hecho esto, BARG se desplaza a la derecha tantas posiciones como diferencia hay entre los
dos exponentes (AEXP BEXP). Los argumentos son entonces sumados y el resultado es
normalizado llamando a NRMxx.

La rutina de resta FPSxx, simplemente cambia el bit de signo de BARG y llama a la rutina
FPAxx.

Algunos ejemplos son:
FPA24(-0.32212E+5, 0.1120E+4)= FPA24(0x8DFBA8, 0x890C00) = 0x8DF2E8 = -0.31092+E5 (5.3)

FPS24(0.89010E+4, -0.71208E+5) = FPS24(0x8C0B14, 0x8F8B14) = 0x8F1C76 = 0.80109E+5 (5.4)

5.5.1.7 Multiplicacin.

La rutina de multiplicacin en coma flotante FPMxx, al igual que las rutinas de suma toma los
datos de AEXP, AARG y BEXP, BARG y devuelve el producto en AEXP, AARG. Despus
de testear los operandos para ver si alguno es cero, calcula el resultado del signo y el
exponente y ve si se ha producido overflow.



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
170
En los PIC17, los argumentos se multiplican usando el multiplicador hardware, mientras que
en los PIC16 se hace mediante el mtodo de la suma y desplazamiento. En ambos casos va
seguido de una normalizacin del resultado si es necesario.

Por ejemplo:
FPM32 (-8.246268E+6, 6.327233E+6) = FPM32 (0x95FBA7F8, 0x95411782) = (5.5)
= 0xACBDD0BD = -5.217606E+13

5.5.1.8 Divisin.

La rutina de divisin en coma flotante FPDxx, toma AEXP, AARG como numerador y a
BEXP, BARG como denominador, devolviendo el cociente en AEXP, AARG.

En los PIC17 se implementa utilizando el multiplicador hardware con un mtodo iterativo
conocido como divisin multiplicativa. Una vez comprobado que no se trata de una divisin
por cero, se toma un valor inicial de una tabla de consulta para comenzar el proceso iterativo.
Para la familia PIC16, despus de testear el denominador para ver si es cero, el signo y el
exponente del resultado se calculan junto con la alineacin del dividendo. Si AARG BARG,
el dividendo AARG es desplazado una posicin a la derecha ajustando tambin el exponente,
de modo que AARG < BARG y el dividendo est alineado. La alineacin permite una
secuencia vlida de divisin y elimina la necesidad de una posterior normalizacin del
resultado. Despus de testear si hay overflow o underflow, las fracciones son divididas usando
el mtodo del desplazamiento y resta.

Un ejemplo sera:
FPD24 (-0.16106E+5, 0.24715E+5) = FPD24 (0x8CFBA8, 0x8D4116) =
= 0x7EA6D3 = -0.65167E+0 (5.6)







Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
171
5.5.2 Rutinas en coma fija.

Las rutinas que tiene implementadas esta aplicacin para coma fija son:
Multiplicacin.
Divisin.
Estas rutinas permiten gran variedad de formatos de coma fija, incluyendo aritmtica sin
signo y con signo en complemento a dos.

Las aplicaciones de suma y resta no se incluyen en esta librera ya que este tipo de
operaciones se puede realizar directamente con las instrucciones del programa.

5.5.2.1 Multiplicacin.

Esta rutina permite la multiplicacin de datos con los siguientes tipos de formato:
8x8
16x8
16x16
24x16
24x24
32x16
32x24
32x32

La rutina de multiplicacin en coma fija FXMxxyy, toma un multiplicando de xx-bits de
AARG, un multiplicador de yy-bits de BARG y devuelve un resultado de (xx+yy)-bits en
AARG.

Para la familia PIC17, ambos algoritmos, tanto con signo como sin signo, usan la aplicacin
hardware multiplicacin de 8x8 con precisin extendida. Al hablar de precisin extendida ,
cada argumento se ve como una concatenacin de bytes de distinto orden de magnitud, siendo
el producto la evaluacin de todos los trminos 8x8 de la expresin algebraica. Por ejemplo,


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
172
una multiplicacin de 24x16 bits da un producto de 40 bits y en su expansin contiene 6
trminos individuales de 8x8.
(AARGB02
16
+ AARGB12
8
+ AARGB22
0
) (BARG02
8
+ BARG12
0
) = (5.7)
AARGB0BARGB02
24
+ (AARGB0BARGB1 + AARG1BARG0)2
16
+
(AARGB1BARGB1 + AARGB2BARGB0)2
8
+ AARGB2BARGB12
0
Esto es completamente anlogo a la aritmtica en base 2
8
= 256, donde los respectivos dgitos
del producto deben ser alineados de acuerdo con su orden de magnitud antes de ser sumados.

La rutina multiplicacin en coma fija requiere el uso adecuado de los factores 8x8 del
multiplicador hardware, ya que ste es para operandos sin signo. Esta probado que el producto
de los nmeros con signo en complemento a dos se obtiene calculando su producto como si se
tratara de un nmero sin signo , y restndole posteriormente por cada trmino negativo, el
producto de la potencia del bit ms significativo por el trmino opuesto al negativo.

La implementacin en la familia PIC16CXXX usa el algoritmo de suma y desplazamiento
secuencial, negando ambos factores si BARG<0, ya que el mtodo requiere que el
multiplicador sea positivo. Los bits del multiplicador se van testeando, si es uno se suma el
multiplicando y se desplaza , si es cero simplemente se desplaza. Los desplazamientos son
necesarios para alinear los productos parciales para la siguiente posible suma.

Dos ejemplos de multiplicacin son:
FXM2416S(0xC11682, 0x608B) = FXM2416S(-4123006, 24715) = 0xE84647f896 = -101900093290 (5.8)

FXM1616U (0x0458, 0x822C) = FXM1616U (1112, 33324) = 0x02356F20 = 37056288 (5.9)

5.5.2.2 Divisin.

La rutina de divisin en coma fija FXDxxyy, toma un dividendo de xx-bits en AARG, y un
divisor de yy-bits en BARG retornando el cociente de xx-bits en AARG y yy-bits de resto en
REM. A diferencia de la multiplicacin, la divisin no es determinativa, requiere un proceso
de prueba y error con desplazamientos y restas secuenciales. La divisin binaria es ms
sencilla que la decimal, ya que slo son posibles dos valores como cociente, cero o uno. Si el


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
173
divisor es menor que el resto parcial, el bit correspondiente del cociente es uno, seguido por
una resta y una desplazamiento. Por el contrario, si es divisor es mayor que el resto parcial, el
bit del cociente es cero y slo se realiza el desplazamiento.

Los restos parciales intermedios pueden ser restaurados en cada pasos como en una divisin
con restauracin, o corregirlos al final como en una divisin sin restauracin. La
implementacin depende de como afecta el peor caso al valor medio de las dos
aproximaciones, por lo que se proporcionan macros para cada mtodo.

El resultado de la divisin AARG/BARG, satisface la relacin:
AARG = BARG COCIENTE + RESTO, (5.10)
donde el resto es del mismo signo que el cociente. Algunos ejemplos son:
FXD1608S(0xC116, 0x60) = 0xFF59, 0xB6 (5.11)

FXD1616U(0x9543, 0x4AA1) = 0x0002, 0x0001 (5.12)

5.5.3 Funciones matemticas en coma flotante.

Esta aplicacin tiene implementadas las siguientes rutinas matemticas para la familia de
microcontroladores PIC:
sqrt(x) funcin raz cuadrada, x .
exp(x) funcin exponencial, e
x
.
exp10(x) funcin exponencial en base 10, 10
x
.
log(x) funcin logaritmo neperiano, ln x.
log10(x) funcin logaritmo decimal, log10x.
sin(x) funcin trigonomtrica seno.
cos(x) funcin trigonomtrica coseno.
sin cos(x) funcin trigonomtrica seno y coseno.
pow(x, y) funcin potencia, x
y
.
floor(x) funcin entero.
taxxb(a,b) comparacin lgica en coma flotante.
rand(x) generador aleatorio de nmeros enteros.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
174
Las rutinas para las familias PIC16CXXX y PIC17CXXX estn en un formato modificado de
IEEE 754 de 32 bits junto con versiones en un formato reducido de 24 bits.

Para operaciones unarias, el dato de entrada y el resultado estn en AARG, excepto las rutinas
sin cos, en las cuales el coseno se almacena en AARG y el seno en BARG. La funcin
potencia requiere entrada de datos en AARG y BARG, obteniendo el resultado en AARG.
Aunque las rutinas de comparacin lgica tambin requieren entrada de datos en AARG y
BARG, el resultado se obtiene en el registro W.

5.5.3.1 Funcin raz cuadrada.

El dominio natural de la funcin raz cuadrada es todos los nmeros positivos, siendo el
dominio efectivo [0, MAXNUM], entendiendo por MAXNUM el mayor nmero que se puede
representar en formato de coma flotante. Todas las rutinas empiezan por un testeo del dato
para ver si est dentro del dominio, produciendo un error de dominio en caso de que est fuera
del intervalo.

En los PIC17CXXX utilizan el multiplicador hardware para resolver la raz cuadrada
mediante el mtodo iterativo por aproximaciones sucesivas de Newton Raphson. Siendo
e
2 f x = , donde 1 f < 2, al calcular su raz se utilizan las siguientes expresiones:
x =
2
e
2 f ,si e es par (5.13)
x =
2
e
2 2 f , si e es impar (5.14)

La aproximacin para f se calcula mediante el mtodo de Newton Raphson, partiendo de
un valor tabulado.
2 /
y
f
y y
0
0
|
|
.
|

\
|
+ = (5.15)

Debido a que la memoria de los PIC16CXXX es ms pequea, se han de buscar mtodos
alternativos para resolver esta funcin. En este caso, para el formato de 24 bits, la


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
175
aproximacin f se obtiene por la segmentacin en polinomios de cuarto grado, mediante el
mtodo de la aproximacin mnima
2
(minimax approximation) en los intervalos [1, 1.5] y
[1.5, 2]. En el formato de 32 bits, la funcin f = z 1+ en el intervalo [0, 1] de z, se obtiene
la aproximacin de la forma
z 1+ = 1+
q(z)
p(z)
z , donde z f + 1. (5.16)

5.5.3.2 Funciones exponenciales.

Mientras que el dominio de las funciones exponenciales abarca todos los nmeros reales, la
representacin de los nmeros en coma flotante limita el dominio al intervalo [MINLOG,
MAXLOG], siendo:
MINLOG = ln(2
-126
) (5.17)
MAXLOG = ln(2
128
) (5.18)

Todas las rutinas empiezan por un testeo del dato para ver si est dentro del dominio,
produciendo un error de dominio en caso de que est fuera del intervalo.

Para el formato reducido de 24 bits, la funcin exponencial es evaluada utilizando la siguiente
identidad:
z n z n
2 ln
x
x
2 2 2 2 e = = =
+
, (5.19)
donde n es un nmero entero y 0 z < 1. La funcin exponencial de base dos, se aproxima
mediante el polinomio mnimo de tercer grado en una representacin segmentada en los
subintervalos [0, 0.25], [0.25, 0.5], [0.5, 0.75] y [0.75, 1], con una exactitud de 0.5uld
(unidades de la ltima posicin) a lo largo de todo el dominio [MINLOG, MAXLOG].


2
La teora conocida como aproximacin mnima, consiste en la aproximacin de una funcin mediante un
polinomio de grado n, que cumple que el error mximo es el mnimo posible y debe darse al menos en n+2
puntos, alternando el signo del intervalo de aproximacin.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
176
Para el formato de 32 bits, la falta de rutinas de precisin extendida, hace que se requieran
algoritmos ms complejos para aproximarse a los 0.5 ulp, y llegando en el peor de los casos a
obtener un error de 1 ulp.
La funcin exponencial en este caso est basada en una expansin
z n ln2 n z x
e 2 e e = =
+
, (5.20)
donde n es un entero y 0.5 ln2 z < 0.5 ln2, evaluando la funcin exponencial mediante la
aproximacin del polinomio mnimo de quinto grado en los subintervalos [-0.5 ln2, 0] y [0,
0.5 ln2].

El argumento z es obtenido de la expresin z = x n ln 2. El mayor error producido por este
mtodo viene dado por la realizacin de esta diferencia., por eso se han desarrollado mtodos
de precisin pseudo extendida, donde ln 2 se descompone en dos nmeros, siendo:
ln 2 = c
1
c
2
, (5.21)
donde c
1
= 0.693359375 y c
2
= 0.00021219444005469, haciendo entonces la evaluacin de z
de la forma
z = (x n c
1
) + n c
2
, (5.22)
donde el trmino encerrado en el parntesis se calcula exacto, producindose slo errores de
redondeo en el segundo trmino.

Las rutinas de la exponencial de base 10 para los formatos de 24 y 32 bits, son completamente
anlogas a las rutinas exponenciales vistas anteriormente, sustituyendo la base e por 10 en
cada caso. Estas rutinas son comunes para las familias de los PIC16CXXX y PIC17CXXX.

5.5.3.3 Funciones logartmicas.

El dominio efectivo de los logaritmos es (0, MAXNUM], donde MAXNUM es el mayor
nmero que se pueda representar en coma flotante. Todas las rutinas empiezan con un testeo
del argumento para ver si se encuentra dentro del dominio, en caso contrario devuelven un
error de dominio.



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
177
Para el formato reducido de 24 bits, dado la disponibilidad de las rutinas de precisin
extendida, la funcin log se evala usando la siguiente identidad:
( ) f log n 2 ln x log 2 ln ln x
2 2
+ = = , (5.23)
donde n es un nmero entero y 0.5 f <1. El valor de z) (1 log f log
2 2
+ = se obtiene de la
representacin de la funcin en los subintervalos de z [ 1
2
1
, 0] y [0, 1 2 ], usando la
aproximacin racional del mnimo de la forma
q(z)
p(z)
z z) (1 log
2
+ , (5.24)
donde p(z) es una funcin lineal y q(z) cuadrtica.

Para un formato de 32 bits, la forma de hacer el logaritmo es mediante la expansin
ln x = ln f + ln
n
2 = ln f + n ln 2, (5.25)
donde n es un nmero entero y 0.5 f <1. El valor de z) ln(1 f ln + = se obtiene de la
representacin de la funcin en los subintervalos de z [ 1
2
1
, 0] y [0, 1 2 ], usando la
aproximacin racional del mnimo de la forma
|
|
.
|

\
|
+ +
q(z)
p(z)
z z z 0.5 z z) ln(1
2 2
, (5.26)
donde p(z) es una funcin lineal y q(z) cuadrtica. Esta parte racional da un resultado exacto,
estando el error en el segundo trmino. Para reducir este error se utiliza para la evaluacin, un
mtodo de precisin pseudo extendida que tiene la siguiente aritmtica:
ln f + n ln 2 = (ln f n c
2
) + n c
1
, (5.27)
donde la descomposicin de ln 2 es la misma que la utilizada en la funcin exponencial.

La rutina para el clculo del logaritmo decimal con el formato de 24 bits es completamente
anlogo al del clculo del logaritmo neperiano cambiando la base e por 10 en todos los casos.






Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
178
Para el caso del formato de 32 bits, el logaritmo decimal se obtiene mediante la conversin
del logaritmo neperiano, es decir, haciendo la multiplicacin en coma fija del logaritmo
decimal de e por el resultado del logaritmo neperiano.
ln x e log x log = (5.28)

5.5.3.4 Funciones Trigonomtricas.

En la evaluacin de las funciones seno y coseno, el dominio es infinito, por lo que se
requieren tcnicas de reduccin de los argumentos.

Susceptibles de errores de redondeo y cancelacin, estos procesos siempre fallarn para
argumentos mayores de cierto valor, llevando a la perdida de precisin. El tamao de este
valor (LOOSTHR), a partir del cual se producen errores, depende del algoritmo utilizado para
la reduccin y la precisin deseada, dando un valor de;
LOOSTHR = 1024 2
4

2
24
= (5.29)
para esta implementacin usando un mtodo con pseudo precisin extendida y corrientemente
disponible en coma fija y en precisin simple para rutinas en coma flotante. Cuando se sobre
pasa este valor se informa mediante un error de dominio.

Teniendo el argumento x en el intervalo [-LOSSTHR, LOSSTHR], se calcula el argumento z
comprendido en el intervalo
(

,
4

, mediante la siguiente definicin:


z = x mod
4

, (5.30)
produciendo la primera evaluacin de las relaciones y y j.
y =
4
x
, j = 8
8
y
,
donde j indica el octante donde se encuentra el ngulo. Para el uso apropiado de las rutinas de
seno o coseno se introduce una lgica adicional sobre j para obtener el correcto valor del


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
179
signo y el reflejo de los ngulos mayores de . El clculo de z sigue un mtodo de pseudo
precisin extendida,
z = x mod
4

= x y
4

= ((x p
1
y) p
2
y) p
3
y , (5.31)
donde
4

= p
1
+ p
2
+ p
3
, p
1

4

y p
2

4

p
1
, (5.32)
con
p
1
= 0.78515625 (5.33)
p
2
= 2.4187564849853515624 x 10
-4
(5.34)
p
3
= 3.77489497744597636 x 10
-8
(5.35)

Aunque algunas multiplicaciones se hacen en coma fija, las sumas se hacen todas en coma
flotante. Aunque solo estn implementadas las funciones seno y coseno, mediante simples
modificaciones se pueden evaluar el resto de las funciones trigonomtricas.

El polinomio mnimo para las funciones seno y coseno en el intervalo
(

,
4

se construye
de la siguiente forma:
sen x x + x x
2
p(x
2
) (5.36)
cos x 1 0.5 x
2
+ x
4
q(x
2
) (5.37)
para el formato de 32 bits, donde p y q son polinomios de segundo grado. En el formato de 24
bits se utilizan las expresiones
sen x x p(x
2
) (5.38)
cos x 1 x
2
q(x
2
) (5.39)
donde p y q son de segundo grado.

5.5.3.5 Funcin potencia.

La funcin potencia x
y
, est definida para todo y con x>0, sin embargo, para x negativas
slo est definida cuando y es un nmero entero o una raz impar. Desafortunadamente, las


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
180
fracciones impares tal como 1/3 para la raz cbica, no pueden ser representadas exactamente
con un nmero binario en coma flotante, por eso se plantean problemas en la definicin y el
reconocimiento de tales casos. Por tanto, ya que un dato de tipo entero no es soportado en esta
funcin, el dominio de la funcin potencia queda restringido al intervalo [0, MAXNUM] para
x y [-MAXNUM, MAXNUM] para y, que sujeto a los requerimientos el rango es tambin
[0, MAXNUM].

Adems los siguientes casos especiales sern resueltos de la forma:
1 x
0
, x 0

y
0 MAXNUM, y < 0,
donde MAXNUM se puede devolver a travs de overflow y saturacin si estuviese habilitada.
Cuando las rutinas de precisin extendida estn habilitadas, el clculo de la funcin potencia
x
y
es normalmente realizada usando la identidad
x
y
= exp(y ln x), (5.40)
contando con la precisin extendida de la evaluacin de la funcin log y de la exponencial
para el control del error de propagacin. La implementacin para el formato reducido de 24
bits utiliza las funciones log y exponencial de 32 bits obteniendo un error relativo de 0.5 ulp.

La carencia de rutinas de precisin extendida para el formato de 32 bits requiere mayor
esfuerzo y ms sofisticados mtodos de precisin pseudo extendida para controlar el error de
propagacin. Ya que el error relativo ene una funcin exponencial es proporcional al error
absoluto del argumento, hay que tener especial cuidado con los algoritmos basados en una
identidad exponencial. Estos mtodos generalmente tratan de obtener como resultado una
potencia entera de dos, seguida por los clculos requeridos por las aproximaciones, sobre un
intervalo relativamente pequeo. Para esto, la representacin del argumento x viene dada por:
x = f
e
2 , donde 0.5 f < 1. (5.41)

La funcin potencia se puede expresar de la forma:
x log y y
2
2 x = , (5.42)




Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
181
con el logaritmo en base 2 de x representado como
( )
|
.
|

\
|
+ + + =
|
.
|

\
|
+ = =
a
a f
1 log a log e
a
f a
log e 2 f log x log
2 2 2
e
2 2
, (5.43)
donde a es elegida para que (f a)/a sea pequeo.

En lugar de un simple valor de a, se eligen una serie de valores de la forma
16 k
k
2 a

= , k = 0, 1..., 16, (5.44)


resultando una efectiva representacin segmentada. Para un dado f, se tomar el valor a
k
ms
cercano a f, resultando un argumento v = (f a
k
) / a
k
para la funcin
v), (1 log
2
+ 1 2
16 1

< v < 1 2
16 1
. (5.45)

Ya que el nmero a
k
no se puede representar exactamente con entera precisin, se realiza la
evaluacin de v mediante la pseudo precisin extendida de la forma
( )
|
|
.
|

\
|
+

=

k k
k k
k
k
B A
B A f
a
a f
, (5.46)
donde
k k k
B A a + = . Este mtodo asegura la evaluacin de v con un error relativo mximo
menor de 1 ulp. La aproximacin del polinomio mnimo es de la forma
( )
q(v)
p(v)
v
2
v
v v 1 log
3
2
+ + , (5.47)
siendo q y p polinomios de primer grado. A partir de este resultado se realiza la conversin a
logaritmo en base dos, obteniendo al final que
v) (1 log
16
k
e x log
2 2
+ + = . (5.48)

Ahora el producto x log y
2
es cuidadosamente calculado reduciendo el nmero y a una
suma de dos partes con una de ellas menor a 1/16, evaluando pequeos productos de similar
magnitud y agrupando los trminos. Cada fase de esta estrategia est seguida por una
operacin similar de reduccin de operandos donde la mayor parte corresponde a un entero
ms un nmero de dieciseisavo.



Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
182
La forma final del producto es un nmero entero ms un nmero de dieciseisavo ms un
nmero del intervalo [-0.0625,0], siendo el resultado final:
h -n/16 i x log y y
2 2 2 2 x
2
= = , (5.49)
donde 2
h
es evaluada por la aproximacin mnima de la forma
p(h) h h 1 2
h
+ , (5.50)
siendo p un polinomio de segundo grado.

Normalmente esta funcin slo es soportada por los PIC17CXXX.

5.5.3.6 Funcin parte entera por defecto.

Otra funcin de las libreras matemticas es la operacin floor(x) x, la cual encuentra el
mayor entero no superior a x, y lo expresa en coma flotante. La implementacin usada aqu
encuentra la localizacin del punto binario implcito en el exponente, determinando de este
modo el bit por debajo del cual hay que poner todo a cero.
Dos ejemplos de esta funcin son:
FLOOR24 (123.45) = FLOOR24 (0x8576E6) =0x857600 = 123.0 (5.51)
FLOOR24 (-123.45) = FLOOR24 (0x85F6E6) =0x857800 = -124.0 (5.52)

5.5.3.7 Comparacin lgica en coma flotante.

En los clculos frecuentemente se requiere relacionar nmeros mediante los operadores <
(menor), <= (menor o igual), > (mayor), >= (mayor o igual), (igual), != (distinto). Estas
comparaciones se realizan llamando a las rutinas TALTBxx (A<B), TALEBxx (A<=B),
TAGTBxx (A>B), TAGEBxx (A>=B), TAEQBxx (A=B), y TANEBxx (A!=B).

Las comparaciones necesarias se hacen empezando por el exponente, seguidas si es necesario
por los bytes que forman la mantisa empezando por los de mayor peso, hasta completar todos
los bits. Los argumentos son testeados en los registros AARG y BARG, devolviendo como
resultado un entero en W, que ser un uno en caso de que la condicin se d y un cero si no es
cierta.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
183
5.5.3.8 Generador aleatorio de nmeros enteros.

La utilizacin de la funcin rand() de las libreras de estndar de C genera un nmero
aleatorio entero no negativo que se utiliza como semilla para la funcin srand(x), donde x es
un entero. Esta implementacin del generador de nmeros aleatorios utiliza un mtodo basado
en la siguiente relacin:
c) x (a x
i 1 i
+ =
+
mod m, (5.53)
con un multiplicador a, un incremento c, mdulo m y un nmero inicial
0
x . Estas constantes
se seleccionan cuidadosamente para asegurar el mximo periodo, junto con otros importantes
criterios para su realizacin. Aqu x es elegido como un entero de 32 bits. Las constantes
usadas en la implementacin de esta rutina son:
a = 1664525, (5.54)
c = 1, (5.55)
m =
32
2 (5.56)

En este caso el valor del mdulo coincide con el periodo del generador, indicando que son
posibles todos los enteros de 32 bits.
RAND_MAX =
32
2 -1 =4294967295. (5.57)

5.5.4 Conversin de coma flotante a ASCII.

A menudo es necesario a la salida un nmero en coma flotante en un display. Por ejemplo,
para verificar clculos, uno quiere a la salida nmeros en coma flotante usando el puerto serie
de los microcontroladores PIC, o usar una E/S de propsito general junto con un display de
cristal lquido (LCD).

De cualquier modo, el nmero en coma flotante debe convertirse a su equivalente en ASCII.
Aqu se muestra un ejemplo especfico de conversin de un nmero en coma flotante de 32
bits a ASCII. Una subrutina que se proporciona aqu hace la conversin y devuelve en
equivalente ASCII en la RAM.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
184
5.5.4.1 Conversin de coma flotante a ASCII en base 10.

El rango de los nmeros en coma flotante es: 1.17549435x10
-38
a 6.80564693x10
+38
. Esta
aplicacin slo muestra la conversin de los nmeros desde el 0.000 hasta 9.999. con
modificaciones, este mtodo puede ser extendido para convertir otro rango de nmeros
tambin.

Se debe asegurar que los registros AARG estn cargados con el correcto nmero en formato
coma flotante de 32 bits: tanto como resultado de una operacin anterior o cargndolo
manualmente en AARG.

Para la demostracin se tomar una aproximacin de y se cargar en el registro AARG. El
nmero usado ser 3.1415927. Entonces se llama a la subrutina float_ascii. Antes de regresar
de la rutina, los nmeros de la representacin del nmero en coma flotante es guardado en
base 10 de ASCII en registros RAM: unidades, dcimas, centsimas, y milsimas. Cada uno
de estos registros representa a un carcter en cdigo ASCII. El punto decimal no se incluye en
los registros RAM. Ya que el nmero a representar esta entre 0.000 y 9.999, la rutina de
actualizacin del display debe poner un punto decimal despus de la salida del primer dgito.
El resultado es el nmero 3.141.

5.5.4.2 Personalizacin de la rutina.

Hay varios cambios que se pueden realizar a la rutina float_ascii para personalizarla.
El nmero de cifras significantes se especifica mediante la constante SIG_FIG. Suponiendo
que se quiere un dgito ms de exactitud, es decir, cuatro dgitos a la derecha del punto
decimal, es muy fcil cambiar el archivo floasc.inc para lograr estas caractersticas.

Los pasos a seguir al cambiar el cdigo fuente para obtener a la salida un total de cinco
dgitos son:
1. Asegurarse de que hay suficientes registros RAM, uno por cada dgito. En este caso
habr que cambiar la definicin cblock como se muestra a continuacin.


Microcontroladores PIC de la Gama Media. 5. Programacin con PIC.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
185
cblock ; reserva cuatro bytes de memoria RAM, uno por cada dgito
unidades ;
decimas
centesimas
milesimas
digito5 ; aade un registro ms de memoria RAM.
endc
2. La constante last_digit debe ser cambiada. Esta constante contiene la direccin de la
ltima variable del bloque cblock. En este caso la ltima variable es digit5.
last_digit set digit5
3. Ahora la constante, SIG_FIG debe ser igualada al nmero de dgitos deseados. Por
ejemplo, si se quieren cuatro dgitos a la derecha del punto decimal, un total de cinco
dgitos debern ser obtenidos.
SIG_FIG equ 5
4. Se carga diez mil en el registro BARG, usando fprep.exe para encontrar el equivalente
de 10000 en coma flotante.

5.5.4.3 Resumen.

En este apartado se ha visto la conversin de nmeros en formato coma flotante a ASCII. Esto
es til para mostrar los resultados de alguna operacin en coma flotante mediante la
utilizacin de displays. Un ejemplo de esta aplicacin podra ser la lectura en un pin de una
entrada de entre 0.000 y 3.500 voltios, que mediante el convertidor analgico digital, muestra
el resultado en un LCD con nmeros decimales.


Microcontroladores PIC de la Gama Media. A. Protocolo I
2
C.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
187

Apndice A: Protocolo I
2
C.


A.1 Introduccin.

El bus I
2
C es un interface de comunicacin serie que consta de dos hilos. En este protocolo
cada dispositivo tiene una direccin. Cuando un maestro quiera iniciar una transferencia de
datos, lo primero que transmitir ser la direccin del dispositivo con que se quiera
comunicar. Todos los dispositivos estn atentos y comprueban si se trata de su direccin.
Dentro de esta direccin, el ltimo bit especifica si el maestro quiere realizar una lectura o una
escritura sobre el esclavo. Durante una operacin de transferencia de datos el maestro y el
esclavo estn siempre en modos opuestos, uno en modo de transmisin y otro como receptor.
Indistintamente de quin reciba y quin transmita, la seal de reloj la genera el maestro.

Las lneas de salida de las seales de reloj (SCL) y datos (SDA) deben estar en drenador o
colector abierto, de modo que se pueda producir una Y cableada en el bus. Las resistencias
externas son usadas para asegurar un nivel alto cuando ningn dispositivo la pone a cero. El
nmero de dispositivos que se pueden conectar al bus I
2
C est limitado por la mxima carga
que puede tener el bus que es de 400 pF, y por la capacidad de direccionamiento.

A.2 Inicializacin y fin de transferencia de datos.

Mientras no se realiza transferencia de datos, ambas lneas, la de reloj y la de datos, estn en
estado alto debido a las resistencias pull-up externas. Las condiciones de START y STOP
determinan el inicio y el fin de las transmisiones de datos.

La condicin de START se define como la transicin de nivel alto a bajo de la lnea SDA
cuando SCL est en alto. La condicin de STOP se define como la transicin de nivel bajo a
alto de la lnea SDA estando en alto SCL. Esto es lo que ilustra la figura A.1.


Microcontroladores PIC de la Gama Media. A. Protocolo I
2
C.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
188
Estas condiciones las genera el maestro. Debido a la definicin de las condiciones de START
y STOP, cuando comienza la transmisin, la lnea de datos SDA slo puede cambiar de
estado cuando la lnea SCL est en bajo.


Figura A.1 Condiciones de Start y Stop.

A.3 Direccionamiento de dispositivos en I
2
C.

Existen dos formatos para el direccionamiento en el protocolo I
2
C. El ms simple es el
formato de 7 bits de direccin con un bit de R/ W(figura A.2), y el otro, ms complejo es de
10 bits de direccin y el bit de R/ W(figura A.3). Para este ltimo formato deben transmitirse
dos bytes de direccin. Los primeros cinco bits indican que se trata de un direccionamiento de
10 bits. En la primera transmisin se envan estos cinco bits, los dos ms significativos de la
direccin y el bit R/ W, quedando los otros ocho bits de la direccin para la segunda
transmisin.

Figura A.2 Formato de direccin de 7 bits.



Microcontroladores PIC de la Gama Media. A. Protocolo I
2
C.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
189

Figura A.3 Formato de direccionamiento de 10 bits para el protocolo I
2
C.

A.4 Reconocimiento de transferencia.

Todos los datos deben ser transmitidos por bytes, sin lmite en el nmero de bytes a transmitir
por cada transferencia de datos. Despus de cada byte, el esclavo-receptor genera un bit de
reconocimiento ( ACK) (figura A.4). Cuando el esclavo no manda este bit de reconocimiento,
el maestro debe abortar la transferencia, para ello el esclavo deja la lnea SDA en alto para
que el maestro pueda generar la condicin de STOP.


Figura A.4 Reconocimiento del esclavo-receptor.

Si es el maestro el que est recibiendo datos, es ste el que ha de generar el bit de
reconocimiento despus de cada byte recibido, excepto para el ltimo. En este caso, el
maestro no manda el bit de reconocimiento, liberando el esclavo la lnea SDA para que el
maestro genere la condicin de STOP. La condicin de STOP, tambin la puede generar el
maestro durante el pulso del bit de reconocimiento, terminando as la transferencia.


Microcontroladores PIC de la Gama Media. A. Protocolo I
2
C.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
190
Si el esclavo necesita retardo para la transmisin del siguiente byte, mantiene la lnea SCL en
estado bajo, forzando al maestro a esperar. La transferencia de datos continua cuando el
esclavo libera la lnea SCL. Esto permite al esclavo mover los datos recibidos o buscar los
nuevos datos a transmitir antes de que el reloj se active.

En las figuras A.5 y A.6 se muestran las secuencias de la transferencia de datos del maestro
como transmisor y receptor.


Figura A.5 Secuencia de maestro transmisor.



Microcontroladores PIC de la Gama Media. A. Protocolo I
2
C.
Santiago Salamanca Mio Escuela de Ingenieras Industriales
David Arroyo Muoz Universidad de Extremadura
191

Figura A.6 Secuencia de maestro receptor.

Cuando el maestro no quiere abandonar el bus (cosa que ocurre cuando se genera una
condicin de Stop), ste debe de generar una condicin de START repetida (Sr). Es idntica a
la condicin de START explicada anteriormente, pero ocurre despus de un pulso e
reconocimiento (no con el bus libre). Esto permite al maestro enviar comandos al esclavo y
recibir la informacin pedida o direccionar a distintos dispositivos esclavos.

Вам также может понравиться