Microcontroladores PIC16F87x.pdf

58
UTILIZACIÓN DE LOS MICROCONTROLADORES PIC serie 16F87X MICROCHIP TECHNOLOGY Docente: Oscar Celis ****** CEE ******* UTN - Facultad Regional Córdoba

Transcript of Microcontroladores PIC16F87x.pdf

Page 1: Microcontroladores PIC16F87x.pdf

UTILIZACIÓN DE LOS MICROCONTROLADORES PIC serie 16F87XMICROCHIP TECHNOLOGY

Docente: Oscar Celis

****** CEE *******UTN - Facultad Regional Córdoba

Page 2: Microcontroladores PIC16F87x.pdf

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

ÍNDICE

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

Page 3: Microcontroladores PIC16F87x.pdf

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

1.1 Arquitectura Harvard vs. Arquitectura Von Neuman

La arquitectura tradicional de computadoras y microprocesadores se basa en elesquema propuesto por John Von Neumann, en el cual la unidad central de proceso, oCPU, esta conectada a una memoria única que contiene las instrucciones del programa ylos datos (figura 1.1.1). El tamaño de la unidad de datos o instrucciones esta fijado por elancho del bus de la memoria. Es decir que un microprocesador de 8 bits, que tieneademás un bus de 8 bits que lo conecta con la memoria, deberá manejar datos einstrucciones de una o más unidades de 8 bits (bytes) de longitud. Cuando deba accedera una instrucción o dato de más de un byte de longitud, deberá realizar más de un accesoa la memoria. Por otro lado este bus único limita la velocidad de operación delmicroprocesador, ya que no se puede buscar de memoria una nueva instrucción, antes deque 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 buscarinstrucciones complejas,

b) que la velocidad de operación (o ancho de banda de operación) esta limitada por elefecto de cuello de botella que significa un bus único para datos e instrucciones queimpide 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 elCPU esta conectado a dos memorias por intermedio de dos buses separados. Una de lasmemorias contiene solamente las instrucciones del programa, y es llamada Memoria dePrograma. 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 distintosanchos. Para un procesador de Set de Instrucciones Reducido, o RISC (ReducedInstrucción Set Computer), el set de instrucciones y el bus de la memoria de programapueden diseñarse de manera tal que todas las instrucciones tengan una sola posición dememoria de programa de longitud. Además, como los buses son independientes, el CPUpuede estar accediendo a los datos para completar la ejecución de una instrucción, y almismo tiempo estar leyendo la próxima instrucción a ejecutar. Se puede observarclaramente que las principales ventajas de esta arquitectura son:

Page 4: Microcontroladores PIC16F87x.pdf

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

a) que el tamaño de las instrucciones no esta relacionado con el de los datos, y por lotanto puede ser optimizado para que cualquier instrucción ocupe una sola posición dememoria 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 debenposeer instrucciones especiales para acceder a tablas de valores constantes que puedaser necesario incluir en los programas, ya que estas tablas se encontraran físicamente enla 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 arquitecturaHarvard, con una memoria de datos de 8 bits, y una memoria de programa que, según elmodelo, puede ser de 12 bits para los 16C5X, 14 bits para los 16CXX y 16 bits para los17CXX.

1.2 Diagrama de bloquesF L A S H

P rog ra mM e m o ry

13 D a ta B u s 8

14P rog ra mB u s

In s tru c tio n re g

P ro g ra m C ou n te r

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

R A MF ile

R e g is te rs

D ire c t A d d r 7

R A M A dd r (1) 9

A d d r M U X

In d ire c tA d d r

F S R re g

S TAT U S re g

M U X

A L U

W re g

P ow e r-u pT im e r

O s c illa to rS ta r t-u p T im e r

P ow e r-o nR e s e t

W a tc h d o gT im e r

In s tru c tio nD e c o d e &

C o n tro l

T im in gG e n e ra tio n

O S C 1/C L K INO S C 2/C L K O U T

M C L R V D D , V S S

P O R TA

P O R T B

P O R T C

P O R T D

P O R T E

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

R C 0/T 1O S O /T 1C K IR C 1/T 1O S I/C C P 2R C 2/C C P 1R C 3/S C K /S C LR C 4/S D I/S D AR C 5/S D OR C 6/T X /C KR C 7/R X /D T

R D 7/P S P 7:R D 0/P S P 0

R E 0/A N 5/R D

R E 1/A N 6/W R

R E 2/A N 7/C S

8

8

B row n -o u tR e s e t

N o te 1 : H ig h e r o rd e r b its a re from th e S TAT U S re g is te r.

U S A R TC C P 1,2S y n c h ro n o u s

10-b it A /DT im e r0 T im e r1 T im e r2

S e ria l P o r t

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

R A 2/A N 2R A 1/A N 1R A 0/A N 0

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

8

3

D a ta E E P R O M

R B 0/IN TR B 1R B 2R B 3/P G MR B 4R B 5R B 6/P G CR B 7/P G D

In -C irc u itD e bu g g e r

L ow -V o lta g eP ro g ra m m in g

D e v i c e P ro g ra mF L A S H

D a ta M e m o ry D a ta E E P RO M

P IC 16F 874 4K 192 B y te s 128 B y te s

P IC 16F 877 8K 368 B y te s 256 B y te s

Page 5: Microcontroladores PIC16F87x.pdf

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

1.3 Mapas de memoria Memoria Interna (RAM)

Organización

La memoria interna de datos, también llamada archivo de registros (register file), estadividida 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 registrosde 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 lostimers, 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 elmecanismo de direccionamiento indirecto.Como se observa este microcontrolador posee cuatro bancos de memoria y puedenseleccionarse desde el registro STATUS.

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

T M R 0P C L

S TAT U SF S R

P O R TAP O R T BP O R T C

P C L AT HIN T C O N

P IR 1

T M R 1LT M R 1HT 1C O NT M R 2

T 2C O NS S P B U FS S P C O NC C P R 1LC C P R 1H

C C P 1C O N

O P T IO N _R E GP C L

S TAT U SF S R

T R IS AT R IS BT R IS C

P C L AT HIN T C O N

P IE 1

P C O N

P R 2S S PA D DS S P S TAT

00h01h02h03h04h05h06h07h08h09h0A h0B h0C h0D h0E h0F h10h11h12h13h14h15h16h17h18h19h1A h1B h1C h1D h1E h1F h

80h81h82h83h84h85h86h87h88h89h8A h8B h8C h8D h8E h8F h90h91h92h93h94h95h96h97h98h99h9A h9B h9C h9D h9E h9F h

20h A 0h

7F h F F hB a n k 0 B a n k 1

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 hy 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 28-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.

F ileA d d re s s

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

P C LS TAT U S

F S R

P C L AT HIN T C O N

P C LS TAT U S

F S R

P C L AT HIN T C O N

100h101h102h103h104h105h106h107h108h109h10A h10B h10C h10D h10E h10F h110h111h112h113h114h115h116h117h118h119h11A h11B h11C h11D h11E h11F h

180h181h182h183h184h185h186h187h188h189h18A h18B h18C h18D h18E h18F h190h191h192h193h194h195h196h197h198h199h19A h19B h19C h19D h19E h19F h

120h 1A 0h

17F h 1F F hB a n k 2 B a n k 3

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

P O R T DP O R T E

T R IS D

A D R E S L

T R IS E

T M R 0 O P T IO N _R E G

P IR 2 P IE 2

R C S TAT X R E GR C R E GC C P R 2LC C P R 2H

C C P 2C O NA D R E S HA D C O N 0

T X S TAS P B R G

A D C O N 1

G e n e ra lP u rp o s eR e g is te r

G e n e ra lP u rp o s eR e g is te r

G e n e ra lP u rp o s eR e g is te r

G e n e ra lP u rp o s eR e g is te r

1E F h1F 0ha c c e s s e s

70h - 7F h

E F hF 0ha c c e s s e s

70h -7F h

16F h170ha c c e s s e s

70h -7F h

G e n e ra lP u rp o s eR e g is te r

G e n e ra lP u rp o s eR e g is te r

T R IS BP O R T B

96 B y te s80 B y te s 80 B y te s 80 B y te s

16 B y te s 16 B y te s

(1)

(1)

(1)

(1)

S S P C O N 2

E E D ATAE E A D R

E E C O N 1E E C O N 2

E E D AT HE E A D R H

R e s e rv e d (2)

R e s e rv e d (2)

FIG. 1.3.1 Organización de la memoria Interna (RAM) en la familia PIC16F87X

Page 6: Microcontroladores PIC16F87x.pdf

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

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 opáginas de 2K posiciones. Esto se debe, como se verá, a las limitaciones dedireccionamiento 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 caminode los datos en el CPU de los microcontroladores PIC. Este diagrama puede norepresentar con exactitud el circuito interno de estos microcontroladores, pero es exacto yclaro desde la óptica del programador. La figura 1.4.1 representa el mismo diagrama paraun microprocesador ficticio de arquitectura tradicional. Se puede observar que la principaldiferencia entre ambos radica en la ubicación del registro de trabajo, que para los PIC'sse denomina W (Working Register), y para los tradicionales es el Acumulador (A).

Page 7: Microcontroladores PIC16F87x.pdf

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

Figura 1.4.1

En los microcontroladores tradicionales todas las operaciones se realizan sobre elacumulador. La salida del acumulador esta conectada a una de las entradas de la UnidadAritmética y Lógica (ALU), y por lo tanto éste es siempre uno de los dos operandos decualquier instrucción. Por convención, las instrucciones de simple operando (borrar,incrementar, decrementar, complementar), actúan sobre el acumulador. La salida de laALU va solamente a la entrada del acumulador, por lo tanto el resultado de cualquieroperación siempre quedara en este registro. Para operar sobre un dato de memoria, luegorealizar la operación siempre hay que mover el acumulador a la memoria con unainstrucción adicional.En los microcontroladores PIC, la salida de la ALU va al registro W y también a lamemoria de datos, por lo tanto el resultado puede guardarse en cualquiera de los dosdestinos. En las instrucciones de doble operando, uno de los dos datos siempre debeestar en el registro W, como ocurría en el modelo tradicional con el acumulador. En lasinstrucciones de simple operando el dato en este caso se toma de la memoria (tambiénpor convención). La gran ventaja de esta arquitectura es que permite un gran ahorro deinstrucciones ya que el resultado de cualquier instrucción que opere con la memoria, yasea de simple o doble operando, puede dejarse en la misma posición de memoria o en elregistro W, según se seleccione con un bit de la misma instrucción. Las operaciones conconstantes provenientes de la memoria de programa (literales) se realizan solo sobre elregistro W.

Page 8: Microcontroladores PIC16F87x.pdf

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

En la memoria de datos de los PIC's se encuentran ubicados casi todos los registros decontrol del microprocesador y sus periféricos autocontenidos, y también las posiciones dememoria de usos generales.

Contador de Programa

Este registro, normalmente denominado PC, es totalmente equivalente al de todos losmicroprocesadores y contiene la dirección de la próxima instrucción a ejecutar. Seincrementa automáticamente al ejecutar cada instrucción, de manera que la secuencianatural de ejecución del programa es lineal, una instrucción después de la otra. Algunasinstrucciones que llamaremos de control, cambian el contenido del PC alterando lasecuencia lineal de ejecución. Dentro de estas instrucciones se encuentran el GOTO y elCALL que permiten cargar en forma directa un valor constante en el PC haciendo que elprograma salte a cualquier posición de la memoria. Otras instrucciones de control son losSKIP o "salteos" condicionales, que producen un incremento adicional del PC si secumple una condición especifica, haciendo que el programa saltee, sin ejecutar, lainstrucción siguiente.El PC es un registro de 13 bits en los 16F87X, lo que permite direccionar 8192 posicionesde memoria de programa.Al resetearse el microprocesador, todos los bits del PC toman valor 0, de manera que ladirección de arranque del programa es siempre la primera posición de memoria deprograma. 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énaccesible al programador como registro de memoria interna de datos, en la posición de02. Es decir que cualquier instrucción común que opere sobre registros puede serutilizada para alterar el PC y desviar la ejecución del programa. El uso indiscriminado deeste tipo de instrucciones complica el programa y puede ser muy peligroso, ya que puedeproducir comportamientos difíciles de predecir. Sin embargo, algunas de estainstrucciones utilizadas con cierto método, pueden ser muy útiles para implementarpoderosas estructuras de control tales como el goto computado. Como elmicroprocesador 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ñolimitado, 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, paraguardar las direcciones de retorno de subrrutinas e interrupciones. Cada posición es de13 bits y permite guardar una copia completa del PC. Como en toda memoria tipo pila, losdatos 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 16posiciones. 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, solose pueden anidar ocho niveles de subrutinas, es decir que una subrutina que es llamadadesde el programa principal, puede a su vez llamar a otra subrutina, hasta un máximo de8, siempre que no existan interrupciones habilitadas, en tal caso deberán disminuir lacantidades de rutinas anidadas en el main, porque de lo contrario se desbordará el Stack.

Page 9: Microcontroladores PIC16F87x.pdf

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

Esto de hecho representa una traba para el programador y además parece impedir odificultar la programación estructurada, sin embargo es una buena solución decompromiso ya que estos microcontroladores están diseñados para aplicaciones de altavelocidad en tiempo real, en las que el overhead (demoras adicionales) que ocasiona unexcesivo anidamiento de subrutinas es inaceptable. Por otra parte existen técnicas deorganización del programa que permiten mantener la claridad de la programaciónestructurada, sin necesidad de utilizar tantas subrutinas anidadas.Como ya se menciono anteriormente, el stack y el puntero interno que lo direcciona, soninvisibles para el programador, solo se los accede automáticamente para guardar orescatar las direcciones de programa cuando se ejecutan las instrucciones de llamada oretorno de subrutinas, o cuando se produce una interrupción o se ejecuta una instrucciónde 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 yZ), 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 P 1 R P 0 T O P D Z D C C R = R e a d a b le b itW = 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 it7 b it0

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 by te s

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

b it 3 : P D : P ow e r-d ow n b it1 = A fte r p ow e r-u p o r by th e CLRWDT in s tru c tio n0 = 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 it1 = 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 ro0 = 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 ze ro

b it 1 : D C : D ig it c a rry /b o rrow b it (ADDWF, ADDLW,SUBLW,SUBWF in s tru c tio n s ) (fo r b o rrow th e p o la rity is re v e rs e d )1 = A c a rry -o u t from th e 4th low o rd e r b it o f th e re s u lt o c c u rre d0 = N o c a rry -o u t from th e 4th low o rd e r b it o f th e re s u lt

b it 0 : C : C a rry /b o rrow b it (ADDWF, ADDLW,SUBLW,SUBWF in s tru c tio n s )1 = A c a rry -o u t from 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 d0 = N o c a rry -o u t from 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 dN o te : F o r b o rrow 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 by a d d in g th e tw o ’s c om p le m e n t o f th es 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 low o rd e r b it o fth e s o u rc e re g is te r.

Page 10: Microcontroladores PIC16F87x.pdf

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

REGISTROS ESPECIALES IMPORTANTES

Las primeras posiciones del área de datos están reservadas para alojar registros depropósito especial, quedando las restantes libres para contener los datos u operandosque se desee (registros de propósito general).El registro INDF que ocupa la posición 0 no está implementando físicamente y, como seha explicado, se le referencia en el direccionamiento indirecto de datos aunque se utilizael contenido de FSR.En la dirección 0x01 esta el registro TMR0 (Temporizador) que puede ser leído y escritocomo cualquier otro registro. Puede incrementar su valor con una señal externa aplicadaal 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 seañ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 losseñ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 lasinstrucciones 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 Ede E/S. Pueden ser leídos y escritos como cualquier otro registro y manejan los valores delos 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 paralelode usos generales llamados Puerto A, Puerto B, Puerto C, Puerto D y Puerto E. El PuertoA es de cinco bits, el Puerto E es de tres bits y los demás son de 8 bits cada uno. ElPuerto 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 losperiféricos asociados, etc. En la siguiente figura podemos ver en forma reducida ungráfico típico, con los elementos comunes para todos los puertos.

Circuito equivalente de puerto I/O

Page 11: Microcontroladores PIC16F87x.pdf

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

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

1.6 Diagrama lógico

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

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

R B 5

R B 4R B 3/P G M

R B 2

R B 1

R B 0/IN T

V D D

V S S

R D 7/P S P 7

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

R D 4/P S P 4

R C 7/R X /D T

R C 6/T X /C K

R C 5/S D O

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

R D 2/P S P 2

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

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

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

R A 4/T 0C K I

R A 5/A N 4/S S

R E 0/R D /A N 5

R E 1/W R /A N 6

R E 2/C S /A N 7V D D

V S S

O S C 1/C L K IN

O S C 2/C L K O U T

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

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

R C 2/C C P 1

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

R D 1/P S P 1

1

2

3

4

5

6

7

8

910

11

12

13

14

15

16

17

18

1920

40

39

38

37

36

35

34

33

3231

30

2928

27

26

25

24

23

2221

PIC

16F877/874

P D IP

PIC1

6F87

6/87

3

1011

23456

1

87

9

121314 15

1617181920

232425262728

2221

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

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

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

V S S

O S C 1/C L K INO S C 2/C L K O U T

R C 0/T 1O S O /T 1C K IR C 1/T 1O S I/C C P 2

R C 2/C C P 1R C 3/S C K /S C L

R B 7/P G DR B 6/P G CR B 5R B 4R B 3/P G MR B 2R B 1R B 0/IN TV D D

V S S

R C 7/R X /D TR C 6/T X /C KR C 5/S D OR C 4/S D I/S D A

D IP , S O IC

1011121314151617

18 19 20 21 22 23 24 25 26

44

87

6 5 4 3 2 1

27 28

293031323334353637383940414243

9

P IC 16F 877

R A 4/T 0C K IR A 5/A N 4/S SR E 0/R D /A N 5

O S C 1/C L K INO S C 2/C L K O U T

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

R E 1/W R /A N 6R E 2/C S /A N 7

V D DV S S

R B 3/P G MR B 2R B 1R B 0/IN TV D DV S SR D 7/P S P 7R D 6/P S P 6R D 5/P S P 5R D 4/P S P 4R C 7/R X /D T

RA

3/A

N3/

VR

EF+

RA

2/A

N2/

VR

EF-

RA

1/A

N1

RA

0/A

N0

MC

LR/V

PP/T

HV

NC

RB

7/P

GD

RB

6/P

GC

RB

5R

B4

NC

NC

RC

6/T

X/C

KR

C5/

SD

OR

C4/

SD

I/SD

AR

D3/

PS

P3

RD

2/P

SP

2R

D1/

PS

P1

RD

0/P

SP

0R

C3/

SC

K/S

CL

RC

2/C

CP

1R

C1/

T1O

SI/C

CP

2

P L C C

P IC 16F 874

1011

23456

1

18

19

20

21

22

12

13

14

15

38

87

44

43

42

41

40

39

16

17

2930313233

232425262728

36

34

35

9

P IC 16F 877

37

RA

3/A

N3/V

RE

F+

RA

2/A

N2/V

RE

F-

RA

1/A

N1

RA

0/A

N0

MC

LR

/VP

P/T

HV

NC

RB

7/P

GD

RB

6/P

GC

RB

5R

B4

NC

RC

6/T

X/C

KR

C5/S

DO

RC

4/S

DI/

SD

AR

D3/P

SP

3R

D2/P

SP

2R

D1/P

SP

1R

D0/P

SP

0R

C3/S

CK

/SC

LR

C2/C

CP

1R

C1/T

1O

SI/

CC

P2

NC

N CR C 0/T 1O S O /T 1C K IO S C 2/C L K O U TO S C 1/C L K INV S SV D DR E 2/A N 7/C SR E 1/A N 6/W RR E 0/A N 5/R DR A 5/A N 4R A 4/T 0C K I

R C 7/R X /D TR D 4/P S P 4R D 5/P S P 5R D 6/P S P 6R D 7/P S P 7

V S SV D D

R B 0/IN TR B 1R B 2

R B 3/P G M

Q F P

P IC 16F 874

Page 12: Microcontroladores PIC16F87x.pdf

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

1.7 Temporizador 0 / Contador (TMR0)

Este dispositivo es uno de los tres que posee esta familia de microcontroladores, llamadoReal Time Clock / Counter, es básicamente un contador de 8 bits, constituido por elregistro 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 entradaespecial (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 ocomo 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 registroOPTION. Este registro contiene los bits necesarios para seleccionar modo contador omodo timer, flanco de conteo en modo contador, prescaler para TMR0 o para WDT yconstante 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 B P U IN T E D G T 0C S T 0S E P S A P S 2 P S 1 P S 0 R = R e a d a b le b itW = 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 it7 b it0

b it 7 : R B P U : P O R T B P u ll-u p E n a b le b it1 = P O R T B pu ll-u p s a re d is a b le d0 = P O R T B pu ll-u p s a re e n a b le d by in d iv id u a l p o r t 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 it1 = In te rru p t o n ris in g e d g e o f R B 0/IN T p in0 = 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 it1 = Tra n s itio n o n R A 4/T 0C K I p in0 = 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 it1 = In c re m e n t o n h ig h -to -low tra n s itio n o n R A 4/T 0C K I p in0 = In c re m e n t o n low -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 it1 = P re s c a le r is a s s ig n e d to th e W D T0 = P re s c a le r is a s s ig n e d to th e T im e r0 m odu 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

000001010011100101110111

1 : 21 : 41 : 81 : 161 : 321 : 641 : 1281 : 256

1 : 11 : 21 : 41 : 81 : 161 : 321 : 641 : 128

B it V a lu e T M R 0 R a te W D T R a te

Page 13: Microcontroladores PIC16F87x.pdf

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

Circuito equivalente del TMR0 y el prescaler.

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

R A 4/T 0C K I

T 0S E

0

1

1

0p in

T 0C S

F o s c /4

P ro g ra m m a b leP re s c a le r

S y n c w ithIn te rn a lc lo c k s

T M R 0

P S o u t

(2 c y c le d e la y )

P S o u t

D a ta bu s

8

P S AP S 2, P S 1 , P S 0S e t in te rru p ta g b it T 0 IFo n ov e ro w

3

En el esquema se puede observar claramente como operan los bits de configuraciónT0SE, T0CS y PSA, en cualquiera de sus combinaciones. Se observa además que en laentrada del contador TMR0 hay un circuito de sincronización que introduce una demora dedos ciclos del clock de instrucciones (Fosc. / 4). Al escribir sobre el TMR0automáticamente se resetea este circuito, por lo tanto solo se incrementara dos ciclosdespués.El prescaler es un contador asincrónico de 8 bits más un multiplexor 8 a 1 comandado porlos bits PS0 a PS2, que permite seleccionar como salida a cualquiera de los bits delcontador. 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 SLEEPborran el prescaler, si este esta programado para operar como postscaler del watch dogtimer (PSA=1).

1.8 Interrupciones

Los 16F87X tienen la posibilidad de contar con sistema de interrupciones. Este sistemaconsiste en un mecanismo por el cual un evento interno o externo, asincrónico respectodel programa, puede interrumpir la ejecución de éste produciendo automáticamente unsalto a una subrutina de atención, de manera que pueda atender inmediatamente elevento, y retomar luego la ejecución del programa exactamente en donde estaba almomento de ser interrumpido. Este mecanismo es muy útil por ejemplo para el manejo detimers o rutinas que deben repetirse periódicamente (refresh de display, antirebote deteclado, etc.), detección de pulsos externos, recepción de datos, etc. Existen catorcefuentes 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 seproduce el mismo efecto que ocurriría si el programa tuviese un CALL 0004h en el puntoen que se produjo la interrupción. En uno de los registros de control del sistema deinterrupciones existe un bit de habilitación general de interrupciones GIE, que debe serprogramado en 1 para que las interrupciones puedan actuar. Al producirse unainterrupción, este bit se borra automáticamente para evitar nuevas interrupciones. Lainstrucción RETFIE que se utiliza al final de la rutina de interrupción, es idéntica a unretorno de subrutina, salvo que además coloca en uno automáticamente el bit GIE,

Page 14: Microcontroladores PIC16F87x.pdf

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

volviendo a habilitar las interrupciones. Dentro de la rutina de interrupción, el programadeberá probar el estado de los flags de interrupción de cada una de las fuenteshabilitadas, para detectar cual fue la que causo la interrupción y así decidir que accióntomar.

P S P IFP S P IE

A D IFA D IE

R C IFR C IE

T X IFT X IE

S S P IFS S P IE

C C P 1 IFC C P 1 IE

T M R 2IFT M R 2IE

T M R 1IFT M R 1IE

T 0 IFT 0 IE

IN T FIN T E

R B IFR B IE

G IE

P E IE

W a ke -u p (I f in S L E E P m od e )

In te rru p t to C P U

C C P 2 IEC C P 2 IF

T h e fo llow in g ta b le s h ow 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 e v i c 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 2IF T M R 1IF E E IF B C L IF C C P 2 IF

P IC 16F 876/873 Ye s Ye s Y e s - Y e s Y e s Y e s Y e s Y e s Y e s Y e s Y e s Y e s Y e s

P IC 16F 877/874 Ye s Ye s Y e s Y e s Y e s Y e s Y e s Y e s Y e s Y e s Y e s Y e s Y e s Y e s

B C L IEB C L IF

E E IFE E IE

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 lacombinación de todas las fuentes posibles y de los bits de habilitación. Existen dosgrupos de fuentes, unas que se habilitan con solo colocar en uno el bit GIE, y otras queademás necesitan que este puesto a uno el bit PEIE. Además, cada fuente deinterrupciones 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 laprocedencia de algunas a través de los bits de estado. El PIC 16F87X dispone de docefuentes de potenciales interrupciones:

Cada bit del registro INTCON tiene un significado particular, que es:

Page 15: Microcontroladores PIC16F87x.pdf

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

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 0 IE IN T E R B IE T 0 IF IN T F R B IF R = R e a d a b le b itW = 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 it7 b it0

b it 7 : G IE : G lo b a l In te rru p t E n a b le b it1 = E n a b le s a ll u n -m a s ke d in te rru p ts0 = 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 it1 = E n a b le s a ll u n -m a s ke d p e rip h e ra l in te rru p ts0 = D is a b le s a ll p e rip h e ra l in te rru p ts

b it 5 : T 0 IE : T M R 0 O ve ro w In te rru p t E n a b le b it1 = E n a b le s th e T M R 0 in te rru p t0 = 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 it1 = E n a b le s th e R B 0/IN T e x te rn a l in te rru p t0 = 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 r t C h a n g e In te rru p t E n a b le b it1 = E n a b le s th e R B po r t c h a n g e in te rru p t0 = D is a b le s th e R B po r t c h a n g e in te rru p t

b it 2 : T 0 IF : T M R 0 O ve ro w In te rru p t F la g b it1 = 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 it1 = 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 r t C h a n g e In te rru p t F la g b it1 = 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 on 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 ponera 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 deinterrupción situado en la dirección 0004. A dicho programa de interrupción le correspondecomprobar 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 queno se perturbe el tratamiento de la interrupción en curso por otras interrupcioneseventuales. Este bits se pone automáticamente a 1 al finalizar el programa de interrupcióncuando se ejecuta la instrucción RETFIE.Por último, los bits de indicación de interrupción permanecen funcionales incluso cuandolas interrupciones correspondientes no se autorizan.Debido a la incorporación de una cantidad importante de periféricos dentro de el PIC quese está analizando, es necesario contar con mas registros dedicados a configurar lasinterrupciones, estos son PIR1, PIE1, PIR2 y PIE2.

Page 16: Microcontroladores PIC16F87x.pdf

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

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 1 IE T M R 2IE T M R 1IE R = R e a d a b le b itW = 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 it7 b it0

b it 7 : P S P IE (1): P a ra lle l S la v e P o r t R e a d /W rite In te rru p t E n a b le b it1 = E n a b le s th e P S P re a d /w rite in te rru p t0 = D is a b le 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 n v e r te r In te rru p t E n a b le b it1 = E n a b le s th e A /D c o n v e r te r in te rru p t0 = D is a b le s th e A /D c o n v e r te r in te rru p t

b it 5 : R C IE : U S A R T R e c e iv e In te rru p t E n a b le b it1 = E n a b le s th e U S A R T re c e iv e in te rru p t0 = D is a b le s th e U S A R T re c e iv e in te rru p t

b it 4 : T X IE : U S A R T Tra n sm it In te rru p t E n a b le b it1 = E n a b le s th e U S A R T tra n sm it in te rru p t0 = D is a b le s th e U S A R T tra n sm 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 r t In te rru p t E n a b le b it1 = E n a b le s th e S S P in te rru p t0 = D is a b le s th e S S P in te rru p t

b it 2 : C C P 1 IE : C C P 1 In te rru p t E n a b le b it1 = E n a b le s th e C C P 1 in te rru p t0 = D is a b le 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 b le b it1 = E n a b le s th e T M R 2 to P R 2 m a tc h in te rru p t0 = D is a b le 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 b le b it1 = E n a b le s th e T M R 1 ov e ro w in te rru p t0 = D is a b le s th e T M R 1 ov e ro w in te rru p t

N o te 1 : P S P IE 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.

Page 17: Microcontroladores PIC16F87x.pdf

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

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 1 IF T M R 2IF T M R 1IF R = R e a d a b le b itW = W rita b le b it

- n = V a lu e a t P O R re s e tb it7 b it0

b it 7 : P S P IF (1): P a ra lle l S la v e P o r t R e a d /W rite In te rru p t F la g b it1 = 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 r te r In te rru p t F la g b it1 = A n A /D c o n v e rs io n c om p le te d0 = T h e A /D c o n v e rs io n is n o t c om 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 it1 = T h e U S A R T re c e iv e bu ffe r is fu ll0 = 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 sm it In te rru p t F la g b it1 = T h e U S A R T tra n sm it bu ffe r is e m p ty0 = T h e U S A R T tra n sm 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 r t (S S P ) In te rru p t F la g1 =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 from th ein 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 :S P IA tra n sm is s io n /re c e p tio n h a s ta ke n p la c e .I2C S la v eA tra n sm is s io n /re c e p tio n h a s ta ke n p la c e .I2C M a s te rA tra n sm 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 r t c o n d itio n w a s c om p le te d by th e S S P m odu le .T h e in itia te d s to p c o n d itio n w a s c om p le te d by th e S S P m odu le .T h e in itia te d re s ta r t c o n d itio n w a s c om p le te d by th e S S P m odu le .T h e in itia te d a c k n ow le d g e c o n d itio n w a s c om p le te d by th e S S P m odu le .A s ta r t c o n d itio n o c c u rre d w h ile th e S S P m odu 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 odu 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 1 IF : C C P 1 In te rru p t F la g b itC a p tu re M od e1 = 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 dC om pa re M od e1 = A T M R 1 re g is te r c om pa 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 om pa re m a tc h o c c u rre dP W M M odeU n u s e d in th is m od 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 it1 = 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 ve ro w In te rru p t F la g b it1 = 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.

Page 18: Microcontroladores PIC16F87x.pdf

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

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 itW = 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 it7 b it0

b it 7 : U n im 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 im 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 le1 = E n a b le E E W rite In te rru p t0 = 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 le1 = E n a b le B u s C o llis io n In te rru p t0 = D is a b le B u s C o llis io n In te rru p t

b it 2 -1 : U n im p l e m e n te d : R e a d a s '0 '

b it 0 : C C P 2 IE : C C P 2 In te rru p t E n a b le b it1 = E n a b le s th e C C P 2 in te rru p t0 = 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 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 IF B C L IF — — C C P 2IF R = R e a d a b le b itW = 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 it7 b it0

b it 7 : U n im 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 im 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 it1 = T h e w rite o p e ra tio n c om 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 om 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 g1 =A bu 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 I2C m a s te r m od e0 =N o bu s c o llis io n h a s o c c u rre d

b it 2 -1 : U n im p l e m e n te d : R e a d a s '0 '

b it 0 : C C P 2 IF : C C P 2 In te rru p t F la g b itC a p tu re M od e1 = 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 dC om pa re M od e1 = A T M R 1 re g is te r c om pa 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 om pa re m a tc h o c c u rre dP W M M odeU n u s e d

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.

Registro PIR2 - Dirección 0x0D

Page 19: Microcontroladores PIC16F87x.pdf

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

LOS PUERTOS PARALELOS

Los PIC16F874/7 disponen de cinco puertos paralelo, denominados puerto A hasta puertoE. Las líneas de estos puertos se pueden programar individualmente como entradas ocomo salidas. No obstante, con el fin de que los encapsulados del PIC 16F87X no tenganexcesivos pines, y teniendo en cuenta la cantidad de recursos internos disponibles, lamayoría de las líneas de estos puertos se comparten con las líneas de entrada/salida deotros recursos, punto del que ya se mensionó anteriormente. Vamos a ver que alcompartir líneas a veces influye en la estructura de los correspondientes puertos, y puedeimponer algunas restricciones de utilización.

EL PUERTO A

El puerto "A" dispone de seis bits. Las líneas representan el esquema interno de lasiguiente figura. Todas ellas están provistas como salidas con un buffer CMOS normal, ycomo entradas aceptan niveles TTL. Como puede comprobar en esta figura, la entrada yla salida pasan por un latch.

D a tabu s

QD

QC K

QD

QC K

Q D

E N

P

N

W RP o r t

W RT R IS

D a ta L a tc h

T R IS L a tc h

R D T R IS

R D P O R T

V S S

V D D

I/O p in (1)

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 dV S S .

A n a lo gin p u tm od e

T T Lin p u tbu ffe r

To A /D C o n v e r te r

D a tabu s

W RP O R T

W RT R IS

R D P O R T

D a ta L a tc h

T R IS L a tc h

R D T R IS

S c h m ittTrig g e rin p u tbu ffe r

N

V s s

I/O p in (1)

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

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.

QD

QC K

QD

QC K

EN

Q D

E N

RA0, RA1, RA2, RA3 y RA5

RA4

En el PIC16F87X, lasinco líneas del primer gráfico pueden ser usadas como entradas delconversor analógico/digital integrado. Cuando este conversor se activa, estas líneaspasan 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 RA4tiene una estructura algo diferente. En efecto, en este caso, la salida es de tipo drenadorabierto (el equivalente en MOS al clásico colector abierto), y la entrada está provista de untrigger Schmitt. Es común con la entrada externa del temporizador 0.

Page 20: Microcontroladores PIC16F87x.pdf

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

EL PUERTO B

El puerto B es un puerto bidireccional de 8 bits completo, en le que sólo una línea secomparte con otro recurso interno. Las líneas RB0-RB3 adoptan la estructura interna quepuede ver en la figura de la izquierda, mientras que las líneas RB4-RB7 tienen laestructura de la figura derecha. El motivo de esto se encuentra en el hecho de que esposible programar una interrupción durante un cambio de estado de una cualquiera de laslíneas RB0-RB3. Si se utiliza esta posibilidad, el simple hecho de que cualquiera de laslíneas cambie de estado genera una interrupción (ver la descripción anterior del registroINTCON). Tenga presente que sólo las líneas programadas como entradas sonsusceptibles de ser monitorizadas mediante este procedimiento.

D a ta L a tc h

R B P U (2)P

V D D

QD

C K

QD

C K

Q D

E N

D a ta bu s

W R P o r t

W R T R IS

R D T R IS

R D P o r t

w e a kp u ll-u p

R D P o r t

R B 0/IN T

I/Op in (1)

T T LIn p u tB u ffe r

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

a n d c le a r th e R B P U b it (O P T IO N _R E G <7>).

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

T R IS L a tc h

D a ta L a tc h

F rom o th e r

R B P U (2)P

V D D

I/O

QD

C K

QD

C K

Q D

E N

Q D

E N

D a ta bu s

W R P o r t

W R T R IS

S e t R B IF

T R IS L a tc h

R D T R IS

R D P o r t

R B 7:R B 4 p in s

w e a kp u ll-u p

R D P o r t

L a tc h

T T LIn p u tB u ffe r

p in (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 .

S TB u ffe r

R B 7:R B 6 in s e ria l p ro g ra m m in g m od e

Q 3

Q 1

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 disponede una resistencia de pull-up de alto valor conectada a la alimentación. Esta resistenciade pull-up puede activarse o no gracias al bit RBPU del registro OPTION (ver ladescripció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 laslí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 registroTRISB, en el que un bit a 0 activa a la línea correspondiente como salida, y un bit a 1 laactiva como entrada. Evidentemente, después de un reset, todos los bits del registroTRISB se ponen a 1.

Page 21: Microcontroladores PIC16F87x.pdf

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

EL PUERTO C

El puerto C es un puerto bidireccional de 8 bits completo, en el que todas las líneas secomparten con los demás recursos internos, según la repartición vista en la descripción delas señales disponibles en el circuito. A pesar de esto, cada una de las líneas de estepuerto adoptan la misma estructura, la cual se puede ver en la siguiente figura. se disponede 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)

D a ta bu s

W RP O R T

W RT R IS

R D

D a ta L a tc h

T R IS L a tc h

R D T R ISS c h m ittTrig g e r

QD

QC K

Q D

E N

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

1

QD

QC K

P

N

V D D

V S S

P O R T

P e rip h e ra l

O E (3)

P e rip h e ra l in p u t

I/Op in (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 .2 : P o r t/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 r t

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 b le ) is o n ly a c tiv a te d if

p e rip h e ra l s e le c t is a c tiv e .

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

D a ta bu sW RP O R T

W RT R IS

R D

D a ta L a tc h

T R IS L a tc h

R D T R ISS c h m ittTrig g e r

QD

QC K

Q D

E N

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

1

QD

QC K

P

N

V D D

V S S

P O R T

P e rip h e ra l

O E (3)

S S P l in p u t

I/Op in (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 .2 : P o r t/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 r t

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 b le ) is o n ly a c tiv a te d if

p e rip h e ra l s e le c t is a c tiv e .

0

1

C K E

S S P S TAT <6>

S c h m ittTrig g e rw ithS M B u sle v e ls

RC0-RC2 / RC5-RC7

RC3-RC4

El sentido de trabajo de cada una de las líneas de este puerto es controlado por el registroTRISC, en el que un bit a 0, activa a la línea correspondiente como salida, y un bit a 1 laactiva como entrada. Evidentemente, después de un reset, todos los bits del registroTRISC se ponen a 1.

Page 22: Microcontroladores PIC16F87x.pdf

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

EL PUERTO D

El puerto D es un puerto bidireccional de 8 bits completo, que no comparte sus líneas deentrada/salida con ningún otro recurso. En la siguiente figura puede ver su esquemainterno, en el que observamos un buffer TTL como salida, y un trigger Schimtt comoentrada.

D a tabu s

W RP O R T

W RT R IS

R D P O R T

D a ta L a tc h

T R IS L a tc h

R D T R IS

S c h m ittTrig g e rin p u tbu ffe r

I /O p in (1)

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 .

QD

C K

QD

C K

E N

Q D

E N

Este puerto también dispone de un modo de funcionamiento especial, denominado modoesclavo paralelo, que se muestra en la siguiente figura, y que utiliza tres líneas delpuertoE.

D a ta bu s

W RP O R T

R D

R D x

QD

C K

E N

Q D

E NP O R T

p in

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 e a d

C h ip S e le c t

W rite

R D

C S

W R

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 .

T T L

T T L

T T L

T T L

Page 23: Microcontroladores PIC16F87x.pdf

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

PRINCIPIO DE UTILIZACION DEL PUERTO D EN MODO ESCLAVO PARALELO.

En este modo, los PIC16F87X se deben considerar como circuitos de interfaz clásicospara un microprocesador de 8 bits. Las líneas del puerto D se convierten en las líneas delbus de datos de este micro, mientras que las tres líneas de control clásicas: de lectura, deescritura y de activación del circuito (chip select) están disponibles en el puerto E. Másadelante, en el aparato dedicado al registro TRISE, veremos el principio defuncionamiento de este modo mediante los bits de control contenidos en este registro.

Cuando no funciona en modo esclavo paralelo, el puerto D se puede utilizarnormalmente. El sentido de trabajo de cada una de las líneas de este puerto es controladopor el registro TRISD, en el que un bit a 0 activa a la línea correspondiente como salida, yun bit a 1 la activa como entrada. Evidentemente, después de un reset, todos los bits delregistro TRISD se ponen a 1.

EL PUERTO E

El puerto E no dispone más que de tres líneas bidireccionales, que respetan el esquemade la siguiente figura. Suministran un buffer CMOS como salida y trigger Schmitt comoentrada.

D a tabu s

W RP O R T

W RT R IS

R D P O R T

D a ta L a tc h

T R IS L a tc h

R D T R IS

S c h m ittTrig g e rin p u tbu ffe r

QD

C K

QD

C K

E N

Q D

E N

I/O p in (1)

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 modoesclavo paralelo. El registro de control para el sentido de funcionamiento del puerto E,TRISE, adopta una estructura especial, como se ve a continuación

Page 24: Microcontroladores PIC16F87x.pdf

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

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 -1IB F O B F IB O V P S P M O D E — b it2 b it1 b it0 R = R e a d a b le b it

W = W rita b le b itU = 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 it7 b it0

b it 7 : IB F : In p u t B u ffe r F u ll S ta tu s b it1 = 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 by th e C P U0 = 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 it1 = T h e o u tp u t bu ffe r s til l h o ld s a p re v io u s ly w ritte n w o rd0 = T h e o u tp u t bu 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 od 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 ove 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 r t M od e S e le c t b it1 = P a ra lle l s la v e p o r t m od e0 = G e n e ra l p u rp o s e I/O m od e

b it 3 : U n im 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 t i o n B i tsb 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 t0 = 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 61 = In p u t0 = 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 51 = In p u t0 = O u tp u t

Estas funciones y asignaciones se corresponden perfectamente con lo que habitualmentese 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 bitPSPMODE, las líneas deben activarse como entradas mediante la escritura de un 1 enlos bits 0 a 2 del registro TRISE. En el modo esclavo, los bits del registro TRISD no seutilizan, ya que el sentido de trabajo del puerto D está bajo el control del microprocesadorexterno a través de y .Observe también que, como hemos visto en la descripción del registro PIR1, es posiblegenerar una interrupción durante la lectura o escritura en el puerto D si está configuradoen este modo.

LOS TEMPORIZADORES

Los PIC16F87X contienen tres temporizadores distintos, que disponen de diversasposibilidades de funcionamiento, las cuales vamos a describir a continuación. Cadatemporizador puede generar una interrupción, como hemos visto en la presentación de losregistros INTCON y PIR1. Los temporizadores 1 y 2 pueden además asociarse a losmódulos funcionales denominados y PWM, que permiten realizar la captura de datoscomo entrada, la comparación de datos como salida y la modulación de impulsos enduración. Todas estas características son comparables a las que se encuentrentradicionalmente en los temporizadores de mayores prestaciones de los micros de 8 bits.

Page 25: Microcontroladores PIC16F87x.pdf

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

EL TEMPORIZADOR 0

El temporizador 0 es el más sencillo de los tres y como se vió anteriormente está formadopor el conjunto TMR0 y el registro OPTION.

EL TEMPORIZADOR 1

El temporizador1 está constituido principalmente por un registro de 16 bits dividido en dosregistros de 8 bits, TMR1L y TMR1H, los cuales pueden ser escritos y leídos. El contenidode este registro varía de 0000 hasta FFFF, y vuelve a 0000 después de sudesbordamiento, generando una interrupción en ese momento, si ésta se autoriza.El esquema de la siguiente figura permite comprender los diversos modos dedireccionamiento de este temporizador.

T M R 1H T M R 1L

T 1O S CT 1S Y N C

T M R 1C S

T 1C K P S 1:T 1C K P S 0S L E E P in p u t

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

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

T M R 1O Non /o ff

P re s c a le r1 , 2 , 4 , 8

S y n c h ro n ize

d e t

1

0

0

1

S y n c h ro n ize d

c lo c k in p u t

2

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

R C 1/T 1O S I

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 r te 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 ow e r d ra in .

S e t a g b itT M R 1IF o nO ve ro w

T M R 1

ESQUEMA DEL TEMPORIZADOR 1.

En modo temporizador, el registro se incrementa en una unidad con cada ciclo del reloj deinstrucción (es decir, en cada ciclo de reloj dividido por cuatro). En modo contador, esteincremento tiene lugar en cada periodo de la señal aplicada en el pin RC0, o en cadaperiodo generado por el oscilador que se puede implementar conectando un cristal decuarzo entre los pines RC0 y RC1.En todos los casos, la señal de reloj del temporizador pasa por un prescaler de tasaprogramable, que puede sincronizar después con el reloj interno. Evidentemente, estasincronización es perfectamente inútil cuando se utiliza esa fuente como reloj. En modoexterno (o reloj suministrado por el oscilador del temporizador 1) puede seleccionar o noesta sincronización.Si se valida la sincronización, es posible utilizar el temporizador 1 conjuntamente con elmódulo CCP que se presenta más adelante. Este modo hace entonces una puesta a 0 deltemporizador a partir de la ocurrencia del evento (comprobación o captura) para el queestá programado. Sin embargo, el temporizador 1 deja de funcionar en modo SLEEP, yaque la sincronización no puede tener lugar debido a la parada del reloj interno en estemodo.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 sedesborda, si ha autorizado la generación de una interrupción en esta situación.

Page 26: Microcontroladores PIC16F87x.pdf

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

Los diferentes modos de funcionamiento de este temporizador son controlados por elregistro 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 itW = W rita b le b itU = 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 it7 b it0

b it 7 -6 : U n im 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 its11 = 1:8 P re s c a le v a lu e10 = 1:4 P re s c a le v a lu e01 = 1:2 P re s c a le v a lu e00 = 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 it1 = O s c illa to r is e n a b le d0 = O s c illa to r is s h u t o ffN o te : T h e o s c illa to r in v e r te 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 ow 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 = 11 = D o n o t s y n c h ro n ize e x te rn a l c lo c k in p u t0 = S y n c h ro n ize e x te rn a l c lo c k in p u t

T M R 1C S = 0T 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 it1 = E x te rn a l c lo c k from 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 it1 = E n a b le s T im e r10 = 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 deun cuarzo entre dichos pines. La frecuencia máxima de funcionamiento prevista es de 200kHz, 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 unregistro de 8 bits denominado TMR2, asociado a un predivisor y a un postdivisor, así comoa un registro de periodo.

C om pa ra to r

T M R 2S e ts a g

T M R 2 re g

o u tp u t (1)

R e s e t

P o s ts c a le r

P re s c a le r

P R 2 re g

2

F o s c /4

1 :1 1 :16

1 :1 , 1 :4 , 1 :16

E Q

4

b it T M R 2IF

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 dby th e S S P M odu le a s a b a u d c lo c k .

to

Page 27: Microcontroladores PIC16F87x.pdf

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

El contenido de este registro se inicia en el valor 00 y aumenta con cada impulso del relojde instrucción, después de la eventual división realizada por el prescaler. Cuando elcontenido se hace igual que el registro de periodo, se pone a 0 y se aplica una señal alpostdivisor. La salida de éste puede generar entonces una interrupción, si ha sidoautorizada por el registro PIE1.Los contenidos del prescaler y el postdivisor se ponen automáticamente a 0 durante unaescritura en el registro TMR2 o en el registro de control T2CON, así como en un reset, seacual 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

— T O U T P S 3 T O U T P S 2 T O U T P S 1 T O U T P S 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 itW = W rita b le b itU = 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 it7 b it0

b it 7 : U n im 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 its0000 = 1:1 P o s ts c a le0001 = 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 it1 = T im e r2 is o n0 = 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 its00 = P re s c a le r is 101 = P re s c a le r is 41x = P re s c a le r is 16

LOS MODULOS DE CAPTURA, COMPARACION Y MODULACION DE ANCHO DEPULSOS

Los PIC16F87X disponen de dos módulos de captura, comparación y generación demodulación ancho de pulsos (PWM), denominados CCP1 y CCP2. Estos dos módulosfuncionan de la misma forma; excepto en el modo de arranque especial. Por tanto, losvamos a presentar simultáneamente, y observaremos en qué se distinguen cuandoveamos dicho modo.Cada módulo está formado por un registro de 16 bits, accesible tanto para escritura comopara lectura, bajo la forma de dos registros de 8 bits sucesivos, CCPxL para los bits demenor 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 pinRcx/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.

Page 28: Microcontroladores PIC16F87x.pdf

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

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 hayasido 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, estecontenido se sustituye por el nuevo.Observe también que, para que este sistema funcione correctamente, evidentemente elpin Rcx/CCPx debe estar programado como entrada. Si está configurado como salida y seproduce una escritura en el puerto C, puede generarse una captura falsa.La siguiente figura muestra de forma extremadamente visual el funcionamiento de estemodo de captura. Observe la presencia de un prescaler, que permite la captura de cadaun flanco, cada cuatro flancos o cada dieciséis flancos. Su contenido se pone 0 duranteun 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 otrascondiciones de captura, se puede generar una falsa interrupción, por lo que esaconsejable detener el módulo CCP antes de cambiar las condiciones de captura, paraevitar este fenómeno.

C C P R 1H C C P R 1L

T M R 1H T M R 1L

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

C a p tu reE n a b le

Q ’sC C P 1C O N <3:0>

R C 2/C C P 1

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

a n de d g e d e te c t

P in

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 deltemporizador 1. Cuando se produce una igualdad, cualquiera de los fenómenos siguientesse 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 debeprogramarse como salida, poniendo a 0 el bit correspondiente del registro TRISC.Existe un modo suplementario que se denomina modo de arranque especial. En estecaso, 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 comoun 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 seanecesario utilizar la unidad central.

Page 29: Microcontroladores PIC16F87x.pdf

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

La siguiente figura muestra de forma muy clara el principio de funcionamiento de estemodo de comparación.

C C P R 1H C C P R 1L

T M R 1H T M R 1L

C om pa ra to rQ S

R

O u tp u tL o g ic

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 1 IF(P IR 1<2>)

m a tc hR C 2/C C P 1

T R IS C <2>C C P 1C O N <3:0>M ode S e le c t

O u tp u t E n a b le

P in

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 , bu t n o t s e t in te rru p t a g b itT M R 1IF (P IR 1<0>), a n d s e t b it G O /D O N E

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 conmodulació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 quesigue. 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 seutiliza 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 periododel temporizador 2 (PR2). En estas condiciones, y teniendo en cuanta el funcionamientodel 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 los8 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 unaresolución de 9 bits (un único bit a 0), o de 8 bits (los dos bits a 0).

Page 30: Microcontroladores PIC16F87x.pdf

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

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 contenidodel registro de control de cada módulo CCP. Cada módulo CCP dispone de su propioregistro de control, denominado CCPxCON, en el que cada uno de sus bits tiene lasiguiente función:

Registro CCP1CON / CCP2CON - Dirección 0x17 / 0x1D

C C P R 1L

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

C om pa ra to r

T M R 2

C om pa ra to r

P R 2

(N o te 1)

R Q

S

D u ty c y c le re g is te rs C C P 1C O N <5:4>

C le a r T im e r,C C P 1 p in a n dla tc h D .C .

T R IS C <2>

R C 2/C C P 1

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

U -0 U -0 R /W -0 R /W -0 R /W -0 R /W -0 R /W -0 R /W -0

— — C C P x X C C P x Y C C P x M 3 C C P x M 2 C C P x M 1 C C P x M 0 R = R e a d a b le b itW =W rita b le b itU = 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 it7 b it0

b it 7 -6 : U n im 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 itsC a p tu re M od e : U n u s e dC om pa re M od e : U n u s e dP W M M ode : T h e s e b its a re th e tw o L S b s o f th e P W M du 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 od e S e le c t b its0000 = C a p tu re /C om pa re /P W M o ff (re s e ts C C P x m odu le )0100 = C a p tu re m od e , e v e ry fa llin g e d g e0101 = C a p tu re m od e , e v e ry ris in g e d g e0110 = C a p tu re m od e , e v e ry 4 th ris in g e d g e0111 = C a p tu re m od e , e v e ry 16th ris in g e d g e1000 = C om pa re m od 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 om pa re m od 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 om pa re m od 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 om pa re m od 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 1a n d s ta r ts a n A /D c o n v e rs io n (if A /D m odu le is e n a b le d ))11xx = P W M m ode

Page 31: Microcontroladores PIC16F87x.pdf

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

INTERFAZ UNIVERSAL DIRECCIONABLE SERIE SINCRONA / ASÍNCRONA - USART

La interfaz serie asíncrona o SCI con la que está equipado el PIC16F87X es comparable auna UART programable por software. Puede funcionar en modo asíncrono full duplex paraconectar 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 aplicacionesalgo más especiales.La velocidad de transmisión es por completo programable gracias a su registro interno, yes idéntica en transmisión y en recepción. La SCI no soporta directamente la paridad, enel sentido de que no la calcula ni la verifica. Por el contrario, ofrece la posibilidad detransmitir y recibir 9 bits de datos, lo cual permite generar esta paridad por software, yutilizar 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ásicocon 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 esquemade la siguiente figura. Este esquema es el típico, ya que el corazón de este conjunto es elregistro 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 generandouna interrupción si la SCI la ha autorizado mediante el bit apropiado del registro PIEI (veral principio del capítulo).Si la transmisión debe hacerse con 9 bits (utilizando la paridad, por ejemplo, con unatransmisión de datos con 8 bits), este noveno bit procede del registro TXSTA, queveremos a continuación. Este bit debe tener el valor correcto antes de escribir el registroTXREG. En efecto, si TXREG está vacío, el hecho de escribir en el un byte validainmediatamente la transmisión, por lo que imperativamente el noveno bit se ha debidoactivar previamente.

T X IFT X IE

In te rru p t

T X E N B a u d R a te C L K

S P B R G

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

T X 9D

M S b L S b

D a ta B u s

T X R E G re g is te r

T S R re g is te r

(8) 0

T X 9

T R M T S P E N

R C 6/T X /C K p in

P in B u ffe ra n d C o n tro l

8

• • •

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

Page 32: Microcontroladores PIC16F87x.pdf

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

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ásarriba).· Activación del puerto SCI· Activación eventual de las interrupciones en transmisión mediante la activación del bitTXIE del registroPIE1 (ver al principio del capítulo).· Comprobación del bit TMRT del registro TXSTA (visto más arriba), para ver si el registrode 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 delregistro 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, laestructura de la SCI es la indicada en la siguiente figura.

x 64 B a u d R a te C L K

S P B R G

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

R C 7/R X /D T

P in B u ffe ra n d C o n tro l

S P E N

D a taR e c ov e ry

C R E NO E R R F E R R

R S R re g is te rM S b L S b

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

In te rru p t R C IF

R C IE

D a ta B u s

8

∏ 64

∏ 16o r

S to p S ta r t(8) 7 1 0

R X 9

∑ ∑ ∑

R X 9A D D E N

R X 9A D D E N

R S R <8>

E n a b leL o a d o f

R e c e iv eB u ffe r

8

8

ESQUEMA DE LA SCI EN MODO RECEPCION

El registro de desplazamiento de recepción no es accesible directamente y sólo se puedeleer por medio de registro RCREG, que dispone de un doble buffer, por lo que es posiblerecibir 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 enRCREG, y puede incluso dar lugar a una interrupción, siempre que esté autorizada por laactivació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

Page 33: Microcontroladores PIC16F87x.pdf

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

no se han leído suficientemente rápido, y un bit de error de formato. No está previstoningú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 unregistro 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ásarriba),· Habilitación del puerto SCI· Habilitación eventual de las interrupciones en recepción mediante la activación del bitRCIE 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 siel registro de recepción está vacío, excepto en el caso de funcionamiento bajointerrupciones, 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, yverificar 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 bitRCIF, 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 principiosque los vistos anteriormente, con únicamente dos diferencias importantes.

· Al tratarse de un modo semiduplex, la transmisión y la recepción simultánea no esposible. 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íaconjuntamente con los datos. Cuando la SCI está en modo maestro, es ella la quesuministra la señal de reloj en su pin CK, con una frecuencia fijada, como en el casoanterior, 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 acontinuació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álidostambién en este caso. Para ello basta con activar correctamente los bits de selección deeste modo en los registros TXSTA y RCSTA.

Page 34: Microcontroladores PIC16F87x.pdf

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

B it 0 B it 1 B it 7

W O R D 1

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

B it 2 B it 0 B it 1 B it 7R C 7/R X /D T p in

R C 6/T X /C K p in

W rite toT X R E G re g

T X IF b it(In te rru p t f la g )

T R M T

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

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

W O R D 2

T R M T b it

W rite w o rd 1 W rite w o rd 2

R C 7/R X /D T p in

R C 6/T X /C K p in

W rite toT X R E G re g

T X IF b it

T R M T b it

b it0 b it1 b it2 b it6 b it7

T X E N b it

TRANSMISIÓN SÍNCRONA

TRANSMISIÓN SÍNCRONA A TRAVÉZ DE TXEN

C R E N b it

R C 7/R X /D T p in

R C 6/T X /C K p in

W rite tob it S R E N

S R E N b it

R C IF b it(in te rru p t)

R e a dR X R E G

N o te : T im in g d ia g ra m de m on s tra te s S Y N C m a s te r m od e w ith b it S R E N = '1 ' a n d b it B R G H = '0 '.

Q 3 Q 4 Q 1 Q 2 Q 3 Q 4 Q 1 Q 2 Q 3 Q 4Q 2 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

'0 '

b it0 b it1 b it2 b it3 b it4 b it5 b it6 b it7

'0 '

Q 1 Q 2 Q 3 Q 4

RECEPCIÓN SÍNCRONA

Page 35: Microcontroladores PIC16F87x.pdf

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

LOS REGISTROS DE CONTROL Y DE ESTADO DE LA SCI

Ahora que conocemos los dos modos de funcionamiento de la interfaz serie asíncrona oSCI, podemos examinar el papel de los diversos bits de estado y de control de susregistros internos. En primer lugar, vamos a ver el registro de estado TXSTA en el quecada 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 -0C S R C T X 9 T X E N S Y N C — B R G H T R M T T X 9D R = R e a d a b le b it

W =W rita b le b itU = 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 it7 b it0

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 od eD on ’t c a re

S y n c h ro n o u s m od e1 = M a s te r m od e (C lo c k g e n e ra te d in te rn a lly from B R G )0 = S la v e m od e (C lo c k from e x te rn a l s o u rc e )

b it 6 : T X 9 : 9-b it Tra n sm it E n a b le b it1 = S e le c ts 9-b it tra n sm is s io n0 = S e le c ts 8-b it tra n sm is s io n

b it 5 : T X E N : Tra n sm it E n a b le b it1 = Tra n sm it e n a b le d0 = Tra n sm it d is a b le dN o te : S R E N /C R E N ov e rrid e s T X E N in S Y N C m od e .

b it 4 : S Y N C : U S A R T M od e S e le c t b it1 = S y n c h ro n o u s m od e0 = A s y n c h ro n o u s m od e

b it 3 : U n im 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 od e1 = H ig h s p e e d0 = L ow s p e e d

S y n c h ro n o u s m od eU n u s e d in th is m od e

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

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

Page 36: Microcontroladores PIC16F87x.pdf

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

El segundo registro principal que controla la SCI es el registro RCSTA, en el que cada bittiene 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 -xS P E N R X 9 S R E N C R E N A D D E N F E R R O E R R R X 9D R = R e a d a b le b it

W =W rita b le b itU = 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 it7 b it0

b it 7 : S P E N : S e ria l P o r t E n a b le b it1 = S e ria l p o r t 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 r t p in s )0 = S e ria l p o r t 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 it1 = S e le c ts 9-b it re c e p tio n0 = 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 od eD on ’t c a re

S y n c h ro n o u s m od e - m a s te r1 = E n a b le s s in g le re c e iv e0 = D is a b le s s in g le re c e iv eT h is b it is c le a re d a fte r re c e p tio n is c om p le te .

S y n c h ro n o u s m od e - s la v eU n u s e d in th is m od 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 od e1 = E n a b le s c o n tin u o u s re c e iv e0 = 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 od e1 = 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 ov 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 itA s y n c h ro n o u s m od 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 bu rffe r w h e n R S R <8> is s e t0 = 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 it1 = F ra m in g e rro r (C a n b e u p d a te d by 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 by 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 it1 = O ve rru n e rro r (C a n b e c le a re d by c le a rin g b it C R E N )0 = N o ove rru n e rro r

b it 0 : R X 9D : 9 th 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 lavelocidad de transmisión. El contenido de este registro permite, en realidad, calcular lavelocidad de transmisión que se utilizará según las indicaciones de la siguiente tabla.

S Y N C B R G H = 0 (L ow S p e e d ) B R G H = 1 (H i g h S p e e d )

01

(A s y n c h ro n o u s ) B a u d R a te = F O S C /(64(X +1))(S y n c h ro n o u s ) B a u d R a te = F O S C /(4(X +1))

B a u d R a te = F O S C /(16(X +1))N A

X = va lu e in S P B R G (0 to 255)

Page 37: Microcontroladores PIC16F87x.pdf

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

En modo asíncrono, definido por la puesta a 0 del bit SYNC del registro TXSTA, se utilizandos 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 unafórmula. En este modo, el bit BRG no se utiliza.En las relaciones indicadas en la tabla anterior, evidentemente, la X indica el contenidodel registro SPRBG. La siguiente tabla proporciona algunos valores típicos para diferentesconfiguraciones y diversas frecuencias de reloj, así como los porcentajes de errorobtenidos por este procedimiento con respecto a las velocidades teóricas

B A U DR AT E

(K )

F O S C = 20 M H zS P B R G

va lu e(d e c im a l)

16 M H zS P B R G

va lu e(d e c im a l)

10 M H zS P B R G

va lu e(d e c im a l)

7 .15909 M H zS P B R G

va lu e(d e c im a l)K B A U D %

E R R O R K B A U D %E R R O R K B A U D %

E R R O R K B A U D %E R R O R

0.3 N A - - N A - - N A - - N A - -1 .2 N A - - N A - - N A - - N A - -2 .4 N A - - N A - - N A - - N A - -9 .6 N A - - N A - - 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 9276.8 76.92 +0.16 64 76.92 +0.16 51 75.76 -1 .36 32 77.82 +1.32 2296 96.15 +0.16 51 95.24 -0 .79 41 96.15 +0.16 25 94.20 -1 .88 18300 294.1 -1 .96 16 307.69 +2.56 12 312.5 +4.17 7 298.3 -0 .57 5500 500 0 9 500 0 7 500 0 4 N A - -

H IG H 5000 - 0 4000 - 0 2500 - 0 1789.8 - 0L O W 19.53 - 255 15.625 - 255 9.766 - 255 6.991 - 255

B A U DR AT E

(K )

F O S C = 5.0688 M H z 4 M H z

S P B R Gva lu e

(d e c im a l)

3 .579545 M H z

S P B R Gva lu e

(d e c im a l)

1 M H z

S P B R Gva lu e

(d e c im a l)

32 .768 kH z

S P B R Gva lu e

(d e c im a l)K B A U D %

E R R O R

S P B R Gva lu e

(d e c im a l)K B A U D %

E R R O RK B A U D %

E R R O RK B A U D %

E R R O RK B A U D %

E R R O R

0.3 N A - - N A - - N A - - N A - - 0 .303 +1.14 261.2 N A - - N A - - N A - - 1 .202 +0.16 207 1.170 -2 .48 62.4 N A - - N A - - N A - - 2 .404 +0.16 103 N A - -9 .6 9 .6 0 131 9.615 +0.16 103 9.622 +0.23 92 9.615 +0.16 25 N A - -19 .2 19 .2 0 65 19.231 +0.16 51 19.04 -0 .83 46 19.24 +0.16 12 N A - -76 .8 79 .2 +3.13 15 76.923 +0.16 12 74.57 -2 .90 11 83.34 +8.51 2 N A - -96 97.48 +1.54 12 1000 +4.17 9 99.43 +3.57 8 N A - - N A - -300 316.8 +5.60 3 N A - - 298 .3 -0 .57 2 N A - - N A - -500 N A - - N A - - N A - - N A - - N A - -

H IG H 1267 - 0 100 - 0 894.9 - 0 250 - 0 8 .192 - 0L O W 4.950 - 255 3.906 - 255 3.496 - 255 0.9766 - 255 0.032 - 255

B A U DR AT E

(K )

F O S C = 20 M H zS P B R G

va lu e(d e c im a l)

16 M H zS P B R G

va lu e(d e c im a l)

10 M H zS P B R G

va lu e(d e c im a l)

7 .15909 M H zS P B R G

va lu e(d e c im a l)K B A U D

%E R R O R K B A U D

%E R R O R K B A U D

%E R R O R K B A U D

%E R R O R

0.3 N A - - N A - - N A - - N A - -1 .2 1 .221 +1.73 255 1.202 +0.16 207 1.202 +0.16 129 1.203 +0.23 922.4 2 .404 +0.16 129 2.404 +0.16 103 2.404 +0.16 64 2.380 -0 .83 469.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 576.8 78.13 +1.73 3 83.33 +8.51 2 78.13 +1.73 1 N A - -96 104.2 +8.51 2 N A - - N A - - N A - -

300 312.5 +4.17 0 N A - - N A - - N A - -500 N A - - N A - - N A - - N A - -

H IG H 312.5 - 0 250 - 0 156.3 - 0 111.9 - 0L O W 1.221 - 255 0.977 - 255 0.6104 - 255 0.437 - 255

B A U DR AT E

(K )

F O S C = 5.0688 M H z 4 M H z

S P B R Gva lu e

(d e c im a l)

3 .579545 M H z

S P B R Gva lu e

(d e c im a l)

1 M H z

S P B R Gva lu e

(d e c im a l)

32 .768 kH z

S P B R Gva lu e

(d e c im a l)K B A U D%

E R R O R

S P B R Gva lu e

(d e c im a l) K B A U D%

E R R O R K B A U D%

E R R O R K B A U D%

E R R O R K B A U D%

E R R O R

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 11.2 1 .2 0 65 1.202 +1.67 51 1.190 -0 .83 46 1.202 +0.16 12 N A - -2 .4 2 .4 0 32 2.404 +1.67 25 2.432 +1.32 22 2.232 -6 .99 6 N A - -9 .6 9 .9 +3.13 7 N A - - 9 .322 -2 .90 5 N A - - N A - -

19 .2 19 .8 +3.13 3 N A - - 18 .64 -2 .90 2 N A - - N A - -76 .8 79 .2 +3.13 0 N A - - N A - - N A - - N A - -96 N A - - N A - - N A - - N A - - N A - -

300 N A - - N A - - N A - - N A - - N A - -500 N A - - N A - - N A - - N A - - N A - -

H IG H 79.2 - 0 62.500 - 0 55.93 - 0 15.63 - 0 0 .512 - 0L O W 0.3094 - 255 3.906 - 255 0.2185 - 255 0.0610 - 255 0.0020 - 255

BAUD RATE MODO SÍNCRONO

BAUD RATE MODO ASÍNCRONO (BRGH = 0)

Page 38: Microcontroladores PIC16F87x.pdf

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

B A U DR AT E

(K )

F O S C = 20 M H zS P B R G

va lu e(d e c im a l)

16 M H zS P B R G

va lu e(d e c im a l)

10 M H zS P B R G

va lu e(d e c im a l)

7 .16 M H zS P B R G

va lu e(d e c im a l)K B A U D

%E R R O R K B A U D

%E R R O R K B A U D

%E R R O R K B A U D

%E R R O R

9.6 9 .615 +0.16 129 9.615 +0.16 103 9.615 +0.16 64 9.520 -0 .83 4619.2 19.230 +0.16 64 19.230 +0.16 51 18.939 -1 .36 32 19.454 +1.32 2238.4 37.878 -1 .36 32 38.461 +0.16 25 39.062 +1.7 15 37.286 -2 .90 1157.6 56.818 -1 .36 21 58.823 +2.12 16 56.818 -1 .36 10 55.930 -2 .90 7115.2 113.636 -1 .36 10 111.111 -3 .55 8 125 +8.51 4 111.860 -2 .90 3250 250 0 4 250 0 3 N A - - N A - -625 625 0 1 N A - - 625 0 0 N A - -

1250 1250 0 0 N A - - N A - - N A - -

B A U DR AT E

(K )

F O S C = 5.068 M H zS P B R G

va lu e(d e c im a l)

4 M H zS P B R G

va lu e(d e c im a l)

3 .579 M H zS P B R G

va lu e(d e c im a l)

1 M H zS P B R G

va lu e(d e c im a l)

32 .768 kH zS P B R G

va lu e(d e c im a l)K B A U D

%E R R O R K B A U D

%E R R O R K B A U D

%E R R O R K B A U D

%E R R O R K B A U D

%E R R O R

9.6 9 .6 0 32 N A - - 9 .727 +1.32 22 8.928 -6 .99 6 N A - -19 .2 18 .645 -2 .94 16 1.202 +0.17 207 18.643 -2 .90 11 20.833 +8.51 2 N A - -

38 .4 39 .6 +3.12 7 2.403 +0.13 103 37.286 -2 .90 5 31.25 -18 .61 1 N A - -57 .6 52 .8 -8 .33 5 9.615 +0.16 25 55.930 -2 .90 3 62.5 +8.51 0 N A - -

115 .2 105.6 -8 .33 2 19.231 +0.16 12 111.860 -2 .90 1 N A - - N A - -250 N A - - N A - - 223 .721 -10 .51 0 N A - - N A - -625 N A - - N A - - N A - - N A - - N A - -

1250 N A - - N A - - N A - - N A - - N A - -

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 bitsprecedido de un multiplexor de varias entradas. Como veremos a continuación, el númerode entradas se puede definir por software por medio de los bits apropiados del registro decontrol.La referencia de tensión utilizada para esta conversión se puede definir como Vdd o latensión aplicada a RA3/AN3/Vref+, y tambien la referencia inferior como Vss oRA2/AN2/Vref-. Además, este convertidor ofrece la particularidad de poder funcionarincluso en modo SLEEP.En la siguiente figura se presenta su esquema interno y, aunque en esta figura no puedaverlo, se utilizan cuatro registros: dos registros de control llamados ADCON0 y ADCON1, ydos registros de resultados ADRESL y ADRESH

(In p u t v o lta g e )

V A IN

V R E F +

(R e fe re n c ev o lta g e )

V D D

P C F G 3:P C F G 0

C H S 2:C H S 0

X000 o rX010 o rX100

X001 o rX011 o rX101

R E 2/A N 7(1)

R E 1/A N 6(1)

R E 0/A N 5(1)

R A 5/A N 4

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

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

R A 1/A N 1

R A 0/A N 0

111

110

101

100

011

010

001

000

A /DC o n v e r te r

N o te 1 : N o t a v a ila b le o n 28-p in d e v ic e s .

V R E F -

(R e fe re n c ev o lta g e )

V S S

P C F G 3:P C F G 0

1000 o r 1010 o r1100

1001 o r1011 o r1101

00XX o r 0X0X o r

Page 39: Microcontroladores PIC16F87x.pdf

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

Las líneas de entrada del convertidor se comparten con las líneas del puerto A y delpuerto E, las cuales deben estar configuradas como entradas cuando se utilizan paraconversió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 unacapacidad con la tensión que hay que medir. Por esto, el multiplexor de la figura anteriorno tiene necesidad de releer permanentemente la entrada seleccionada como entrada delconversor propiamente dicho, sino solamente durante el tiempo suficiente para cargar alcondensador. Este tiempo, denominado Tad, depende de la velocidad de conversióndeseada y de la frecuencia de reloj del PIC.Precisado todo esto, podemos estudiar el contenido de los registros de control, lo que nosfacilitará 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 -0A D C S 1 A D C S 0 C H S 2 C H S 1 C H S 0 G O /D O N E — A D O N R =R e a d a b le b it

W =W rita b le b itU =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 it7 b it0

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 its00 = F O S C /201 = F O S C /810 = F O S C /3211 = F R C (c lo c k d e riv e d from 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 its000 = 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

I f A D O N = 11 = 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 tom a tic a lly c le a re d by h a rdw a re w h e n th e A /D c o n v e r-s io n is c om p le te )

b it 1 : U n im 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 it1 = A /D c o n v e r te r m od u le is o p e ra tin g0 = A /D c o n v e r te r m od u le is s h u to ff a n d c o n s um 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 .

Page 40: Microcontroladores PIC16F87x.pdf

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

U -0 U -0 R /W -0 U -0 R /W -0 R /W -0 R /W -0 R /W -0A D F M — — — P C F G 3 P C F G 2 P C F G 1 P C F G 0 R =R e a d a b le b it

W =W rita b le b itU =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 it7 b it0

b it 7 : A D F M : A /D R e s u lt fo rm a t s e le c t1 = 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 im 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 r t C o n g u ra tio n C o n tro l b it s

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 .

P C F G 3 :P C F G 0

A N 7(1)

R E 2A N 6(1)

R E 1A N 5(1)

R E 0A N 4R A 5

A N 3R A 3

A N 2R A 2

A N 1R A 1

A N 0R A 0

V R E F + V R E F -C H A N /R E F S

0000 A A A A A A A A V D D V S S 8/00001 A A A A V R E F + A A A R A 3 V S S 7/10010 D D D A A A A A V D D V S S 5/00011 D D D A V R E F + A A A R A 3 V S S 4/10100 D D D D A D A A V D D V S S 3/00101 D D D D V R E F + D A A R A 3 V S S 2/1011x D D D D D D D D V D D V S S 0/01000 A A A A V R E F + V R E F - A A R A 3 R A 2 6/21001 D D A A A A A A V D D V S S 6/01010 D D A A V R E F + A A A R A 3 V S S 5/11011 D D A A V R E F + V R E F - A A R A 3 R A 2 4/21100 D D D A V R E F + V R E F - A A R A 3 R A 2 3/21101 D D D D V R E F + V R E F - A A R A 3 R A 2 2/21110 D D D D D D D A V D D V S S 1/01111 D D D D V R E F + V R E F - D A R A 3 R A 2 1/2

Registro ADCON1 - Dirección 0x9F

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

O p e ra t i o n A D C S 1 : A D C S 0 20 M H z 5 M H z 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)

R C 11 2 - 6 µs (1, 4) 2 - 6 µs (1, 4) 2 - 6 µs (1, 4) 2 - 6 µs (1)

L e g e n d : S h a d e d c e lls a re a re o u ts id e o f re c om 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 om 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 nv e rs io n c lo c k s o u rc e is o n ly re c om -

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

Page 41: Microcontroladores PIC16F87x.pdf

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

Visto el contenido de estos registros, el principio de utilización del convertidor es muysencillo 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 bitadecuado 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, bienpor 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), peroobserve 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, esnecesario no poner a 1 los bits ADON y GO/DONE con la misma instrucción, sinoproceder en dos veces.

El reloj de conversión se debe seleccionar sabiendo que la conversión necesita un tiempoigual a 12 Tad para los 10 bits. Además, para asegurar una conversión correcta, se deberespetar el tiempo mínimo Tad de 1.6ms.

La tabla anterior muestra cuáles son las distintas posibilidades ofertadas por laprogramació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 desencadenaruna conversión analógico/digital. Esto no cambia en nada los principios expuestosanteriormente, ni el desarrollo general de la programación de una conversión. La únicadiferencia es con esta exposición esta en hecho de que el bit GO/DONE no debe ponerloa 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 porsu bit ADONE, no tiene lugar ninguna acción por parte del convertidor, pero eltemporizador 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. Esposible 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 relojnormal del PIC está parado en este modo.Cuando se selecciona este reloj, el convertidor espera un ciclo de instrucción antes decomenzar la conversión, lo que permite ejecutar la instrucción SLEEP cuando laconversión se termina, su resultado se coloca en ADRES, el bit GO/DONE se pone a 0 yse genera una interrupción si estaba autorizada. En este caso, el PIC sale del modoSLEEP gracias a ella. Si esta interrupción no estaba autorizada el convertidor permaneceen este estado hasta que el procesador sale del modo SLEEP, momento en que elresultado y el bit GO/DONE siguen siendo válidos.

Page 42: Microcontroladores PIC16F87x.pdf

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

EL TEMPORIZADOR WATCHDOG

Como en el caso de los PIC 16C5X, PIC16CXX el temporizador watchdog de losPIC16F87X está provisto con su propio oscilador autónomo de tipo RC interno, por lo queno precisa ningún componente externo, y puede continuar funcionando incluso cuando elreloj 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. Siel PIC está en modo SLEEP cuando se produce este desbordamiento, el efecto es quesalga 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 espaciodireccionable ni de los registros clásicos, por lo que no lo habrá visto en ninguna de lasfiguras 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 registroOPTION (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 dedesbordamiento 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). Estopermite evitar que se generen resets indeseados cuando el registro está, por ejemplo, enmodo SLEEP. Estas dos instrucciones ponen a 0 también al predivisor, si esta asignado altemporizador watchdog.

A d d re s s N a m e B i t 7 B i t 6 B i t 5 B i t 4 B i t 3 B i t 2 B i t 1 B i t 0

2007h C o n g . b its (1) B O D E N (1) C P 1 C P 0 P W R T E (1) W D T E F O S C 1 F O S C 0

81h ,181h O P T IO N _R E G R B P U IN T E D G T 0C S T 0S E P S A P S 2 P S 1 P S 0

L e g e n d : S h a d e d c e lls a re n o t u s e d by 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 .

F rom T M R 0 C lo c k S o u rc e(F ig u re 5-2)

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

P o s ts c a le r

W D T T im e r

W D TE n a b le B it

0

1MUX

P S A

8 - to - 1 M U X P S 2:P S 0

0 1

M U X P S A

W D TT im e -o u tN 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.

8

Page 43: Microcontroladores PIC16F87x.pdf

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

Programa fuente:

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

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

La etiqueta es opcional; El comando puede ser un mnemónico del conjunto deinstrucciones; El operando esta asociado al comando, si no hay comando no hayoperando, e inclusive algunos comandos no llevan operando. El comentario es opcionalpara el compilador aunque es buena práctica considerarlo obligatorio para elprogramador.

La etiqueta, es el campo que empieza en la primer posición de la línea. No se puedeninsertar espacios o tabulaciones antes de la etiqueta sino será considerado comando.Identifica la línea de programa haciendo que el compilador le asigne un valorautomáticamente. Si se trata de una línea cuyo comando es una instrucción de programadel microcontrolador, se le asigna el valor de la dirección de memoria correspondiente adicha instrucción (location counter). En otros casos se le asigna un valor de unaconstante, 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 unadirectiva o pseudoinstrucción para el compilador. En el primer caso será directamentetraducido a código de maquina, en el segundo caso será interpretado por el compilador yrealizara alguna acción en tiempo de compilación como ser asignar un valor a unaetiqueta, 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 literalesque representen constantes o direcciones.

El campo de comentario debe comenzar con un caracter punto y coma. No necesita tenerespacios o tabulaciones separándolo del campo anterior, e incluso puede empezar en laprimer posición de la línea. El compilador ignora todo el texto que contenga la líneadespués de un caracter punto y coma. De esta manera pueden incluirse líneas quecontengan solo comentarios, y es muy buena práctica hacer uso y abuso de estaposibilidad para que los programas resulten autodocumentados.

Conjunto de instrucciones

El conjunto de instrucciones de los microprocesadores PIC 16F87X consiste en unpequeño repertorio de solo 35 instrucciones de 14 bits, que pueden ser agrupadas parasu estudio en tres a cinco grupos. En este curso se ha optado por clasificarlas, desde elpunto de vista del programador, en cinco categorías bien definidas de acuerdo con lafunción y el tipo de operandos involucrados. En primer lugar se agrupan las instruccionesque operan con bytes y que involucran algún registro de la memoria interna.

Page 44: Microcontroladores PIC16F87x.pdf

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

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

d = 0 fo r d e s tin a tio n W

O P C O D E d f (F IL E #)

d = 1 fo r d e s tin a tio n ff = 7-b it le re g is te r a d d re s s

B it-o rie n te d le re g is te r o p e ra tio n s

13 10 9 7 6 0

O P C O D E b (B IT #) f (F IL E #)

b = 3-b it b it a d d re s sf = 7-b it le re g is te r a d d re s s

L ite ra l a n d c o n tro l o p e ra tio n s

13 8 7 0

O P C O D E k (lite ra l)

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

13 11 10 0

O P C O D E k (lite ra l)

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

G e n e ra l

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

F i e l d D e s c r i p t i o n

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 B it a d d re s s w ith in a n 8-b it le re g is te r

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 on 't c a re lo c a tio n (= 0 o r 1)T h e a s s e m b le r w ill g e n e ra te c o d e w ith x = 0. I t is th ere c om m e n d e d fo rm o f u s e fo r c om pa tib ility w ith a ll

M ic ro c h ip s o ftw a re to o ls .

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.

D e fa u lt is d = 1

PC P ro g ra m C ou n te r

TO T im e -o u t b it

PD P ow e r-d ow n b it

En segundo lugar se analizaran las instrucciones que operan solo sobre el registro W yque 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 individualesde los registros de la memoria interna. En cuarto lugar se clasifican las instrucciones decontrol de flujo del programa, es decir las que permiten alterar la secuencia lineal deejecución de las instrucciones. Por último se agrupan unas pocas instrucciones quellamaremos especiales, cuyas funciones o tipos de operandos son muy específicos y noencajan en ninguna de las clasificaciones anteriores.

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

Page 45: Microcontroladores PIC16F87x.pdf

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

M n e m o n i c ,O p e ra n d s

D e s c r i p t i o n C y c l e s 14-B i t O p c o d e S ta tu sA f f e c te d

N o te s

M S b L S b

B Y T E -O R IE N T E D F IL E R E G IS T E R O P E R AT IO N S

A D D W FA N D W FC L R FC L R WC O M FD E C FD E C F S ZIN C FIN C F S ZIO R W FM O V FM O V W FN O PR L FR R FS U B W FS W A P FX O R W F

f, df, df-f, df, df, df, df, df, df, df-f, df, df, df, df, d

A d d W a n d fA N D W w ith fC le a r fC le a r WC om p le m e n t fD e c re m e n t fD e c re m e n t f, S k ip if 0In c re m e n t fIn c re m e n t f, S k ip if 0In c lu s iv e O R W w ith fM ov e fM ov e W to fN o O p e ra tio nR o ta te L e ft f th ro u g h C a rryR o ta te R ig h t f th ro u g h C a rryS u b tra c t W from fS w a p n ib b le s in fE x c lu s iv e O R W w ith f

111111

1(2)1

1(2)111111111

000000000000000000000000000000000000

011101010001000110010011101110101111010010000000000011011100001011100110

dfffdffflfff0xxxdfffdfffdfffdfffdfffdfffdffflfff0xx0dfffdfffdfffdfffdfff

ffffffffffffxxxxffffffffffffffffffffffffffffffff0000ffffffffffffffffffff

C ,D C ,ZZZZZZ

Z

ZZ

CCC ,D C ,Z

Z

1 ,21 ,22

1 ,21 ,21 ,2 ,31 ,21 ,2 ,31 ,21 ,2

1 ,21 ,21 ,21 ,21 ,2

B IT-O R IE N T E D F IL E R E G IS T E R O P E R AT IO N S

B C FB S FB T F S CB T F S S

f, bf, bf, bf, b

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

11

1 (2)1 (2)

01010101

00bb01bb10bb11bb

bfffbfffbfffbfff

ffffffffffffffff

1,21 ,233

L IT E R A L A N D C O N T RO L O P E R AT IO N S

A D D LWA N D LWC A L LC L R W D TG O T OIO R LWM O V LWR E T F IER E T LWR E T U R NS L E E PS U B LWX O R LW

kkk-kkk-k--kk

A d d lite ra l a n d WA N D lite ra l w ith WC a ll s u b ro u tin eC le a r W a tc h d o g T im e rG o to a d d re s sIn c lu s iv e O R lite ra l w ith WM ove lite ra l to WR e tu rn from in te rru p tR e tu rn w ith lite ra l in WR e tu rn from S u b ro u tin eG o in to s ta n d by m od eS u b tra c t W from lite ra lE x c lu s iv e O R lite ra l w ith W

1121211222111

11111000101111001100001111

111x10010kkk00001kkk100000xx000001xx00000000110x1010

kkkkkkkkkkkk0110kkkkkkkkkkkk0000kkkk00000110kkkkkkkk

kkkkkkkkkkkk0100kkkkkkkkkkkk1001kkkk10000011kkkkkkkk

C ,D C ,ZZ

T O ,P D

Z

T O ,P DC ,D C ,ZZ

N o te 1 : W h e n a n I/O re g is te r is m od ie d a s a fu n c tio n o f its e lf ( e .g ., MOVF PORTB, 1), th e va lu e u s e d w ill b e th a t va lu e p re s e n to 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 low by a n e x te rn a ld 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 : I f 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 dto th e T im e r0 M odu le .

3 : I f P ro g ra m C o u n te r (P C ) is m od 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 ise x e c u te d a s a N O P.

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

Page 46: Microcontroladores PIC16F87x.pdf

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 enlas instrucciones que operan sobre registros. De esta manera se puede direccionarcualquier posición desde la 00 a la 7F. Como se vió en el capítulo correspondiente a losmapas de memoria, las direcciones 80 a FF, 100 a 17F y 180 a 1FF corresponden a losbancos de registros, el programador deberá asegurarse de haber programado los bits deselección de banco en el registro STATUS.El registro FSR, es un puntero para direccionamiento indirecto. La posición 00 del mapa deRAM es la llamada dirección indirecta. Sí en cualquier instrucción se opera con la dirección00, 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ón14 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 0x20FSR equ 04 ;(definición al comienzo del programa)..........................................................................

movlw 5 ;prepara para repetir 5 vecesmovwf 0x7F ;(el registro 0x7F es el contador del loop)movlw 0x20 ;apunta a la dirección 0x20movwf FSR ;

loop:clrf INDF ;borra una posición de memoriaincf FSR,1 ;apunta a la siguientedecfsz 0x7F,1 ;si todavía no borra todasgoto loop ;sige borrando

.....................................

.....................................El direccionamiento indirecto es muy útil para el procesamiento de posiciones consecutivasde memoria, como en el ejemplo, o para el direccionamiento de datos en subrutinas.Direccionamiento de la memoria de programa (EPROM, OTP)

.

D a taM e m o ry (1)

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

b a n k s e le c t lo c a tio n s e le c t

R P 1 : R P 0 6 0from op c o d e IR P F S R re g is te r7 0

b a n k s e le c t lo c a tio n s e le c t

00 01 10 11

B a n k 0 B a n k 1 B a n k 2 B a n k 3

F F h

80h

7F h

00h

17F h

100h

1F F h

180h

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

Page 47: Microcontroladores PIC16F87x.pdf

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

La instrucción GOTO dispone solo de 11 bits en el código de operación para especificar ladirección de destino del salto. Al ejecutar una instrucción GOTO el microprocesador tomalos dos bits que restan para completar la dirección de 13 bits, de los bits 3 y 4 del registroPCLATH. Ver la siguiente figura.

P C

12 8 7 0

5P C L AT H <4:0>

P C L AT H

In s tru c tio n w ith

A L U

GOTO,CALL

O p c o d e <10:0>

8

P C

12 11 10 0

11P C L AT H <4:3>

P C H P C L

8 7

2

P C L AT H

P C H P C L

P C L a sD e s tin a tio n

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 formaautomática cuando el PC se incrementa. Esto ocurre si el programa empieza en unapágina y sigue en la siguiente. Sin embargo, al incrementarse el PC desde la últimaposición de una página a la primera de la siguiente, los bits 3 y 4 del PCLATH no semodifican, y por lo tanto sí se ejecuta una instrucción GOTO, CALL o alguna que actúesobre el PC, esta producirá un salto a la página anterior, a menos que el programadortenga la precaución de actualizar el valor de dichos bits. Por este motivo es convenientedividir 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 untamaño de 13 bits la dirección de retorno se almacena completa, pero al igual que alpasar de una pagina a otra en un programa lineal, los bits 3 y 4 del PCLATH no seactualizan.

Herramientas de desarrollo

UNA MIRADA RAPIDA AL MPLAB.

¿Qué es el MPLAB ?

EL MPLAB es un "Entorno de Desarrollo Integrado " (Integrated DevelopmentEnvironment, IDE) que corre en "Windows ", mediante el cual Usted puede desarrollaraplicaciones para los microcontroladores de las familias PIC 16/17.

EL MPLAB le permite a Usted escribir, depurar y optimizar los programas (firmware) desus diseños con PIC 16/17. EL MPLAB incluye un editor de texto, un simulador y unorganizador de proyectos. Además, el MPLAB soporta el emulador PICMASTER y aotras herramientas de desarrollo de Microchip como el PICSTART - Plus.

Page 48: Microcontroladores PIC16F87x.pdf

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

¿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 losregistros internos.· Observar el flujo del programa con el simulador MPLAB -SIM, ó seguirlo en tiempo realutilizando 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. Sincrear un proyecto Usted no puede realizar depuración simbólica. Con el Organizador deProyectos (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, paraentorno DOS llamado MPASM.EXE y la otra, para entorno Windows llamadoMPASMWIN.EXE

Las dos presentaciones soportan a TODOS los microcontroladores de la familia PIC deMicrochip. El conjunto de instrucciones de los microcontroladores PIC es en esencia labase del lenguaje ensamblador soportado por este software.

Directivas de uso frecuente:

Son indicaciones para el compilador, no generan código.

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

ENDej. endexplicación: indica fin de programa

Page 49: Microcontroladores PIC16F87x.pdf

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

EQUej. status equ 05explicación: define una constante de ensamble

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

ORGej. org 0x100explicación: ensambla a partir de la dirección especificadaPara 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 programadeben 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 elnombre 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 Fileshaga 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 fuentey el vaciado de éste en memoria de simulación. El proceso de ensamble generará unarchivo de errores en caso de que estos existan, sí es así deben corregirse directamentesobre 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 lasimulación>>>

Page 50: Microcontroladores PIC16F87x.pdf

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

Vista del Entorno de Programación MPLAB

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

1. Barra de título: Se observa el nombre del proyecto2. Barra de menus: Acceso a las diferentes opciones del entorno3. Barra de herramientas: Cada ícono ejecuta las acciones correspondientes4. 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 íconocorrespondiente en la barra de herramientas.2. Crear una nueva ventana donde se incluyan las variables que queremos tener encuenta (Window...New Watch Window)3. Empezar a correr paso a paso el programa haciendo el seguimiento detallado de todosy cada uno de los pasos (menú Debug...Run...Step) ó con la tecla F7 ó con el íconocorrespondiente en la barra de herramientas.El proceso de simulación nos permite detectar y corregir problemas de lógica, problemasde situaciones que no hayamos tenido en cuenta que son errores que no pueden serdetectados 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

Page 51: Microcontroladores PIC16F87x.pdf

12

34

ABCD

43

21

D C B ATitl

e

Numb

erRev

isionSiz

e A4

Date:

12-Sep

-2002

Sheet

ofFile

:\\Os

car\c_o

scar\AD

VSCH\P

ROJECT

S\CursoU

C\Curso\

Curso.DD

BDra

wnBy:

V+2

T1IN

11

T2IN

10

C1+1

C1-3

R1OU

T12

R2OU

T9

T1OUT

14

T2OUT

7

C2+4

C2-5

R1IN

13

R2IN

8

V-6

U4 MAX2

32EJE

1 6 2 7 3 8 4 9 5

I2 DB9

RA0/N

A02

RA1/N

A13

RA2/N

A24

RA3/N

A35

RA4/TO

CKI6

RA5/AN

4/SS7

RB0/I

NT33

RB1

34

RB2

35

RB3

36

RB4

37

RB5

38

RB6

39

RB7

40

MCLR/V

PP1

OSC1/CL

KIN13

OSC2/CL

KOUT

14

RC0/T1O

SO/T1C

KI15

RC1/T1O

SI/CCP2

16

RC2/CCP

117

RC3/SCK

/SCL18

RC4/SD

I/SDI

23

RC5/SD

O24

RC6/TX/

CK25

RC7/RX/

CT26

RD0/PS

P019

RD1/PS

P120

RD2/PS

P221

RD3/PS

P322

RSD4/P

SP427

RD5/PS

P528

RD6/PS

P629

RD7/PS

P730

RE0/RD

/AN5

8

RE1/WR

/AN6

9

RE2/CS/

AN710

U5 PIC16

C74A

TXD

RXD

TXD

RXDC2 10

uF

C3 10uF

C410

uF

C5 10uF

VCC

X2 4Mhz

C6

15pF

C10

15pF

D11N

4007

D21N

4007

C11

1000

uF

C12

100n

F

C13

100n

F

C14

100n

F

Vin1

GND2

+5V

3

U6 MC78

05T

VCC

+12V

VCC

T1 BC55

7

R12

27K

R13

150K R1

439

K

VCC

L2 22mH

y

1 2 3

B1 BOR3

8a b c d e f g P

Común

DISPLA

YK1DIS

PLAYK

C

8a b c d e f g P

Común

DISPLA

YK2DIS

PLAYK

C

8a b c d e f g P

Común

DISPLA

YK3DIS

PLAYK

C

R15

470

R16

470

R17

470

R18

470

R19

470

R20

470

R21

470

Q4 BC55

7

Q5 BC55

7

Q6 BC55

7

R23

4K7

R24

4K7

R25

4K7

R22

470

VCC

sa sb sc sd se sf sg sP

sa sb sc sd se sf sg sPPO

T2 1K

C15

100n

F

VCC

Macho

PCB90'

APENDICE 1

Circuito Propuesto

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

Page 52: Microcontroladores PIC16F87x.pdf

APENDICE 2 - PIC16F87X

12.1 Instruction Descriptions

ADDLW Add Literal and W

Syntax: [label] ADDLW k

Operands: 0 ≤ k ≤ 255

Operation: (W) + k → (W)

Status Affected: C, DC, Z

Description: The contents of the W register are added to the eight bit literal ’k’ and the result is placed in the W register.

ADDWF Add W and f

Syntax: [label] ADDWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (W) + (f) → (destination)

Status Affected: C, DC, Z

Description: Add the contents of the W register with register ’f’. If ’d’ is 0, the result is stored in the W register. If ’d’ is 1, the result is stored back in reg-ister ’f’.

ANDLW AND Literal with W

Syntax: [label] ANDLW k

Operands: 0 ≤ k ≤ 255

Operation: (W) .AND. (k) → (W)

Status Affected: Z

Description: The contents of W register are AND’ed with the eight bit literal 'k'. The result is placed in the W register.

ANDWF AND W with f

Syntax: [label] ANDWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (W) .AND. (f) → (destination)

Status Affected: Z

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

BCF Bit Clear f

Syntax: [label] BCF f,b

Operands: 0 ≤ f ≤ 1270 ≤ b ≤ 7

Operation: 0 → (f<b>)

Status Affected: None

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

BSF Bit Set f

Syntax: [label] BSF f,b

Operands: 0 ≤ f ≤ 1270 ≤ b ≤ 7

Operation: 1 → (f<b>)

Status Affected: None

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

Page 53: Microcontroladores PIC16F87x.pdf

BTFSS Bit Test f, Skip if Set

Syntax: [label] BTFSS f,b

Operands: 0 ≤ f ≤ 1270 ≤ b < 7

Operation: skip if (f<b>) = 1

Status Affected: None

Description: If bit ’b’ in register ’f’ is ’0’, the next instruction is executed.If bit ’b’ is ’1’, then the next instruc-tion is discarded and a NOP is exe-cuted instead making this a 2TCY

instruction.

BTFSC Bit Test, Skip if Clear

Syntax: [label] BTFSC f,b

Operands: 0 ≤ f ≤ 1270 ≤ b ≤ 7

Operation: skip if (f<b>) = 0

Status Affected: None

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

CALL Call Subroutine

Syntax: [ label ] CALL k

Operands: 0 ≤ k ≤ 2047

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

Status Affected: None

Description: Call Subroutine. First, return address (PC+1) is pushed onto the stack. The eleven bit immedi-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.

CLRF Clear f

Syntax: [label] CLRF f

Operands: 0 ≤ f ≤ 127

Operation: 00h → (f)1 → Z

Status Affected: Z

Description: The contents of register ’f’ are cleared and the Z bit is set.

CLRW Clear W

Syntax: [ label ] CLRW

Operands: None

Operation: 00h → (W)1 → Z

Status Affected: Z

Description: W register is cleared. Zero bit (Z) is set.

CLRWDT Clear Watchdog Timer

Syntax: [ label ] CLRWDT

Operands: None

Operation: 00h → WDT0 → WDT prescaler,1 → TO1 → PD

Status Affected: TO, PD

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

Page 54: Microcontroladores PIC16F87x.pdf

COMF Complement f

Syntax: [ label ] COMF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) → (destination)

Status Affected: Z

Description: The contents of register ’f’ are complemented. If ’d’ is 0, the result is stored in W. If ’d’ is 1, the result is stored back in register ’f’.

DECF Decrement f

Syntax: [label] DECF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) - 1 → (destination)

Status Affected: Z

Description: Decrement register ’f’. If ’d’ is 0, the result is stored in the W regis-ter. If ’d’ is 1, the result is stored back in register ’f’.

DECFSZ Decrement f, Skip if 0

Syntax: [ label ] DECFSZ f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

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

Status Affected: None

Description: The contents of register ’f’ are decremented. If ’d’ is 0, the result is placed in the W register. If ’d’ is 1, the result is placed back in reg-ister ’f’. If the result is 1, the next instruc-tion is executed. If the result is 0, then a NOP is executed instead making it a 2TCY instruction.

GOTO Unconditional Branch

Syntax: [ label ] GOTO k

Operands: 0 ≤ k ≤ 2047

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

Status Affected: None

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

INCF Increment f

Syntax: [ label ] INCF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) + 1 → (destination)

Status Affected: Z

Description: The contents of register ’f’ are incremented. If ’d’ is 0, the result is placed in the W register. If ’d’ is 1, the result is placed back in reg-ister ’f’.

INCFSZ Increment f, Skip if 0

Syntax: [ label ] INCFSZ f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

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

Status Affected: None

Description: The contents of register ’f’ are incremented. If ’d’ is 0, the result is placed in the W register. If ’d’ is 1, the result is placed back in regis-ter ’f’.If the result is 1, the next instruc-tion is executed. If the result is 0, a NOP is executed instead making it a 2TCY instruction.

Page 55: Microcontroladores PIC16F87x.pdf

IORLW Inclusive OR Literal with W

Syntax: [ label ] IORLW k

Operands: 0 ≤ k ≤ 255

Operation: (W) .OR. k → (W)

Status Affected: Z

Description: The contents of the W register are OR’ed with the eight bit literal 'k'. The result is placed in the W reg-ister.

IORWF Inclusive OR W with f

Syntax: [ label ] IORWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (W) .OR. (f) → (destination)

Status Affected: Z

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

MOVF Move f

Syntax: [ label ] MOVF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

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.

MOVLW Move Literal to W

Syntax: [ label ] MOVLW k

Operands: 0 ≤ k ≤ 255

Operation: k → (W)

Status Affected: None

Description: The eight bit literal 'k' is loaded into W register. The don’t cares will assemble as 0’s.

MOVWF Move W to f

Syntax: [ label ] MOVWF f

Operands: 0 ≤ f ≤ 127

Operation: (W) → (f)

Status Affected: None

Description: Move data from W register to reg-ister 'f'.

NOP No Operation

Syntax: [ label ] NOP

Operands: None

Operation: No operation

Status Affected: None

Description: No operation.

Page 56: Microcontroladores PIC16F87x.pdf

RETFIE Return from Interrupt

Syntax: [ label ] RETFIE

Operands: None

Operation: TOS → PC,1 → GIE

Status Affected: None

RETLW Return with Literal in W

Syntax: [ label ] RETLW k

Operands: 0 ≤ k ≤ 255

Operation: k → (W); TOS → PC

Status Affected: None

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

RETURN Return from Subroutine

Syntax: [ label ] RETURN

Operands: None

Operation: TOS → PC

Status Affected: None

Description: Return from subroutine. The stack is POPed and the top of the stack (TOS) is loaded into the program counter. This is a two cycle instruction.

RLF Rotate Left f through Carry

Syntax: [ label ] RLF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: See description below

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

RRF Rotate Right f through Carry

Syntax: [ label ] RRF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: See description below

Status Affected: C

Description: The contents of register ’f’ are rotated one bit to the right through the Carry Flag. If ’d’ is 0, the result is placed in the W register. If ’d’ is 1, the result is placed back in reg-ister ’f’.

SLEEP

Syntax: [ label ]

SLEEP

Operands: None

Operation: 00h → WDT,0 → WDT prescaler,1 → TO,0 → PD

Status Affected: TO, PD

Description: The power-down status bit, PD is cleared. Time-out status bit, TOis set. Watchdog Timer and its prescaler are cleared.The processor is put into SLEEP mode with the oscillator stopped.

Register fC

Register fC

Page 57: Microcontroladores PIC16F87x.pdf

SUBLW Subtract W from LiteralSyntax: [ label ] SUBLW k

Operands: 0 ≤ k ≤ 255

Operation: k - (W) → (W)

Status Affected: C, DC, Z

Description: The W register is subtracted (2’s complement method) from the eight bit literal 'k'. The result is placed in the W register.

SUBWF Subtract W from fSyntax: [ label ] SUBWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

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

Status Affected: C, DC, Z

Description: Subtract (2’s complement method) W register from register 'f'. If 'd' is 0, the result is stored in the W regis-ter. If 'd' is 1, the result is stored back in register 'f'.

SWAPF Swap Nibbles in f

Syntax: [ label ] SWAPF f,d

Operands: 0 ≤ f ≤ 127d ∈ [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'.

XORLW Exclusive OR Literal with W

Syntax: [label] XORLW k

Operands: 0 ≤ k ≤ 255

Operation: (W) .XOR. k → (W)

Status Affected: Z

Description: The contents of the W register are XOR’ed with the eight bit lit-eral 'k'. The result is placed in the W register.

XORWF Exclusive OR W with f

Syntax: [label] XORWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

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

Status Affected: Z

Description: Exclusive OR the contents of the W register with register 'f'. If 'd' is 0, the result is stored in the W register. If 'd' is 1, the result is stored back in register 'f'.

Page 58: Microcontroladores PIC16F87x.pdf

Notas y Referencias

El Presente apunte ha sido concebido para uso de los alumnos durante el curso Nivel I demicrocontroladores de la familia flash PIC16F87X dictado por el docente OSCAR CELIS.

Bibliografia

PIC 16/17 microcontroller data Book, MicrochipMPASM assembler. User's Guide, MicrochipMPLAB IDE User's Guide, Microchip.www.microchip.com

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