Está en la página 1de 58

UTILIZACIÓN DE LOS MICROCONTROLADORES PIC serie 16F87X

MICROCHIP TECHNOLOGY

Docente: Oscar Celis

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


UTN - Facultad Regional Córdoba
ÍNDICE

Arquitectura Harvard vs. Arquitectura Von Neuman 3


Diagrama de Bloques, del Microcontrolador 4
Mapa de Memoria Interna (RAM) 5
Memoria de Programa 6
Camino de los datos y Registro W 6
Contador de Programa 8
Stack (Pila) 8
Registro STATUS 9
Registros Especiales 10
Puertos de Entrada / Salida 10
Diagrama Lógico (PIN-OUT) 11
Temporizador 0 12
Interrupciones 13
Los Puertos Paralelos 19
Los Temporizadores 24
Los Modulos de Captura, Comparación y PWM 27
Interfaz Serie - USART 31
El Convertidor Analógico / Digital 38
El Temporizador WDT 42
Escritura de un programa fuente 43
Conjunto de Instrucciones 43
Modos de Direccionamiento 46
Herramientas de desarrollo 47
Simulación 50
Apéndice 1 51
Apéndice 2 52

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 tamaño 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
además un bus de 8 bits que lo conecta con la memoria, deberá manejar datos e
instrucciones de una o más unidades de 8 bits (bytes) de longitud. Cuando deba acceder
a una instrucción o dato de más de un byte de longitud, deberá realizar más de un acceso
a la memoria. Por otro lado este bus único limita la velocidad de operación del
microprocesador, ya que no se puede buscar de memoria una nueva instrucción, antes de
que finalicen las transferencias de datos que pudieran resultar de la instrucción 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 operación (o ancho de banda de operación) 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
Instrucción Set Computer), el set de instrucciones y el bus de la memoria de programa
pueden diseñarse de manera tal que todas las instrucciones tengan una sola posición de
memoria de programa de longitud. Además, como los buses son independientes, el CPU
puede estar accediendo a los datos para completar la ejecución de una instrucción, y al
mismo tiempo estar leyendo la próxima instrucción a ejecutar. Se puede observar
claramente que las principales ventajas de esta arquitectura son:
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 03 de 58
a) que el tamaño de las instrucciones no esta relacionado con el de los datos, y por lo
tanto puede ser optimizado para que cualquier instrucción ocupe una sola posición 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 operación.

Una pequeña 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 físicamente 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, según 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 D a ta B u s 8 P O R TA
FLA S H P ro g ra m C o u n te r
R A 0 /A N 0
P ro g ra m R A 1 /A N 1
M e m o ry RAM R A 2 /A N 2
8 L e v e l S ta c k R A 3 /A N 3 /V R E F
F ile
(1 3 -b it) R e g is te rs R A 4 /T 0 C K I
R A 5 /A N 4 /S S
P ro g ra m 14
Bus R A M A d d r (1 ) 9 PO RTB
R B 0 /IN T
A ddr M U X R B1
In s tru c tio n re g
R B2
D ire c t A d d r 7 In d ire c t R B 3 /P G M
8 A ddr
R B4
F S R re g R B5
R B 6 /P G C
S TA T U S re g R B 7 /P G D
8 PO RTC
R C 0 /T 1 O S O /T 1 C K I
R C 1 /T 1 O S I/C C P 2
3 R C 2 /C C P 1
P o w e r-u p MUX
R C 3 /S C K /S C L
T im e r
R C 4 /S D I/S D A
In s tru c tio n O s c illa to r R C 5 /S D O
D ecode & S ta r t-u p T im e r R C 6 /T X /C K
A LU
C o n tro l R C 7 /R X /D T
P o w e r-o n
R eset 8 PO RTD
T im in g W a tc h d o g
G e n e ra tio n T im e r W re g
O S C 1 /C L K IN B ro w n -o u t
O S C 2 /C L K O U T R eset 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 VDD, VSS
R E 2 /A N 7 /C S

T im e r0 T im e r1 T im e r2 1 0 -b it A /D

D ev ic e P ro g ra m D a ta M e m o ry D a t a E E P RO M
FLA SH
P IC 1 6 F 8 7 4 4K 1 9 2 B y te s 1 2 8 B y te s
D a ta E E P R O M S y n c h ro n o u s
C C P 1 ,2 USART P IC 1 6 F 8 7 7 8K 3 6 8 B y te s 2 5 6 B y te s
S e ria l P o r t

N o te 1 : 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 04 de 58
1.3 Mapas de memoria Memoria Interna (RAM)

Organización

La memoria interna de datos, también llamada archivo de registros (register file), esta
dividida en dos grupos: los registros especiales, y los registros de propósito 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 posición 00 no contiene ningún 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. (*) 00h In d ire c t a d d r. (*) 80h In d ire c t a d d r. (*) 100h In d ire c t a d d r. (*) 180h
TMR0 01h O P T IO N _R E G 81h TMR0 101h O P T IO N _R E G 181h
PC L 02h PC L 82h PC L 102h PC L 182h
S TA T U S 03h S TA T U S 83h S TA T U S 103h S TA T U S 183h
FSR 04h FSR 84h FSR 104h FSR 184h
P O R TA 05h T R IS A 85h 105h 185h
PO RTB 06h T R IS B 86h PO RTB 106h T R IS B 186h
PO RTC 07h T R IS C 87h 107h 187h
P O R T D (1 ) 08h T R IS D (1 ) 88h 108h 188h
P O R T E (1 ) 09h T R IS E (1 ) 89h 109h 189h
P C L AT H 0A h P C L AT H 8A h P C L AT H 10A h P C L AT H 18A h
IN T C O N 0B h IN T C O N 8B h IN T C O N 10B h IN T C O N 18B h
P IR 1 0C h P IE 1 8C h E E D A TA 10C h EEC ON1 18C h
P IR 2 0D h P IE 2 8D h EEADR 10D h EEC ON2 18D h
T M R 1L 0E h PC O N 8E h E E D AT H 10E h R e s e rv e d (2 ) 18E h
T M R 1H 0F h 8F h EEADRH 10F h R e s e rv e d (2 ) 18F h
T 1C O N 10h 90h 110h 190h
TMR2 11h SSPC O N2 91h 111h 191h
T 2C O N 12h PR 2 92h 112h 192h
S S PBU F 13h S S PA D D 93h 113h 193h
SSPC O N 14h S S P S TA T 94h 114h 194h
C C P R 1L 15h 95h 115h 195h
C C P R 1H 16h 96h 116h 196h
C C P 1C O N 17h 97h G e n e ra l 117h G e n e ra l 197h
P u rp o s e P u rp o s e
R C S TA 18h T X S TA 98h R e g is te r 118h R e g is te r 198h
TXREG 19h S PBR G 99h 1 6 B y te s 119h 1 6 B y te s 199h
RC REG 1A h 9A h 11A h 19A h
C C P R 2L 1B h 9B h 11B h 19B h
C C P R 2H 1C h 9C h 11C h 19C h
C C P 2C O N 1D h 9D h 11D h 19D h
ADRESH 1E h ADRESL 9E h 11E h 19E h
ADC ON0 1F h ADC ON1 9F h 11F h 19F h
20h A 0h 120h 1A 0h

G e n e ra l G e n e ra l G e n e ra l G e n e ra l
P u rp o s e P u rp o s e P u rp o s e P u rp o s e
R e g is te r R e g is te r R e g is te r R e g is te r
8 0 B y te s 8 0 B y te s 8 0 B y te s
9 6 B y te s EFh 16F h 1E F h
F 0h 170h accesses 1F 0h
accesses accesses
7 0 h -7 F h 7 0 h -7 F h 70h - 7F h
7F h FFh 17F h 1F F h
Bank 0 Bank 1 Bank 2 Bank 3

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 Organización de la memoria Interna (RAM) en la familia PIC16F87X


La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 05 de 58
Memoria de Programa

Organización

La memoria de programa, que en los PIC16F87X puede ser de 2K, 4K u 8K instrucciones,


debe ser considerada a los efectos de la programación, como compuesta por secciones o
páginas de 2K posiciones. Esto se debe, como se verá, a las limitaciones de
direccionamiento de las instrucciones de salto

FIG. 1.3.2 Organización 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 ubicación del registro de trabajo, que para los PIC's
se denomina W (Working Register), y para los tradicionales es el Acumulador (A).

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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
Aritmética y Lógica (ALU), y por lo tanto éste es siempre uno de los dos operandos de
cualquier instrucción. Por convención, las instrucciones de simple operando (borrar,
incrementar, decrementar, complementar), actúan sobre el acumulador. La salida de la
ALU va solamente a la entrada del acumulador, por lo tanto el resultado de cualquier
operación siempre quedara en este registro. Para operar sobre un dato de memoria, luego
realizar la operación siempre hay que mover el acumulador a la memoria con una
instrucción adicional.
En los microcontroladores PIC, la salida de la ALU va al registro W y también 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 ocurría en el modelo tradicional con el acumulador. En las
instrucciones de simple operando el dato en este caso se toma de la memoria (también
por convención). La gran ventaja de esta arquitectura es que permite un gran ahorro de
instrucciones ya que el resultado de cualquier instrucción que opere con la memoria, ya
sea de simple o doble operando, puede dejarse en la misma posición de memoria o en el
registro W, según se seleccione con un bit de la misma instrucción. Las operaciones con
constantes provenientes de la memoria de programa (literales) se realizan solo sobre el
registro W.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 periféricos autocontenidos, y también 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 dirección de la próxima instrucción a ejecutar. Se
incrementa automáticamente al ejecutar cada instrucción, de manera que la secuencia
natural de ejecución del programa es lineal, una instrucción después de la otra. Algunas
instrucciones que llamaremos de control, cambian el contenido del PC alterando la
secuencia lineal de ejecución. 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 posición de la memoria. Otras instrucciones de control son los
SKIP o "salteos" condicionales, que producen un incremento adicional del PC si se
cumple una condición especifica, haciendo que el programa saltee, sin ejecutar, la
instrucción 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
dirección de arranque del programa es siempre la primera posición de memoria de
programa. En esta posición se deberá poner la primera instrucción del programa.
A diferencia de la mayoría de los microprocesadores convencionales, el PC es también
accesible al programador como registro de memoria interna de datos, en la posición de
02. Es decir que cualquier instrucción común que opere sobre registros puede ser
utilizada para alterar el PC y desviar la ejecución del programa. El uso indiscriminado de
este tipo de instrucciones complica el programa y puede ser muy peligroso, ya que puede
producir comportamientos difíciles de predecir. Sin embargo, algunas de esta
instrucciones utilizadas con cierto método, 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 también 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 tamaño


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 automática, para
guardar las direcciones de retorno de subrrutinas e interrupciones. Cada posición 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 limitación 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 máximo de
8, siempre que no existan interrupciones habilitadas, en tal caso deberán disminuir la
cantidades de rutinas anidadas en el main, porque de lo contrario se desbordará el Stack.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 08 de 58
Esto de hecho representa una traba para el programador y además parece impedir o
dificultar la programación estructurada, sin embargo es una buena solución de
compromiso ya que estos microcontroladores están diseñados 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 técnicas de
organización del programa que permiten mantener la claridad de la programación
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 automáticamente para guardar o
rescatar las direcciones de programa cuando se ejecutan las instrucciones de llamada o
retorno de subrutinas, o cuando se produce una interrupción o se ejecuta una instrucción
de retorno de ella.

Registro de Estado del Procesador (STATUS - Dirección 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 R /W -0 R /W -0 R -1 R -1 R /W -x R /W -x R /W -x
IR P R P1 R P0 TO PD Z DC C R = R e a d a b le b it
b it7 b it0 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: 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 09 de 58
REGISTROS ESPECIALES IMPORTANTES

Las primeras posiciones del área de datos están reservadas para alojar registros de
propósito especial, quedando las restantes libres para contener los datos u operandos
que se desee (registros de propósito general).
El registro INDF que ocupa la posición 0 no está implementando físicamente y, como se
ha explicado, se le referencia en el direccionamiento indirecto de datos aunque se utiliza
el contenido de FSR.
En la dirección 0x01 esta el registro TMR0 (Temporizador) que puede ser leído y escrito
como cualquier otro registro. Puede incrementar su valor con una señal externa aplicada
al pin T0CKI o mediante el oscilador interno.
El PC ocupa la posición 2 del área de datos en donde se halla el registro PCL al que se
añaden 5 bits del registro PCLATH que se encuentra en pla posición 0x0A.
El registro de Estado ocupa la posición 3 y entre sus bits se encuentran los
señalizadores C, DC y Z y el resto de los bits vistos anteriormente.
FSR se ubica en la dirección 4 y puede usarse para contener las dirección del dato en las
instrucciones con direccionamiento indirecto y también 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 leídos 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 demás 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 diseño de su celda de entrada / salida, según los
periféricos asociados, etc. En la siguiente figura podemos ver en forma reducida un
gráfico típico, con los elementos comunes para todos los puertos.

Circuito equivalente de puerto I/O

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 leído es
directamente el estado del pin de entrada

1.6 Diagrama lógico

Diagrama lógico para los microcontroladores PIC16F87X (Pin-Out)

P D IP
M C L R /V P P /T H V 1 40 R B 7/P G D D IP , S O IC
R A 0/A N 0 2 39 R B 6/P G C
R A 1/A N 1 3 38 R B5 28
M C L R /V P P /T H V 1 R B 7/P G D
R A 2/A N 2/V R E F - 4 37 R B4
R A 0/A N 0 2 27 R B 6/P G C
R A 3/A N 3/V R E F + 5 36 R B 3/P G M
R A 1/A N 1 3 26 R B5
R A 4/T 0C K I 6 35 R B2
R A 2/A N 2/V R E F - 4 25 R B4
R A 5/A N 4/S S 7 34 R B1
R A 3/A N 3/V R E F + 5 24 R B 3/P G M
P IC 16F 877/874

PIC16F876/873
R E 0/R D /A N 5 8 33 R B 0/IN T
R A 4/T 0C K I 6 23 R B2
R E 1/W R /A N 6 9 32 VDD
R A 5/A N 4/S S 7 22 R B1
R E 2/C S /A N 7 10 31 VSS
VSS 8 21 R B 0/IN T
VDD 11 30 R D 7/P S P 7
VSS O S C 1/C L K IN 9 20 VDD
12 29 R D 6/P S P 6
O S C 1/C L K IN 28 R D 5/P S P 5 O S C 2/C L K O U T 10 19 VSS
13
O S C 2/C L K O U T R D 4/P S P 4 R C 0/T 1O S O /T 1C K I 11 18 R C 7/R X /D T
14 27
R C 0/T 1O S O /T 1C K I R C 7/R X /D T R C 1/T 1O S I/C C P 2 12 17 R C 6/T X /C K
15 26
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 13 16 R C 5/S D O
R C 2/C C P 1 17 24 R C 5/S D O R C 3/S C K /S C L 14 15 R C 4/S D I/S D A
R C 3/S C K /S C L 18 23 R C 4/S D I/S D A
R D 0/P S P 0 19 22 R D 3/P S P 3
R D 1/P S P 1 20 21 R D 2/P S P 2
R C 1 /T 1 O S I/C C P 2
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R A 3/A N 3/V R E F +
R A 2/A N 2/V R E F -

R C 6 /T X /C K
M C L R /V P P /T H V

R C 2 /C C P 1
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 5 /S D O
R B 7/P G D
R B 6/P G C
R A 1/A N 1
R A 0/A N 0

Q FP
NC

PLC C
R B5
R B4
NC

NC

44
43
42
41
40
39

37
36
35
34
38
6
5
4
3
2
1

43
42
41
40
44

R A 4/T 0C K I 39 R B 3/P G M R C 7/R X /D T 1 33 NC


7
R A 5/A N 4/S S 38 R B2 R D 4/P S P 4 2 32 R C 0/T 1O S O /T 1C K I
8
R E 0/R D /A N 5 9 37 R B1 R D 5/P S P 5 3 31 O S C 2/C L K O U T
R E 1/W R /A N 6 10 36 R B 0/IN T R D 6/P S P 6 4 30 O S C 1/C L K IN
R E 2/C S /A N 7 P IC 16F 877 35 VDD VSS
VDD
11
34 VSS
R D 7/P S P 7 5 P IC 16F 877 29
28 VDD
12 P IC 16F 874 VSS 6 P IC 16F 874
VSS 13 33 R D 7/P S P 7 VDD 7 27 R E 2/A N 7/C S
O S C 1/C L K IN 14 32 R D 6/P S P 6 26 R E 1/A N 6/W R
R B 0/IN T 8
O S C 2/C L K O U T 15 31 R D 5/P S P 5 R E 0/A N 5/R D
R B1 9 25
R C 0/T 1O S O /T 1C K 1 16 30 R D 4/P S P 4 R A 5/A N 4
NC R B2 10 24
17 9 R C 7/R X /D T 23 R A 4/T 0C K I
R B 3/P G M 11
282
18
19
20
21
22
23
24
25
26
27

12
13
14
15
16
17
18
19
20
21
22
R C 1/T 1O S I/C C P 2

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 2/C C P 1
R C 3/S C K /S C L

R C 6/T X /C K
R C 4/S D I/S D A
R C 5/S D O

NC

R A 3 /A N 3 /V R E F +
M C L R /V P P /T H V
R A 0 /A N 0
R A 1 /A N 1
R B4
R B5

R B 7 /P G D

R A 2 /A N 2 /V R E F -
R B 6 /P G C
NC
NC

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 básicamente un contador de 8 bits, constituido por el
registro operacional TMR0 que se encuentra en la posición 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). Además, 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, según se lo programe.
Para su programación 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 división del prescaler, según el siguiente esquema:

R /W -1 R /W -1 R /W -1 R /W -1 R /W -1 R /W -1 R /W -1 R /W -1
R BPU IN T E D G T 0C S T 0S E PSA PS2 PS1 PS0 R = R e a d a b le b it
b it7 b it0 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: 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
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 T M R 0 R a te W D T R a te

000 1 : 2 1 : 1
001 1 : 4 1 : 2
010 1 : 8 1 : 4
011 1 : 16 1 : 8
100 1 : 32 1 : 16
101 1 : 64 1 : 32
110 1 : 128 1 : 64
111 1 : 256 1 : 128

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 12 de 58
Circuito equivalente del TMR0 y el prescaler.

D a ta b u s
F o s c /4 0
P S out 8
1
S y n c w ith
1 In te rn a l TMR0
c lo c k s
R A 4/T 0C K I P ro g ra m m a ble 0 P S out
p in P re s c a le r
T 0S E (2 c y c le d e la y )
3
S e t in te rru p t
P S 2, P S 1, P S 0 PSA a g b it T 0IF
T 0C S o n o v e ro w

N o te 1: 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 configuración


T0SE, T0CS y PSA, en cualquiera de sus combinaciones. Se observa además que en la
entrada del contador TMR0 hay un circuito de sincronización que introduce una demora de
dos ciclos del clock de instrucciones (Fosc. / 4). Al escribir sobre el TMR0
automáticamente se resetea este circuito, por lo tanto solo se incrementara dos ciclos
después.
El prescaler es un contador asincrónico de 8 bits más 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 automáticamente 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, asincrónico respecto
del programa, puede interrumpir la ejecución de éste produciendo automáticamente un
salto a una subrutina de atención, de manera que pueda atender inmediatamente el
evento, y retomar luego la ejecución 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 periódicamente (refresh de display, antirebote de
teclado, etc.), detección de pulsos externos, recepción de datos, etc. Existen catorce
fuentes de interrupción 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 interrupción se
produce el mismo efecto que ocurriría si el programa tuviese un CALL 0004h en el punto
en que se produjo la interrupción. En uno de los registros de control del sistema de
interrupciones existe un bit de habilitación general de interrupciones GIE, que debe ser
programado en 1 para que las interrupciones puedan actuar. Al producirse una
interrupción, este bit se borra automáticamente para evitar nuevas interrupciones. La
instrucción RETFIE que se utiliza al final de la rutina de interrupción, es idéntica a un
retorno de subrutina, salvo que además coloca en uno automáticamente el bit GIE,
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 13 de 58
volviendo a habilitar las interrupciones. Dentro de la rutina de interrupción, el programa
deberá probar el estado de los flags de interrupción de cada una de las fuentes
habilitadas, para detectar cual fue la que causo la interrupción y así decidir que acción
tomar.

E E IF
E E IE

P S P IF
P S P IE
A D IF W a k e -u p (If in S L E E P m o d e )
T 0 IF
A D IE T 0 IE
R C IF IN T F
R C IE IN T E
In te rru p t to C P U
T X IF R B IF
T X IE R B IE
S S P IF
S S P 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 C C P 2 IF
P IC 1 6 F 8 7 6 /8 7 3 Yes Yes Yes - Yes Yes Yes Yes Yes Yes Yes Yes Yes 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

Lógica de interrupciones para los µcontroladores PIC16F8X

Fuentes

La señal que produce la interrupción es en realidad una sola, que resulta de la


combinación de todas las fuentes posibles y de los bits de habilitación. Existen dos
grupos de fuentes, unas que se habilitan con solo colocar en uno el bit GIE, y otras que
además necesitan que este puesto a uno el bit PEIE. Además, cada fuente de
interrupciones tiene su respectivo bit de habilitación 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 través 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 14 de 58
Registro INTCON - Dirección 0x0B, 0x8B, 0x10B, 0x18B

R /W -0 R /W -0 R /W -0 R /W -0 R /W -0 R /W -0 R /W -0 R /W -x
G IE P E IE T 0IE IN T E R B IE T 0IF IN T F R B IF R = R e a d a b le b it
b it7 b it0 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 gestión de los bits de este registro.

En primer lugar, cada indicador de interrupción individual (RBIF, INTF, etc.) se debe poner
a 0 mediante software en el programa de tratamiento de la interrupción correspondiente.
Como hemos visto en la figura 1.3.2, en el PIC16F87X sólo hay disponible un vector de
interrupción situado en la dirección 0004. A dicho programa de interrupción le corresponde
comprobar estos bits para saber cuál es el origen de la interrupción.
Cuando llega una interrupción, el PIC pone automáticamente a 0 el bit GIE, de forma que
no se perturbe el tratamiento de la interrupción en curso por otras interrupciones
eventuales. Este bits se pone automáticamente a 1 al finalizar el programa de interrupción
cuando se ejecuta la instrucción RETFIE.
Por último, los bits de indicación de interrupción permanecen funcionales incluso cuando
las interrupciones correspondientes no se autorizan.
Debido a la incorporación de una cantidad importante de periféricos 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 15 de 58
Registro PIE1 - Dirección 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) 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 R = R e a d a ble b it
W = W rita ble b it
b it7 b it0
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: 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

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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 16 de 58
Registro PIR1 - Dirección 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 R = R e a d a ble b it
W = W rita b le b it
b it7 b it0
- 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 17 de 58
Registro PIE2 - Dirección 0x8D

U -0 R /W -0 U -0 R /W -0 R /W -0 U -0 U -0 R /W -0
— (1) — E E IE B C L IE — — C C P 2IE R = R e a d a b le b it
b it7 b it0 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 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

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 - Dirección 0x0D

U -0 R /W -0 U -0 R /W -0 R /W -0 U -0 U -0 R /W -0
— (1) — E E IF B C L IF — — C C P 2IF R = R e a d a b le b it
b it7 b it0 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 18 de 58
LOS PUERTOS PARALELOS

Los PIC16F874/7 disponen de cinco puertos paralelo, denominados puerto A hasta puerto
E. Las líneas 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
mayoría de las líneas de estos puertos se comparten con las líneas de entrada/salida de
otros recursos, punto del que ya se mensionó anteriormente. Vamos a ver que al
compartir líneas a veces influye en la estructura de los correspondientes puertos, y puede
imponer algunas restricciones de utilización.

EL PUERTO A

El puerto "A" dispone de seis bits. Las líneas representan el esquema interno de la
siguiente figura. Todas ellas están 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
D Q
VDD
WR D a ta
P o rt bus
CK Q D Q
P
WR
D a ta L a tc h PO RT
CK Q
I/O p in (1)
N I/O p in (1) N
D Q
D a ta L a tc h

WR D Q V ss
T R IS VSS WR
CK Q
A n a lo g T R IS CK Q S c h m itt
in p u t Trig g e r
T R IS L a tc h m ode in p u t
T R IS L a tc h
b u ffe r

R D T R IS TTL R D T R IS
in p u t
b u ffe r
Q D Q D

ENE N
EN R D PO RT

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: 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.

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
VSS.
RA4

RA0, RA1, RA2, RA3 y RA5


En el PIC16F87X, lasinco líneas del primer gráfico pueden ser usadas como entradas del
conversor analógico/digital integrado. Cuando este conversor se activa, estas líneas
pasan a ser entradas analógicas. Si las intenta leer como líneas del puerto A, las verá
como si estuvieran todas ellas a 0. Como se ve en la figura de la derecha la línea RA4
tiene una estructura algo diferente. En efecto, en este caso, la salida es de tipo drenador
abierto (el equivalente en MOS al clásico colector abierto), y la entrada está provista de un
trigger Schmitt. Es común con la entrada externa del temporizador 0.
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 19 de 58
EL PUERTO B

El puerto B es un puerto bidireccional de 8 bits completo, en le que sólo una línea se


comparte con otro recurso interno. Las líneas RB0-RB3 adoptan la estructura interna que
puede ver en la figura de la izquierda, mientras que las líneas RB4-RB7 tienen la
estructura de la figura derecha. El motivo de esto se encuentra en el hecho de que es
posible programar una interrupción durante un cambio de estado de una cualquiera de las
líneas RB0-RB3. Si se utiliza esta posibilidad, el simple hecho de que cualquiera de las
líneas cambie de estado genera una interrupción (ver la descripción anterior del registro
INTCON). Tenga presente que sólo las líneas 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 L a tc h
w eak D a ta b u s
P p u ll-u p D Q
D a ta L a tc h I/O
D a ta b u s W R P o rt
D Q CK p in (1)

W R P o rt I/O T R IS L a tc h
CK p in (1) D Q
T R IS L a tc h W R T R IS TTL
D Q CK In p u t
TTL B u ffe r ST
W R T R IS In p u t B u ffe r
CK B u ffe r

R D T R IS L a tc h
Q D
R D T R IS
Q D R D P o rt EN Q1
S e t R B IF
R D P o rt EN

F ro m o th e r Q D
R B 7:R B 4 p in s R D P o rt
R B 0/IN T
EN
S c h m itt Trig g e r Q3
R D P o rt
B u ffe r 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 ) 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 .
a n d c le a r th e R B P U b it (O P T IO N _R E G <7>). 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 líneas del puerto B dispone
de una resistencia de pull-up de alto valor conectada a la alimentación. Esta resistencia
de pull-up puede activarse o no gracias al bit RBPU del registro OPTION (ver la
descripción anterior de este registro al hablar del temporizador 0, al que afecta,
principalmente). La activación o no de esta resistencia de pull-up es común a todas las
líneas del puerto B. Además, ésta se desactiva automáticamente durante un reset, así
como las líneas que estén configuradas como salida.
El sentido de trabajo de todas las líneas de este puerto se controla mediante el registro
TRISB, en el que un bit a 0 activa a la línea correspondiente como salida, y un bit a 1 la
activa como entrada. Evidentemente, después de un reset, todos los bits del registro
TRISB se ponen a 1.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 20 de 58
EL PUERTO C

El puerto C es un puerto bidireccional de 8 bits completo, en el que todas las líneas se


comparten con los demás recursos internos, según la repartición vista en la descripción de
las señales disponibles en el circuito. A pesar de esto, cada una de las líneas de este
puerto adoptan la misma estructura, la cual se puede ver en la siguiente figura. se dispone
de un buffer CMOS clásico 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 VDD
P e rip h e ra l D a ta O u t 0
0 VDD D a ta b u s
D a ta b u s D Q P
D Q WR 1
WR P
1 PO RT CK Q
PO RT CK Q
D a ta L a tc h
D a ta L a tc h
D Q I/O
D Q I/O WR p in (1)
WR p in (1) T R IS
T R IS CK Q N
CK Q N
T R IS L a tc h
T R IS L a tc h VSS
VSS
S c h m itt
S c h m itt R D T R IS Trig g e r
R D T R IS Trig g e r P e rip h e ra l
P e rip h e ra l
O E (3) Q D S c h m itt
O E (3) Q D
Trig g e r
EN w ith
EN RD S M Bus
RD PO RT 0 le v e ls
PO RT S S P l in p u t
P e rip h e ra l in p u t
1
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 .
C KE
2: 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. S S P S TA T <6>
3: 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
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 .
p e rip h e ra l s e le c t is a c tiv e .
2: 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.
3: 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
RC0-RC2 / RC5-RC7 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 líneas de este puerto es controlado por el registro
TRISC, en el que un bit a 0, activa a la línea correspondiente como salida, y un bit a 1 la
activa como entrada. Evidentemente, después de un reset, todos los bits del registro
TRISC se ponen a 1.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 21 de 58
EL PUERTO D

El puerto D es un puerto bidireccional de 8 bits completo, que no comparte sus líneas de


entrada/salida con ningún 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 D Q
WR
PO RT I/O p in (1)
CK

D a ta L a tc h
D Q
WR
T R IS CK S c h m itt
Trig g e r
in p u t
T R IS L a tc h b u ffe r

R D T R IS

Q D

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 también dispone de un modo de funcionamiento especial, denominado modo


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

D a ta b u s
D Q
WR
PO RT RDx
CK p in
TTL

Q D

RD E NE N
PO RT

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
TTL CS

W rite
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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 clásicos
para un microprocesador de 8 bits. Las líneas del puerto D se convierten en las líneas del
bus de datos de este micro, mientras que las tres líneas de control clásicas: de lectura, de
escritura y de activación del circuito (chip select) están disponibles en el puerto E. Más
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 líneas de este puerto es controlado
por el registro TRISD, en el que un bit a 0 activa a la línea correspondiente como salida, y
un bit a 1 la activa como entrada. Evidentemente, después de un reset, todos los bits del
registro TRISD se ponen a 1.

EL PUERTO E

El puerto E no dispone más que de tres líneas bidireccionales, que respetan el esquema
de la siguiente figura. Suministran un buffer CMOS como salida y trigger Schmitt como
entrada.
D a ta
bus D Q
WR
PO RT I/O p in (1)
CK

D a ta L a tc h
D Q
WR
T R IS CK S c h m itt
Trig g e r
in p u t
T R IS L a tc h b u ffe r

R D T R IS

Q D

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 líneas se pueden utilizar normalmente como las líneas de cualquier puerto paralelo,
o pueden servir de señales 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 continuación

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 23 de 58
Registro TRISE - Dirección 0x89

R -0 R -0 R /W -0 R /W -0 U -0 R /W -1 R /W -1 R /W -1
IB F O BF IB O V PSPMO DE — b it2 b it1 b it0 R = R e a d a b le b it
b it7 b it0 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'
P O R T E D a ta D i r e c ti o n B i ts
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

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 además de la puesta a 1 del bit
PSPMODE, las líneas 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 través de y .
Observe también que, como hemos visto en la descripción del registro PIR1, es posible
generar una interrupción 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 continuación. Cada
temporizador puede generar una interrupción, como hemos visto en la presentación de los
registros INTCON y PIR1. Los temporizadores 1 y 2 pueden además asociarse a los
módulos funcionales denominados y PWM, que permiten realizar la captura de datos
como entrada, la comparación de datos como salida y la modulación de impulsos en
duración. Todas estas características son comparables a las que se encuentren
tradicionalmente en los temporizadores de mayores prestaciones de los micros de 8 bits.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 24 de 58
EL TEMPORIZADOR 0

El temporizador 0 es el más 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 leídos. El contenido
de este registro varía de 0000 hasta FFFF, y vuelve a 0000 después de su
desbordamiento, generando una interrupción 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 0
c lo c k in p u t
T M R 1H T M R 1L
1
T M R 1O N
o n /o ff T 1S Y N C
T 1O S C
R C 0/T 1O S O /T 1C K I 1
S y n c h ro n iz e
P re s c a le r
T 1O S C E N F o s c /4 1, 2, 4, 8 det
E n a b le In te rn a l 0
R C 1/T 1O S I O s c illa to r(1) C lo c k 2
S L E E P in p u t
T 1C K P S 1:T 1C K P S 0
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
instrucción (es decir, en cada ciclo de reloj dividido por cuatro). En modo contador, este
incremento tiene lugar en cada periodo de la señal 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 señal de reloj del temporizador pasa por un prescaler de tasa
programable, que puede sincronizar después con el reloj interno. Evidentemente, esta
sincronización es perfectamente inútil cuando se utiliza esa fuente como reloj. En modo
externo (o reloj suministrado por el oscilador del temporizador 1) puede seleccionar o no
esta sincronización.
Si se valida la sincronización, es posible utilizar el temporizador 1 conjuntamente con el
módulo CCP que se presenta más adelante. Este modo hace entonces una puesta a 0 del
temporizador a partir de la ocurrencia del evento (comprobación o captura) para el que
está programado. Sin embargo, el temporizador 1 deja de funcionar en modo SLEEP, ya
que la sincronización no puede tener lugar debido a la parada del reloj interno en este
modo.
Si no se valida la sincronización, no es posible el funcionamiento con los módulos CCP,
pero el temporizador continúa contando incluso en modo SLEEP, y puede por tanto
"despertar" al microcontrolador y hacerle salir automáticamente de este modo cuando se
desborda, si ha autorizado la generación de una interrupción en esta situación.
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 - Dirección 0x10

U -0 U -0 R /W -0 R /W -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 T M R 1C S T M R 1O N R = R e a d a b le b it
W = W rita b le b it
b it7 b it0
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-6: 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 sitúa entre los pines RC0 y RC1, se realiza mediante la conexión de
un cuarzo entre dichos pines. La frecuencia máxima 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
TMR2
b it T M R 2IF o u tp u t (1)

R eset P re s c a le r
T M R 2 re g F o s c /4
1:1, 1:4, 1:16
P o s ts c a le r 2
C o m p a ra to r
1:1 to 1:16 EQ

4 P R 2 re g

N o te 1: 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 26 de 58
El contenido de este registro se inicia en el valor 00 y aumenta con cada impulso del reloj
de instrucción, después de la eventual división realizada por el prescaler. Cuando el
contenido se hace igual que el registro de periodo, se pone a 0 y se aplica una señal al
postdivisor. La salida de éste puede generar entonces una interrupción, si ha sido
autorizada por el registro PIE1.
Los contenidos del prescaler y el postdivisor se ponen automáticamente 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 - Dirección 0x12

U -0 R /W -0 R /W -0 R /W -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 T M R 2O N T 2C K P S 1 T 2C K P S 0 R = R e a d a b le b it
W = W rita b le b it
b it7 b it0
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-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 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
00 = P re s c a le r is 1
01 = P re s c a le r is 4
1x = P re s c a le r is 16

LOS MODULOS DE CAPTURA, COMPARACION Y MODULACION DE ANCHO DE


PULSOS

Los PIC16F87X disponen de dos módulos de captura, comparación y generación de


modulación ancho de pulsos (PWM), denominados CCP1 y CCP2. Estos dos módulos
funcionan de la misma forma; excepto en el modo de arranque especial. Por tanto, los
vamos a presentar simultáneamente, y observaremos en qué se distinguen cuando
veamos dicho modo.
Cada módulo 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 dieciséis flancos de subida.
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 27 de 58
La elección de estos eventos se realiza con los bits contenidos en el registro CCPxCON,
que veremos a continuación.
Cuando tiene lugar una captura, se puede generar una interrupción, 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 leído, este
contenido se sustituye por el nuevo.
Observe también 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 dieciséis flancos. Su contenido se pone 0 durante
un reset, así como durante cualquier parada del módulo CCP.
Preste atención al hecho de que, si varía el valor del prescaler con el fin de definir otras
condiciones de captura, se puede generar una falsa interrupción, por lo que es
aconsejable detener el módulo CCP antes de cambiar las condiciones de captura, para
evitar este fenómeno.

S e t a g b it C C P 1IF
P re s c a le r (P IR 1<2>)
∏ 1, 4, 16
R C 2/C C P 1 C C P R 1H C C P R 1L
P in

and C a p tu re
e d g e d e te c t E n a b le

T M R 1H T M R 1L
C C P 1C O N <3:0>
Q ’s

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 fenómenos siguientes
se puede producir:

· Pone un nivel alto en el pin RCx/CCPx.


· Pone un nivel bajo en el pin RCx/CCPx.
· Ninguna variación en el pin, pero se genera una interrupción, 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 comparación 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 conversión analógico
/ digital si, por supuesto, la función correspondiente ha sido autorizada por el convertidor.
Esto permite llevar a cabo muy fácilmente conversiones a intervalos regulares sin que sea
necesario utilizar la unidad central.
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 28 de 58
La siguiente figura muestra de forma muy clara el principio de funcionamiento de este
modo de comparación.

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 S O u tp u t
L o g ic C o m p a ra to r
R C 2/C C P 1 R m a tc h
P in
T R IS C <2> T M R 1H T M R 1L
O u tp u t E n a b le C C P 1C O N <3:0>
M o d e S e le c t

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 señal con
modulación de ancho de pulsos, con una resolución 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 señal 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 señal = (PR2 +1) x 4T x (Predivisor de TMR2)

Donde T es el periodo de la señal 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 resolución 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
resolución de 9 bits (un único bit a 0), o de 8 bits (los dos bits a 0).

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 Q

R C 2/C C P 1
TMR2 (N o te 1)
S

C o m p a ra to r T R IS C <2>
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 análisis del contenido
del registro de control de cada módulo CCP. Cada módulo CCP dispone de su propio
registro de control, denominado CCPxCON, en el que cada uno de sus bits tiene la
siguiente función:

Registro CCP1CON / CCP2CON - Dirección 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 R = R e a d a b le b it
b it7 b it0 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-6: 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 30 de 58
INTERFAZ UNIVERSAL DIRECCIONABLE SERIE SINCRONA / ASÍNCRONA - USART

La interfaz serie asíncrona o SCI con la que está equipado el PIC16F87X es comparable a
una UART programable por software. Puede funcionar en modo asíncrono full duplex para
conectar al PIC con cualquier equipo provisto con una conexión del mismo tipo (terminal,
módem, etc...), o bien en modo síncrono semiduplex maestro o esclavo, para aplicaciones
algo más especiales.
La velocidad de transmisión es por completo programable gracias a su registro interno, y
es idéntica en transmisión y en recepción. 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 programación con 8 o 9 bits, el formato de transmisión es fijo; es el clásico
con un bit de arranque, los bits de datos y un bit de parada.

LA SCI EN MODO ASINCRÓNO FULL DUPLEX

En este modo de funcionamiento, la parte de la transmisión de la SCI sigue el esquema


de la siguiente figura. Este esquema es el típico, ya que el corazón de este conjunto es el
registro TXREG, cuando el bit del registro de estado nos indica que dicho registro está
vacío. Esta situación se puede comprobar leyendo este registro por software, o generando
una interrupción si la SCI la ha autorizado mediante el bit apropiado del registro PIEI (ver
al principio del capítulo).
Si la transmisión debe hacerse con 9 bits (utilizando la paridad, por ejemplo, con una
transmisión de datos con 8 bits), este noveno bit procede del registro TXSTA, que
veremos a continuación. Este bit debe tener el valor correcto antes de escribir el registro
TXREG. En efecto, si TXREG está vacío, el hecho de escribir en el un byte valida
inmediatamente la transmisión, 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) • • • 0 P in B u ffe r
a n d C o n tro l
T S R re g is te r R C 6/T X /C K p in
In te rru p t

TXEN B a u d R a te C L K
TRMT SPEN
S PBR G

TX9
B a u d R a te G e n e ra to r
T X 9D

ESQUEMA DE LA SCI EN MODO TRANSMISIÓN ASÍNCRONA.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 31 de 58
El principio de utilización de la SCI en transmisión es la siguiente:

· Escritura de la velocidad de transmisión deseada en el registro SPBRG (visto más


arriba).
· Activación del puerto SCI
· Activación eventual de las interrupciones en transmisión mediante la activación del bit
TXIE del registroPIE1 (ver al principio del capítulo).
· Comprobación del bit TMRT del registro TXSTA (visto más arriba), para ver si el registro
de transmisión está vacío, excepto en el caso de funcionamiento bajo interrupciones,
donde la activación de la interrupción correspondiente indica situación.
· En caso de transmisión 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 continuación a partir de la comprobación del estado del


registro TXREG, con el fin de proceder a la transmisión de los siguientes datos.
En recepción, el principio de funcionamiento es también clásico. 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
OERR FERR
C REN

S PBR G
∏ 64 MSb R S R re g is te r LS b
or
∏ 16 0 S ta rt
B a u d R a te G e n e ra to r S to p (8) 7 ∑ ∑ ∑ 1

R C 7/R X /D T
P in B u ffe r D a ta
a n d C o n tro l R e c o v e ry RX9

SPEN

RX9 E n a b le
ADDEN Load of

RX9 R e c e iv e
B u ffe r
ADDEN
R S R <8> 8

R X 9D R C R E G re g is te r
F IF O

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 recepción no es accesible directamente y sólo 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 todavía no se ha leído.
Evidentemente, un bit del registro de estado indica cuando está disponible un byte en
RCREG, y puede incluso dar lugar a una interrupción, siempre que esté autorizada por la
activación del bit adecuado del registro PIE1.
En el registro de estado hay además dos controles disponibles. Un bit de desbordamiento,
que indica la sobrescritura de los datos contenidos en RCREG por los datos siguientes, si
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 32 de 58
no se han leído suficientemente rápido, y un bit de error de formato. No está previsto
ningún 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 recepción.

El principio de utilización de la SCI en recepción es el siguiente:

· Escritura de la velocidad de transmisión deseada en el registro SPBRG (visto más


arriba),
· Habilitación del puerto SCI
· Habilitación eventual de las interrupciones en recepción mediante la activación del bit
RCIE del registro PIE1 (ver al principio del capítulo).
· Comprobación del bit RCIF del registro PIR1 (visto al principio del capítulo), para ver si
el registro de recepción está vacío, excepto en el caso de funcionamiento bajo
interrupciones, donde la activación de la interrupción correspondiente indica situación.
· En caso de recepción con 9 bits, hay que leer el noveno bit en el registro RCSTA, y
verificar la ausencia de error de recepción.
· Lectura del byte recibido en el registro RCREG.

El procedimiento se repite a continuación a partir de la comprobación del estado del bit


RCIF, con el fin de recibir los datos siguientes.

LA SCI EN MODO SÍNCRONO SEMIDUPLEX

El funcionamiento en modo síncrono semiduplex descansa sobre los mismos principios


que los vistos anteriormente, con únicamente dos diferencias importantes.

· Al tratarse de un modo semiduplex, la transmisión y la recepción simultánea no es


posible. El hecho de utilizar una de estas funciones desactiva automáticamente a la otra.
· El hecho de estar en modo síncrono significa que el reloj de transmisión se envía
conjuntamente con los datos. Cuando la SCI está en modo maestro, es ella la que
suministra la señal 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 transmisión en este mismo pin CK.

La siguiente figura presenta el gráfico de una transmisión en modo maestro, y la figura a


continuación presenta el de recepción en el mismo modo.
Los principios de transmisión y recepción vistos para el modo asíncrono son válidos
también en este caso. Para ello basta con activar correctamente los bits de selección de
este modo en los registros TXSTA y RCSTA.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 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

R C 7/R X /D T p in B it 0 B it 1 B it 2 B it 7 B it 0 B it 1 B it 7
W ORD 1 W ORD 2
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 W rite w o rd 2
T X IF b it
(In te rru p t fla g )

T R M T bT itR M T

'1' '1'
T X E N b it

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 .

TRANSMISIÓN SÍNCRONA

R C 7/R X /D T p in b it0 b it1 b it2 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

TRANSMISIÓN SÍNCRONA A TRAVÉZ 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'.

RECEPCIÓN SÍNCRONA

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 asíncrona 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 - Dirección 0x98

R /W -0 R /W -0 R /W -0 R /W -0 U -0 R /W -0 R -1 R /W -0
CSRC TX9 TXEN SYNC — BR G H TRMT T X 9D R = R e a d a b le b it
b it7 b it0 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: 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 - Dirección 0x18

R /W -0 R /W -0 R /W -0 R /W -0 R /W -0 R -0 R -0 R -x
SPEN RX9 SREN C REN ADDEN FERR OERR R X 9D R = R e a d a b le b it
b it7 b it0 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 transmisión. El contenido de este registro permite, en realidad, calcular la
velocidad de transmisión que se utilizará según las indicaciones de la siguiente tabla.

SYNC B R G H = 0 (Lw o S p e e d ) B R G H = 1 (H i g h S p e e d )
0 (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)) B a u d R a te = F O S C /(16(X +1))
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)) NA
X = v a lu e in S P B R G (0 to 255)

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 36 de 58
En modo asíncrono, definido por la puesta a 0 del bit SYNC del registro TXSTA, se utilizan
dos fórmulas de cálculo dependiendo del estado del bit BRGH de este mismo registro.
En modo síncrono definido por la puesta a uno de este mismo bit SYNC, sólo se usa una
fórmula. 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 típicos para diferentes
configuraciones y diversas frecuencias de reloj, así como los porcentajes de error
obtenidos por este procedimiento con respecto a las velocidades teóricas
F O S C = 20 M H z 16 M H z 10 M H z 7.15909 M H z
BAU D S PBR G S PBR G S PBR G S PBR G
R AT E % v a lu e % v a lu e % v a lu e % v a lu e
KBAU D KBAU D KBAU D KBAU D
(K ) ERROR (d e c im a l) ERROR (d e c im a l) ERROR (d e c im a l) ERROR (d e c im a l)
0.3 NA - - NA - - NA - - NA - -
1.2 NA - - NA - - NA - - NA - -
2.4 NA - - NA - - NA - - NA - -
9.6 NA - - NA - - 9.766 +1.73 255 9.622 +0.23 185
19.2 19.53 +1.73 255 19.23 +0.16 207 19.23 +0.16 129 19.24 +0.23 92
76.8 76.92 +0.16 64 76.92 +0.16 51 75.76 -1.36 32 77.82 +1.32 22
96 96.15 +0.16 51 95.24 -0.79 41 96.15 +0.16 25 94.20 -1.88 18
300 294.1 -1.96 16 307.69 +2.56 12 312.5 +4.17 7 298.3 -0.57 5
500 500 0 9 500 0 7 500 0 4 NA - -
H IG H 5000 - 0 4000 - 0 2500 - 0 1789.8 - 0
LO W 19.53 - 255 15.625 - 255 9.766 - 255 6.991 - 255
F O S C = 5.0688 M H z 4 MHz 3.579545 M H z 1 MHz 32.768 k H z
BAU D S PBR G S PBR G S PBR G S PBR G S PBR G
R AT 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 KBAU D % v a lu e
(K ) 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.3 NA - - NA - - NA - - NA - - 0.303 +1.14 26
1.2 NA - - NA - - NA - - 1.202 +0.16 207 1.170 -2.48 6
2.4 NA - - NA - - NA - - 2.404 +0.16 103 NA - -
9.6 9.6 0 131 9.615 +0.16 103 9.622 +0.23 92 9.615 +0.16 25 NA - -
19.2 19.2 0 65 19.231 +0.16 51 19.04 -0.83 46 19.24 +0.16 12 NA - -
76.8 79.2 +3.13 15 76.923 +0.16 12 74.57 -2.90 11 83.34 +8.51 2 NA - -
96 97.48 +1.54 12 1000 +4.17 9 99.43 +3.57 8 NA - - NA - -
300 316.8 +5.60 3 NA - - 298.3 -0.57 2 NA - - NA - -
500 NA - - NA - - NA - - NA - - NA - -
H IG H 1267 - 0 100 - 0 894.9 - 0 250 - 0 8.192 - 0
LO W 4.950 - 255 3.906 - 255 3.496 - 255 0.9766 - 255 0.032 - 255

BAUD RATE MODO SÍNCRONO


F O S C = 20 M H z 16 M H z 10 M H z 7.15909 M H z
BAU D S PBR G S PBR G S PBR G S PBR G
R AT E % v a lu e % v a lu e % v a lu e % v a lu e
(K ) KBAU D ERROR (d e c im a l) K B A U D ERROR (d e c im a l) K B A U D ERROR (d e c im a l) K B A U D E R R O R (d e c im a l)
0.3 NA - - NA - - NA - - NA - -
1.2 1.221 +1.73 255 1.202 +0.16 207 1.202 +0.16 129 1.203 +0.23 92
2.4 2.404 +0.16 129 2.404 +0.16 103 2.404 +0.16 64 2.380 -0.83 46
9.6 9.469 -1.36 32 9.615 +0.16 25 9.766 +1.73 15 9.322 -2.90 11
19.2 19.53 +1.73 15 19.23 +0.16 12 19.53 +1.73 7 18.64 -2.90 5
76.8 78.13 +1.73 3 83.33 +8.51 2 78.13 +1.73 1 NA - -
96 104.2 +8.51 2 NA - - NA - - NA - -
300 312.5 +4.17 0 NA - - NA - - NA - -
500 NA - - NA - - NA - - NA - -
H IG H 312.5 - 0 250 - 0 156.3 - 0 111.9 - 0
LO W 1.221 - 255 0.977 - 255 0.6104 - 255 0.437 - 255
F O S C = 5.0688 M H z 4 MHz 3.579545 M H z 1 MHz 32.768 k H z
BAU D S PBR G S PBR G S PBR G S PBR G S PBR G
R AT E % v a lu e % v a lu e % v a lu e % v a lu e % v a lu e
(K ) 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 0.31 +3.13 255 0.3005 -0.17 207 0.301 +0.23 185 0.300 +0.16 51 0.256 -14.67 1
1.2 1.2 0 65 1.202 +1.67 51 1.190 -0.83 46 1.202 +0.16 12 NA - -
2.4 2.4 0 32 2.404 +1.67 25 2.432 +1.32 22 2.232 -6.99 6 NA - -
9.6 9.9 +3.13 7 NA - - 9.322 -2.90 5 NA - - NA - -
19.2 19.8 +3.13 3 NA - - 18.64 -2.90 2 NA - - NA - -
76.8 79.2 +3.13 0 NA - - NA - - NA - - NA - -
96 NA - - NA - - NA - - NA - - NA - -
300 NA - - NA - - NA - - NA - - NA - -
500 NA - - NA - - NA - - NA - - NA - -
H IG H 79.2 - 0 62.500 - 0 55.93 - 0 15.63 - 0 0.512 - 0
LO W 0.3094 - 255 3.906 - 255 0.2185 - 255 0.0610 - 255 0.0020 - 255

BAUD RATE MODO ASÍNCRONO (BRGH = 0)


La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 37 de 58
F O S C = 20 M H z 16 M H z 10 M H z 7.16 M H z
BAU D S PBR G S PBR G S PBR G S PBR G
R AT E % v a lu e % v a lu e % v a lu e % v a lu e
(K ) KBAU D ERROR (d e c im a l) K B A U D ERROR (d e c im a l) K B A U D ERROR (d e c im a l) K B A U D E R R O R (d e c im a l)
9.6 9.615 +0.16 129 9.615 +0.16 103 9.615 +0.16 64 9.520 -0.83 46
19.2 19.230 +0.16 64 19.230 +0.16 51 18.939 -1.36 32 19.454 +1.32 22
38.4 37.878 -1.36 32 38.461 +0.16 25 39.062 +1.7 15 37.286 -2.90 11
57.6 56.818 -1.36 21 58.823 +2.12 16 56.818 -1.36 10 55.930 -2.90 7
115.2 113.636 -1.36 10 111.111 -3.55 8 125 +8.51 4 111.860 -2.90 3
250 250 0 4 250 0 3 NA - - NA - -
625 625 0 1 NA - - 625 0 0 NA - -
1250 1250 0 0 NA - - NA - - NA - -
F O S C = 5.068 M H z 4 MHz 3.579 M H z 1 MHz 32.768 k H z
BAU D S PBR G S PBR G S PBR G S PBR G S PBR G
R AT E % v a lu e % v a lu e % v a lu e % v a lu e % v a lu e
(K ) KBAU 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)
9.6 9.6 0 32 NA - - 9.727 +1.32 22 8.928 -6.99 6 NA - -
19.2 18.645 -2.94 16 1.202 +0.17 207 18.643 -2.90 11 20.833 +8.51 2 NA - -
38.4 39.6 +3.12 7 2.403 +0.13 103 37.286 -2.90 5 31.25 -18.61 1 NA - -
57.6 52.8 -8.33 5 9.615 +0.16 25 55.930 -2.90 3 62.5 +8.51 0 NA - -
115.2 105.6 -8.33 2 19.231 +0.16 12 111.860 -2.90 1 NA - - NA - -
250 NA - - NA - - 223.721 -10.51 0 NA - - NA - -
625 NA - - NA - - NA - - NA - - NA - -
1250 NA - - NA - - NA - - NA - - NA - -

BAUD RATE MODO ASÍNCRONO (BRGH = 1)

EL CONVERTIDOR ANALÓGICO/DIGITAL

El convertidor analógico digital incorporado al PIC16F87X4 es un modelo de 10 bits


precedido de un multiplexor de varias entradas. Como veremos a continuación, el número
de entradas se puede definir por software por medio de los bits apropiados del registro de
control.
La referencia de tensión utilizada para esta conversión se puede definir como Vdd o la
tensión aplicada a RA3/AN3/Vref+, y tambien la referencia inferior como Vss o
RA2/AN2/Vref-. Además, 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
R E 2 /A N 7 (1 )
110
R E 1 /A N 6 (1 )

101
R E 0 /A N 5 (1 )

100
R A 5 /A N 4
V A IN
(I n p u t v o lta g e ) 011
R A 3 /A N 3 /V R E F +

010
A /D R A 2 /A N 2 /V R E F -
C o n v e r te r
001
R A 1 /A N 1

VDD 000
R A 0 /A N 0
X000 o r
V REF+ X010 o r
X100
(R e fe re n c e
v o lta g e ) X001 o r
X011 o r
X101
P C F G 3 :P C F G 0

00XX o r 0X0X o r
1000 o r 1010 o r
1100
V REF-
1001 o r
(R e fe re n c e 1011 o r
v o lta g e ) 1101
VSS
P C F G 3 :P C F G 0
N o te 1: N o t a v a ila b le o n 2 8 -p in d e v ic e s .

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 38 de 58
Las líneas de entrada del convertidor se comparten con las líneas del puerto A y del
puerto E, las cuales deben estar configuradas como entradas cuando se utilizan para
conversión. En caso contrario, el convertidor leerá el nivel lógico presente en estos pines.
El convertidor utiliza un técnica de muestreo y retención que equivale a cargar una
capacidad con la tensión 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 conversión
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 - Dirección 0x1F

R /W -0 R /W -0 R /W -0 R /W -0 R /W -0 R /W -0 U -0 R /W -0
ADC S1 ADC S0 C HS2 C HS1 C HS0 G O /D O N E — ADON R =R e a d a b le b it
b it7 b it0 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-6: 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 r-
s 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 39 de 58
Registro ADCON1 - Dirección 0x9F

U -0 U -0 R /W -0 U -0 R /W -0 R /W -0 R /W -0 R /W -0
ADFM — — — PC FG 3 PC FG 2 PC FG 1 PC FG 0 R =R e a d a b le b it
b it7 b it0 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: 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) AN4 AN3 AN2 AN1 AN0 C HAN /


V REF+ V REF-
PC FG 0 R E2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 R EFS
0000 A A A A A A A A VDD VSS 8/0
0001 A A A A V REF+ A A A RA3 VSS 7/1
0010 D D D A A A A A VDD VSS 5/0
0011 D D D A V REF+ A A A RA3 VSS 4/1
0100 D D D D A D A A VDD VSS 3/0
0101 D D D D V REF+ D A A RA3 VSS 2/1
011x D D D D D D D D VDD VSS 0/0
1000 A A A A V REF+ V REF- A A RA3 RA2 6/2
1001 D D A A A A A A VDD VSS 6/0
1010 D D A A V REF+ A A A RA3 VSS 5/1
1011 D D A A V REF+ V REF- A A RA3 RA2 4/2
1100 D D D A V REF+ V REF- A A RA3 RA2 3/2
1101 D D D D V REF+ V REF- A A RA3 RA2 2/2
1110 D D D D D D D A VDD VSS 1/0
1111 D D D D V REF+ V REF- D A RA3 RA2 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 .

A D C l o ck S o u cr e (TA D ) D e v i c e F r e q u e n cy

O p e r a ti o n A D C S 1: A D C S 0 20 M H z 5 MHz 1.25 M H z 333.33 k H z


2T O S C 00 100 n s (2) 400 n s (2) 1.6 µs 6 µs
8T O S C 01 400 n s (2) 1.6 µs 6.4 µs 24 µs (3)
32T O S C 10 1.6 µs 6.4 µs 25.6 µs (3) 96 µs (3)
RC 11 2-6 µs (1, 4) 2-6 µs (1, 4) 2-6 µs (1, 4) 2 - 6 µs (1)
Legend: 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 .
N o te 1: 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 .
2: 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 .
3: 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 .
4: 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 40 de 58
Visto el contenido de estos registros, el principio de utilización 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 capítulo).

· Asegurarse de respetar el tiempo mínimo de muestreo, .

· Iniciar la conversión poniendo el bit GO/DONE a 1.

· Detectar el fin de la conversión, bien comprobando el paso a 0 de este mismo bit, bien
por la recepción de la interrupción que procede del convertidor, si se ha autorizado.

· Entonces el resultado se puede leer en el registro ADRES.

Después, es posible pedir la conversión de otra vía (o de la misma, por supuesto), pero
observe que es necesario esperar un tiempo igual, al menos, a 2 Tad.

Observe que también como, por una razón no precisada en la hojas de características, es
necesario no poner a 1 los bits ADON y GO/DONE con la misma instrucción, sino
proceder en dos veces.

El reloj de conversión se debe seleccionar sabiendo que la conversión necesita un tiempo


igual a 12 Tad para los 10 bits. Además, para asegurar una conversión correcta, se debe
respetar el tiempo mínimo Tad de 1.6ms.

La tabla anterior muestra cuáles son las distintas posibilidades ofertadas por la
programación de los bits ADCS0 y ADCS1 , en función de la frecuencia de reloj del PIC.

La descripción del módulo CC , hemos visto que era posible utilizarle para desencadenar
una conversión analógico/digital. Esto no cambia en nada los principios expuestos
anteriormente, ni el desarrollo general de la programación de una conversión. La única
diferencia es con esta exposición 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 iniciación la utiliza CC , sin que el convertidor haya sido activado por
su bit ADONE, no tiene lugar ninguna acción 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 señalar: el funcionamiento del modo SLEEP. Es
posible programar una conversión mientras que PIC está en modo SLEEP. En este caso,
hay que utilizar imperativamente como reloj de conversión 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 instrucción antes de
comenzar la conversión, lo que permite ejecutar la instrucción SLEEP cuando la
conversión se termina, su resultado se coloca en ADRES, el bit GO/DONE se pone a 0 y
se genera una interrupción si estaba autorizada. En este caso, el PIC sale del modo
SLEEP gracias a ella. Si esta interrupción 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 válidos.
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 autónomo de tipo RC interno, por lo que
no precisa ningún componente externo, y puede continuar funcionando incluso cuando el
reloj del PIC está parado, por ejemplo, durante una instrucción SLEEP.
Como todos sus homólogos, 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 específico del circuito durante su programación. Este bit no forma parte del espacio
direccionable ni de los registros clásicos, 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 típico de este temporizador es de 18 ms, aunque puede
variar un poco con la tensión de alimentación 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 descripción de este registro en el apartado dedicado al temporizador 0).
En estas condiciones, las tasas de predivisión definidas por este mismo registro varían,
siendo el máximo 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 descripción de este registro al principio del capítulo). Esto
permite evitar que se generen resets indeseados cuando el registro está, por ejemplo, en
modo SLEEP. Estas dos instrucciones ponen a 0 también 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
M P o s ts c a le r
1
W D T T im e r 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 PSA

W DT
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. T im e -o u t

A d d re s s N am e B it 7 B it 6 B it 5 B it 4 B it 3 B it 2 B it 1 B it 0
2007h C o n g . b its (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
81h ,181h O P T IO N _R E G 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 42 de 58
Programa fuente:

El programa fuente esta compuesto por una sucesión de líneas de programa. Cada línea
de programa esta compuesta por 4 campos separados por uno o más espacios o
tabulaciones. Estos campos son:

[Etiqueta] Comando [Operando(s)] [;Comentario]

La etiqueta es opcional; El comando puede ser un mnemónico 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 práctica considerarlo obligatorio para el
programador.

La etiqueta, es el campo que empieza en la primer posición de la línea. No se pueden


insertar espacios o tabulaciones antes de la etiqueta sino será considerado comando.
Identifica la línea de programa haciendo que el compilador le asigne un valor
automáticamente. Si se trata de una línea cuyo comando es una instrucción de programa
del microcontrolador, se le asigna el valor de la dirección de memoria correspondiente a
dicha instrucción (location counter). En otros casos se le asigna un valor de una
constante, o la dirección de una variable, o será el nombre de una macroinstrucción, etc.

El comando puede ser un código mnemónico de instrucción del microcontrolador, o una


directiva o pseudoinstrucción para el compilador. En el primer caso será directamente
traducido a código de maquina, en el segundo caso será interpretado por el compilador y
realizara alguna acción en tiempo de compilación como ser asignar un valor a una
etiqueta, etc.

El campo de parámetros puede contener uno o más parámetros separados por comas.
Los parámetros dependen de la instrucción o directiva. Pueden ser números 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 separándolo del campo anterior, e incluso puede empezar en la
primer posición de la línea. El compilador ignora todo el texto que contenga la línea
después de un caracter punto y coma. De esta manera pueden incluirse líneas que
contengan solo comentarios, y es muy buena práctica 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


pequeño 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 categorías bien definidas de acuerdo con la
función y el tipo de operandos involucrados. En primer lugar se agrupan las instrucciones
que operan con bytes y que involucran algún registro de la memoria interna.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 43 de 58
En segundo lugar se analizaran las instrucciones que operan solo sobre el registro W y
que permiten cargarle una constante implícita o incluida literalmente en la instrucción
(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
ejecución de las instrucciones. Por último se agrupan unas pocas instrucciones que
llamaremos especiales, cuyas funciones o tipos de operandos son muy específicos 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 0
O PC O DE d 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 ie ld D e s c r i p ti o n
f = 7-b it le re g is te r a d d re s s
f R e g is te r le a d d re s s (0x 00 to 0x 7F )
W W o rk in g re g is te r (a c c u m u la to r)
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 0
b B it a d d re s s w ith in a n 8-b it le re g is te r
O PC O DE b (B IT #) f (F IL E #) k L ite ra l e ld , c o n s ta n t d a ta o r la b e l
x D o n 't c a re lo c a tio n (= 0 o r 1)
b = 3-b it b it a d d re s s 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
f = 7-b it le re g is te r a d d re s s 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 .
L ite ra l a n d c o n tro l o p e ra tio n s d 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.
G e n e ra l D e fa u lt is d = 1
PC P ro g ra m C o u n te r
13 8 7 0
O PC O DE k (lite ra l)
TO T im e -o u t b it
PD P o w e r-d o w n b it
k = 8-b it im m e d ia te v a lu e

C A L L a n d G O T O in s tru c tio n s o n ly
13 11 10 0
O PC O DE k (lite ra l)

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

Descripción del Campo de los códigos de Operación

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 44 de 58
Resumen de instrucciones (clasificación según el fabricante en tres grupos):

En esta tabla de resumen del conjunto de instrucciones se pueden observar los mnemónicos, la explicación,
el número de ciclos, el código de máquina y los bits afectados del registro STATUS para cada una de las
instrucciones.

M n e m o n ic , 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 S ta tu s N o te s
O p e ra n d s A f f e c te d
MSb LSb

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 f, d A dd W and f 1 00 0111 dfff ffff C ,D C ,Z 1,2
A NDW F f, d A N D W w ith f 1 00 0101 dfff ffff Z 1,2
C LRF f C le a r f 1 00 0001 lfff ffff Z 2
C LRW - C le a r W 1 00 0001 0xxx xxxx Z
COMF f, d C o m p le m e n t f 1 00 1001 dfff ffff Z 1,2
DEC F f, d D e c re m e n t f 1 00 0011 dfff ffff Z 1,2
DEC FSZ f, d D e c re m e n t f, S k ip if 0 1(2) 00 1011 dfff ffff 1,2,3
IN C F f, d In c re m e n t f 1 00 1010 dfff ffff Z 1,2
IN C F S Z f, d In c re m e n t f, S k ip if 0 1(2) 00 1111 dfff ffff 1,2,3
IO R W F f, d In c lu s iv e O R W w ith f 1 00 0100 dfff ffff Z 1,2
MOVF f, d M ove f 1 00 1000 dfff ffff Z 1,2
MOVW F f M o v e W to f 1 00 0000 lfff ffff
NOP - N o O p e ra tio n 1 00 0000 0xx0 0000
RLF f, d R o ta te L e ft f th ro u g h C a rry 1 00 1101 dfff ffff C 1,2
RRF f, d R o ta te R ig h t f th ro u g h C a rry 1 00 1100 dfff ffff C 1,2
SUBW F f, d S u b tra c t W fro m f 1 00 0010 dfff ffff C ,D C ,Z 1,2
SW A PF f, d S w a p n ib ble s in f 1 00 1110 dfff ffff 1,2
XORW F f, d E x c lu s iv e O R W w ith f 1 00 0110 dfff ffff Z 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 f, b B it C le a r f 1 01 00bb bfff ffff 1,2
BSF f, b B it S e t f 1 01 01bb bfff ffff 1,2
BTFSC f, b B it Te s t f, S k ip if C le a r 1 (2) 01 10bb bfff ffff 3
BTFSS f, b B it Te s t f, S k ip if S e t 1 (2) 01 11bb bfff ffff 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 k A d d lite ra l a n d W 1 11 111x kkkk kkkk C ,D C ,Z
A N D LW k A N D lite ra l w ith W 1 11 1001 kkkk kkkk Z
C A LL k C a ll s u b ro u tin e 2 10 0kkk kkkk kkkk
C LRW DT - C le a r W a tc h d o g T im e r 1 00 0000 0110 0100 T O ,P D
G O TO k G o to a d d re s s 2 10 1kkk kkkk kkkk
IO R L W k In c lu s iv e O R lite ra l w ith W 1 11 1000 kkkk kkkk Z
M O V LW k M o v e lite ra l to W 1 11 00xx kkkk kkkk
R E T F IE - R e tu rn fro m in te rru p t 2 00 0000 0000 1001
R E T LW k R e tu rn w ith lite ra l in W 2 11 01xx kkkk kkkk
RETURN - R e tu rn fro m S u b ro u tin e 2 00 0000 0000 1000
SLEEP - G o in to s ta n d b y m o d e 1 00 0000 0110 0011 T O ,P D
S U B LW k S u b tra c t W fro m lite ra l 1 11 110x kkkk kkkk C ,D C ,Z
X O R LW k E x c lu s iv e O R lite ra l w ith W 1 11 1010 kkkk kkkk 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 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 posición desde la 00 a la 7F. Como se vió en el capítulo 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
selección de banco en el registro STATUS.
El registro FSR, es un puntero para direccionamiento indirecto. La posición 00 del mapa de
RAM es la llamada dirección indirecta. Sí en cualquier instrucción se opera con la dirección
00, en realidad se estará operando con la dirección a donde apunte el contenido del FSR.
Por ejemplo si el FSR contiene el valor 14, una instrucción que opere sobre la dirección 0,
operara en realidad sobre la dirección 14. Se puede decir en este ejemplo que la posición
14 de memoria fue direccionada en forma indirecta a través del puntero FSR.

Ejemplo :

; Esta porción de programa borra 5 posiciones de memoria a partir de la dirección 0x20


FSR equ 04 ;(definición 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 dirección 0x20
movwf FSR ;
loop:
clrf INDF ;borra una posición de memoria
incf FSR,1 ;apunta a la siguiente
decfsz 0x7F,1 ;si todavía 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

R P 1: R P 0 6 fro m o p c o d e 0 IR P 7 F S R re g is te r 0

b a n k s e le c t lo c a tio n s e le c t b a n k s e le c t lo c a tio n s e le c t
00 01 10 11

00h 80h 100h 180h

D a ta
M e m o ry (1 )

7F h FFh 17F h 1F F h

Bank 0 Bank 1 Bank 2 Bank 3

.
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 46 de 58
La instrucción GOTO dispone solo de 11 bits en el código de operación para especificar la
dirección de destino del salto. Al ejecutar una instrucción GOTO el microprocesador toma
los dos bits que restan para completar la dirección de 13 bits, de los bits 3 y 4 del registro
PCLATH. Ver la siguiente figura.

PC H PC L
12 8 7 0 In s tru c tio n w ith
PC P C L as
D e s tin a tio n
P C L AT H <4:0> 8
5 A LU

P C L AT H

PC H PC L
12 1 1 10 8 7 0
PC GOTO,CALL

P C L A T H <4:3> 11
2
O p c o d e <10:0 >

P C L AT H

Direccionamiento directo con instrucción GOTO y CALL

Deberá tenerse en cuenta además que es posible avanzar de una página a otra en forma
automática cuando el PC se incrementa. Esto ocurre si el programa empieza en una
página y sigue en la siguiente. Sin embargo, al incrementarse el PC desde la última
posición de una página a la primera de la siguiente, los bits 3 y 4 del PCLATH no se
modifican, y por lo tanto sí se ejecuta una instrucción GOTO, CALL o alguna que actúe
sobre el PC, esta producirá un salto a la página anterior, a menos que el programador
tenga la precaución de actualizar el valor de dichos bits. Por este motivo es conveniente
dividir el programa en módulos o rutinas que estén confinados a una página.
En el caso de la instrucción CALL, el direccionamiento es igual y como el stack, tiene un
tamaño de 13 bits la dirección 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 diseños con PIC 16/17. EL MPLAB incluye un editor de texto, un simulador y un
organizador de proyectos. Además, el MPLAB soporta el emulador PICMASTER y a
otras herramientas de desarrollo de Microchip como el PICSTART - Plus.

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 47 de 58
¿De que forma le ayuda el MPLAB ?

Con el MPLAB Usted puede:

· Depurar sus programas fuente.


· Detectar errores automáticamente 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 cronómetro.
· Mirar variables en las ventanas de observación.
· Encontrar respuestas rápidas a sus preguntas, utilizando la Ayuda en línea 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 depuración simbólica. 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 código.

#DEFINE
ej. #define <nombre> [<valor a remplazar>]
explicación: declara una cadena de texto como substituto de otra

END
ej. end
explicación: indica fin de programa
La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 48 de 58
EQU
ej. status equ 05
explicación: define una constante de ensamble

INCLUDE
ej. include <PIC16F84.h>
explicación: incluye en el programa un archivo con código fuente

ORG
ej. org 0x100
explicación: ensambla a partir de la dirección especificada
Para información más completa referirse a la guía rápida del MPASM.

Una vez instalado adecuadamente el MPLAB, para realizar la simulación 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 extensión .ASM) una vez terminada su edición (menú
FILE...Save).

4. Debe a continuación 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 sección Non-project files sobre el
nombre del archivo fuente realizado en los pasos 2 y 3.

7. Haga click en el botón <=add y luego de que éste aparezca en la sección Project Files
haga click sobre el botón <OK>.

8. Salvar el proyecto (en el menú Project...Save project).

9. Realizar la "construcción de todo el proyecto" (menú Project...Build All).

10. En esta etapa se realiza en forma automática el ensamble de nuestro programa fuente
y el vaciado de éste en memoria de simulación. 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
simulación>>>

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 49 de 58
Vista del Entorno de Programación MPLAB

Como en la mayoría de las aplicaciones Windows la pantalla se divide en varias


secciones:

1. Barra de título: 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

Simulación:

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 simulación nos permite detectar y corregir problemas de lógica, 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 dirección:
http://www.microchip.com/10/Tools/mTools/MPLAB/index.htm

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 50 de 58
1 2 3 4

DISPLAYK1 DISPLAYK2 DISPLAYK3


DISPLAY KC DISPLAY KC DISPLAY KC

sa R15 470
D a a a D
sb R16 470 b b b
VCC sc R17 470 c c c
sd R18
APENDICE 1

470 d d d
C15 U5 se R19 470
100nF e e e
sf R20 470 f f f
2 15 sg R21 470
RA0/NA0 RC0/T1OSO/T1CKI g g g
3 16 sP R22 8 8 8
Circuito Propuesto

RA1/NA1 RC1/T1OSI/CCP2 470 P P P


POT2 4 17

Común
Común
Común
1K RA2/NA2 RC2/CCP1
5 18
RA3/NA3 RC3/SCK/SCL
6 23
RA4/TOCKI RC4/SDI/SDI
7 24
RA5/AN4/SS RC5/SDO
25 TXD
RC6/TX/CK Q4 Q5 Q6
VCC sa 33 26 RXD
RB0/INT RC7/RX/CT
sb 34
RB1 R23
sc 35 19
R12 RB2 RD0/PSP0
sd 36 20 4K7 VCC
27K RB3 RD1/PSP1
se 37 21
RB4 RD2/PSP2 BC557 BC557 BC557
sf 38 22
RB5 RD3/PSP3 R24
sg 39 27
C RB6 RSD4/PSP4 C
sP 40 28 4K7
T1 RB7 RD5/PSP5
29
BC557 RD6/PSP6
1 30
R13 MCLR/VPP RD7/PSP7 R25
150K C6 13 8 4K7
OSC1/CLKIN RE0/RD/AN5
14 9
R14 15pF OSC2/CLKOUT RE1/WR/AN6
10
39K C10 RE2/CS/AN7
PIC16C74A

15pF X2
4Mhz VCC
L2

La impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba
VCC
22mHy
C14 U4
100nF C4 10uF MAX232EJE
2 I2
B V+ B
14 1
T1OUT
TXD 11 7 6
U6 T1IN T2OUT
+12V 10 2
1N4007 C12 MC7805T C2 T2IN C3
D1 7
B1 100nF 1 3 1 4 3
Vin +5V VCC C1+ C2+
1 8
2 C13 10uF 3 5 10uF 4
100nF C1- C2-
3 9

GND
RXD 12 13 5
BOR3 R1OUT R1IN
9 8
1N4007 C11 R2OUT R2IN

2
D2 C5
1000uF 6 DB9
V-
Macho PCB 90'
10uF

Title
A A

Size Number Revision


A4
Date: 12-Sep-2002 Sheet of
File: \\Oscar\c_oscar\ADVSCH\PROJECTS\CursoUC\Curso\Curso.DDB Drawn By:
1 2 3 4

Página 51 de 58
APENDICE 2 - PIC16F87X
12.1 Instruction Descriptions

ADDLW Add Literal and W ANDWF AND W with f


Syntax: [label] ADDLW k Syntax: [label] ANDWF f,d
Operands: 0 ≤ k ≤ 255 Operands: 0 ≤ f ≤ 127
Operation: (W) + k → (W) d ∈ [0,1]

Status Affected: C, DC, Z Operation: (W) .AND. (f) → (destination)

Description: The contents of the W register Status Affected: Z


are added to the eight bit literal ’k’ Description: AND the W register with register
and the result is placed in the W 'f'. If 'd' is 0, the result is stored in
register. the W register. If 'd' is 1, the result
is stored back in register 'f'.

BCF Bit Clear f


ADDWF Add W and f
Syntax: [label] BCF f,b
Syntax: [label] ADDWF f,d
Operands: 0 ≤ f ≤ 127
Operands: 0 ≤ f ≤ 127 0≤b≤7
d ∈ [0,1]
Operation: 0 → (f<b>)
Operation: (W) + (f) → (destination)
Status Affected: None
Status Affected: C, DC, Z
Description: Bit 'b' in register 'f' is cleared.
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 reg-
ister ’f’.

BSF Bit Set f


Syntax: [label] BSF f,b
ANDLW AND Literal with W
Operands: 0 ≤ f ≤ 127
Syntax: [label] ANDLW k 0≤b≤7
Operands: 0 ≤ k ≤ 255 Operation: 1 → (f<b>)
Operation: (W) .AND. (k) → (W) Status Affected: None
Status Affected: Z Description: Bit 'b' in register 'f' is set.
Description: The contents of W register are
AND’ed 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 f
Operands: 0 ≤ f ≤ 127 Operands: 0 ≤ f ≤ 127
0≤b<7 Operation: 00h → (f)
Operation: skip if (f<b>) = 1 1→Z
Status Affected: None Status Affected: Z
Description: If bit ’b’ in register ’f’ is ’0’, the next Description: The contents of register ’f’ are
instruction is executed. cleared and the Z bit is set.
If bit ’b’ is ’1’, then the next instruc-
tion is discarded and a NOP is exe-
cuted instead making this a 2TCY
instruction.

CLRW Clear W
Syntax: [ label ] CLRW
BTFSC Bit Test, Skip if Clear
Operands: None
Syntax: [label] BTFSC f,b
Operation: 00h → (W)
Operands: 0 ≤ f ≤ 127 1→Z
0≤b≤7
Status Affected: Z
Operation: skip if (f<b>) = 0
Description: W register is cleared. Zero bit (Z)
Status Affected: None is set.
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.

CLRWDT Clear Watchdog Timer


Syntax: [ label ] CLRWDT
CALL Call Subroutine
Operands: None
Syntax: [ label ] CALL k
Operation: 00h → WDT
Operands: 0 ≤ k ≤ 2047 0 → WDT prescaler,
Operation: (PC)+ 1→ TOS, 1 → TO
k → PC<10:0>, 1 → PD
(PCLATH<4:3>) → PC<12:11> Status Affected: TO, PD
Status Affected: None Description: CLRWDT instruction resets the
Description: Call Subroutine. First, return Watchdog Timer. It also resets
address (PC+1) is pushed onto the prescaler of the WDT. Status
the stack. The eleven bit immedi- bits TO and PD are set.
ate address is loaded into PC bits
<10:0>. The upper bits of the PC
are loaded from PCLATH. CALL is
a two cycle instruction.
COMF Complement f GOTO Unconditional Branch
Syntax: [ label ] COMF f,d Syntax: [ label ] GOTO k
Operands: 0 ≤ f ≤ 127 Operands: 0 ≤ k ≤ 2047
d ∈ [0,1] Operation: k → PC<10:0>
Operation: (f) → (destination) PCLATH<4:3> → PC<12:11>
Status Affected: Z Status Affected: None
Description: The contents of register ’f’ are Description: GOTO is an unconditional branch.
complemented. If ’d’ is 0, the The eleven bit immediate value is
result is stored in W. If ’d’ is 1, the loaded into PC bits <10:0>. The
result is stored back in register ’f’. 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 Syntax: [ label ] INCF f,d
d ∈ [0,1] Operands: 0 ≤ f ≤ 127
Operation: (f) - 1 → (destination) d ∈ [0,1]
Status Affected: Z Operation: (f) + 1 → (destination)
Description: Decrement register ’f’. If ’d’ is 0, Status Affected: Z
the result is stored in the W regis- Description: The contents of register ’f’ are
ter. If ’d’ is 1, the result is stored incremented. If ’d’ is 0, the result
back in register ’f’. is placed in the W register. If ’d’ is
1, the result is placed back in reg-
ister ’f’.

DECFSZ Decrement f, Skip if 0


Syntax: [ label ] DECFSZ f,d INCFSZ Increment f, Skip if 0
Operands: 0 ≤ f ≤ 127 Syntax: [ label ] INCFSZ f,d
d ∈ [0,1]
Operands: 0 ≤ f ≤ 127
Operation: (f) - 1 → (destination); d ∈ [0,1]
skip if result = 0
Operation: (f) + 1 → (destination),
Status Affected: None skip if result = 0
Description: The contents of register ’f’ are Status Affected: None
decremented. If ’d’ is 0, the result
Description: The contents of register ’f’ are
is placed in the W register. If ’d’ is
incremented. If ’d’ is 0, the result is
1, the result is placed back in reg-
placed in the W register. If ’d’ is 1,
ister ’f’.
the result is placed back in regis-
If the result is 1, the next instruc-
ter ’f’.
tion is executed. If the result is 0,
If the result is 1, the next instruc-
then a NOP is executed instead
tion is executed. If the result is 0, a
making it a 2TCY instruction.
NOP is executed instead making it
a 2TCY instruction.
IORLW Inclusive OR Literal with W MOVLW Move Literal to W
Syntax: [ label ] IORLW k Syntax: [ label ] MOVLW k
Operands: 0 ≤ k ≤ 255 Operands: 0 ≤ k ≤ 255
Operation: (W) .OR. k → (W) Operation: k → (W)
Status Affected: Z Status Affected: None
Description: The contents of the W register are Description: The eight bit literal 'k' is loaded
OR’ed with the eight bit literal 'k'. into W register. The don’t cares
The result is placed in the W reg- will assemble as 0’s.
ister.

MOVWF Move W to f
IORWF Inclusive OR W with f Syntax: [ label ] MOVWF f
Syntax: [ label ] IORWF f,d Operands: 0 ≤ f ≤ 127
Operands: 0 ≤ f ≤ 127 Operation: (W) → (f)
d ∈ [0,1]
Status Affected: None
Operation: (W) .OR. (f) → (destination)
Description: Move data from W register to reg-
Status Affected: Z ister '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 regis-
ter 'f'.

NOP No Operation
Syntax: [ label ] NOP
MOVF Move f Operands: None
Syntax: [ label ] MOVF f,d Operation: No operation
Operands: 0 ≤ f ≤ 127 Status Affected: None
d ∈ [0,1]
Description: No operation.
Operation: (f) → (destination)
Status Affected: Z
Description: The contents of register f are
moved to a destination dependant
upon the status of d. If d = 0, des-
tination 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.
RETFIE Return from Interrupt RLF Rotate Left f through Carry
Syntax: [ label ] RETFIE Syntax: [ label ] RLF f,d
Operands: None Operands: 0 ≤ f ≤ 127
Operation: TOS → PC, d ∈ [0,1]
1 → GIE Operation: See description below
Status Affected: None Status Affected: C
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’.
C Register f

RETLW Return with Literal in W


Syntax: [ label ] RETLW k RRF Rotate Right f through Carry
Operands: 0 ≤ k ≤ 255 Syntax: [ label ] RRF f,d
Operation: k → (W); Operands: 0 ≤ f ≤ 127
TOS → PC d ∈ [0,1]
Status Affected: None Operation: See description below
Description: The W register is loaded with the Status Affected: C
eight bit literal ’k’. The program
Description: The contents of register ’f’ are
counter is loaded from the top of
rotated one bit to the right through
the stack (the return address).
the Carry Flag. If ’d’ is 0, the result
This is a two cycle instruction.
is placed in the W register. If ’d’ is
1, the result is placed back in reg-
ister ’f’.
C Register f

RETURN Return from Subroutine


Syntax: [ label ] RETURN
Operands: None SLEEP
Operation: TOS → PC Syntax: [ label SLEEP
]
Status Affected: None
Operands: None
Description: Return from subroutine. The stack
is POPed and the top of the stack Operation: 00h → WDT,
(TOS) is loaded into the program 0 → WDT prescaler,
counter. This is a two cycle 1 → TO,
instruction. 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.
SUBLW Subtract W from Literal XORLW Exclusive OR Literal with W
Syntax: [ label ] SUBLW k Syntax: [label] XORLW k
Operands: 0 ≤ k ≤ 255 Operands: 0 ≤ k ≤ 255
Operation: k - (W) → (W) Operation: (W) .XOR. k → (W)
Status Affected: C, DC, Z Status Affected: Z
Description: The W register is subtracted (2’s Description: The contents of the W register
complement method) from the are XOR’ed with the eight bit lit-
eight bit literal 'k'. The result is eral 'k'. The result is placed in
placed in the W register. the W register.

SUBWF Subtract W from f XORWF Exclusive OR W with f


Syntax: [ label ] SUBWF f,d Syntax: [label] XORWF f,d
Operands: 0 ≤ f ≤ 127 Operands: 0 ≤ f ≤ 127
d ∈ [0,1] d ∈ [0,1]

Operation: (f) - (W) → (destination) Operation: (W) .XOR. (f) → (destination)

Status Affected: C, DC, Z Status Affected: Z

Description: Subtract (2’s complement method) Description: Exclusive OR the contents of the
W register from register 'f'. If 'd' is 0, W register with register 'f'. If 'd' is
the result is stored in the W regis- 0, the result is stored in the W
ter. If 'd' is 1, the result is stored register. If 'd' is 1, the result is
back in register 'f'. 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 regis-
ter. 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 impresión está solo permitida para la CEE - UTN Facultad Regional Córdoba Página 58 de 58

También podría gustarte