Você está na página 1de 58

UTILIZACIN DE LOS MICROCONTROLADORES PIC serie 16F87X

MICROCHIP TECHNOLOGY

Docente: Oscar Celis

****** CEE *******


UTN - Facultad Regional Crdoba

NDICE
Arquitectura Harvard vs. Arquitectura Von Neuman

Diagrama de Bloques, del Microcontrolador

Mapa de Memoria Interna (RAM)

Memoria de Programa

Camino de los datos y Registro W

Contador de Programa

Stack (Pila)

Registro STATUS

Registros Especiales

10

Puertos de Entrada / Salida

10

Diagrama Lgico (PIN-OUT)

11

Temporizador 0

12

Interrupciones

13

Los Puertos Paralelos

19

Los Temporizadores

24

Los Modulos de Captura, Comparacin y PWM

27

Interfaz Serie - USART

31

El Convertidor Analgico / Digital

38

El Temporizador WDT

42

Escritura de un programa fuente

43

Conjunto de Instrucciones

43

Modos de Direccionamiento

46

Herramientas de desarrollo

47

Simulacin

50

Apndice 1

51

Apndice 2

52

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 02 de 58

1.1 Arquitectura Harvard vs. Arquitectura Von Neuman


La arquitectura tradicional de computadoras y microprocesadores se basa en el
esquema propuesto por John Von Neumann, en el cual la unidad central de proceso, o
CPU, esta conectada a una memoria nica que contiene las instrucciones del programa y
los datos (figura 1.1.1). El tamao de la unidad de datos o instrucciones esta fijado por el
ancho del bus de la memoria. Es decir que un microprocesador de 8 bits, que tiene
adems un bus de 8 bits que lo conecta con la memoria, deber manejar datos e
instrucciones de una o ms unidades de 8 bits (bytes) de longitud. Cuando deba acceder
a una instruccin o dato de ms de un byte de longitud, deber realizar ms de un acceso
a la memoria. Por otro lado este bus nico limita la velocidad de operacin del
microprocesador, ya que no se puede buscar de memoria una nueva instruccin, antes de
que finalicen las transferencias de datos que pudieran resultar de la instruccin anterior.
Es decir que las dos principales limitaciones de esta arquitectura tradicional son :
a) que la longitud de las instrucciones esta limitada por la unidad de longitud de los datos,
por lo tanto el microprocesador debe hacer varios accesos a memoria para buscar
instrucciones complejas,
b) que la velocidad de operacin (o ancho de banda de operacin) esta limitada por el
efecto de cuello de botella que significa un bus nico para datos e instrucciones que
impide superponer ambos tiempos de acceso.

FIG. 1.1.1 Arquitectura Von Newmann


La arquitectura Harvard y sus ventajas:
La arquitectura conocida como Harvard, consiste simplemente en un esquema en el que el
CPU esta conectado a dos memorias por intermedio de dos buses separados. Una de las
memorias contiene solamente las instrucciones del programa, y es llamada Memoria de
Programa. La otra memoria solo almacena los datos y es llamada Memoria de Datos
(figura 1.1.2). Ambos buses son totalmente independientes y pueden ser de distintos
anchos. Para un procesador de Set de Instrucciones Reducido, o RISC (Reduced
Instruccin Set Computer), el set de instrucciones y el bus de la memoria de programa
pueden disearse de manera tal que todas las instrucciones tengan una sola posicin de
memoria de programa de longitud. Adems, como los buses son independientes, el CPU
puede estar accediendo a los datos para completar la ejecucin de una instruccin, y al
mismo tiempo estar leyendo la prxima instruccin a ejecutar. Se puede observar
claramente que las principales ventajas de esta arquitectura son:
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 03 de 58

a) que el tamao de las instrucciones no esta relacionado con el de los datos, y por lo
tanto puede ser optimizado para que cualquier instruccin ocupe una sola posicin de
memoria de programa, logrando as mayor velocidad y menor longitud de programa,
b) que el tiempo de acceso a las instrucciones puede superponerse con el de los datos,
logrando una mayor velocidad de operacin.
Una pequea desventaja de los procesadores con arquitectura Harvard, es que deben
poseer instrucciones especiales para acceder a tablas de valores constantes que pueda
ser necesario incluir en los programas, ya que estas tablas se encontraran fsicamente en
la memoria de programa (por ejemplo en la EPROM de un microprocesador).

FIG. 1.1.2 Arquitectura Harvard


Los microcontroladores PIC 16C5X, 16F87X, 16CXX y 17CXX poseen arquitectura
Harvard, con una memoria de datos de 8 bits, y una memoria de programa que, segn el
modelo, puede ser de 12 bits para los 16C5X, 14 bits para los 16CXX y 16 bits para los
17CXX.

1.2 Diagrama de bloques


13
P ro g ra m
M e m o ry

P ro g ra m
Bus

P O R TA

RAM
F ile
R e g is te rs

8 L e v e l S ta c k
(1 3 -b it)

14

D a ta B u s

P ro g ra m C o u n te r

FLA S H

R A M A d d r (1 )

PO RTB

A ddr M U X

In s tru c tio n re g
D ire c t A d d r

In d ire c t
A ddr

F S R re g
S TA T U S re g

8
3

P o w e r-u p
T im e r
In s tru c tio n
D ecode &
C o n tro l
T im in g
G e n e ra tio n
O S C 1 /C L K IN
O S C 2 /C L K O U T

O s c illa to r
S ta r t-u p T im e r
P o w e r-o n
R eset

PO RTC

MUX

A LU
8

W a tc h d o g
T im e r
B ro w n -o u t
R eset

R
R
R
R
R
R

A 0 /A N 0
A 1 /A N 1
A 2 /A N 2
A 3 /A N 3 /V R E F
A 4 /T 0 C K I
A 5 /A N 4 /S S

R
R
R
R
R
R
R
R

B 0 /IN T
B1
B2
B 3 /P G M
B4
B5
B 6 /P G C
B 7 /P G D

R
R
R
R
R
R
R
R

C
C
C
C
C
C
C
C

0 /T 1 O S O /T 1 C K I
1 /T 1 O S I/C C P 2
2 /C C P 1
3 /S C K /S C L
4 /S D I/S D A
5 /S D O
6 /T X /C K
7 /R X /D T

PO RTD
W re g
R D 7 /P S P 7 :R D 0 /P S P 0

In -C irc u it
D e bugge r
L o w -V o lta g e
P ro g ra m m in g

P a ra lle l S la v e P o r t

PO RTE
R E 0 /A N 5 /R D
R E 1 /A N 6 /W R

M C LR

T im e r0

T im e r1

D a ta E E P R O M

N o te 1 :

C C P 1 ,2

VDD, VSS

T im e r2

S y n c h ro n o u s
S e ria l P o r t

R E 2 /A N 7 /C S

1 0 -b it A /D

USART

D ev ic e

P ro g ra m
FLA SH

D a ta M e m o ry

P IC 1 6 F 8 7 4

4K

1 9 2 B y te s

D a t a E E P RO M
1 2 8 B y te s

P IC 1 6 F 8 7 7

8K

3 6 8 B y te s

2 5 6 B y te s

H ig h e r o rd e r b its a re fro m th e S TA T U S re g is te r.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 04 de 58

1.3 Mapas de memoria Memoria Interna (RAM)


Organizacin
La memoria interna de datos, tambin llamada archivo de registros (register file), esta
dividida en dos grupos: los registros especiales, y los registros de propsito generales.
Los primeros ocupan las primeras 32 posiciones de los cuatro bancos de memoria RAM.
Entre los registros especiales se encuentran el registro de estado (STATUS), los registros
de datos de los cinco puertos de entrada salida (Puerto A, Puerto B, Puerto C, Puerto D,
Puerto E), los 8 bits menos significativos del program counter (PC), los registros de los
timers, TMR0, TMR1L, TMR1H, TMR2, un registro puntero llamado File Select Register
(FSR). La posicin 00 no contiene ningn registro en especial y es utilizada en el
mecanismo de direccionamiento indirecto.
Como se observa este microcontrolador posee cuatro bancos de memoria y pueden
seleccionarse desde el registro STATUS.
F ile
A d d re s s
In d ire c t a d d r. (*)
TMR0
PC L
S TA T U S
FSR
P O R TA
PO RTB
PO RTC
P O R T D (1 )
P O R T E (1 )
P C L AT H
IN T C O N
P IR 1
P IR 2
T M R 1L
T M R 1H
T 1C O N
TMR2
T 2C O N
S S PBU F
SSPC O N
C C P R 1L
C C P R 1H
C C P 1C O N
R C S TA
TXREG
RC REG
C C P R 2L
C C P R 2H
C C P 2C O N
ADRESH
ADC ON0

00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0A h
0B h
0C h
0D h
0E h
0F h
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1A h
1B h
1C h
1D h
1E h
1F h
20h

G e n e ra l
P u rp o s e
R e g is te r

O P T IO N _R E G
PC L
S TA T U S
FSR
T R IS A
T R IS B
T R IS C
T R IS D (1 )
T R IS E (1 )
P C L AT H
IN T C O N
P IE 1
P IE 2
PC O N

SSPC O N2
PR 2
S S PA D D
S S P S TA T

T X S TA
S PBR G

ADRESL
ADC ON1

7F h

80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
8A h
8B h
8C h
8D h
8E h
8F h
90h
91h
92h
93h
94h
95h
96h
97h
98h
99h
9A h
9B h
9C h
9D h
9E h
9F h

In d ire c t a d d r. (*)
TMR0
PC L
S TA T U S
FSR
PO RTB

P C L AT H
IN T C O N
E E D A TA
EEADR
E E D AT H
EEADRH

G e n e ra l
P u rp o s e
R e g is te r
1 6 B y te s

A 0h
G e n e ra l
P u rp o s e
R e g is te r
8 0 B y te s

9 6 B y te s

Bank 0

In d ire c t a d d r. (*)

accesses
7 0 h -7 F h
Bank 1

EFh
F 0h
FFh

G e n e ra l
P u rp o s e
R e g is te r
8 0 B y te s
accesses
7 0 h -7 F h
Bank 2

100h
101h
102h
103h
104h
105h
106h
107h
108h
109h
10A h
10B h
10C h
10D h
10E h
10F h
110h
111h
112h
113h
114h
115h
116h
117h
118h
119h
11A h
11B h
11C h
11D h
11E h
11F h
120h

16F h
170h
17F h

In d ire c t a d d r. (*)
O P T IO N _R E G
PC L
S TA T U S
FSR
T R IS B

P C L AT H
IN T C O N
EEC ON1
EEC ON2
R e s e rv e d (2 )
R e s e rv e d (2 )

G e n e ra l
P u rp o s e
R e g is te r
1 6 B y te s

180h
181h
182h
183h
184h
185h
186h
187h
188h
189h
18A h
18B h
18C h
18D h
18E h
18F h
190h
191h
192h
193h
194h
195h
196h
197h
198h
199h
19A h
19B h
19C h
19D h
19E h
19F h
1A 0h

G e n e ra l
P u rp o s e
R e g is te r
8 0 B y te s
accesses
70h - 7F h
Bank 3

1E F h
1F 0h
1F F h

U n im p le m e n te d d a ta m e m o ry lo c a tio n s , re a d a s '0 '.


* N o t a p h y s ic a l re g is te r.
N o te 1 : T h e s e re g is te rs a re n o t im p le m e n te d o n 2 8 -p in d e v ic e s .
2 : T h e s e re g is te rs a re re s e rv e d , m a in ta in th e s e re g is te rs c le a r.

FIG. 1.3.1 Organizacin de la memoria Interna (RAM) en la familia PIC16F87X


La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 05 de 58

Memoria de Programa
Organizacin
La memoria de programa, que en los PIC16F87X puede ser de 2K, 4K u 8K instrucciones,
debe ser considerada a los efectos de la programacin, como compuesta por secciones o
pginas de 2K posiciones. Esto se debe, como se ver, a las limitaciones de
direccionamiento de las instrucciones de salto

FIG. 1.3.2 Organizacin de la memoria de programa en la familia PIC16F87X

1.4 Registros de funciones especiales Camino de los datos y registro W


La figura 1.4.2 representa un diagrama simplificado de la arquitectura interna del camino
de los datos en el CPU de los microcontroladores PIC. Este diagrama puede no
representar con exactitud el circuito interno de estos microcontroladores, pero es exacto y
claro desde la ptica del programador. La figura 1.4.1 representa el mismo diagrama para
un microprocesador ficticio de arquitectura tradicional. Se puede observar que la principal
diferencia entre ambos radica en la ubicacin del registro de trabajo, que para los PIC's
se denomina W (Working Register), y para los tradicionales es el Acumulador (A).

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 06 de 58

Figura 1.4.1
En los microcontroladores tradicionales todas las operaciones se realizan sobre el
acumulador. La salida del acumulador esta conectada a una de las entradas de la Unidad
Aritmtica y Lgica (ALU), y por lo tanto ste es siempre uno de los dos operandos de
cualquier instruccin. Por convencin, las instrucciones de simple operando (borrar,
incrementar, decrementar, complementar), actan sobre el acumulador. La salida de la
ALU va solamente a la entrada del acumulador, por lo tanto el resultado de cualquier
operacin siempre quedara en este registro. Para operar sobre un dato de memoria, luego
realizar la operacin siempre hay que mover el acumulador a la memoria con una
instruccin adicional.
En los microcontroladores PIC, la salida de la ALU va al registro W y tambin a la
memoria de datos, por lo tanto el resultado puede guardarse en cualquiera de los dos
destinos. En las instrucciones de doble operando, uno de los dos datos siempre debe
estar en el registro W, como ocurra en el modelo tradicional con el acumulador. En las
instrucciones de simple operando el dato en este caso se toma de la memoria (tambin
por convencin). La gran ventaja de esta arquitectura es que permite un gran ahorro de
instrucciones ya que el resultado de cualquier instruccin que opere con la memoria, ya
sea de simple o doble operando, puede dejarse en la misma posicin de memoria o en el
registro W, segn se seleccione con un bit de la misma instruccin. Las operaciones con
constantes provenientes de la memoria de programa (literales) se realizan solo sobre el
registro W.
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 07 de 58

En la memoria de datos de los PIC's se encuentran ubicados casi todos los registros de
control del microprocesador y sus perifricos autocontenidos, y tambin las posiciones de
memoria de usos generales.
Contador de Programa
Este registro, normalmente denominado PC, es totalmente equivalente al de todos los
microprocesadores y contiene la direccin de la prxima instruccin a ejecutar. Se
incrementa automticamente al ejecutar cada instruccin, de manera que la secuencia
natural de ejecucin del programa es lineal, una instruccin despus de la otra. Algunas
instrucciones que llamaremos de control, cambian el contenido del PC alterando la
secuencia lineal de ejecucin. Dentro de estas instrucciones se encuentran el GOTO y el
CALL que permiten cargar en forma directa un valor constante en el PC haciendo que el
programa salte a cualquier posicin de la memoria. Otras instrucciones de control son los
SKIP o "salteos" condicionales, que producen un incremento adicional del PC si se
cumple una condicin especifica, haciendo que el programa saltee, sin ejecutar, la
instruccin siguiente.
El PC es un registro de 13 bits en los 16F87X, lo que permite direccionar 8192 posiciones
de memoria de programa.
Al resetearse el microprocesador, todos los bits del PC toman valor 0, de manera que la
direccin de arranque del programa es siempre la primera posicin de memoria de
programa. En esta posicin se deber poner la primera instruccin del programa.
A diferencia de la mayora de los microprocesadores convencionales, el PC es tambin
accesible al programador como registro de memoria interna de datos, en la posicin de
02. Es decir que cualquier instruccin comn que opere sobre registros puede ser
utilizada para alterar el PC y desviar la ejecucin del programa. El uso indiscriminado de
este tipo de instrucciones complica el programa y puede ser muy peligroso, ya que puede
producir comportamientos difciles de predecir. Sin embargo, algunas de esta
instrucciones utilizadas con cierto mtodo, pueden ser muy tiles para implementar
poderosas estructuras de control tales como el goto computado. Como el
microprocesador opera con datos de 8 bits, y la memoria de datos es tambin de 8 bits,
estas instrucciones solo pueden leer o modificar los bits 0 a 7 del PC.
Stack
En los microcontroladores PIC el stack es una memoria interna dedicada, de tamao
limitado, separada de las memorias de datos y de programa, inaccesible al programador,
y organizada en forma de pila, que es utilizada solamente, y en forma automtica, para
guardar las direcciones de retorno de subrrutinas e interrupciones. Cada posicin es de
13 bits y permite guardar una copia completa del PC. Como en toda memoria tipo pila, los
datos son accedidos de manera tal que el primero que entra es el ultimo que sale.
En los 16F87X el stack es de solo ocho posiciones, mientras que en los 17CXX es de 16
posiciones. Esto representa, en cierta medida, una limitacin de estos microcontroladores,
ya que no permite hacer uso intensivo del anidamiento de subrutinas. En los 16F87X, solo
se pueden anidar ocho niveles de subrutinas, es decir que una subrutina que es llamada
desde el programa principal, puede a su vez llamar a otra subrutina, hasta un mximo de
8, siempre que no existan interrupciones habilitadas, en tal caso debern disminuir la
cantidades de rutinas anidadas en el main, porque de lo contrario se desbordar el Stack.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 08 de 58

Esto de hecho representa una traba para el programador y adems parece impedir o
dificultar la programacin estructurada, sin embargo es una buena solucin de
compromiso ya que estos microcontroladores estn diseados para aplicaciones de alta
velocidad en tiempo real, en las que el overhead (demoras adicionales) que ocasiona un
excesivo anidamiento de subrutinas es inaceptable. Por otra parte existen tcnicas de
organizacin del programa que permiten mantener la claridad de la programacin
estructurada, sin necesidad de utilizar tantas subrutinas anidadas.
Como ya se menciono anteriormente, el stack y el puntero interno que lo direcciona, son
invisibles para el programador, solo se los accede automticamente para guardar o
rescatar las direcciones de programa cuando se ejecutan las instrucciones de llamada o
retorno de subrutinas, o cuando se produce una interrupcin o se ejecuta una instruccin
de retorno de ella.
Registro de Estado del Procesador (STATUS - Direccin 0x03, 0x83, 0x103, 0x183)
La palabra de estado del procesador contiene los tres bits de estado de la ALU (C, DC y
Z), y otros bits que por comodidad se incluyeron en este registro.
R /W -0
IR P

R /W -0
R P1

R /W -0
R P0

R -1
TO

R -1
PD

R /W -x
Z

R /W -x
DC

b it7

b it 7:

R /W -x
C
b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

IR P : R e g is te r B a n k S e le c t b it (u s e d fo r in d ire c t a d d re s s in g )
1 = B a n k 2, 3 (100h - 1F F h )
0 = B a n k 0, 1 (00h - F F h )

b it 6-5: R P 1: R P 0: R e g is te r B a n k S e le c t b its (u s e d fo r d ire c t a d d re s s in g )


11 = B a n k 3 (180h - 1F F h )
10 = B a n k 2 (100h - 17F h )
01 = B a n k 1 (80h - F F h )
00 = B a n k 0 (00h - 7F h )
E a c h b a n k is 128 b y te s
b it 4:

T O : T im e -o u t b it
1 = A fte r p o w e r-u p, CLRWDT in s tru c tio n , o r SLEEP in s tru c tio n
0 = A W D T tim e -o u t o c c u rre d

b it 3:

P D : P o w e r-d o w n b it
1 = A fte r p o w e r-u p o r b y th e CLRWDT in s tru c tio n
0 = B y e x e c u tio n o f th e SLEEP in s tru c tio n

b it 2:

Z : Z e ro b it
1 = T h e re s u lt o f a n a rith m e tic o r lo g ic o p e ra tio n is ze ro
0 = T h e re s u lt o f a n a rith m e tic o r lo g ic o p e ra tio n is n o t z e ro

b it 1:

D C : D ig it c a rry /b o rro w b it (ADDWF, ADDLW,SUBLW,SUBWF in s tru c tio n s ) (fo r b o rro w th e p o la rity is re v e rs e d )


1 = A c a rry -o u t fro m th e 4th lo w o rd e r b it o f th e re s u lt o c c u rre d
0 = N o c a rry -o u t fro m th e 4th lo w o rd e r b it o f th e re s u lt

b it 0:

C : C a rry /b o rro w b it (ADDWF, ADDLW,SUBLW,SUBWF in s tru c tio n s )


1 = A c a rry -o u t fro m th e m o s t s ig n ic a n t b it o f th e re s u lt o c c u rre d
0 = N o c a rry -o u t fro m th e m o s t s ig n ic a n t b it o f th e re s u lt o c c u rre d
N o te : F o r b o rro w th e p o la rity is re v e rs e d . A s u b tra c tio n is e x e c u te d b y a d d in g th e tw o s c o m p le m e n t o f th e
s e c o n d o p e ra n d . F o r ro ta te (RRF, RLF) in s tru c tio n s , th is b it is lo a d e d w ith e ith e r th e h ig h o r lo w o rd e r b it o f
th e s o u rc e re g is te r.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 09 de 58

REGISTROS ESPECIALES IMPORTANTES


Las primeras posiciones del rea de datos estn reservadas para alojar registros de
propsito especial, quedando las restantes libres para contener los datos u operandos
que se desee (registros de propsito general).
El registro INDF que ocupa la posicin 0 no est implementando fsicamente y, como se
ha explicado, se le referencia en el direccionamiento indirecto de datos aunque se utiliza
el contenido de FSR.
En la direccin 0x01 esta el registro TMR0 (Temporizador) que puede ser ledo y escrito
como cualquier otro registro. Puede incrementar su valor con una seal externa aplicada
al pin T0CKI o mediante el oscilador interno.
El PC ocupa la posicin 2 del rea de datos en donde se halla el registro PCL al que se
aaden 5 bits del registro PCLATH que se encuentra en pla posicin 0x0A.
El registro de Estado ocupa la posicin 3 y entre sus bits se encuentran los
sealizadores C, DC y Z y el resto de los bits vistos anteriormente.
FSR se ubica en la direccin 4 y puede usarse para contener las direccin del dato en las
instrucciones con direccionamiento indirecto y tambin para guardar operandos.
Los registros que ocupan las posiciones 5, 6, 7, 8 y 9 soportan los Puertos A, B, C, D y E
de E/S. Pueden ser ledos y escritos como cualquier otro registro y manejan los valores de
los bits que entran y salen por los pines de E/S del microcontrolador.

1.5 Puertos de entrada / salida


Los microprocesadores PIC16F87X tienen tres o cinco puertos de entrada/salida paralelo
de usos generales llamados Puerto A, Puerto B, Puerto C, Puerto D y Puerto E. El Puerto
A es de cinco bits, el Puerto E es de tres bits y los dems son de 8 bits cada uno. El
Puerto D y E solamente esta disponible en el 16F874 y el 16F877.
Circuito equivalente
Cada puerto tiene, particularidades en el diseo de su celda de entrada / salida, segn los
perifricos asociados, etc. En la siguiente figura podemos ver en forma reducida un
grfico tpico, con los elementos comunes para todos los puertos.

Circuito equivalente de puerto I/O


La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 10 de 58

El latch L1 corresponde a un bit del registro de datos del puerto, mientras que L2 es un bit
del registro de control de tristate del mismo. B1 es el buffer tristate de salida que tiene
capacidad de entregar 20 mA y drenar 25 mA. B1 es controlado por L2. Si L2 tiene
cargado un "1", B1 se encuentra en tri-state, es decir con la salida desconectada (en alta
impedancia), y el puerto puede ser usado como entrada. Si L2 tiene cargado un "0", la
salida de B1 esta conectada (baja impedancia) y el puerto esta en modo de salida. B2 es
el buffer de entrada, es decir el que pone los datos en el bus interno del microcontrolador
cuando se lee el registro de datos del puerto. Puede verse que el dato ledo es
directamente el estado del pin de entrada

1.6 Diagrama lgico


Diagrama lgico para los microcontroladores PIC16F87X (Pin-Out)
P D IP
1

40

39

R B 7/P G D
R B 6/P G C

R A 1/A N 1
R A 2/A N 2/V R E F -

38

R B5

37

R A 3/A N 3/V R E F +

36

R B4
R B 3/P G M

35

R B2

34

R B1

R E 0/R D /A N 5

33

R B 0/IN T

R E 1/W R /A N 6

9
10

32
31

VDD

30

R D 7/P S P 7

29
28

R D 6/P S P 6
R D 5/P S P 5

12

O S C 1/C L K IN

13

O S C 2/C L K O U T

14

27

R D 4/P S P 4

R C 0/T 1O S O /T 1C K I

15

26

R C 7/R X /D T

R C 1/T 1O S I/C C P 2

16

25

R C 6/T X /C K

R C 2/C C P 1

17

24

R C 5/S D O

R C 3/S C K /S C L
R D 0/P S P 0

18

23

19
20

22
21

R C 4/S D I/S D A
R D 3/P S P 3

P IC 16F 877
P IC 16F 874

39
38
37
36
35
34
33
32
31
30
9

44
43
42
41
40
39
38
37
36
35
34

6
5
4
3
2
1
44
43
42
41
40
7
8
9
10
11
12
13
14
15
16
17

Q FP

R B 3/P G M
R B2
R B1
R B 0/IN T
VDD
VSS
R D 7/P S P 7
R D 6/P S P 6
R D 5/P S P 5
R D 4/P S P 4
R C 7/R X /D T

R C 7/R X /D T
R D 4/P S P 4
R D 5/P S P 5
R D 6/P S P 6
R D 7/P S P 7
VSS
VDD
R B 0/IN T
R B1
R B2
R B 3/P G M

R C 1/T 1O S I/C C P 2
R C 2/C C P 1
R C 3/S C K /S C L
R D 0/P S P 0
R D 1/P S P 1
R D 2/P S P 2
R D 3/P S P 3
R C 4/S D I/S D A
R C 5/S D O
R C 6/T X /C K
NC

R A 4/T 0C K I
R A 5/A N 4/S S
R E 0/R D /A N 5
R E 1/W R /A N 6
R E 2/C S /A N 7
VDD
VSS
O S C 1/C L K IN
O S C 2/C L K O U T
R C 0/T 1O S O /T 1C K 1
NC

18
19
20
21
22
23
24
25
26
27
282

PLC C

R D 2/P S P 2

R A 3/A N 3/V R E F +
R A 2/A N 2/V R E F R A 1/A N 1
R A 0/A N 0
M C L R /V P P /T H V
NC
R B 7/P G D
R B 6/P G C
R B5
R B4
NC

R D 1/P S P 1

R B 7/P G D
R B 6/P G C
R B5
R B4
R B 3/P G M
R B2
R B1
R B 0/IN T
VDD
VSS
R C 7/R X /D T
R C 6/T X /C K
R C 5/S D O
R C 4/S D I/S D A

R C 6 /T X /C K
R C 5 /S D O
R C 4 /S D I/S D A
R D 3 /P S P 3
R D 2 /P S P 2
R D 1 /P S P 1
R D 0 /P S P 0
R C 3 /S C K /S C L
R C 2 /C C P 1
R C 1 /T 1 O S I/C C P 2
NC

VSS

VSS

28
27
26
25
24
23
22
21
20
19
18
17
16
15

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

1
2
3
4
5
6
7
8
9
10
11

P IC 16F 877
P IC 16F 874

33
32
31
30
29
28
27
26
25
24
23

12
13
14
15
16
17
18
19
20
21
22

11

1
2
3
4
5
6
7
8
9
10
11
12
13
14

M C L R /V P P /T H V
R A 0/A N 0
R A 1/A N 1
R A 2/A N 2/V R E F R A 3/A N 3/V R E F +
R A 4/T 0C K I
R A 5/A N 4/S S
VSS
O S C 1/C L K IN
O S C 2/C L K O U T
R C 0/T 1O S O /T 1C K I
R C 1/T 1O S I/C C P 2
R C 2/C C P 1
R C 3/S C K /S C L

NC
R C 0/T 1O S O /T 1C K I
O S C 2/C L K O U T
O S C 1/C L K IN
VSS
VDD
R E 2/A N 7/C S
R E 1/A N 6/W R
R E 0/A N 5/R D
R A 5/A N 4
R A 4/T 0C K I

NC
NC
R B4
R B5
R B 6 /P G C
R B 7 /P G D
M C L R /V P P /T H V
R A 0 /A N 0
R A 1 /A N 1
R A 2 /A N 2 /V R E F R A 3 /A N 3 /V R E F +

R E 2/C S /A N 7
VDD

P IC 16F 877/874

R A 4/T 0C K I
R A 5/A N 4/S S

D IP , S O IC

PIC16F876/873

M C L R /V P P /T H V
R A 0/A N 0

Pgina 11 de 58

1.7 Temporizador 0 / Contador (TMR0)


Este dispositivo es uno de los tres que posee esta familia de microcontroladores, llamado
Real Time Clock / Counter, es bsicamente un contador de 8 bits, constituido por el
registro operacional TMR0 que se encuentra en la posicin 01 de la memoria de datos.
Este registro puede usarse para contar eventos externos por medio de un pin de entrada
especial (modo contador) o para contar pulsos internos de reloj de frecuencia constante
(modo timer). Adems, en cualquiera de los dos modos, se puede insertar un prescaler,
es decir un divisor de frecuencia programable que puede dividir por 2, 4, 8, 16, 32, 64,
128 o 256. Este divisor puede ser utilizado alternativamente como prescaler del TMR0 o
como postscaler del Watch Dog Timer, segn se lo programe.
Para su programacin se dispone de dos registros: el TMR0 ya mencionado y el registro
OPTION. Este registro contiene los bits necesarios para seleccionar modo contador o
modo timer, flanco de conteo en modo contador, prescaler para TMR0 o para WDT y
constante de divisin del prescaler, segn el siguiente esquema:
R /W -1
R BPU

R /W -1
IN T E D G

R /W -1
T 0C S

R /W -1
T 0S E

R /W -1
PSA

R /W -1
PS2

R /W -1
PS1

b it7

R /W -1
PS0
b it0

b it 7:

R B P U : P O R T B P u ll-u p E n a b le b it
1 = P O R T B p u ll-u p s a re d is a b le d
0 = P O R T B p u ll-u p s a re e n a b le d b y in d iv id u a l p o rt la tc h v a lu e s

b it 6:

IN T E D G : In te rru p t E d g e S e le c t b it
1 = In te rru p t o n ris in g e d g e o f R B 0/IN T p in
0 = In te rru p t o n fa llin g e d g e o f R B 0/IN T p in

b it 5:

T 0C S : T M R 0 C lo c k S o u rc e S e le c t b it
1 = Tra n s itio n o n R A 4/T 0C K I p in
0 = In te rn a l in s tru c tio n c y c le c lo c k (C L K O U T )

b it 4:

T 0S E : T M R 0 S o u rc e E d g e S e le c t b it
1 = In c re m e n t o n h ig h -to -lo w tra n s itio n o n R A 4/T 0C K I p in
0 = In c re m e n t o n lo w -to -h ig h tra n s itio n o n R A 4/T 0C K I p in

b it 3:

P S A : P re s c a le r A s s ig n m e n t b it
1 = P re s c a le r is a s s ig n e d to th e W D T
0 = P re s c a le r is a s s ig n e d to th e T im e r0 m o d u le

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

b it 2-0: P S 2: P S 0: P re s c a le r R a te S e le c t b its
B it V a lu e
000
001
010
011
100
101
110
111

T M R 0 R a te
1
1
1
1
1
1
1
1

:
:
:
:
:
:
:
:

2
4
8
16
32
64
128
256

W D T R a te
1
1
1
1
1
1
1
1

:
:
:
:
:
:
:
:

1
2
4
8
16
32
64
128

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 12 de 58

Circuito equivalente del TMR0 y el prescaler.


D a ta b u s
F o s c /4

P S out
1

1
R A 4/T 0C K I
p in

P ro g ra m m a ble
P re s c a le r

8
S y n c w ith
In te rn a l
c lo c k s

TMR0
P S out

(2 c y c le d e la y )

T 0S E
3
P S 2, P S 1, P S 0

PSA

T 0C S

N o te 1:

S e t in te rru p t
a g b it T 0IF
o n o v e ro w

T 0C S , T 0S E , P S A , P S 2:P S 0 (O P T IO N _R E G <5:0>).

2: T h e p re s c a le r is s h a re d w ith W a tc h d o g T im e r (re fe r to F ig u re 5-2 fo r d e ta ile d b lo c k d ia g ra m ).

En el esquema se puede observar claramente como operan los bits de configuracin


T0SE, T0CS y PSA, en cualquiera de sus combinaciones. Se observa adems que en la
entrada del contador TMR0 hay un circuito de sincronizacin que introduce una demora de
dos ciclos del clock de instrucciones (Fosc. / 4). Al escribir sobre el TMR0
automticamente se resetea este circuito, por lo tanto solo se incrementara dos ciclos
despus.
El prescaler es un contador asincrnico de 8 bits ms un multiplexor 8 a 1 comandado por
los bits PS0 a PS2, que permite seleccionar como salida a cualquiera de los bits del
contador. Al escribir sobre el TMR0, si este esta programado para operar con prescaler
(PSA=0), se borra automticamente el prescaler. Las instrucciones CLRWDT y SLEEP
borran el prescaler, si este esta programado para operar como postscaler del watch dog
timer (PSA=1).

1.8 Interrupciones
Los 16F87X tienen la posibilidad de contar con sistema de interrupciones. Este sistema
consiste en un mecanismo por el cual un evento interno o externo, asincrnico respecto
del programa, puede interrumpir la ejecucin de ste produciendo automticamente un
salto a una subrutina de atencin, de manera que pueda atender inmediatamente el
evento, y retomar luego la ejecucin del programa exactamente en donde estaba al
momento de ser interrumpido. Este mecanismo es muy til por ejemplo para el manejo de
timers o rutinas que deben repetirse peridicamente (refresh de display, antirebote de
teclado, etc.), deteccin de pulsos externos, recepcin de datos, etc. Existen catorce
fuentes de interrupcin en los PIC16F87X.
Funcionamiento
En los 16F87X las interrupciones se comportan casi exactamente igual que las subrutinas.
Desde el punto de vista del control del programa, al producirse una interrupcin se
produce el mismo efecto que ocurrira si el programa tuviese un CALL 0004h en el punto
en que se produjo la interrupcin. En uno de los registros de control del sistema de
interrupciones existe un bit de habilitacin general de interrupciones GIE, que debe ser
programado en 1 para que las interrupciones puedan actuar. Al producirse una
interrupcin, este bit se borra automticamente para evitar nuevas interrupciones. La
instruccin RETFIE que se utiliza al final de la rutina de interrupcin, es idntica a un
retorno de subrutina, salvo que adems coloca en uno automticamente el bit GIE,
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 13 de 58

volviendo a habilitar las interrupciones. Dentro de la rutina de interrupcin, el programa


deber probar el estado de los flags de interrupcin de cada una de las fuentes
habilitadas, para detectar cual fue la que causo la interrupcin y as decidir que accin
tomar.
E E IF
E E IE
P S P IF
P S P IE
A D IF
A D IE

W a k e -u p (If in S L E E P m o d e )

T 0 IF
T 0 IE
R C IF
R C IE

IN T F
IN T E
T X IF
T X IE
S S P IF
S S P IE

In te rru p t to C P U

R B IF
R B IE
P E IE

C C P 1 IF
C C P 1 IE

G IE

T M R 2 IF
T M R 2 IE
T M R 1 IF
T M R 1 IE
C C P 2 IF
C C P 2 IE
B C L IF
B C L IE

T h e fo llo w in g ta b le s h o w s w h ic h d e v ic e s h a v e w h ic h in te rru p ts .
D ev ic e

T 0 IF

IN T F

R B IF

P S P IF

A D IF

R C IF

T X IF

S S P IF

C C P 1 IF

T M R 2 IF

T M R 1 IF

E E IF

B C L IF

P IC 1 6 F 8 7 6 /8 7 3

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

C C P 2 IF
Yes

P IC 1 6 F 8 7 7 /8 7 4

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Lgica de interrupciones para los controladores PIC16F8X


Fuentes
La seal que produce la interrupcin es en realidad una sola, que resulta de la
combinacin de todas las fuentes posibles y de los bits de habilitacin. Existen dos
grupos de fuentes, unas que se habilitan con solo colocar en uno el bit GIE, y otras que
adems necesitan que este puesto a uno el bit PEIE. Adems, cada fuente de
interrupciones tiene su respectivo bit de habilitacin individual.
REGISTRO INTCON (DIRECCIONES 0B Y 8B)
Este registro sirve para el control global de las interrupciones y para indicar la
procedencia de algunas a travs de los bits de estado. El PIC 16F87X dispone de doce
fuentes de potenciales interrupciones:
Cada bit del registro INTCON tiene un significado particular, que es:

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 14 de 58

Registro INTCON - Direccin 0x0B, 0x8B, 0x10B, 0x18B


R /W -0
G IE
b it7

R /W -0
P E IE

R /W -0
T 0IE

R /W -0
IN T E

R /W -0
R B IE

R /W -0
T 0IF

R /W -0
IN T F

R /W -x
R B IF
b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

b it 7:

G IE : G lo b a l In te rru p t E n a b le b it
1 = E n a b le s a ll u n -m a s k e d in te rru p ts
0 = D is a b le s a ll in te rru p ts

b it 6:

P E IE : P e rip h e ra l In te rru p t E n a b le b it
1 = E n a b le s a ll u n -m a s k e d p e rip h e ra l in te rru p ts
0 = D is a b le s a ll p e rip h e ra l in te rru p ts

b it 5:

T 0IE : T M R 0 O v e ro w In te rru p t E n a b le b it
1 = E n a b le s th e T M R 0 in te rru p t
0 = D is a b le s th e T M R 0 in te rru p t

b it 4:

IN T E : R B 0/IN T E x te rn a l In te rru p t E n a b le b it
1 = E n a b le s th e R B 0/IN T e x te rn a l in te rru p t
0 = D is a b le s th e R B 0/IN T e x te rn a l in te rru p t

b it 3:

R B IE : R B P o rt C h a n g e In te rru p t E n a b le b it
1 = E n a b le s th e R B p o rt c h a n g e in te rru p t
0 = D is a b le s th e R B p o rt c h a n g e in te rru p t

b it 2:

T 0IF : T M R 0 O v e ro w In te rru p t F la g b it
1 = T M R 0 re g is te r h a s o v e ro w e d (m u s t b e c le a re d in s o ftw a re )
0 = T M R 0 re g is te r d id n o t o v e ro w

b it 1:

IN T F : R B 0/IN T E x te rn a l In te rru p t F la g b it
1 = T h e R B 0/IN T e x te rn a l in te rru p t o c c u rre d (m u s t b e c le a re d in s o ftw a re )
0 = T h e R B 0/IN T e x te rn a l in te rru p t d id n o t o c c u r

b it 0:

R B IF : R B P o rt C h a n g e In te rru p t F la g b it
1 = A t le a s t o n e o f th e R B 7:R B 4 p in s c h a n g e d s ta te (m u s t b e c le a re d in s o ftw a re )
0 = N o n e o f th e R B 7:R B 4 p in s h a v e c h a n g e d s ta te

Debemos hacer algunos comentarios sobre la gestin de los bits de este registro.
En primer lugar, cada indicador de interrupcin individual (RBIF, INTF, etc.) se debe poner
a 0 mediante software en el programa de tratamiento de la interrupcin correspondiente.
Como hemos visto en la figura 1.3.2, en el PIC16F87X slo hay disponible un vector de
interrupcin situado en la direccin 0004. A dicho programa de interrupcin le corresponde
comprobar estos bits para saber cul es el origen de la interrupcin.
Cuando llega una interrupcin, el PIC pone automticamente a 0 el bit GIE, de forma que
no se perturbe el tratamiento de la interrupcin en curso por otras interrupciones
eventuales. Este bits se pone automticamente a 1 al finalizar el programa de interrupcin
cuando se ejecuta la instruccin RETFIE.
Por ltimo, los bits de indicacin de interrupcin permanecen funcionales incluso cuando
las interrupciones correspondientes no se autorizan.
Debido a la incorporacin de una cantidad importante de perifricos dentro de el PIC que
se est analizando, es necesario contar con mas registros dedicados a configurar las
interrupciones, estos son PIR1, PIE1, PIR2 y PIE2.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 15 de 58

Registro PIE1 - Direccin 0x8C

R /W -0

R /W -0

R /W -0

R /W -0

R /W -0

R /W -0

R /W -0

R /W -0

P S P IE (1)
b it7

A D IE

R C IE

T X IE

S S P IE

C C P 1IE

T M R 2IE

T M R 1IE
b it0

b it 7:

P S P IE (1): P a ra lle l S lave P o rt R e a d /W rite In te rru p t E n a ble b it


1 = E n a ble s th e P S P re a d /w rite in te rru p t
0 = D is a ble s th e P S P re a d /w rite in te rru p t

b it 6:

A D IE : A /D C o nve rte r In te rru p t E n a ble b it


1 = E n a ble s th e A /D c o nve rte r in te rru p t
0 = D is a ble s th e A /D c o nve rte r in te rru p t

b it 5:

R C IE : U S A R T R e c e ive In te rru p t E n a ble b it


1 = E n a ble s th e U S A R T re c e ive in te rru p t
0 = D is a ble s th e U S A R T re c e ive in te rru p t

b it 4:

T X IE : U S A R T Tra n s m it In te rru p t E n a ble b it


1 = E n a ble s th e U S A R T tra n s m it in te rru p t
0 = D is a ble s th e U S A R T tra n s m it in te rru p t

b it 3:

S S P IE : S y n c h ro n o u s S e ria l P o rt In te rru p t E n a ble b it


1 = E n a ble s th e S S P in te rru p t
0 = D is a ble s th e S S P in te rru p t

b it 2:

C C P 1IE : C C P 1 In te rru p t E n a ble b it


1 = E n a ble s th e C C P 1 in te rru p t
0 = D is a ble s th e C C P 1 in te rru p t

b it 1:

T M R 2IE : T M R 2 to P R 2 M a tc h In te rru p t E n a ble b it


1 = E n a ble s th e T M R 2 to P R 2 m a tc h in te rru p t
0 = D is a ble s th e T M R 2 to P R 2 m a tc h in te rru p t

b it 0:

T M R 1IE : T M R 1 O ve ro w In te rru p t E n a ble b it


1 = E n a ble s th e T M R 1 ove ro w in te rru p t
0 = D is a ble s th e T M R 1 ove ro w in te rru p t

R = R e a d a ble b it
W = W rita ble b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

N o te 1: P S P IE is re s e rve d o n 28-p in d ev ic e s, a lw ay s m a in ta in th is b it c le a r.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 16 de 58

Registro PIR1 - Direccin 0x0C

R /W -0

R /W -0

R -0

R -0

R /W -0

R /W -0

R /W -0

R /W -0

P S P IF (1)

A D IF

R C IF

T X IF

S S P IF

C C P 1IF

T M R 2IF

T M R 1IF

b it7

b it0

R = R e a d a ble b it
W = W rita b le b it
- n = V a lu e a t P O R re s e t

b it 7:

P S P IF (1): P a ra lle l S la v e P o rt R e a d /W rite In te rru p t F la g b it


1 = A re a d o r a w rite o p e ra tio n h a s ta ke n p la c e (m u s t b e c le a re d in s o ftw a re )
0 = N o re a d o r w rite h a s o c c u rre d

b it 6:

A D IF : A /D C o n v e rte r In te rru p t F la g b it
1 = A n A /D c o n v e rs io n c o m p le te d
0 = T h e A /D c o n v e rs io n is n o t c o m p le te

b it 5:

R C IF : U S A R T R e c e iv e In te rru p t F la g b it
1 = T h e U S A R T re c e iv e bu ffe r is fu ll
0 = T h e U S A R T re c e iv e bu ffe r is e m p ty

b it 4:

T X IF : U S A R T Tra n s m it In te rru p t F la g b it
1 = T h e U S A R T tra n s m it bu ffe r is e m p ty
0 = T h e U S A R T tra n s m it bu ffe r is fu ll

b it 7:

S S P IF : S y n c h ro n o u s S e ria l P o rt (S S P ) In te rru p t F la g
1 = T h e S S P in te rru p t c o n d itio n h a s o c c u rre d , a n d m u s t b e c le a re d in s o ftw a re b e fo re re tu rn in g fro m th e
in te rru p t s e rv ic e ro u tin e . T h e c o n d itio n s th a t w ill s e t th is b it a re :
SPI
A tra n s m is s io n /re c e p tio n h a s ta ke n p la c e .
I 2 C S la v e
A tra n s m is s io n /re c e p tio n h a s ta ke n p la c e .
I 2 C M a s te r
A tra n s m is s io n /re c e p tio n h a s ta ke n p la c e .
T h e in itia te d s ta rt c o n d itio n w a s c o m p le te d by th e S S P m o d u le .
T h e in itia te d s to p c o n d itio n w a s c o m p le te d by th e S S P m o d u le .
T h e in itia te d re s ta rt c o n d itio n w a s c o m p le te d by th e S S P m o d u le .
T h e in itia te d a c k n o w le d g e c o n d itio n w a s c o m p le te d by th e S S P m o d u le .
A s ta rt c o n d itio n o c c u rre d w h ile th e S S P m o d u le w a s id le (M u ltim a s te r s y s te m ).
A s to p c o n d itio n o c c u rre d w h ile th e S S P m o d u le w a s id le (M u ltim a s te r s y s te m ).
0 = N o S S P in te rru p t c o n d itio n h a s o c c u rre d .

b it 2:

C C P 1IF : C C P 1 In te rru p t F la g b it
C a p tu re M o d e
1 = A T M R 1 re g is te r c a p tu re o c c u rre d (m u s t b e c le a re d in s o ftw a re )
0 = N o T M R 1 re g is te r c a p tu re o c c u rre d
C o m p a re M o d e
1 = A T M R 1 re g is te r c o m p a re m a tc h o c c u rre d (m u s t b e c le a re d in s o ftw a re )
0 = N o T M R 1 re g is te r c o m p a re m a tc h o c c u rre d
P W M M ode
U n u s e d in th is m o d e

b it 1:

T M R 2IF : T M R 2 to P R 2 M a tc h In te rru p t F la g b it
1 = T M R 2 to P R 2 m a tc h o c c u rre d (m u s t b e c le a re d in s o ftw a re )
0 = N o T M R 2 to P R 2 m a tc h o c c u rre d

b it 0:

T M R 1IF : T M R 1 O v e ro w In te rru p t F la g b it
1 = T M R 1 re g is te r o v e ro w e d (m u s t b e c le a re d in s o ftw a re )
0 = T M R 1 re g is te r d id n o t o v e ro w
N o te 1: P S P IF is re s e rv e d o n 28-p in d e v ic e s , a lw a y s m a in ta in th is b it c le a r.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 17 de 58

Registro PIE2 - Direccin 0x8D


U -0

b it7

R /W -0
(1)

U -0

R /W -0
E E IE

R /W -0
B C L IE

U -0

b it 7:

U n i m p l e m e n te d : R e a d a s '0'

b it 6:

R e s e r v e d : A lw a y s m a in ta in th is b it c le a r

b it 5:

U n i m p l e m e n te d : R e a d a s '0'

b it 4:

E E IE : E E P R O M W rite O p e ra tio n In te rru p t E n a b le


1 = E n a b le E E W rite In te rru p t
0 = D is a b le E E W rite In te rru p t

b it 3:

B C L IE : B u s C o llis io n In te rru p t E n a b le
1 = E n a b le B u s C o llis io n In te rru p t
0 = D is a b le B u s C o llis io n In te rru p t

b it 2-1:

U n i m p l e m e n te d : R e a d a s '0'

b it 0:

C C P 2IE : C C P 2 In te rru p t E n a b le b it
1 = E n a b le s th e C C P 2 in te rru p t
0 = D is a b le s th e C C P 2 in te rru p t

U -0

R /W -0
C C P 2IE
b it0

U -0

R /W -0
C C P 2IF
b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

N o te 1: P IE 2<6> is re s e rv e d , a lw a y s m a in ta in th is b it c le a r.

Registro PIR2 - Direccin 0x0D


U -0

b it7

R /W -0
(1)

U -0

R /W -0
E E IF

R /W -0
B C L IF

U -0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

b it 7:

U n i m p l e m e n te d : R e a d a s '0'

b it 6:

R e s e r v e d : A lw a y s m a in ta in th is b it c le a r

b it 5:

U n i m p l e m e n te d : R e a d a s '0'

b it 4:

E E IF : E E P R O M W rite O p e ra tio n In te rru p t F la g b it


1 = T h e w rite o p e ra tio n c o m p le te d (m u s t b e c le a re d in s o ftw a re )
0 = T h e w rite o p e ra tio n is n o t c o m p le te o r h a s n o t b e e n s ta rte d

b it 3:

B C L IF : B u s C o llis io n In te rru p t F la g
1 =A b u s c o llis io n h a s o c c u rre d in th e S S P, w h e n c o n g u re d f o r I 2 C m a s te r m o d e
0 =N o b u s c o llis io n h a s o c c u rre d

b it 2-1:

U n i m p l e m e n te d : R e a d a s '0'

b it 0:

C C P 2IF : C C P 2 In te rru p t F la g b it
C a p tu re M o d e
1 = A T M R 1 re g is te r c a p tu re o c c u rre d (m u s t b e c le a re d in s o ftw a re )
0 = N o T M R 1 re g is te r c a p tu re o c c u rre d
C o m p a re M o d e
1 = A T M R 1 re g is te r c o m p a re m a tc h o c c u rre d (m u s t b e c le a re d in s o ftw a re )
0 = N o T M R 1 re g is te r c o m p a re m a tc h o c c u rre d
P W M M ode
U nused

N o te 1: P IR 2<6> is re s e rv e d , a lw a y s m a in ta in th is b it c le a r.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 18 de 58

LOS PUERTOS PARALELOS


Los PIC16F874/7 disponen de cinco puertos paralelo, denominados puerto A hasta puerto
E. Las lneas de estos puertos se pueden programar individualmente como entradas o
como salidas. No obstante, con el fin de que los encapsulados del PIC 16F87X no tengan
excesivos pines, y teniendo en cuenta la cantidad de recursos internos disponibles, la
mayora de las lneas de estos puertos se comparten con las lneas de entrada/salida de
otros recursos, punto del que ya se mension anteriormente. Vamos a ver que al
compartir lneas a veces influye en la estructura de los correspondientes puertos, y puede
imponer algunas restricciones de utilizacin.
EL PUERTO A
El puerto "A" dispone de seis bits. Las lneas representan el esquema interno de la
siguiente figura. Todas ellas estn provistas como salidas con un buffer CMOS normal, y
como entradas aceptan niveles TTL. Como puede comprobar en esta figura, la entrada y
la salida pasan por un latch.
D a ta
bus

Q
VDD

WR
P o rt

CK

D a ta
bus

WR
PO RT

D a ta L a tc h
D
WR
T R IS

CK

T R IS L a tc h

R D T R IS
Q

CK

Q
N

I/O p in (1)

VSS
A n a lo g
in p u t
m ode

I/O p in (1)

D a ta L a tc h
WR
T R IS

CK

V ss
S c h m itt
Trig g e r
in p u t
b u ffe r

T R IS L a tc h

TTL
in p u t
b u ffe r

R D T R IS
Q

ENE N
EN
R D PO RT

T M R 0 c lo c k in p u t

To A /D C o n v e rte r
N o te 1:

R D PO RT

I/O p in s h a v e p ro te c tio n d io d e s to V D D a n d
VSS.

N o te 1: I/O p in h a s p ro te c tio n d io d e s to V S S o n ly.

RA4

RA0, RA1, RA2, RA3 y RA5


En el PIC16F87X, lasinco lneas del primer grfico pueden ser usadas como entradas del
conversor analgico/digital integrado. Cuando este conversor se activa, estas lneas
pasan a ser entradas analgicas. Si las intenta leer como lneas del puerto A, las ver
como si estuvieran todas ellas a 0. Como se ve en la figura de la derecha la lnea RA4
tiene una estructura algo diferente. En efecto, en este caso, la salida es de tipo drenador
abierto (el equivalente en MOS al clsico colector abierto), y la entrada est provista de un
trigger Schmitt. Es comn con la entrada externa del temporizador 0.
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 19 de 58

EL PUERTO B
El puerto B es un puerto bidireccional de 8 bits completo, en le que slo una lnea se
comparte con otro recurso interno. Las lneas RB0-RB3 adoptan la estructura interna que
puede ver en la figura de la izquierda, mientras que las lneas RB4-RB7 tienen la
estructura de la figura derecha. El motivo de esto se encuentra en el hecho de que es
posible programar una interrupcin durante un cambio de estado de una cualquiera de las
lneas RB0-RB3. Si se utiliza esta posibilidad, el simple hecho de que cualquiera de las
lneas cambie de estado genera una interrupcin (ver la descripcin anterior del registro
INTCON). Tenga presente que slo las lneas programadas como entradas son
susceptibles de ser monitorizadas mediante este procedimiento.
VDD
R B P U (2)

w eak
P p u ll-u p

VDD
R B P U (2)
D a ta b u s
W R P o rt

w eak
P p u ll-u p
D a ta L a tc h
D
Q

W R P o rt

W R T R IS
TTL
In p u t
B u ffe r

CK

D a ta L a tc h
D
Q
I/O
p in (1)

CK
T R IS L a tc h
D
Q

I/O
p in (1)

CK
T R IS L a tc h
D
Q

W R T R IS

D a ta b u s

TTL
In p u t
B u ffe r

CK

R D T R IS
Q

ST
B u ffe r

L a tc h
D

R D T R IS
Q
R D P o rt

S e t R B IF

EN

R D P o rt

EN
F ro m o th e r
R B 7:R B 4 p in s

R B 0/IN T

D
R D P o rt
EN

S c h m itt Trig g e r
B u ffe r

Q1

R D P o rt

N o te 1: I/O p in s h a v e d io d e p ro te c tio n to V D D a n d V S S .
2: To e n a b le w e a k p u ll-u p s , s e t th e a p p ro p ria te T R IS b it(s )
a n d c le a r th e R B P U b it (O P T IO N _R E G <7>).

Q3

R B 7:R B 6 in s e ria l p ro g ra m m in g m o d e
N o te 1: I/O p in s h a v e d io d e p ro te c tio n to V D D a n d V S S .
2: To e n a b le w e a k p u ll-u p s , s e t th e a p p ro p ria te T R IS b it(s )
a n d c le a r th e R B P U b it (O P T IO N _R E G <7>).

Como puede comprobar en ambas figuras, cada una de las lneas del puerto B dispone
de una resistencia de pull-up de alto valor conectada a la alimentacin. Esta resistencia
de pull-up puede activarse o no gracias al bit RBPU del registro OPTION (ver la
descripcin anterior de este registro al hablar del temporizador 0, al que afecta,
principalmente). La activacin o no de esta resistencia de pull-up es comn a todas las
lneas del puerto B. Adems, sta se desactiva automticamente durante un reset, as
como las lneas que estn configuradas como salida.
El sentido de trabajo de todas las lneas de este puerto se controla mediante el registro
TRISB, en el que un bit a 0 activa a la lnea correspondiente como salida, y un bit a 1 la
activa como entrada. Evidentemente, despus de un reset, todos los bits del registro
TRISB se ponen a 1.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 20 de 58

EL PUERTO C
El puerto C es un puerto bidireccional de 8 bits completo, en el que todas las lneas se
comparten con los dems recursos internos, segn la reparticin vista en la descripcin de
las seales disponibles en el circuito. A pesar de esto, cada una de las lneas de este
puerto adoptan la misma estructura, la cual se puede ver en la siguiente figura. se dispone
de un buffer CMOS clsico como salida, y de un trigger Schmitt como entrada.

P O R T /P E R IP H E R A L S e le c t(2)

P O R T /P E R IP H E R A L S e le c t(2)

P e rip h e ra l D a ta O u t

P e rip h e ra l D a ta O u t
D a ta b u s
WR
PO RT

VDD

0
Q

1
CK

D a ta b u s
WR
PO RT

D
CK

I/O
p in (1)

Q
Q

S c h m itt
Trig g e r

P e rip h e ra l
Q

N o te 1:
2:
3:

1
CK

D
CK

I/O
p in (1)

Q
Q

T R IS L a tc h

VSS

VSS

R D T R IS

RD
PO RT
P e rip h e ra l in p u t

WR
T R IS

T R IS L a tc h

O E (3)

VDD

0
Q

D a ta L a tc h

D a ta L a tc h
WR
T R IS

P e rip h e ra l

RC0-RC2 / RC5-RC7

O E (3)
RD
PO RT

EN

I/O p in s h a v e d io d e p ro te c tio n to V D D a n d V S S .
P o rt/P e rip h e ra l s e le c t s ig n a l s e le c ts b e tw e e n p o rt
d a ta a n d p e rip h e ra l o u tp u t.
P e rip h e ra l O E (o u tp u t e n a ble ) is o n ly a c tiv a te d if
p e rip h e ra l s e le c t is a c tiv e .

S c h m itt
Trig g e r

R D T R IS
D
EN

S S P l in p u t

S c h m itt
Trig g e r
w ith
S M Bus
le v e ls

1
C KE
S S P S TA T <6>

N o te 1:
2:
3:

I/O p in s h a v e d io d e p ro te c tio n to V D D a n d V S S .
P o rt/P e rip h e ra l s e le c t s ig n a l s e le c ts b e tw e e n p o rt
d a ta a n d p e rip h e ra l o u tp u t.
P e rip h e ra l O E (o u tp u t e n a ble ) is o n ly a c tiv a te d if
p e rip h e ra l s e le c t is a c tiv e .

RC3-RC4

El sentido de trabajo de cada una de las lneas de este puerto es controlado por el registro
TRISC, en el que un bit a 0, activa a la lnea correspondiente como salida, y un bit a 1 la
activa como entrada. Evidentemente, despus de un reset, todos los bits del registro
TRISC se ponen a 1.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 21 de 58

EL PUERTO D
El puerto D es un puerto bidireccional de 8 bits completo, que no comparte sus lneas de
entrada/salida con ningn otro recurso. En la siguiente figura puede ver su esquema
interno, en el que observamos un buffer TTL como salida, y un trigger Schimtt como
entrada.
D a ta
bus

WR
PO RT

I/O p in (1)

CK

D a ta L a tc h
D

WR
T R IS

S c h m itt
Trig g e r
in p u t
b u ffe r

CK

T R IS L a tc h

R D T R IS
Q

E NE N
R D PO RT
N o te 1: I/O p in s h a v e p ro te c tio n d io d e s to V D D a n d V S S .

Este puerto tambin dispone de un modo de funcionamiento especial, denominado modo


esclavo paralelo, que se muestra en la siguiente figura, y que utiliza tres lneas del
puertoE.

D a ta b u s
WR
PO RT

RDx
p in

CK

TTL
Q

RD
PO RT

E NE N

O n e b it o f P O R T D
S e t in te rru p t a g
P S P IF (P IR 1<7>)

R ead

TTL

RD

C h ip S e le c t
W rite

TTL

CS

TTL

WR

N o te : I/O p in h a s p ro te c tio n d io d e s to V D D a n d V S S .

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 22 de 58

PRINCIPIO DE UTILIZACION DEL PUERTO D EN MODO ESCLAVO PARALELO.


En este modo, los PIC16F87X se deben considerar como circuitos de interfaz clsicos
para un microprocesador de 8 bits. Las lneas del puerto D se convierten en las lneas del
bus de datos de este micro, mientras que las tres lneas de control clsicas: de lectura, de
escritura y de activacin del circuito (chip select) estn disponibles en el puerto E. Ms
adelante, en el aparato dedicado al registro TRISE, veremos el principio de
funcionamiento de este modo mediante los bits de control contenidos en este registro.
Cuando no funciona en modo esclavo paralelo, el puerto D se puede utilizar
normalmente. El sentido de trabajo de cada una de las lneas de este puerto es controlado
por el registro TRISD, en el que un bit a 0 activa a la lnea correspondiente como salida, y
un bit a 1 la activa como entrada. Evidentemente, despus de un reset, todos los bits del
registro TRISD se ponen a 1.
EL PUERTO E
El puerto E no dispone ms que de tres lneas bidireccionales, que respetan el esquema
de la siguiente figura. Suministran un buffer CMOS como salida y trigger Schmitt como
entrada.
D a ta
bus
WR
PO RT

I/O p in (1)

CK

D a ta L a tc h
D

WR
T R IS

S c h m itt
Trig g e r
in p u t
b u ffe r

CK

T R IS L a tc h

R D T R IS
Q

E NE N
R D PO RT
N o te 1: I/O p in s h a v e p ro te c tio n d io d e s to V D D a n d V S S .

Estas lneas se pueden utilizar normalmente como las lneas de cualquier puerto paralelo,
o pueden servir de seales de control cuando el puerto "D" est activado en modo
esclavo paralelo. El registro de control para el sentido de funcionamiento del puerto E,
TRISE, adopta una estructura especial, como se ve a continuacin

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 23 de 58

Registro TRISE - Direccin 0x89


R -0
IB F
b it7

R -0
O BF

R /W -0
IB O V

R /W -0
PSPMO DE

U -0

R /W -1
b it2

R /W -1
b it1

R /W -1
b it0
b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

b it 7 :

IB F : In p u t B u ffe r F u ll S ta tu s b it
1 = A w o rd h a s b e e n re c e iv e d a n d is w a itin g to b e re a d b y th e C P U
0 = N o w o rd h a s b e e n re c e iv e d

b it 6:

O B F : O u tp u t B u ffe r F u ll S ta tu s b it
1 = T h e o u tp u t b u ffe r s till h o ld s a p re v io u s ly w ritte n w o rd
0 = T h e o u tp u t b u ffe r h a s b e e n re a d

b it 5:

IB O V : In p u t B u ffe r O v e ro w D e te c t b it (in m ic ro p ro c e s s o r m o d e )
1 = A w rite o c c u rre d w h e n a p re v io u s ly in p u t w o rd h a s n o t b e e n re a d (m u s t b e c le a re d in s o ftw a re )
0 = N o o v e ro w o c c u rre d

b it 4:

P S P M O D E : P a ra lle l S la v e P o rt M o d e S e le c t b it
1 = P a ra lle l s la v e p o rt m o d e
0 = G e n e ra l p u rp o s e I/O m o d e

b it 3:

U n i m p l e m e n te d : R e a d a s '0'

b it 2:

B i t2: D ire c tio n C o n tro l b it fo r p in R E 2/C S /A N 7


1 = In p u t
0 = O u tp u t

b it 1:

B i t1: D ire c tio n C o n tro l b it fo r p in R E 1/W R /A N 6


1 = In p u t
0 = O u tp u t

b it 0:

B i t0: D ire c tio n C o n tro l b it fo r p in R E 0/R D /A N 5


1 = In p u t
0 = O u tp u t

P O R T E D a ta D i r e c ti o n B i ts

Estas funciones y asignaciones se corresponden perfectamente con lo que habitualmente


se encuentra en cualquier circuito de interfaz para microprocesadores de 8 bits.
Para poder funcionar en modo esclavo paralelo, y adems de la puesta a 1 del bit
PSPMODE, las lneas deben activarse como entradas mediante la escritura de un 1 en
los bits 0 a 2 del registro TRISE. En el modo esclavo, los bits del registro TRISD no se
utilizan, ya que el sentido de trabajo del puerto D est bajo el control del microprocesador
externo a travs de y .
Observe tambin que, como hemos visto en la descripcin del registro PIR1, es posible
generar una interrupcin durante la lectura o escritura en el puerto D si est configurado
en este modo.

LOS TEMPORIZADORES
Los PIC16F87X contienen tres temporizadores distintos, que disponen de diversas
posibilidades de funcionamiento, las cuales vamos a describir a continuacin. Cada
temporizador puede generar una interrupcin, como hemos visto en la presentacin de los
registros INTCON y PIR1. Los temporizadores 1 y 2 pueden adems asociarse a los
mdulos funcionales denominados y PWM, que permiten realizar la captura de datos
como entrada, la comparacin de datos como salida y la modulacin de impulsos en
duracin. Todas estas caractersticas son comparables a las que se encuentren
tradicionalmente en los temporizadores de mayores prestaciones de los micros de 8 bits.
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 24 de 58

EL TEMPORIZADOR 0
El temporizador 0 es el ms sencillo de los tres y como se vi anteriormente est formado
por el conjunto TMR0 y el registro OPTION.
EL TEMPORIZADOR 1
El temporizador1 est constituido principalmente por un registro de 16 bits dividido en dos
registros de 8 bits, TMR1L y TMR1H, los cuales pueden ser escritos y ledos. El contenido
de este registro vara de 0000 hasta FFFF, y vuelve a 0000 despus de su
desbordamiento, generando una interrupcin en ese momento, si sta se autoriza.
El esquema de la siguiente figura permite comprender los diversos modos de
direccionamiento de este temporizador.
S e t a g b it
T M R 1IF o n
O v e ro w

S y n c h ro n iz e d

TMR1

c lo c k in p u t

T M R 1L

T M R 1H

1
T M R 1O N
o n /o ff

T 1O S C
R C 0/T 1O S O /T 1C K I

R C 1/T 1O S I

T 1S Y N C

1
T 1O S C E N
E n a b le
O s c illa to r(1)

P re s c a le r
1, 2, 4, 8

F o s c /4
In te rn a l
C lo c k

0
2
T 1C K P S 1:T 1C K P S 0

S y n c h ro n iz e
det
S L E E P in p u t

T M R 1C S

N o te 1:

W h e n th e T 1O S C E N b it is c le a re d , th e in v e rte r a n d fe e d b a c k re s is to r a re tu rn e d o ff. T h is e lim in a te s p o w e r d ra in .

ESQUEMA DEL TEMPORIZADOR 1.


En modo temporizador, el registro se incrementa en una unidad con cada ciclo del reloj de
instruccin (es decir, en cada ciclo de reloj dividido por cuatro). En modo contador, este
incremento tiene lugar en cada periodo de la seal aplicada en el pin RC0, o en cada
periodo generado por el oscilador que se puede implementar conectando un cristal de
cuarzo entre los pines RC0 y RC1.
En todos los casos, la seal de reloj del temporizador pasa por un prescaler de tasa
programable, que puede sincronizar despus con el reloj interno. Evidentemente, esta
sincronizacin es perfectamente intil cuando se utiliza esa fuente como reloj. En modo
externo (o reloj suministrado por el oscilador del temporizador 1) puede seleccionar o no
esta sincronizacin.
Si se valida la sincronizacin, es posible utilizar el temporizador 1 conjuntamente con el
mdulo CCP que se presenta ms adelante. Este modo hace entonces una puesta a 0 del
temporizador a partir de la ocurrencia del evento (comprobacin o captura) para el que
est programado. Sin embargo, el temporizador 1 deja de funcionar en modo SLEEP, ya
que la sincronizacin no puede tener lugar debido a la parada del reloj interno en este
modo.
Si no se valida la sincronizacin, no es posible el funcionamiento con los mdulos CCP,
pero el temporizador contina contando incluso en modo SLEEP, y puede por tanto
"despertar" al microcontrolador y hacerle salir automticamente de este modo cuando se
desborda, si ha autorizado la generacin de una interrupcin en esta situacin.
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 25 de 58

Los diferentes modos de funcionamiento de este temporizador son controlados por el


registro T1CON, en el que cada bit tiene un significado propio, que es el siguiente:
Registro T1CON - Direccin 0x10

U -0

U -0

R /W -0

R /W -0

R /W -0

R /W -0

T 1C K P S 1 T 1C K P S 0 T 1O S C E N T 1S Y N C

R /W -0

R /W -0

T M R 1C S

T M R 1O N

b it7

b it 7-6:

b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

U n i m p l e m e n te d : R e a d a s '0'

b it 5-4: T 1C K P S 1: T 1C K P S 0: T im e r1 In p u t C lo c k P re s c a le S e le c t b its
11 = 1:8 P re s c a le v a lu e
10 = 1:4 P re s c a le v a lu e
01 = 1:2 P re s c a le v a lu e
00 = 1:1 P re s c a le v a lu e
b it 3:

T 1O S C E N : T im e r1 O s c illa to r E n a b le C o n tro l b it
1 = O s c illa to r is e n a b le d
0 = O s c illa to r is s h u t o ff
N o te : T h e o s c illa to r in v e rte r a n d fe e d b a c k re s is to r a re tu rn e d o ff to e lim in a te p o w e r d ra in

b it 2:

T 1S Y N C : T im e r1 E x te rn a l C lo c k In p u t S y n c h ro n iz a tio n C o n tro l b it
T M R 1C S = 1
1 = D o n o t s y n c h ro n iz e e x te rn a l c lo c k in p u t
0 = S y n c h ro n iz e e x te rn a l c lo c k in p u t
T M R 1C S = 0
T h is b it is ig n o re d . T im e r1 u s e s th e in te rn a l c lo c k w h e n T M R 1C S = 0.

b it 1:

T M R 1C S : T im e r1 C lo c k S o u rc e S e le c t b it
1 = E x te rn a l c lo c k fro m p in R C 0/T 1O S O /T 1C K I (o n th e ris in g e d g e )
0 = In te rn a l c lo c k (F O S C /4)

b it 0:

T M R 1O N : T im e r1 O n b it
1 = E n a b le s T im e r1
0 = S to p s T im e r1

El oscilador que se sita entre los pines RC0 y RC1, se realiza mediante la conexin de
un cuarzo entre dichos pines. La frecuencia mxima de funcionamiento prevista es de 200
kHz, y este circuito est optimizado para un cristal de cuarzo a 32 kHz.
EL TEMPORIZADOR 2
Como muestra el esquema de la siguiente figura este temporizador est formado por un
registro de 8 bits denominado TMR2, asociado a un predivisor y a un postdivisor, as como
a un registro de periodo.
S e ts a g
b it T M R 2IF

TMR2
o u tp u t (1)
R eset

P o s ts c a le r
1:1 to 1:16
4

N o te 1:

EQ

T M R 2 re g
C o m p a ra to r

P re s c a le r
1:1, 1:4, 1:16

F o s c /4

P R 2 re g

T M R 2 re g is te r o u tp u t c a n b e s o ftw a re s e le c te d
b y th e S S P M o d u le a s a b a u d c lo c k .

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 26 de 58

El contenido de este registro se inicia en el valor 00 y aumenta con cada impulso del reloj
de instruccin, despus de la eventual divisin realizada por el prescaler. Cuando el
contenido se hace igual que el registro de periodo, se pone a 0 y se aplica una seal al
postdivisor. La salida de ste puede generar entonces una interrupcin, si ha sido
autorizada por el registro PIE1.
Los contenidos del prescaler y el postdivisor se ponen automticamente a 0 durante una
escritura en el registro TMR2 o en el registro de control T2CON, as como en un reset, sea
cual sea su origen.
Registro T2CON - Direccin 0x12
U -0

R /W -0

R /W -0

R /W -0

R /W -0

TO U TPS 3 TO U TPS 2 TO U TPS 1 TO U TPS 0

R /W -0

R /W -0

T M R 2O N

T 2C K P S 1 T 2C K P S 0

b it7

b it 7:

R /W -0
b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

U n i m p l e m e n te d : R e a d a s '0'

b it 6-3: T O U T P S 3: T O U T P S 0: T im e r2 O u tp u t P o s ts c a le S e le c t b its
0000 = 1:1 P o s ts c a le
0001 = 1:2 P o s ts c a le

1111 = 1:16 P o s ts c a le
b it 2:

T M R 2O N : T im e r2 O n b it
1 = T im e r2 is o n
0 = T im e r2 is o ff

b it 1-0: T 2C K P S 1: T 2C
00 = P re s c a le r
01 = P re s c a le r
1x = P re s c a le r

K P S 0: T im e r2 C lo c k P re s c a le S e le c t b its
is 1
is 4
is 16

LOS MODULOS DE CAPTURA, COMPARACION Y MODULACION DE ANCHO DE


PULSOS
Los PIC16F87X disponen de dos mdulos de captura, comparacin y generacin de
modulacin ancho de pulsos (PWM), denominados CCP1 y CCP2. Estos dos mdulos
funcionan de la misma forma; excepto en el modo de arranque especial. Por tanto, los
vamos a presentar simultneamente, y observaremos en qu se distinguen cuando
veamos dicho modo.
Cada mdulo est formado por un registro de 16 bits, accesible tanto para escritura como
para lectura, bajo la forma de dos registros de 8 bits sucesivos, CCPxL para los bits de
menor peso y CCPxH para los bits de mayor peso.
EL MODO CAPTURA
En este modo, el registro CCPx captura el contenido del temporizador 1 cuando en el pin
Rcx/CCPx se produce una de las siguientes condiciones:
Un flanco de bajada.
Un flanco de subida.
Una captura cada cuatro flancos de subida.
Una captura cada diecisis flancos de subida.
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 27 de 58

La eleccin de estos eventos se realiza con los bits contenidos en el registro CCPxCON,
que veremos a continuacin.
Cuando tiene lugar una captura, se puede generar una interrupcin, siempre que haya
sido autorizada por el bit apropiado de los registros PIE1 o PIE2, vistos anteriormente.
Si se produce otra captura antes de que el contenido de CCPx se haya ledo, este
contenido se sustituye por el nuevo.
Observe tambin que, para que este sistema funcione correctamente, evidentemente el
pin Rcx/CCPx debe estar programado como entrada. Si est configurado como salida y se
produce una escritura en el puerto C, puede generarse una captura falsa.
La siguiente figura muestra de forma extremadamente visual el funcionamiento de este
modo de captura. Observe la presencia de un prescaler, que permite la captura de cada
un flanco, cada cuatro flancos o cada diecisis flancos. Su contenido se pone 0 durante
un reset, as como durante cualquier parada del mdulo CCP.
Preste atencin al hecho de que, si vara el valor del prescaler con el fin de definir otras
condiciones de captura, se puede generar una falsa interrupcin, por lo que es
aconsejable detener el mdulo CCP antes de cambiar las condiciones de captura, para
evitar este fenmeno.
P re s c a le r
1, 4, 16

S e t a g b it C C P 1IF
(P IR 1<2>)

R C 2/C C P 1
P in

C C P R 1H
and
e d g e d e te c t

C a p tu re
E n a b le
T M R 1H

Q s

C C P R 1L

T M R 1L

C C P 1C O N <3:0>

ESQUEMA DE UN MODULO CCP EN MODO CAPTURA.


EL MODO COMPARACION
En este modo, el contenido del registro CCP se compara permanente con el contenido del
temporizador 1. Cuando se produce una igualdad, cualquiera de los fenmenos siguientes
se puede producir:
Pone un nivel alto en el pin RCx/CCPx.
Pone un nivel bajo en el pin RCx/CCPx.
Ninguna variacin en el pin, pero se genera una interrupcin, por supuesto si esta est
habilitada.
Evidentemente, en los dos primeros casos, el pin correspondiente del puerto C debe
programarse como salida, poniendo a 0 el bit correspondiente del registro TRISC.
Existe un modo suplementario que se denomina modo de arranque especial. En este
caso, una comparacin correcta da lugar a los eventos siguientes:
Para CCP1: el temporizador 1 se pone a 0, lo que permite utilizar el registro CCP1 como
un registro de periodo de 16 bits para el temporizador 1.
Para CCP2: el temporizador 1 se pone a 0, y se desencadena una conversin analgico
/ digital si, por supuesto, la funcin correspondiente ha sido autorizada por el convertidor.
Esto permite llevar a cabo muy fcilmente conversiones a intervalos regulares sin que sea
necesario utilizar la unidad central.
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 28 de 58

La siguiente figura muestra de forma muy clara el principio de funcionamiento de este


modo de comparacin.
S p e c ia l e v e n t trig g e r w ill:
re s e t T im e r1, b u t n o t s e t in te rru p t a g b it
T M R 1IF (P IR 1<0>), a n d s e t b it G O /D O N E
S p e c ia l E v e n t Trig g e r (C C P 2 o n ly )
S e t a g b it C C P 1IF
(P IR 1<2>)
C C P R 1H C C P R 1L
Q
R C 2/C C P 1
P in
T R IS C <2>
O u tp u t E n a b le

S
R

O u tp u t
L o g ic

m a tc h

C C P 1C O N <3:0>
M o d e S e le c t

C o m p a ra to r
T M R 1H

T M R 1L

ESQUEMA DE UN MODULO CCP EN MODO COMPARACION.


EL MODO PWM O MODULACION DE ANCHO DE PULSO
En este modo, el pin RCx/CCPx permite disponer de una salida que es una seal con
modulacin de ancho de pulsos, con una resolucin que puede llegar hasta 10 bits.
Evidentemente, este pin debe configurarse como salida por medio del registro TRISC.
Como muestra la siguiente figura, el principio de este modo de funcionamiento es el que
sigue. El usuario escribe, en el registro CCPx, el ciclo de trabajo deseado utilizando 8 bits.
El registro CCPxL, el ciclo de trabajo deseado utilizando 8 bits. El registro CCPxH se
utiliza como esclavo de CCPxL, por lo que no se puede escribir en l.
El periodo de la seal generada se determina mediante el contenido del registro periodo
del temporizador 2 (PR2). En estas condiciones, y teniendo en cuanta el funcionamiento
del temporizador 2 visto anteriormente, se puede escribir:
Periodo de la seal = (PR2 +1) x 4T x (Predivisor de TMR2)
Donde T es el periodo de la seal de reloj del PIC.
Ciclo de trabajo = DC1 x T x (Predivisor TMR2)
Donde T es el periodo del reloj del PIC, y de DC1 es la palabra de 10 bits, formada por los
8 bits de CCPxL, y los bits 4 y 5 de CCPxCON, utilizados como bits de menor peso.
La resolucin de este modo PWM es, por tanto, programable hasta alcanzar los 10 bits, si
los bits 4 y 5 son distintos de 0. En caso contrario, el modo PWM funciona con una
resolucin de 9 bits (un nico bit a 0), o de 8 bits (los dos bits a 0).

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 29 de 58

D u ty c y c le re g is te rs

C C P 1C O N <5:4>

C C P R 1L

C C P R 1H (S la v e )

C o m p a ra to r

R C 2/C C P 1

(N o te 1)

TMR2

S
T R IS C <2>

C o m p a ra to r
C le a r T im e r,
C C P 1 p in a n d
la tc h D .C .

PR 2

N o te 1: 8-b it tim e r is c o n c a te n a te d w ith 2-b it in te rn a l Q c lo c k


o r 2 b its o f th e p re s c a le r to c re a te 10-b it tim e -b a s e .

ESQUEMA DE UN MODULO CCP EN MODO PWM.


EL REGISTRO DE CONTROL DE LOS MODULOS CCP
Vistos los diversos modos de funcionamiento, vamos a presentar el anlisis del contenido
del registro de control de cada mdulo CCP. Cada mdulo CCP dispone de su propio
registro de control, denominado CCPxCON, en el que cada uno de sus bits tiene la
siguiente funcin:
Registro CCP1CON / CCP2CON - Direccin 0x17 / 0x1D
U -0

U -0

R /W -0

R /W -0

R /W -0

R /W -0

R /W -0

R /W -0

C C PxX

C C PxY

C C PxM 3

C C PxM 2

C C PxM 1

C C PxM 0

b it7

b it 7-6:

b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n =V a lu e a t P O R re s e t

U n i m p l e m e n te d : R e a d a s '0'

b it 5-4: C C P x X : C C P x Y : P W M L e a s t S ig n ic a n t b its
C a p tu re M o d e : U n u s e d
C o m p a re M o d e : U n u s e d
P W M M o d e : T h e s e b its a re th e tw o L S b s o f th e P W M d u ty c y c le. T h e e ig h t M S b s a re fo u n d in C C P R x L .
b it 3-0: C C P x M 3: C C P x M 0: C C P x M o d e S e le c t b its
0000 = C a p tu re /C o m p a re /P W M o ff (re s e ts C C P x m o d u le )
0100 = C a p tu re m o d e , e v e ry fa llin g e d g e
0101 = C a p tu re m o d e , e v e ry ris in g e d g e
0110 = C a p tu re m o d e , e v e ry 4th ris in g e d g e
0111 = C a p tu re m o d e , e v e ry 16th ris in g e d g e
1000 = C o m p a re m o d e , s e t o u tp u t o n m a tc h (C C P x IF b it is s e t)
1001 = C o m p a re m o d e , c le a r o u tp u t o n m a tc h (C C P x IF b it is s e t)
1010 = C o m p a re m o d e , g e n e ra te s o ftw a re in te rru p t o n m a tc h (C C P x IF b it is s e t, C C P x p in is u n a ffe c te d )
1011 = C o m p a re m o d e , trig g e r s p e c ia l e v e n t (C C P x IF b it is s e t; C C P 1 re s e ts T M R 1; C C P 2 re s e ts T M R 1
a n d s ta rts a n A /D c o n v e rs io n (if A /D m o d u le is e n a b le d ))
11xx = P W M m o d e

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 30 de 58

INTERFAZ UNIVERSAL DIRECCIONABLE SERIE SINCRONA / ASNCRONA - USART


La interfaz serie asncrona o SCI con la que est equipado el PIC16F87X es comparable a
una UART programable por software. Puede funcionar en modo asncrono full duplex para
conectar al PIC con cualquier equipo provisto con una conexin del mismo tipo (terminal,
mdem, etc...), o bien en modo sncrono semiduplex maestro o esclavo, para aplicaciones
algo ms especiales.
La velocidad de transmisin es por completo programable gracias a su registro interno, y
es idntica en transmisin y en recepcin. La SCI no soporta directamente la paridad, en
el sentido de que no la calcula ni la verifica. Por el contrario, ofrece la posibilidad de
transmitir y recibir 9 bits de datos, lo cual permite generar esta paridad por software, y
utilizar este noveno bit para transmitirla y recibirla.
Excepto esta programacin con 8 o 9 bits, el formato de transmisin es fijo; es el clsico
con un bit de arranque, los bits de datos y un bit de parada.
LA SCI EN MODO ASINCRNO FULL DUPLEX
En este modo de funcionamiento, la parte de la transmisin de la SCI sigue el esquema
de la siguiente figura. Este esquema es el tpico, ya que el corazn de este conjunto es el
registro TXREG, cuando el bit del registro de estado nos indica que dicho registro est
vaco. Esta situacin se puede comprobar leyendo este registro por software, o generando
una interrupcin si la SCI la ha autorizado mediante el bit apropiado del registro PIEI (ver
al principio del captulo).
Si la transmisin debe hacerse con 9 bits (utilizando la paridad, por ejemplo, con una
transmisin de datos con 8 bits), este noveno bit procede del registro TXSTA, que
veremos a continuacin. Este bit debe tener el valor correcto antes de escribir el registro
TXREG. En efecto, si TXREG est vaco, el hecho de escribir en el un byte valida
inmediatamente la transmisin, por lo que imperativamente el noveno bit se ha debido
activar previamente.
D a ta B u s
T X IF

T X R E G re g is te r

T X IE

8
MSb

LS b

(8)

P in B u ffe r
a n d C o n tro l

T S R re g is te r

In te rru p t
TXEN

R C 6/T X /C K p in

B a u d R a te C L K
TRMT

SPEN

S PBR G
B a u d R a te G e n e ra to r

TX9
T X 9D

ESQUEMA DE LA SCI EN MODO TRANSMISIN ASNCRONA.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 31 de 58

El principio de utilizacin de la SCI en transmisin es la siguiente:


Escritura de la velocidad de transmisin deseada en el registro SPBRG (visto ms
arriba).
Activacin del puerto SCI
Activacin eventual de las interrupciones en transmisin mediante la activacin del bit
TXIE del registroPIE1 (ver al principio del captulo).
Comprobacin del bit TMRT del registro TXSTA (visto ms arriba), para ver si el registro
de transmisin est vaco, excepto en el caso de funcionamiento bajo interrupciones,
donde la activacin de la interrupcin correspondiente indica situacin.
En caso de transmisin con 9 bits, escritura del noveno bit en el registro TXSTA
Escritura del byte que hay que transmitir en el registro TXREG.
El procedimiento se repite a continuacin a partir de la comprobacin del estado del
registro TXREG, con el fin de proceder a la transmisin de los siguientes datos.
En recepcin, el principio de funcionamiento es tambin clsico. En este modo, la
estructura de la SCI es la indicada en la siguiente figura.
x 64 B a u d R a te C L K

S PBR G

64
or
16

B a u d R a te G e n e ra to r

FERR

OERR

C REN
MSb
S to p (8)

R S R re g is te r

LS b

0 S ta rt

R C 7/R X /D T
P in B u ffe r
a n d C o n tro l

D a ta
R e c o v e ry

RX9

8
SPEN

RX9
ADDEN

E n a b le
Load of

RX9
ADDEN
R S R <8>

R e c e iv e
B u ffe r
8

R X 9D

R C R E G re g is te r

F IF O

8
In te rru p t

R C IF

D a ta B u s

R C IE

ESQUEMA DE LA SCI EN MODO RECEPCION


El registro de desplazamiento de recepcin no es accesible directamente y slo se puede
leer por medio de registro RCREG, que dispone de un doble buffer, por lo que es posible
recibir un byte mientras que el anterior todava no se ha ledo.
Evidentemente, un bit del registro de estado indica cuando est disponible un byte en
RCREG, y puede incluso dar lugar a una interrupcin, siempre que est autorizada por la
activacin del bit adecuado del registro PIE1.
En el registro de estado hay adems dos controles disponibles. Un bit de desbordamiento,
que indica la sobrescritura de los datos contenidos en RCREG por los datos siguientes, si
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 32 de 58

no se han ledo suficientemente rpido, y un bit de error de formato. No est previsto


ningn bit de error de paridad, ya que sta no es soportada directamente.
Si se utiliza el noveno bit, ste no est disponible en el registro RCREG, que es un
registro de 8 bits, sino en el registro de estado de recepcin.
El principio de utilizacin de la SCI en recepcin es el siguiente:
Escritura de la velocidad de transmisin deseada en el registro SPBRG (visto ms
arriba),
Habilitacin del puerto SCI
Habilitacin eventual de las interrupciones en recepcin mediante la activacin del bit
RCIE del registro PIE1 (ver al principio del captulo).
Comprobacin del bit RCIF del registro PIR1 (visto al principio del captulo), para ver si
el registro de recepcin est vaco, excepto en el caso de funcionamiento bajo
interrupciones, donde la activacin de la interrupcin correspondiente indica situacin.
En caso de recepcin con 9 bits, hay que leer el noveno bit en el registro RCSTA, y
verificar la ausencia de error de recepcin.
Lectura del byte recibido en el registro RCREG.
El procedimiento se repite a continuacin a partir de la comprobacin del estado del bit
RCIF, con el fin de recibir los datos siguientes.
LA SCI EN MODO SNCRONO SEMIDUPLEX
El funcionamiento en modo sncrono semiduplex descansa sobre los mismos principios
que los vistos anteriormente, con nicamente dos diferencias importantes.
Al tratarse de un modo semiduplex, la transmisin y la recepcin simultnea no es
posible. El hecho de utilizar una de estas funciones desactiva automticamente a la otra.
El hecho de estar en modo sncrono significa que el reloj de transmisin se enva
conjuntamente con los datos. Cuando la SCI est en modo maestro, es ella la que
suministra la seal de reloj en su pin CK, con una frecuencia fijada, como en el caso
anterior, por el contenido del registro SPBRG. Cuando la SCI est en modo esclavo,
recibe el reloj de transmisin en este mismo pin CK.
La siguiente figura presenta el grfico de una transmisin en modo maestro, y la figura a
continuacin presenta el de recepcin en el mismo modo.
Los principios de transmisin y recepcin vistos para el modo asncrono son vlidos
tambin en este caso. Para ello basta con activar correctamente los bits de seleccin de
este modo en los registros TXSTA y RCSTA.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 33 de 58

Q 1Q 2 Q 3Q 4 Q 1 Q 2Q 3 Q 4Q 1 Q 2Q 3 Q 4Q 1 Q 2Q 3 Q 4Q 1 Q 2 Q 3Q 4

R C 7/R X /D T p in

B it 0

B it 1

Q 3Q 4 Q 1Q 2 Q 3Q 4 Q 1Q 2 Q 3Q 4 Q 1Q 2 Q 3 Q 4Q 1 Q 2Q 3 Q 4Q 1 Q 2Q 3 Q 4Q 1 Q 2Q 3 Q 4

B it 2

B it 7

B it 0

W ORD 1

B it 1
W ORD 2

B it 7

R C 6/T X /C K p in
W rite to
T X R E G re g
W rite w o rd 1

T X IF b it

W rite w o rd 2

(In te rru p t fla g )

T R M T bT itR M T

T X E N b it

'1'

'1'

N o te : S y n c m a s te r m o d e ; S P B R G = '0'. C o n tin u o u s tra n s m is s io n o f tw o 8-b it w o rd s .

TRANSMISIN SNCRONA
R C 7/R X /D T p in

b it0

b it2

b it1

b it6

b it7

R C 6/T X /C K p in
W rite to
T X R E G re g

T X IF b it

T R M T b it

T X E N b it

TRANSMISIN SNCRONA A TRAVZ DE TXEN

Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4

R C 7/R X /D T p in

b it0

b it1

b it2

b it3

b it4

b it5

b it6

b it7

R C 6/T X /C K p in
W rite to
b it S R E N
S R E N b it
C R E N b it '0'

'0'

R C IF b it
(in te rru p t)
R ead
RXREG
N o te : T im in g d ia g ra m d e m o n s tra te s S Y N C m a s te r m o d e w ith b it S R E N = '1' a n d b it B R G H = '0'.

RECEPCIN SNCRONA

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 34 de 58

LOS REGISTROS DE CONTROL Y DE ESTADO DE LA SCI


Ahora que conocemos los dos modos de funcionamiento de la interfaz serie asncrona o
SCI, podemos examinar el papel de los diversos bits de estado y de control de sus
registros internos. En primer lugar, vamos a ver el registro de estado TXSTA en el que
cada bit tiene el significado particular que sigue.
Registro TXSTA - Direccin 0x98

R /W -0
CSRC
b it7

b it 7:

R /W -0
TX9

R /W -0
TXEN

R /W -0
SYNC

U -0

R /W -0
BR G H

R -1
TRMT

R /W -0
T X 9D
b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n =V a lu e a t P O R re s e t

C S R C : C lo c k S o u rc e S e le c t b it
A s y n c h ro n o u s m o d e
D o n t c a re
S y n c h ro n o u s m o d e
1 = M a s te r m o d e (C lo c k g e n e ra te d in te rn a lly fro m B R G )
0 = S la v e m o d e (C lo c k fro m e x te rn a l s o u rc e )

b it 6:

T X 9: 9-b it Tra n s m it E n a b le b it
1 = S e le c ts 9-b it tra n s m is s io n
0 = S e le c ts 8-b it tra n s m is s io n

b it 5:

T X E N : Tra n s m it E n a ble b it
1 = Tra n s m it e n a b le d
0 = Tra n s m it d is a b le d
N o te : S R E N /C R E N o v e rrid e s T X E N in S Y N C m o d e .

b it 4:

S Y N C : U S A R T M o d e S e le c t b it
1 = S y n c h ro n o u s m o d e
0 = A s y n c h ro n o u s m o d e

b it 3:

U n i m p l e m e n te d : R e a d a s '0'

b it 2:

B R G H : H ig h B a u d R a te S e le c t b it
A s y n c h ro n o u s m o d e
1 = H ig h s p e e d
0 = L ow spe e d
S y n c h ro n o u s m o d e
U n u s e d in th is m o d e

b it 1:

T R M T : Tra n s m it S h ift R e g is te r S ta tu s b it
1 = T S R e m p ty
0 = T S R fu ll

b it 0:

T X 9D : 9th b it o f tra n s m it d a ta . C a n b e p a rity b it.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 35 de 58

El segundo registro principal que controla la SCI es el registro RCSTA, en el que cada bit
tiene el siguiente significado.
Registro RCSTA - Direccin 0x18
R /W -0
SPEN
b it7

R /W -0
RX9

R /W -0
SREN

R /W -0
C REN

R /W -0
ADDEN

R -0
FERR

R -0
OERR

R -x
R X 9D
b it0

R = R e a d a b le b it
W = W rita b le b it
U = U n im p le m e n te d b it,
re a d a s 0
- n =V a lu e a t P O R re s e t

b it 7:

S P E N : S e ria l P o rt E n a b le b it
1 = S e ria l p o rt e n a b le d (C o n g u re s R C 7/R X /D T a n d R C 6/T X /C K p in s a s s e ria l p o rt p in s )
0 = S e ria l p o rt d is a b le d

b it 6:

R X 9: 9-b it R e c e iv e E n a b le b it
1 = S e le c ts 9-b it re c e p tio n
0 = S e le c ts 8-b it re c e p tio n

b it 5:

S R E N : S in g le R e c e iv e E n a b le b it
A s y n c h ro n o u s m o d e
D o n t c a re
S y n c h ro n o u s m o d e - m a s te r
1 = E n a b le s s in g le re c e iv e
0 = D is a b le s s in g le re c e iv e
T h is b it is c le a re d a fte r re c e p tio n is c o m p le te .
S y n c h ro n o u s m o d e - s la v e
U n u s e d in th is m o d e

b it 4:

C R E N : C o n tin u o u s R e c e iv e E n a b le b it
A s y n c h ro n o u s m o d e
1 = E n a b le s c o n tin u o u s re c e iv e
0 = D is a b le s c o n tin u o u s re c e iv e
S y n c h ro n o u s m o d e
1 = E n a b le s c o n tin u o u s re c e iv e u n til e n a b le b it C R E N is c le a re d (C R E N o v e rrid e s S R E N )
0 = D is a b le s c o n tin u o u s re c e iv e

b it 3:

A D D E N : A d d re s s D e te c t E n a b le b it
A s y n c h ro n o u s m o d e 9-b it (R X 9 = 1)
1 = E n a b le s a d d re s s d e te c tio n , e n a b le in te rru p t a n d lo a d o f th e re c e iv e b u rffe r w h e n R S R <8> is s e t
0 = D is a b le s a d d re s s d e te c tio n , a ll b y te s a re re c e iv e d , a n d n in th b it c a n b e u s e d a s p a rity b it

b it 2:

F E R R : F ra m in g E rro r b it
1 = F ra m in g e rro r (C a n b e u p d a te d b y re a d in g R C R E G re g is te r a n d re c e iv e n e x t v a lid b y te )
0 = N o fra m in g e rro r

b it 1:

O E R R : O v e rru n E rro r b it
1 = O v e rru n e rro r (C a n b e c le a re d b y c le a rin g b it C R E N )
0 = N o o v e rru n e rro r

b it 0:

R X 9D : 9th b it o f re c e iv e d d a ta (C a n b e p a rity b it)

El ltimo registro de control de la SCI es el registro SPBRG, que permite definir la


velocidad de transmisin. El contenido de este registro permite, en realidad, calcular la
velocidad de transmisin que se utilizar segn las indicaciones de la siguiente tabla.
SYNC

B R G H = 0 (Lw o S p e e d )

0
1

(A s y n c h ro n o u s ) B a u d R a te = F O S C /(64(X +1))
(S y n c h ro n o u s ) B a u d R a te = F O S C /(4(X +1))
X = v a lu e in S P B R G (0 to 255)

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

B R G H = 1 (H i g h S p e e d )
B a u d R a te = F O S C /(16(X +1))
NA

Pgina 36 de 58

En modo asncrono, definido por la puesta a 0 del bit SYNC del registro TXSTA, se utilizan
dos frmulas de clculo dependiendo del estado del bit BRGH de este mismo registro.
En modo sncrono definido por la puesta a uno de este mismo bit SYNC, slo se usa una
frmula. En este modo, el bit BRG no se utiliza.
En las relaciones indicadas en la tabla anterior, evidentemente, la X indica el contenido
del registro SPRBG. La siguiente tabla proporciona algunos valores tpicos para diferentes
configuraciones y diversas frecuencias de reloj, as como los porcentajes de error
obtenidos por este procedimiento con respecto a las velocidades tericas
BAU D
R AT E
(K )
0.3
1.2
2.4
9.6
19.2
76.8
96
300
500
H IG H
LO W

F O S C = 20 M H z
KBAU D

%
ERROR

NA
NA
NA
NA
19.53
76.92
96.15
294.1
500
5000
19.53

+1.73
+0.16
+0.16
-1.96
0
-

16 M H z
S PBR G
v a lu e
KBAU D
(d e c im a l)
255
64
51
16
9
0
255

F O S C = 5.0688 M H z
BAU D
R AT E
(K )

KBAU D

0.3
1.2
2.4
9.6
19.2
76.8
96
300
500
H IG H
LO W

NA
NA
NA
9.6
19.2
79.2
97.48
316.8
NA
1267
4.950

NA
NA
NA
NA
19.23
76.92
95.24
307.69
500
4000
15.625

%
ERROR

10 M H z
S PBR G
v a lu e
KBAU D
(d e c im a l)

+0.16
+0.16
-0.79
+2.56
0
-

207
51
41
12
7
0
255

4 MHz

NA
NA
NA
9.766
19.23
75.76
96.15
312.5
500
2500
9.766

%
ERROR

7.15909 M H z
S PBR G
v a lu e
%
KBAU D
(d e c im a l)
ERROR

+1.73
+0.16
-1.36
+0.16
+4.17
0
-

255
129
32
25
7
4
0
255

3.579545 M H z

NA
NA
NA
9.622
19.24
77.82
94.20
298.3
NA
1789.8
6.991

+0.23
+0.23
+1.32
-1.88
-0.57
-

1 MHz

S PBR G
v a lu e
(d e c im a l)
185
92
22
18
5
0
255
32.768 k H z

S PBR G
S PBR G
S PBR G
S PBR G
S PBR G
%
v a lu e
KBAU D
%
v a lu e
KBAU D
%
v a lu e
KBAU D
%
v a lu e
KBAU D
%
v a lu e
E R R O R (d e c im a l)
E R R O R (d e c im a l)
E R R O R (d e c im a l)
E R R O R (d e c im a l)
E R R O R (d e c im a l)
0
0
+3.13
+1.54
+5.60
-

131
65
15
12
3
0
255

NA
NA
NA
9.615
19.231
76.923
1000
NA
NA
100
3.906

+0.16
+0.16
+0.16
+4.17
-

103
51
12
9
0
255

NA
NA
NA
9.622
19.04
74.57
99.43
298.3
NA
894.9
3.496

+0.23
-0.83
-2.90
+3.57
-0.57
-

92
46
11
8
2
0
255

NA
1.202
2.404
9.615
19.24
83.34
NA
NA
NA
250
0.9766

+0.16
+0.16
+0.16
+0.16
+8.51
-

207
103
25
12
2
0
255

0.303
1.170
NA
NA
NA
NA
NA
NA
NA
8.192
0.032

+1.14
-2.48
-

26
6
0
255

BAUD RATE MODO SNCRONO


BAU D
R AT E
(K )
0.3
1.2
2.4
9.6
19.2
76.8
96
300
500
H IG H
LO W

F O S C = 20 M H z
KBAU D

%
ERROR

NA
1.221
2.404
9.469
19.53
78.13
104.2
312.5
NA
312.5
1.221

+1.73
+0.16
-1.36
+1.73
+1.73
+8.51
+4.17
-

16 M H z
S PBR G
v a lu e
(d e c im a l) K B A U D
255
129
32
15
3
2
0
0
255

F O S C = 5.0688 M H z

NA
1.202
2.404
9.615
19.23
83.33
NA
NA
NA
250
0.977

%
ERROR

10 M H z
S PBR G
v a lu e
(d e c im a l) K B A U D

+0.16
+0.16
+0.16
+0.16
+8.51
-

207
103
25
12
2
0
255

4 MHz

NA
1.202
2.404
9.766
19.53
78.13
NA
NA
NA
156.3
0.6104

%
ERROR
+0.16
+0.16
+1.73
+1.73
+1.73
-

3.579545 M H z

7.15909 M H z
S PBR G
v a lu e
%
(d e c im a l) K B A U D E R R O R
129
64
15
7
1
0
255

NA
1.203
2.380
9.322
18.64
NA
NA
NA
NA
111.9
0.437

+0.23
-0.83
-2.90
-2.90
-

1 MHz

S PBR G
v a lu e
(d e c im a l)
92
46
11
5
0
255
32.768 k H z

BAU D
R AT E
(K )

S PBR G
S PBR G
S PBR G
S PBR G
S PBR G
v a lu e
%
v a lu e
%
%
v a lu e
%
v a lu e
%
v a lu e
K B A U D E R R O R (d e c im a l) K B A U D E R R O R (d e c im a l) K B A U D E R R O R (d e c im a l) K B A U D E R R O R (d e c im a l) K B A U D E R R O R (d e c im a l)

0.3
1.2
2.4
9.6
19.2
76.8
96
300
500
H IG H
LO W

0.31
1.2
2.4
9.9
19.8
79.2
NA
NA
NA
79.2
0.3094

+3.13
0
0
+3.13
+3.13
+3.13
-

255
65
32
7
3
0
0
255

0.3005
1.202
2.404
NA
NA
NA
NA
NA
NA
62.500
3.906

-0.17
+1.67
+1.67
-

207
51
25
0
255

0.301
1.190
2.432
9.322
18.64
NA
NA
NA
NA
55.93
0.2185

+0.23
-0.83
+1.32
-2.90
-2.90
-

185
46
22
5
2
0
255

0.300
1.202
2.232
NA
NA
NA
NA
NA
NA
15.63
0.0610

+0.16
+0.16
-6.99
-

51
12
6
0
255

BAUD RATE MODO ASNCRONO (BRGH = 0)


La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

0.256
NA
NA
NA
NA
NA
NA
NA
NA
0.512
0.0020

-14.67
-

1
0
255

Pgina 37 de 58

BAU D
R AT E
(K )
9.6
19.2
38.4
57.6
115.2
250
625
1250
BAU D
R AT E
(K )

F O S C = 20 M H z
KBAU D

%
ERROR

9.615
19.230
37.878
56.818
113.636
250
625
1250

+0.16
+0.16
-1.36
-1.36
-1.36
0
0
0

16 M H z
S PBR G
v a lu e
(d e c im a l) K B A U D
129
64
32
21
10
4
1
0

%
ERROR

9.615
19.230
38.461
58.823
111.111
250
NA
NA

10 M H z
S PBR G
v a lu e
(d e c im a l) K B A U D

+0.16
+0.16
+0.16
+2.12
-3.55
0
-

103
51
25
16
8
3
-

7.16 M H z
S PBR G
v a lu e
%
(d e c im a l) K B A U D E R R O R

%
ERROR

9.615
18.939
39.062
56.818
125
NA
625
NA

+0.16
-1.36
+1.7
-1.36
+8.51
0
-

64
32
15
10
4
0
-

9.520
19.454
37.286
55.930
111.860
NA
NA
NA

S PBR G
v a lu e
(d e c im a l)

-0.83
+1.32
-2.90
-2.90
-2.90
-

46
22
11
7
3
-

F O S C = 5.068 M H z
KBAU D

4 MHz
3.579 M H z
1 MHz
32.768 k H z
S PBR G
S PBR G
S PBR G
S PBR G
S PBR G
v a lu e
v a lu e
v a lu e
v a lu e
%
%
%
%
%
v a lu e
E R R O R (d e c im a l) K B A U D E R R O R (d e c im a l) K B A U D E R R O R (d e c im a l) K B A U D E R R O R (d e c im a l) K B A U D E R R O R (d e c im a l)

9.6
19.2

9.6
18.645

0
-2.94

32
16

NA
1.202

38.4
57.6
115.2
250
625
1250

39.6
52.8
105.6
NA
NA
NA

+3.12
-8.33
-8.33
-

7
5
2
-

2.403
9.615
19.231
NA
NA
NA

+0.17
+0.13
+0.16
+0.16
-

207

9.727
18.643

+1.32
-2.90

22
11

8.928
20.833

-6.99
+8.51

6
2

NA
NA

103
25
12
-

37.286
-2.90
55.930
-2.90
111.860 -2.90
223.721 -10.51
NA
NA
-

5
3
1
0
-

31.25
62.5
NA
NA
NA
NA

-18.61
+8.51
-

1
0
-

NA
NA
NA
NA
NA
NA

BAUD RATE MODO ASNCRONO (BRGH = 1)

EL CONVERTIDOR ANALGICO/DIGITAL
El convertidor analgico digital incorporado al PIC16F87X4 es un modelo de 10 bits
precedido de un multiplexor de varias entradas. Como veremos a continuacin, el nmero
de entradas se puede definir por software por medio de los bits apropiados del registro de
control.
La referencia de tensin utilizada para esta conversin se puede definir como Vdd o la
tensin aplicada a RA3/AN3/Vref+, y tambien la referencia inferior como Vss o
RA2/AN2/Vref-. Adems, este convertidor ofrece la particularidad de poder funcionar
incluso en modo SLEEP.
En la siguiente figura se presenta su esquema interno y, aunque en esta figura no pueda
verlo, se utilizan cuatro registros: dos registros de control llamados ADCON0 y ADCON1, y
dos registros de resultados ADRESL y ADRESH
C H S 2 :C H S 0

111
110
101
100
V A IN
011

(I n p u t v o lta g e )

010

A /D
C o n v e r te r

001
000

VDD

R E 2 /A N 7 (1 )
R E 1 /A N 6 (1 )
R E 0 /A N 5 (1 )
R A 5 /A N 4
R A 3 /A N 3 /V R E F +
R A 2 /A N 2 /V R E F R A 1 /A N 1
R A 0 /A N 0

X000 o r
X010 o r
X100

V REF+
(R e fe re n c e
v o lta g e )
P C F G 3 :P C F G 0

X001 o r
X011 o r
X101
00XX o r 0X0X o r
1000 o r 1010 o r
1100

V REF(R e fe re n c e
v o lta g e )

VSS

1001 o r
1011 o r
1101

P C F G 3 :P C F G 0
N o te

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

1:

N o t a v a ila b le o n 2 8 -p in d e v ic e s .

Pgina 38 de 58

Las lneas de entrada del convertidor se comparten con las lneas del puerto A y del
puerto E, las cuales deben estar configuradas como entradas cuando se utilizan para
conversin. En caso contrario, el convertidor leer el nivel lgico presente en estos pines.
El convertidor utiliza un tcnica de muestreo y retencin que equivale a cargar una
capacidad con la tensin que hay que medir. Por esto, el multiplexor de la figura anterior
no tiene necesidad de releer permanentemente la entrada seleccionada como entrada del
conversor propiamente dicho, sino solamente durante el tiempo suficiente para cargar al
condensador. Este tiempo, denominado Tad, depende de la velocidad de conversin
deseada y de la frecuencia de reloj del PIC.
Precisado todo esto, podemos estudiar el contenido de los registros de control, lo que nos
facilitar el estudio del principio que hay que utilizar para programar a este convertidor.
El primer registro, denominado ADCON0, est formado por los siguientes bits:
Registro ADCON0 - Direccin 0x1F
R /W -0
ADC S1
b it7

b it 7-6:

R /W -0
ADC S0

R /W -0
C HS2

R /W -0
C HS1

R /W -0
C HS0

R /W -0
G O /D O N E

U -0

R /W -0
ADON
b it0

R =R e a d a b le b it
W = W rita b le b it
U =U n im p le m e n te d b it,
re a d a s 0
- n = V a lu e a t P O R re s e t

A D C S 1: A D C S 0: A /D C o n v e rs io n C lo c k S e le c t b its
00 = F O S C /2
01 = F O S C /8
10 = F O S C /32
11 = F R C (c lo c k d e riv e d fro m a n R C o s c illa tio n )

b it 5-3: C H S 2: C H S 0: A n a lo g C h a n n e l S e le c t b its
000 = c h a n n e l 0, (R A 0/A N 0)
001 = c h a n n e l 1, (R A 1/A N 1)
010 = c h a n n e l 2, (R A 2/A N 2)
011 = c h a n n e l 3, (R A 3/A N 3)
100 = c h a n n e l 4, (R A 5/A N 4)
101 = c h a n n e l 5, (R E 0/A N 5)(1)
110 = c h a n n e l 6, (R E 1/A N 6)(1)
111 = c h a n n e l 7, (R E 2/A N 7)(1)
b it 2:

G O /D O N E : A /D C o n v e rs io n S ta tu s b it
If A D O N = 1
1 = A /D c o n v e rs io n in p ro g re s s (s e ttin g th is b it s ta rts th e A /D c o n v e rs io n )
0 = A /D c o n v e rs io n n o t in p ro g re s s (T h is b it is a u to m a tic a lly c le a re d b y h a rd w a re w h e n th e A /D c o n v e rs io n is c o m p le te )

b it 1:

U n i m p l e m e n te d : R e a d a s '0'

b it 0:

A D O N : A /D O n b it
1 = A /D c o n v e rte r m o d u le is o p e ra tin g
0 = A /D c o n v e rte r m o d u le is s h u to ff a n d c o n s u m e s n o o p e ra tin g c u rre n t
N o te 1: T h e s e c h a n n e ls a re n o t a v a ila b le o n th e 28-p in d e v ic e s .

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 39 de 58

Registro ADCON1 - Direccin 0x9F

U -0
ADFM
b it7

U -0

b it 7:

R /W -0

U -0

R /W -0
PC FG 3

R /W -0
PC FG 2

R /W -0
PC FG 1

R /W -0
PC FG 0
b it0

R =R e a d a b le b it
W = W rita b le b it
U =U n im p le m e n te d
b it, re a d a s 0
- n = V a lu e a t P O R re s e t

A D F M : A /D R e s u lt fo rm a t s e le c t
1 = R ig h t J u s tie d . 6 m o s t s ig n ic a n t b its o f A D R E S H a re re a d a s 0.
0 = L e ft J u s tie d . 6 le a s t s ig n ic a n t b its o f A D R E S L a re re a d a s 0.

b it 6-4:

U n i m p l e m e n te d : R e a d a s '0'

b it 3-0:

P C F G 3: P C F G 0: A /D P o rt C o n g u ra tio n C o n tro l b it s

P C F G 3: A N 7 (1) A N 6 (1) A N 5 (1)


PC FG 0 R E2
RE1
RE0
0000
0001
0010
0011
0100
0101
011x
1000
1001
1010
1011
1100
1101
1110
1111

A
A
D
D
D
D
D
A
D
D
D
D
D
D
D

A
A
D
D
D
D
D
A
D
D
D
D
D
D
D

A
A
D
D
D
D
D
A
A
A
A
D
D
D
D

AN4
RA5
A
A
A
A
D
D
D
A
A
A
A
A
D
D
D

AN3
RA3

AN2
RA2

A
V REF+
A
V REF+
A
V REF+
D
V REF+
A
V REF+
V REF+
V REF+
V REF+
D
V REF+

A
A
A
A
D
D
D
V REFA
A
V REFV REFV REFD
V REF-

AN1
RA1
A
A
A
A
A
A
D
A
A
A
A
A
A
D
D

AN0
RA0
A
A
A
A
A
A
D
A
A
A
A
A
A
A
A

V REF+

V REF-

VDD
RA3
VDD
RA3
VDD
RA3
VDD
RA3
VDD
RA3
RA3
RA3
RA3
VDD
RA3

VSS
VSS
VSS
VSS
VSS
VSS
VSS
RA2
VSS
VSS
RA2
RA2
RA2
VSS
RA2

C HAN /
R EFS
8/0
7/1
5/0
4/1
3/0
2/1
0/0
6/2
6/0
5/1
4/2
3/2
2/2
1/0
1/2

A = A n a lo g in p u t
D = D ig ita l I/O
N o te 1: T h e s e c h a n n e ls a re n o t a v a ila b le o n th e 28-p in d e v ic e s .

D e v i c e F r e q u e n cy

A D C l o ck S o u cr e (TA D )
O p e r a ti o n

A D C S 1: A D C S 0

2T O S C

00

100

8T O S C

01

400 n s (2)

32T O S C

10

1.6 s

RC

11

20 M H z

5 MHz

n s (2)

n s (2)

2-6

s (1, 4)

1.25 M H z

333.33 k H z

1.6 s

6 s

1.6 s

6.4 s

24 s (3)

6.4 s

25.6 s (3)

96 s (3)

400

2-6

s (1, 4)

2-6

s (1, 4)

2 - 6 s (1)

Legend:
N o te 1:
2:
3:
4:

S h a d e d c e lls a re a re o u ts id e o f re c o m m e n d e d ra n g e s .
T h e R C s o u rc e h a s a ty p ic a l T A D tim e o f 4 s .
T h e s e v a lu e s v io la te th e m in im u m re q u ire d T A D tim e .
F o r fa s te r c o n v e rs io n tim e s , th e s e le c tio n o f a n o th e r c lo c k s o u rc e is re c o m m e n d e d .
W h e n th e d e v ic e fre q u e n c ie s is g re a te r th a n 1 M H z , th e R C A /D c o n v e rs io n c lo c k s o u rc e is o n ly re c o m m e n d e d fo r s le e p o p e ra tio n .
5: F o r e x te n d e d v o lta g e d e v ic e s (L C ), p le a s e re fe r to E le c tric a l S p e c ic a tio n s s e c tio n .

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 40 de 58

Visto el contenido de estos registros, el principio de utilizacin del convertidor es muy


sencillo de comprender. En efecto, basta con proceder de la siguiente forma:
Configurar el convertidor, programando los bits de los registros de control.
Activar o no las interrupciones que proceden del convertidor, programando el bit
adecuado del registro PIE1 (ver el principio del captulo).
Asegurarse de respetar el tiempo mnimo de muestreo, .
Iniciar la conversin poniendo el bit GO/DONE a 1.
Detectar el fin de la conversin, bien comprobando el paso a 0 de este mismo bit, bien
por la recepcin de la interrupcin que procede del convertidor, si se ha autorizado.
Entonces el resultado se puede leer en el registro ADRES.
Despus, es posible pedir la conversin de otra va (o de la misma, por supuesto), pero
observe que es necesario esperar un tiempo igual, al menos, a 2 Tad.
Observe que tambin como, por una razn no precisada en la hojas de caractersticas, es
necesario no poner a 1 los bits ADON y GO/DONE con la misma instruccin, sino
proceder en dos veces.
El reloj de conversin se debe seleccionar sabiendo que la conversin necesita un tiempo
igual a 12 Tad para los 10 bits. Adems, para asegurar una conversin correcta, se debe
respetar el tiempo mnimo Tad de 1.6ms.
La tabla anterior muestra cules son las distintas posibilidades ofertadas por la
programacin de los bits ADCS0 y ADCS1 , en funcin de la frecuencia de reloj del PIC.
La descripcin del mdulo CC , hemos visto que era posible utilizarle para desencadenar
una conversin analgico/digital. Esto no cambia en nada los principios expuestos
anteriormente, ni el desarrollo general de la programacin de una conversin. La nica
diferencia es con esta exposicin esta en hecho de que el bit GO/DONE no debe ponerlo
a 1 por sus medios, sino que se hace por medio de CC .
Si esta posibilidad de iniciacin la utiliza CC , sin que el convertidor haya sido activado por
su bit ADONE, no tiene lugar ninguna accin por parte del convertidor, pero el
temporizador se pone a 0 como si la orden de inicio del convertidor hubiera sido dada.
Hay un ltimo punto importante que sealar: el funcionamiento del modo SLEEP. Es
posible programar una conversin mientras que PIC est en modo SLEEP. En este caso,
hay que utilizar imperativamente como reloj de conversin el modo RC, ya que el reloj
normal del PIC est parado en este modo.
Cuando se selecciona este reloj, el convertidor espera un ciclo de instruccin antes de
comenzar la conversin, lo que permite ejecutar la instruccin SLEEP cuando la
conversin se termina, su resultado se coloca en ADRES, el bit GO/DONE se pone a 0 y
se genera una interrupcin si estaba autorizada. En este caso, el PIC sale del modo
SLEEP gracias a ella. Si esta interrupcin no estaba autorizada el convertidor permanece
en este estado hasta que el procesador sale del modo SLEEP, momento en que el
resultado y el bit GO/DONE siguen siendo vlidos.
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 41 de 58

EL TEMPORIZADOR WATCHDOG
Como en el caso de los PIC 16C5X, PIC16CXX el temporizador watchdog de los
PIC16F87X est provisto con su propio oscilador autnomo de tipo RC interno, por lo que
no precisa ningn componente externo, y puede continuar funcionando incluso cuando el
reloj del PIC est parado, por ejemplo, durante una instruccin SLEEP.
Como todos sus homlogos, este temporizador cuenta permanentemente, y el hecho de
desbordarse, es decir, de llegar a FF hace que se genere un reset del microcontrolador. Si
el PIC est en modo SLEEP cuando se produce este desbordamiento, el efecto es que
salga de dicho modo.
Si no desea utilizar el watchdog, es posible invalidarlo mediante la escritura de un 0 en un
bit especfico del circuito durante su programacin. Este bit no forma parte del espacio
direccionable ni de los registros clsicos, por lo que no lo habr visto en ninguna de las
figuras anteriores. No obstante, todos los programadores del PIC saben acceder a l.
El tiempo de desbordamiento tpico de este temporizador es de 18 ms, aunque puede
variar un poco con la tensin de alimentacin y la temperatura.
Si este tiempo no es bastante largo, el predivisor del que hemos hablado para el
temporizador 0 se puede asignar al temporizador watchdog gracias al bit PSA del registro
OPTION (ver la descripcin de este registro en el apartado dedicado al temporizador 0).
En estas condiciones, las tasas de predivisin definidas por este mismo registro varan,
siendo el mximo permitido 128, con lo que es posible obtener tiempos de
desbordamiento que llegan a 2,5 s.
Las instrucciones CLRWDT y SLEEP ponen a 0 el temporizador watchdog, y a 1 el bit TO
del registro de estado (ver la descripcin de este registro al principio del captulo). Esto
permite evitar que se generen resets indeseados cuando el registro est, por ejemplo, en
modo SLEEP. Estas dos instrucciones ponen a 0 tambin al predivisor, si esta asignado al
temporizador watchdog.
F ro m T M R 0 C lo c k S o u rc e
(F ig u re 5-2)
0
W D T T im e r

P o s ts c a le r

M
U
X

8
8 - to - 1 M U X

P S 2:P S 0

PSA

W DT
E n a b le B it

To T M R 0 (F ig u re 5-2)
0

1
MUX

W DT
T im e -o u t

N o te : P S A a n d P S 2:P S 0 a re b its in th e O P T IO N _R E G re g is te r.

A d d re s s

N am e

2007h

C o n g . b its

81h ,181h

O P T IO N _R E G

PSA

B it 7

B it 6

B it 5

B it 4

B it 3

B it 2

B it 1

B it 0

(1)

B O D E N (1)

C P1

C P0

P W R T E (1)

W DTE

FO SC 1

FO SC 0

R BPU

IN T E D G

T 0C S

T 0S E

PSA

PS2

PS1

PS0

L e g e n d : S h a d e d c e lls a re n o t u s e d b y th e W a tc h d o g T im e r.
N o te 1: S e e F ig u re 12-1 fo r o p e ra tio n o f th e s e b its .
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 42 de 58

Programa fuente:
El programa fuente esta compuesto por una sucesin de lneas de programa. Cada lnea
de programa esta compuesta por 4 campos separados por uno o ms espacios o
tabulaciones. Estos campos son:
[Etiqueta]

Comando

[Operando(s)]

[;Comentario]

La etiqueta es opcional; El comando puede ser un mnemnico del conjunto de


instrucciones; El operando esta asociado al comando, si no hay comando no hay
operando, e inclusive algunos comandos no llevan operando. El comentario es opcional
para el compilador aunque es buena prctica considerarlo obligatorio para el
programador.
La etiqueta, es el campo que empieza en la primer posicin de la lnea. No se pueden
insertar espacios o tabulaciones antes de la etiqueta sino ser considerado comando.
Identifica la lnea de programa haciendo que el compilador le asigne un valor
automticamente. Si se trata de una lnea cuyo comando es una instruccin de programa
del microcontrolador, se le asigna el valor de la direccin de memoria correspondiente a
dicha instruccin (location counter). En otros casos se le asigna un valor de una
constante, o la direccin de una variable, o ser el nombre de una macroinstruccin, etc.
El comando puede ser un cdigo mnemnico de instruccin del microcontrolador, o una
directiva o pseudoinstruccin para el compilador. En el primer caso ser directamente
traducido a cdigo de maquina, en el segundo caso ser interpretado por el compilador y
realizara alguna accin en tiempo de compilacin como ser asignar un valor a una
etiqueta, etc.
El campo de parmetros puede contener uno o ms parmetros separados por comas.
Los parmetros dependen de la instruccin o directiva. Pueden ser nmeros o literales
que representen constantes o direcciones.
El campo de comentario debe comenzar con un caracter punto y coma. No necesita tener
espacios o tabulaciones separndolo del campo anterior, e incluso puede empezar en la
primer posicin de la lnea. El compilador ignora todo el texto que contenga la lnea
despus de un caracter punto y coma. De esta manera pueden incluirse lneas que
contengan solo comentarios, y es muy buena prctica hacer uso y abuso de esta
posibilidad para que los programas resulten autodocumentados.

Conjunto de instrucciones
El conjunto de instrucciones de los microprocesadores PIC 16F87X consiste en un
pequeo repertorio de solo 35 instrucciones de 14 bits, que pueden ser agrupadas para
su estudio en tres a cinco grupos. En este curso se ha optado por clasificarlas, desde el
punto de vista del programador, en cinco categoras bien definidas de acuerdo con la
funcin y el tipo de operandos involucrados. En primer lugar se agrupan las instrucciones
que operan con bytes y que involucran algn registro de la memoria interna.
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 43 de 58

En segundo lugar se analizaran las instrucciones que operan solo sobre el registro W y
que permiten cargarle una constante implcita o incluida literalmente en la instruccin
(literales). En tercer lugar se agrupan las instrucciones que operan sobre bits individuales
de los registros de la memoria interna. En cuarto lugar se clasifican las instrucciones de
control de flujo del programa, es decir las que permiten alterar la secuencia lineal de
ejecucin de las instrucciones. Por ltimo se agrupan unas pocas instrucciones que
llamaremos especiales, cuyas funciones o tipos de operandos son muy especficos y no
encajan en ninguna de las clasificaciones anteriores.
B y te -o rie n te d le re g is te r o p e ra tio n s
13
8 7 6
O PC O DE

0
f (F IL E #)

d = 0 fo r d e s tin a tio n W
d = 1 fo r d e s tin a tio n f
f = 7-b it le re g is te r a d d re s s
B it-o rie n te d le re g is te r o p e ra tio n s
13
10 9
7 6
O PC O DE

b (B IT #)

F ie ld

D e s c r i p ti o n

R e g is te r le a d d re s s (0x 00 to 0x 7F )

W
b
k
x

W o rk in g re g is te r (a c c u m u la to r)
B it a d d re s s w ith in a n 8-b it le re g is te r
L ite ra l e ld , c o n s ta n t d a ta o r la b e l
D o n 't c a re lo c a tio n (= 0 o r 1)
T h e a s s e m b le r w ill g e n e ra te c o d e w ith x = 0. It is th e
re c o m m e n d e d fo rm o f u s e fo r c o m p a tib ility w ith a ll
M ic ro c h ip s o ftw a re to o ls .
D e s tin a tio n s e le c t; d = 0: s to re re s u lt in W ,
d = 1: s to re re s u lt in le re g is te r f.
D e fa u lt is d = 1
P ro g ra m C o u n te r

0
f (F IL E #)

b = 3-b it b it a d d re s s
f = 7-b it le re g is te r a d d re s s
L ite ra l a n d c o n tro l o p e ra tio n s

G e n e ra l
13

O PC O DE

k (lite ra l)

PC
TO
PD

k = 8-b it im m e d ia te v a lu e

T im e -o u t b it
P o w e r-d o w n b it

C A L L a n d G O T O in s tru c tio n s o n ly
13

11
O PC O DE

10

0
k (lite ra l)

k = 11-b it im m e d ia te v a lu e

Descripcin del Campo de los cdigos de Operacin

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 44 de 58

Resumen de instrucciones (clasificacin segn el fabricante en tres grupos):


En esta tabla de resumen del conjunto de instrucciones se pueden observar los mnemnicos, la explicacin,
el nmero de ciclos, el cdigo de mquina y los bits afectados del registro STATUS para cada una de las
instrucciones.
M n e m o n ic ,
O p e ra n d s

D e s c r i p ti o n

C y c le s

14-B i t O p c o d e
MSb

LSb

S ta tu s
A f f e c te d

N o te s

B Y T E -O R IE N T E D F IL E R E G IS T E R O P E RT AIO N S
A DDW F
A NDW F
C LRF
C LRW
COMF
DEC F
DEC FSZ
IN C F
IN C F S Z
IO R W F
MOVF
MOVW F
NOP
RLF
RRF
SUBW F
SW A PF
XORW F

f, d
f, d
f
f, d
f, d
f, d
f, d
f, d
f, d
f, d
f
f, d
f, d
f, d
f, d
f, d

A dd W and f
A N D W w ith f
C le a r f
C le a r W
C o m p le m e n t f
D e c re m e n t f
D e c re m e n t f, S k ip if 0
In c re m e n t f
In c re m e n t f, S k ip if 0
In c lu s iv e O R W w ith f
M ove f
M o v e W to f
N o O p e ra tio n
R o ta te L e ft f th ro u g h C a rry
R o ta te R ig h t f th ro u g h C a rry
S u b tra c t W fro m f
S w a p n ib ble s in f
E x c lu s iv e O R W w ith f

1
1
1
1
1
1
1(2)
1
1(2)
1
1
1
1
1
1
1
1
1

00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00

0111
0101
0001
0001
1001
0011
1011
1010
1111
0100
1000
0000
0000
1101
1100
0010
1110
0110

dfff
dfff
lfff
0xxx
dfff
dfff
dfff
dfff
dfff
dfff
dfff
lfff
0xx0
dfff
dfff
dfff
dfff
dfff

ffff
ffff
ffff
xxxx
ffff
ffff
ffff
ffff
ffff
ffff
ffff
ffff
0000
ffff
ffff
ffff
ffff
ffff

C ,D C ,Z
Z
Z
Z
Z
Z
Z
Z
Z

C
C
C ,D C ,Z
Z

1,2
1,2
2
1,2
1,2
1,2,3
1,2
1,2,3
1,2
1,2

1,2
1,2
1,2
1,2
1,2

B IT-O R IE N T E D F IL E R E G IS T E R O P E RT AIO N S
BC F
BSF
BTFSC
BTFSS

f, b
f, b
f, b
f, b

B it C le a r f
B it S e t f
B it Te s t f, S k ip if C le a r
B it Te s t f, S k ip if S e t

1
1
1 (2)
1 (2)

01
01
01
01

00bb
01bb
10bb
11bb

bfff
bfff
bfff
bfff

ffff
ffff
ffff
ffff

1
1
2
1
2
1
1
2
2
2
1
1
1

11
11
10
00
10
11
11
00
11
00
00
11
11

111x
1001
0kkk
0000
1kkk
1000
00xx
0000
01xx
0000
0000
110x
1010

kkkk
kkkk
kkkk
0110
kkkk
kkkk
kkkk
0000
kkkk
0000
0110
kkkk
kkkk

kkkk
kkkk
kkkk
0100
kkkk
kkkk
kkkk
1001
kkkk
1000
0011
kkkk
kkkk

1,2
1,2
3
3

L IT E R A L A N D C O N T OR L O P E R AT IO N S
A D D LW
A N D LW
C A LL
C LRW DT
G O TO
IO R L W
M O V LW
R E T F IE
R E T LW
RETURN
SLEEP
S U B LW
X O R LW

k
k
k
k
k
k
k
k
k

A d d lite ra l a n d W
A N D lite ra l w ith W
C a ll s u b ro u tin e
C le a r W a tc h d o g T im e r
G o to a d d re s s
In c lu s iv e O R lite ra l w ith W
M o v e lite ra l to W
R e tu rn fro m in te rru p t
R e tu rn w ith lite ra l in W
R e tu rn fro m S u b ro u tin e
G o in to s ta n d b y m o d e
S u b tra c t W fro m lite ra l
E x c lu s iv e O R lite ra l w ith W

C ,D C ,Z
Z
T O ,P D
Z

T O ,P D
C ,D C ,Z
Z

N o te 1: W h e n a n I/O re g is te r is m o d ie d a s a fu n c tio n o f its e lf ( e .g ., MOVF PORTB, 1), th e v a lu e u s e d w ill b e th a t v a lu e p re s e n t


o n th e p in s th e m s e lv e s . F o r e x a m p le , if th e d a ta la tc h is '1' fo r a p in c o n g u re d a s in p u t a n d is d r iv e n lo w b y a n e x te rn a l
d e v ic e , th e d a ta w ill b e w ritte n b a c k w ith a '0'.
2: If th is in s tru c tio n is e x e c u te d o n th e T M R 0 re g is te r (a n d , w h e re a p p lic a b le , d = 1), th e p re s c a le r w ill b e c le a re d if a s s ig n e d
to th e T im e r0 M o d u le .
3: If P ro g ra m C o u n te r (P C ) is m o d ie d o r a c o n d itio n a l te s t is tr u e , th e in s tru c tio n re q u ire s tw o c y c le s . T h e s e c o n d c y c le is
e x e c u te d a s a N O P.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 45 de 58

Modos de direccionamiento
Direccionamiento de la memoria de datos (RAM)
La memoria interna se direcciona en forma directa por medio de los 7 bits "f" contenidos en
las instrucciones que operan sobre registros. De esta manera se puede direccionar
cualquier posicin desde la 00 a la 7F. Como se vi en el captulo correspondiente a los
mapas de memoria, las direcciones 80 a FF, 100 a 17F y 180 a 1FF corresponden a los
bancos de registros, el programador deber asegurarse de haber programado los bits de
seleccin de banco en el registro STATUS.
El registro FSR, es un puntero para direccionamiento indirecto. La posicin 00 del mapa de
RAM es la llamada direccin indirecta. S en cualquier instruccin se opera con la direccin
00, en realidad se estar operando con la direccin a donde apunte el contenido del FSR.
Por ejemplo si el FSR contiene el valor 14, una instruccin que opere sobre la direccin 0,
operara en realidad sobre la direccin 14. Se puede decir en este ejemplo que la posicin
14 de memoria fue direccionada en forma indirecta a travs del puntero FSR.
Ejemplo :
; Esta porcin de programa borra 5 posiciones de memoria a partir de la direccin 0x20
FSR equ 04
;(definicin al comienzo del programa)
.....................................
.....................................
movlw 5
;prepara para repetir 5 veces
movwf 0x7F
;(el registro 0x7F es el contador del loop)
movlw 0x20
;apunta a la direccin 0x20
movwf FSR ;
loop:
clrf INDF
;borra una posicin de memoria
incf FSR,1
;apunta a la siguiente
decfsz 0x7F,1
;si todava no borra todas
goto loop
;sige borrando
.....................................
.....................................
El direccionamiento indirecto es muy til para el procesamiento de posiciones consecutivas
de memoria, como en el ejemplo, o para el direccionamiento de datos en subrutinas.
Direccionamiento de la memoria de programa (EPROM, OTP)
D ire c t A d d re s s in g

In d ire c t A d d re s s in g

fro m o p c o d e

R P 1: R P 0

b a n k s e le c t

lo c a tio n s e le c t

IR P

b a n k s e le c t
00

01

10

F S R re g is te r

lo c a tio n s e le c t

11

00h

80h

100h

180h

7F h

FFh

17F h

1F F h

D a ta
M e m o ry (1 )

Bank 0

Bank 1

Bank 2

Bank 3

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 46 de 58

La instruccin GOTO dispone solo de 11 bits en el cdigo de operacin para especificar la


direccin de destino del salto. Al ejecutar una instruccin GOTO el microprocesador toma
los dos bits que restan para completar la direccin de 13 bits, de los bits 3 y 4 del registro
PCLATH. Ver la siguiente figura.
PC H

PC L

12

PC
5

P C L AT H <4:0>

In s tru c tio n w ith


P C L as
D e s tin a tio n
A LU

P C L AT H
PC H
12

PC L

1 1 10

GOTO,CALL

PC
2

P C L A T H <4:3>

11
O p c o d e <10:0 >

P C L AT H

Direccionamiento directo con instruccin GOTO y CALL


Deber tenerse en cuenta adems que es posible avanzar de una pgina a otra en forma
automtica cuando el PC se incrementa. Esto ocurre si el programa empieza en una
pgina y sigue en la siguiente. Sin embargo, al incrementarse el PC desde la ltima
posicin de una pgina a la primera de la siguiente, los bits 3 y 4 del PCLATH no se
modifican, y por lo tanto s se ejecuta una instruccin GOTO, CALL o alguna que acte
sobre el PC, esta producir un salto a la pgina anterior, a menos que el programador
tenga la precaucin de actualizar el valor de dichos bits. Por este motivo es conveniente
dividir el programa en mdulos o rutinas que estn confinados a una pgina.
En el caso de la instruccin CALL, el direccionamiento es igual y como el stack, tiene un
tamao de 13 bits la direccin de retorno se almacena completa, pero al igual que al
pasar de una pagina a otra en un programa lineal, los bits 3 y 4 del PCLATH no se
actualizan.

Herramientas de desarrollo
UNA MIRADA RAPIDA AL MPLAB.
Qu es el MPLAB ?
EL MPLAB es un "Entorno de Desarrollo Integrado " (Integrated Development
Environment, IDE) que corre en "Windows ", mediante el cual Usted puede desarrollar
aplicaciones para los microcontroladores de las familias PIC 16/17.
EL MPLAB le permite a Usted escribir, depurar y optimizar los programas (firmware) de
sus diseos con PIC 16/17. EL MPLAB incluye un editor de texto, un simulador y un
organizador de proyectos. Adems, el MPLAB soporta el emulador PICMASTER y a
otras herramientas de desarrollo de Microchip como el PICSTART - Plus.

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 47 de 58

De que forma le ayuda el MPLAB ?


Con el MPLAB Usted puede:
Depurar sus programas fuente.
Detectar errores automticamente en sus programas fuente para editarlos.
Depurar los programas utilizando puntos de corte (breakpoints) mediante valores de los
registros internos.
Observar el flujo del programa con el simulador MPLAB -SIM, seguirlo en tiempo real
utilizando el emulador PICMASTER.
Realizar medidas de tiempo utilizando un cronmetro.
Mirar variables en las ventanas de observacin.
Encontrar respuestas rpidas a sus preguntas, utilizando la Ayuda en lnea del MPLAB.
LAS HERRAMIENTAS DEL MPLAB
El Organizador de Proyectos (Proyect Manager).
El organizador de proyectos (Proyect Manager) es parte fundamental de MPLAB. Sin
crear un proyecto Usted no puede realizar depuracin simblica. Con el Organizador de
Proyectos (Proyect manager) puede utilizar las siguientes operaciones:
Crear un proyecto.
Agregar un archivo de programa fuente de proyecto.
Ensamblar o compilar programas fuente.
Editar programas fuente.
Reconstruir todos los archivos fuente, o compilar un solo archivo.
Depurar su programa fuente.
Software ensamblador:
El software ensamblador que presenta Microchip viene en dos presentaciones, una, para
entorno DOS llamado MPASM.EXE y la otra, para entorno Windows llamado
MPASMWIN.EXE
Las dos presentaciones soportan a TODOS los microcontroladores de la familia PIC de
Microchip. El conjunto de instrucciones de los microcontroladores PIC es en esencia la
base del lenguaje ensamblador soportado por este software.
Directivas de uso frecuente:
Son indicaciones para el compilador, no generan cdigo.
#DEFINE
ej. #define <nombre> [<valor a remplazar>]
explicacin: declara una cadena de texto como substituto de otra
END
ej. end
explicacin: indica fin de programa
La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 48 de 58

EQU
ej. status equ 05
explicacin: define una constante de ensamble
INCLUDE
ej. include <PIC16F84.h>
explicacin: incluye en el programa un archivo con cdigo fuente
ORG
ej. org 0x100
explicacin: ensambla a partir de la direccin especificada
Para informacin ms completa referirse a la gua rpida del MPASM.
Una vez instalado adecuadamente el MPLAB, para realizar la simulacin de un programa
deben seguirse los siguientes pasos:

Lista de pasos:
1. Haga doble click en el cono correspondiente a MPLAB.
2. Crear el archivo fuente correspondiente (men File...New Source).
3. Salve el archivo (con extensin .ASM) una vez terminada su edicin (men
FILE...Save).
4. Debe a continuacin crearse un nuevo proyecto (men Project...New Project).
5. Cuando aparezca la ventana de New Project editar las cajas de texto:
Project path and Name y Development Mode, hacer click en <OK>.
6. En la siguiente ventana Edit Project, hacer click en la seccin Non-project files sobre el
nombre del archivo fuente realizado en los pasos 2 y 3.
7. Haga click en el botn <=add y luego de que ste aparezca en la seccin Project Files
haga click sobre el botn <OK>.
8. Salvar el proyecto (en el men Project...Save project).
9. Realizar la "construccin de todo el proyecto" (men Project...Build All).
10. En esta etapa se realiza en forma automtica el ensamble de nuestro programa fuente
y el vaciado de ste en memoria de simulacin. El proceso de ensamble generar un
archivo de errores en caso de que estos existan, s es as deben corregirse directamente
sobre el archivo fuente, salvar las correcciones y reconstruir el proyecto (men
Project...Build All). <<<En esta etapa del proceso ya se tiene el entorno listo para la
simulacin>>>

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 49 de 58

Vista del Entorno de Programacin MPLAB


Como en la mayora de las aplicaciones Windows la pantalla se divide en varias
secciones:
1. Barra de ttulo:
Se observa el nombre del proyecto
2. Barra de menus:
Acceso a las diferentes opciones del entorno
3. Barra de herramientas: Cada cono ejecuta las acciones correspondientes
4. Barra de estados:
Indica el estado del entorno y sus ventanas
Simulacin:
1. Resetear el procesador (men Debug...Run...Reset) con F6 con el cono
correspondiente en la barra de herramientas.
2. Crear una nueva ventana donde se incluyan las variables que queremos tener en
cuenta (Window...New Watch Window)
3. Empezar a correr paso a paso el programa haciendo el seguimiento detallado de todos
y cada uno de los pasos (men Debug...Run...Step) con la tecla F7 con el cono
correspondiente en la barra de herramientas.
El proceso de simulacin nos permite detectar y corregir problemas de lgica, problemas
de situaciones que no hayamos tenido en cuenta que son errores que no pueden ser
detectados en el momento del ensamble del programa.
Nota: El programa MPLAB puede obtenerse en forma gratuita de la direccin:
http://www.microchip.com/10/Tools/mTools/MPLAB/index.htm

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 50 de 58

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

R12
27K

R14
39K

R13
150K

POT2
1K

VCC

VCC

T1
BC557

C6

BOR3

B1

VCC

15pF

15pF
C10

sa
sb
sc
sd
se
sf
sg
sP

C15
100nF

1
2
3

C14
100nF

D2

D1

X2
4Mhz

13
14

33
34
35
36
37
38
39
40

2
3
4
5
6
7

1N4007

1N4007

PIC16C74A

OSC1/CLKIN
OSC2/CLKOUT

MCLR/VPP

RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

RA0/NA0
RA1/NA1
RA2/NA2
RA3/NA3
RA4/TOCKI
RA5/AN4/SS

U5

C11
1000uF

+12V

C12
100nF
1
Vin

U6
MC7805T

RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7

RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RSD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7

RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDI
RC5/SDO
RC6/TX/CK
RC7/RX/CT

RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2

GND
2

+5V

8
9
10

19
20
21
22
27
28
29
30

15
16
17
18
23
24
25
26

TXD
RXD

3
C13
100nF

VCC

sa
sb
sc
sd
se
sf
sg
sP

R15
R16
R17
R18
R19
R20
R21
R22

4K7

R25

4K7

R24

4K7

R23

470
470
470
470
470
470
470
470
a
b
c
d
e
f
g
8
P

C4

RXD

10uF

C2

10uF

BC557

Q4

22mHy

L2

Comn

TXD

VCC

DISPLAYK1
DISPLAY KC

12
9

11
10

R1OUT
R2OUT

C1-

C1+

T1IN
T2IN

V+

a
b
c
d
e
f
g
8
P
Comn

Date:
File:

A4

Size

Title

BC557

Q5

U4
MAX232EJE

DISPLAYK2
DISPLAY KC

V-

C2-

C2+

R1IN
R2IN

T1OUT
T2OUT

Number

13
8

14
7

Comn

10uF

C5

10uF

C3

BC557

Q6

12-Sep-2002
\\Oscar\c_oscar\ADVSCH\PROJECTS\CursoUC\Curso\Curso.DDB

a
b
c
d
e
f
g
8
P

DISPLAYK3
DISPLAY KC

VCC

1
6
2
7
3
8
4
9
5

Sheet of
Drawn By:

Macho PCB 90'

DB9

I2

Revision

APENDICE 1

Circuito Propuesto

Pgina 51 de 58

APENDICE 2 - PIC16F87X
12.1

Instruction Descriptions

ADDLW

Add Literal and W

ANDWF

AND W with f

Syntax:

[label] ADDLW

Syntax:

[label] ANDWF

Operands:

0 k 255

Operands:

0 f 127
d [0,1]
(W) .AND. (f) (destination)

f,d

Operation:

(W) + k (W)

Status Affected:

C, DC, Z

Operation:

Description:

The contents of the W register


are added to the eight bit literal k
and the result is placed in the W
register.

Status Affected:

Description:

AND the W register with register


'f'. If 'd' is 0, the result is stored in
the W register. If 'd' is 1, the result
is stored back in register 'f'.

BCF

Bit Clear f

Syntax:

[label] BCF

Operands:

0 f 127
0b7

Operation:

0 (f<b>)

Status Affected:

None

Description:

Bit 'b' in register 'f' is cleared.

ADDWF

Add W and f

Syntax:

[label] ADDWF

Operands:

0 f 127
d [0,1]

Operation:

(W) + (f) (destination)

Status Affected:

C, DC, Z

Description:

Add the contents of the W register


with register f. If d is 0, the result
is stored in the W register. If d is
1, the result is stored back in register f.

f,d

ANDLW

AND Literal with W

Syntax:

[label] ANDLW

BSF

Bit Set f

Syntax:

[label] BSF

Operands:

0 f 127
0b7

f,b

f,b

Operands:

0 k 255

Operation:

1 (f<b>)

Operation:

(W) .AND. (k) (W)

Status Affected:

None

Status Affected:

Description:

Bit 'b' in register 'f' is set.

Description:

The contents of W register are


ANDed with the eight bit literal
'k'. The result is placed in the W
register.

BTFSS

Bit Test f, Skip if Set

CLRF

Clear f

Syntax:

[label] BTFSS f,b

Syntax:

[label] CLRF

Operands:

0 f 127
0b<7

Operands:

0 f 127

Operation:

Operation:

skip if (f<b>) = 1

00h (f)
1Z

Status Affected:

None

Status Affected:

Description:

If bit b in register f is 0, the next


instruction is executed.
If bit b is 1, then the next instruction is discarded and a NOP is executed instead making this a 2TCY
instruction.

Description:

The contents of register f are


cleared and the Z bit is set.

BTFSC

Bit Test, Skip if Clear

Syntax:

[label] BTFSC f,b

Operands:

0 f 127
0b7

Operation:

skip if (f<b>) = 0

Status Affected:

None

Description:

If bit b in register f is 1, the next


instruction is executed.
If bit b, in register f, is 0, the
next instruction is discarded, and
a NOP is executed instead, making
this a 2TCY instruction.

CLRW

Clear W

Syntax:

[ label ] CLRW

Operands:

None

Operation:

00h (W)
1Z

Status Affected:

Description:

W register is cleared. Zero bit (Z)


is set.

CLRWDT

Clear Watchdog Timer

Syntax:

[ label ] CLRWDT

Operands:

None

Operation:

00h WDT
0 WDT prescaler,
1 TO
1 PD

CALL

Call Subroutine

Syntax:

[ label ] CALL k

Operands:

0 k 2047

Operation:

(PC)+ 1 TOS,
k PC<10:0>,
(PCLATH<4:3>) PC<12:11>

Status Affected:

TO, PD

Status Affected:

None

Description:

Description:

Call Subroutine. First, return


address (PC+1) is pushed onto
the stack. The eleven bit immediate address is loaded into PC bits
<10:0>. The upper bits of the PC
are loaded from PCLATH. CALL is
a two cycle instruction.

CLRWDT instruction resets the


Watchdog Timer. It also resets
the prescaler of the WDT. Status
bits TO and PD are set.

COMF

Complement f

Syntax:

[ label ] COMF

GOTO

Unconditional Branch

Syntax:

[ label ]

Operands:

0 f 127
d [0,1]

Operands:

0 k 2047

Operation:

(f) (destination)

Operation:

k PC<10:0>
PCLATH<4:3> PC<12:11>

Status Affected:

Status Affected:

None

Description:

The contents of register f are


complemented. If d is 0, the
result is stored in W. If d is 1, the
result is stored back in register f.

Description:

GOTO is an unconditional branch.


The eleven bit immediate value is
loaded into PC bits <10:0>. The
upper bits of PC are loaded from
PCLATH<4:3>. GOTO is a two
cycle instruction.

DECF

Decrement f

Syntax:

[label] DECF f,d

INCF

Increment f

Operands:

0 f 127
d [0,1]

Syntax:

[ label ]

Operands:

Operation:

(f) - 1 (destination)

0 f 127
d [0,1]

Status Affected:

Operation:

(f) + 1 (destination)

Description:

Decrement register f. If d is 0,
the result is stored in the W register. If d is 1, the result is stored
back in register f.

Status Affected:

Description:

The contents of register f are


incremented. If d is 0, the result
is placed in the W register. If d is
1, the result is placed back in register f.

f,d

GOTO k

INCF f,d

DECFSZ

Decrement f, Skip if 0

Syntax:

[ label ] DECFSZ f,d

INCFSZ

Increment f, Skip if 0

Operands:

0 f 127
d [0,1]

Syntax:

[ label ]

(f) - 1 (destination);
skip if result = 0

Operands:

Operation:

0 f 127
d [0,1]

Operation:

Status Affected:

None

(f) + 1 (destination),
skip if result = 0

Description:

The contents of register f are


decremented. If d is 0, the result
is placed in the W register. If d is
1, the result is placed back in register f.
If the result is 1, the next instruction is executed. If the result is 0,
then a NOP is executed instead
making it a 2TCY instruction.

Status Affected:

None

Description:

The contents of register f are


incremented. If d is 0, the result is
placed in the W register. If d is 1,
the result is placed back in register f.
If the result is 1, the next instruction is executed. If the result is 0, a
NOP is executed instead making it
a 2TCY instruction.

INCFSZ f,d

IORLW

Inclusive OR Literal with W

MOVLW

Move Literal to W

Syntax:

[ label ]

Syntax:

[ label ]

Operands:

0 k 255

Operands:

0 k 255

Operation:

(W) .OR. k (W)

Operation:

k (W)

Status Affected:

Status Affected:

None

Description:

The contents of the W register are


ORed with the eight bit literal 'k'.
The result is placed in the W register.

Description:

The eight bit literal 'k' is loaded


into W register. The dont cares
will assemble as 0s.

MOVWF

Move W to f

IORWF

Inclusive OR W with f

Syntax:

[ label ]

Syntax:

[ label ]

Operands:

Operands:

0 f 127
d [0,1]

0 f 127

Operation:

(W) (f)

Operation:

(W) .OR. (f) (destination)

Status Affected:

None

Status Affected:

Description:

Move data from W register to register 'f'.

Description:

Inclusive OR the W register with


register 'f'. If 'd' is 0 the result is
placed in the W register. If 'd' is 1
the result is placed back in register 'f'.

NOP

No Operation

Syntax:

[ label ]

IORLW k

IORWF

MOVF

Move f

Syntax:

[ label ]

Operands:

0 f 127
d [0,1]

Operation:

f,d

MOVF f,d

(f) (destination)

Status Affected:

Description:

The contents of register f are


moved to a destination dependant
upon the status of d. If d = 0, destination is W register. If d = 1, the
destination is file register f itself. d
= 1 is useful to test a file register
since status flag Z is affected.

MOVLW k

MOVWF

NOP

Operands:

None

Operation:

No operation

Status Affected:

None

Description:

No operation.

RETFIE

Return from Interrupt

RLF

Rotate Left f through Carry

Syntax:

[ label ]

Syntax:

[ label ]

Operands:

None

Operands:

Operation:

TOS PC,
1 GIE

0 f 127
d [0,1]

Operation:

See description below

None

Status Affected:

Description:

The contents of register f are


rotated one bit to the left through
the Carry Flag. If d is 0, the
result is placed in the W register.
If d is 1, the result is stored back
in register f.

Status Affected:

RETFIE

RLF

RETLW

f,d

Register f

Return with Literal in W

Syntax:

[ label ]

RRF

Rotate Right f through Carry

Operands:

0 k 255

Syntax:

[ label ]

Operation:

k (W);
TOS PC

Operands:

0 f 127
d [0,1]

Status Affected:

None

Operation:

See description below

Description:

The W register is loaded with the


eight bit literal k. The program
counter is loaded from the top of
the stack (the return address).
This is a two cycle instruction.

Status Affected:

Description:

The contents of register f are


rotated one bit to the right through
the Carry Flag. If d is 0, the result
is placed in the W register. If d is
1, the result is placed back in register f.

RETLW k

RRF f,d

Register f

RETURN

Return from Subroutine

Syntax:

[ label ]

Operands:

None

SLEEP

Operation:

TOS PC

Syntax:

Status Affected:

None

[ label
]

Description:

Return from subroutine. The stack


is POPed and the top of the stack
(TOS) is loaded into the program
counter. This is a two cycle
instruction.

Operands:

None

Operation:

00h WDT,
0 WDT prescaler,
1 TO,
0 PD

Status Affected:

TO, PD

Description:

The power-down status bit, PD is


cleared. Time-out status bit, TO
is set. Watchdog Timer and its
prescaler are cleared.
The processor is put into SLEEP
mode with the oscillator stopped.

RETURN
SLEEP

SUBLW
Syntax:

Subtract W from Literal


[ label ]
SUBLW k

XORLW

Exclusive OR Literal with W

Syntax:

[label]

Operands:

0 k 255

Operands:

0 k 255

Operation:

k - (W) (W)

Operation:

(W) .XOR. k (W)

Status Affected: C, DC, Z

Status Affected:

Description:

The W register is subtracted (2s


complement method) from the
eight bit literal 'k'. The result is
placed in the W register.

Description:

The contents of the W register


are XORed with the eight bit literal 'k'. The result is placed in
the W register.

SUBWF
Syntax:

Subtract W from f
[ label ]
SUBWF f,d

XORWF

Exclusive OR W with f

Syntax:

[label]

Operands:

0 f 127
d [0,1]

Operands:

0 f 127
d [0,1]

Operation:

(f) - (W) (destination)

Operation:

(W) .XOR. (f) (destination)

XORLW k

XORWF

f,d

Status Affected: C, DC, Z

Status Affected:

Description:

Description:

Exclusive OR the contents of the


W register with register 'f'. If 'd' is
0, the result is stored in the W
register. If 'd' is 1, the result is
stored back in register 'f'.

Subtract (2s complement method)


W register from register 'f'. If 'd' is 0,
the result is stored in the W register. If 'd' is 1, the result is stored
back in register 'f'.

SWAPF

Swap Nibbles in f

Syntax:

[ label ] SWAPF f,d

Operands:

0 f 127
d [0,1]

Operation:

(f<3:0>) (destination<7:4>),
(f<7:4>) (destination<3:0>)

Status Affected:

None

Description:

The upper and lower nibbles of


register 'f' are exchanged. If 'd' is
0, the result is placed in W register. If 'd' is 1, the result is placed in
register 'f'.

Notas y Referencias
El Presente apunte ha sido concebido para uso de los alumnos durante el curso Nivel I de
microcontroladores de la familia flash PIC16F87X dictado por el docente OSCAR CELIS.
Bibliografia
PIC 16/17 microcontroller data Book, Microchip
MPASM assembler. User's Guide, Microchip
MPLAB IDE User's Guide, Microchip.
www.microchip.com

La impresin est solo permitida para la CEE - UTN Facultad Regional Crdoba

Pgina 58 de 58

Você também pode gostar