Vous êtes sur la page 1sur 151

Microcontrolador PIC16F876 Pgina 1

EL MICROCONTROLADOR PIC16F876

Caractersticas principales:

- CPU tipo RISCC de altas prestaciones.


- Repertorio de 35 instrucciones de una palabra.
- Todas las instrucciones son de un nico ciclo, excepto las de salto, que llevan dos.
- Velocidad de trabajo de 20 Mhz, con un ciclo de instruccin de 200 ns.
- Memoria de programa tipo flash de 8 Kpalabras.
- Memoria de datos de 368 bytes.
- Memoria EEPROM de datos de 256 bytes.
- Patillaje compatible con PIC16C73B/74B/76/77.
- Hasta 14 fuentes de interrupcin.
- Pila por hardware de 8 niveles.
- Modos de direccionamiento directo, indirecto y relativo.
- Reset de conexin (POR).
- Temporizacin de conexin y temporizacin de inicio de oscilacin.
- Circuito supervisor (watchdog).
- Cdigo de proteccin programable.
- Tecnologa de alta velocidad y bajo consumo en la memoria CMOS
EEPROM/FLASH.
- Programacin in-situ va serie con dos patillas.
- Posibilidad de programacin in-situ, va serie, mediante tensin simple de 5 voltios.
- Acceso para lectura o escritura a la memoria de programa.
- Gran margen de alimentacin entre 2 y 5,5 voltios.
- Corriente de salida de 25 mA.
- Bajo consumo:
Menor de 2 mA a 5V y 4 Mhz.
20 A a 3V y 32 Khz.
Menor de 1 A en reposo.

Prestaciones de perifricos:

- Timer0: Temporizador-Contador de 8 bits, con Predivisor tambin de 8 bits.


- Timer1: Temporizador-Contador de 16 bits con Predivisor, que puede trabajar con
reloj externo en el modo reposo (sleep).
- Timer2: Temporizador-Contador de 8 bits con registro de perodo de la misma
longitud, con Predivisor y Postdivisor.
- Dos mdulos de Captura y Comparacin y uno PWM (modulacin por ancho de
impulso:
La captura es de 16 bits, con resolucin mxima de 12,5 ns.
La comparacin es de 16 bits, con resolucin mxima de 200 ns.
El bloque PWM tiene una resolucin mxima de 10 bits.
- Convertidor multicanal analgico digital de 10 bits.
- Puerto serie sncrono (SSP), con modo Maestro (SPI) e I2C (maestro/servidor).
- Transmisor Receptor Universal Sncrono Asncrono (USART/SCI) con deteccin
de 9 bits y de direccin.
- Circuito de deteccin de BROWN-OUT (bajada de tensin).
Microcontrolador PIC16F876 Pgina 2

PATILLAJE PRESTACIONES PIC16F876


Frecuencia de trabajo Continua- 20Mhz.
Borrados y retardos POR, BOR
(PWRT, OST)
Memoria de programa tipo flash 8K
(palabras de 14 bits)
Memoria de datos (bytes) 368
Memoria de datos EEPROM 256
Interrupciones 13
Puertos de entrada salida PUERTOS A, B, C
Temporizadores 3
Mdulos Captura/Comparacin/PWM 2
Comunicaciones serie MSSP y USART
Mdulo CAD de 10 bits 5 canales
Repertorio de instrucciones 35
Microcontrolador PIC16F876 Pgina 3

TABLA 1-1: DESCRIPCIN DEL Patillaje DEL PIC16F873 Y PIC16F876

N N Tipo
Nombre de la patilla Familia Descripcin
DIP SOIC I/O/P

OSC1/CLKIN 9 9 I ST/CMOS Entrada de cristal oscilador/entrada reloj externo.


Salida del oscilador. Esta patilla saca de la frecuencia de reloj de
OSC2/CLKOUT 10 10 O -
la patilla OSC1, e indica la duracin del ciclo de instruccin.
Entrada de reset por nivel bajo, entrada de tensin de
-MCLR/Vpp/ THV 1 1 I/P ST
programacin o alta tensin de prueba de control.
El puerto A es un puerto bidireccional
RA0/AN0 2 2 I/O TTL RA0 puede ser, tambin, la entrada analgica 0.
RA1/AN1 3 3 I/O TTL RA1 puede ser, tambin, la entrada analgica 1.
RA2 puede ser la entrada analgica 2 o la tensin negativa de
RA2/AN2/VREF- 4 4 I/O TTL
referencia analgica.
RA3 puede serla entrada analgica 3 o la tensin positiva de
RA3/AN3/VREF+ 5 5 I/O TTL
referencia analgica.
RA4 puede ser, tambin, la entrada de reloj del Temporizador 0.
RA4/T0CKI 6 6 I/O ST
La salida es en drenador abierto.
RA5 puede ser, tambin, la entrada analgica 4 o la seleccin de
RA5/-SS/AN4 7 7 I/O TTL
servidor para el puerto serie sncrono.
El puerto B es bidireccional y puede programarse la conexin interna de resistencias a +Vcc
RB0/INT 21 21 I/O TTL/ST RB0 puede ser, tambin, la interrupcin externa.
RB1 22 22 I/O TTL
RB2 23 23 I/O TTL
RB3/PGM 24 24 I/O TTL RB3 puede ser, tambin, la entrada de programacin.
RB4 25 25 I/O TTL Patilla de cambio de interrupcin activa.
RB5 26 26 I/O TTL Patilla de cambio de interrupcin activa.
RB6/PGC 27 27 I/O TTL/ST Cambio de interrupcin activa o reloj para programacin en serie.
RB7/PGD 28 28 I/O TTL/ST Cambio de interrupcin activa o dato para programacin en serie.
El puerto C es un puerto bidireccional
RC0 puede ser, tambin, la salida de oscilacin del Timer1 o la
RC0/T1OSO/T1CKI 11 11 I/O ST
entrada de reloj del Timer1.
RC1 puede ser, tambin, la entrada de oscilacin del Timer1, la
RC1/T1OSI/CCP2 12 12 I/O ST
entrada de Captura2, salida de Comparacin2 o salida de PWM2.
RC2 puede ser, tambin, la entrada de Captura1, salida de
RC2/CCP1 13 13 I/O ST
Comparacin1 o salida de PWM1.
RC3 puede ser, tambin, entrada de reloj sncrono serie o salida del
RC3/SCK/SCL 14 14 I/O ST
bloque SPI en modo I2C.
RC4 puede ser, tambin, el dato de entrada en modo SPI o el dato
RC4/SDI/SDA 15 15 I/O ST
de entada salida en modo I2C.
RC5/SDO 16 16 I/O ST RC5 puede ser, tambin, el dato de salida en modo SPI.
RC6/TX/CK 17 17 I/O ST RC6 puede ser tambin, el reloj de la USART.
RC7/RX/DT 18 18 I/O ST RC7 puede ser, tambin, el dato de la USART.
Vss 8,19 8,19 P - Conexin de 0V para circuitos lgicos y entradas/salidas.
VDD 20 20 P - Alimentacin positiva para lgica y entradas/salidas.
I = Entrada; O = Salida; I/O = Entrada o salida; P = Alimentacin
- = No utilizado; TTL = Entrada de ese tipo; ST = Entrada tipo Trigger de Schmitt
Microcontrolador PIC16F876 Pgina 4

2.0 ORGANIZACIN DE LA MEMORIA

Existen tres bloques de memoria: la Memoria de Programa, la Memoria de Datos y la EEPROM


de datos. Las dos primeras poseen buses separados, lo que permite el acceso simultneo.

2.1 ORGANIZACIN DE LA MEMORIA DE PROGRAMA

El PIC16F876 tiene un Contador de Programa (PC) de 13 bits, capaz de direccionar una


memoria de 8K palabras, siendo cada palabra de una longitud de 14 bits.

El vector de Reset se encuentra en la direccin 0000h, queriendo esto decir que tras un reset al
dispositivo el PC se cargar con esa cantidad. El vector de la interrupcin se encuentra situado
en la direccin 0004h. En la figura 2.1 se representa esquemticamente el mapa de memoria del
chip.

Figura 2.1: Mapa de Memoria de Programa y Pila.

La Memoria de Datos se fracciona en cuatro


bancos: banco 0, banco 1, banco 2 y banco 3.

Cada banco puede seleccionarse con los bits


RP0 y RP1 del Registro de Funciones
Especiales (SFR).

RP1:RP0 Banco
00 0
01 1
10 2
11 3

Cada banco tiene una extensin de 128 bytes


(7Fh). Las posiciones ms bajas de cada banco
se reservan para el registro SFR. Tanto SFR
como el GPR (Registro de Propsito General)
se implementan como una RAM esttica. Los
registros que son muy utilizados dentro del
SFR, se duplican en otros bancos para evitar los
continuos cambios de stos en los programas.

2.2.1 FICHERO DE REGISTROS DE PROPSITO GENERAL

Al fichero de registros de propsito general se puede acceder directamente o indirectamente a


travs del Fichero de Seleccin de Registros FSR. En la figura 2.3 se ofrece el mapa del fichero
de registros del PIC16F876.
Microcontrolador PIC16F876 Pgina 5

Figura 2.3: MAPA DEL FICHERO DE REGISTROS DEL PIC16F876.

Direc. de
fichero
Dir. ind.(*) 00h Dir. ind.(*) 80h Dir. ind.(*) 100h Dir. ind.(*) 180h
TMR0 01h OPTION REG 81h TMR0 101h OPTION REG 181h
PCL 02h PCL 82h PCL 102h PCL 182h
STATUS 03h STATUS 83h STATUS 103h STATUS 183h
FSR 04h FSR 84h FSR 104h FSR 184h
PORTA 05h TRISA 85h 105h 185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
PORTC 07h TRISC 87h 107h 187h
PORTD(1) 08h TRISD(1) 88h 108h 188h
PORTE(1) 09h TRISE(1) 89h 109h 189h
PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh
PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch
PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh
TMR1L 0Eh PCON 8Eh EEDATH 10Eh Reservado(2) 18Eh
TMR1H 0Fh 8Fh EEADRH 10Fh Reservado(2) 18Fh
T1CON 10h 90h 110h 190h
TMR2 11h SSPCON2 91h 111h 191h
T2CON 12h PR2 92h 112h 192h
SSPBUF 13h SSPADD 93h 113h 193h
SSPCON 14h SSPSTAT 94h 114h 194h
CCPR1L 15h 95h 115h 195h
CCPR1H 16h 96h 16 bytes de 116h 16 bytes de 196h
CCP1CON 17h 97h Registros de 117h Registros de 197h
RCSTA 18h TXSTA 98h Propsito 118h Propsito 198h
TXREG 19h SPBRG 99h General 119h General 199h
RCREG 1Ah 9Ah 11Ah 19Ah
CCPR2L 1Bh 9Bh 11Bh 19Bh
CCPR2H 1Ch 9Ch 11Ch 19Ch
CCP2CON 1Dh 9Dh 11Dh 19Dh
ADRESH 1Eh ADRESL 9Eh 11Eh 19Eh
ADCON 1Fh ADCON1 9Fh 11Fh 19Fh
20h A0h 120h 1A0h
80 bytes de 80 bytes de
80 bytes de
Registros de Registros de
Registros de
Propsito Propsito
96 bytes de Propsito
General General
Registros de General
EFh 16Fh 1EFh
Propsito
F0h 170H 1F0h
General
Acceso Acceso Acceso
70h - 7Fh 70h - 7Fh 70h - 7Fh
7Fh FFh 17Fh 1FFh
Banco 0 Banco 1 Banco 2 Banco 3

Posiciones sin implementar. Al leerlas se obtiene 0.

* No es fsicamente un registro.

Nota 1: Estos registros no se implementan en los dispositivos de 28 patillas.

Nota 2: Estos registros estn reservados; hay que mantenerlos en 0.


Microcontrolador PIC16F876 Pgina 6

2.2.2 REGISTROS DE FUNCIN ESPECIAL (SFR)

Los Registros de Funcin Especial son registros usados por la CPU y mdulos perifricos para
controlar las operaciones deseadas en el microcontrolador. Estos registros se implementan como
una RAM esttica, y la lista se ofrece en la Tabla 2.1. El SFR puede clasificarse en dos grupos:
para la CPU y para los perifricos. Los registros asociados a operaciones de la CPU se describen
detalladamente en esta seccin; los relacionados con operaciones perifricas se detallarn en
secciones posteriores.

TABLA 2-1: RESUMEN DEL REGISTRO DE FUNCIN ESPECIAL


Valor tras Valor tras
Direcc. Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR otros resets
Banco 0
00h(4) INDF No es un registro fsico. Se usa para direccionamiento de la memoria de datos. 0000 0000 0000 0000
01h TMR0 Registro del mdulo Timer 0. xxxx xxxx uuuu uuuu
02h(4) PCL Byte de menor peso del registro Contador de Programa (PC). 0000 0000 0000 0000
03h(4) STATUS IRP RP1 RP0 -TO -PD Z DC C 0001 1xxx 000q quuu
04h(4) FSR Puntero de direccionamiento indirecto de la memoria de datos. xxxx xxxx uuuu uuuu
05h PORTA -- -- Memoria de datos PORTA en escritura; patillas PORTA en lectura. - -0x 0000 - -0u 0000
06h PORTB Memoria de datos PORTB en escritura; patillas del PORTB cuando se lee. xxxx xxxx uuuu uuuu
07h PORTC Memoria de datos PORTC en escritura; patillas del PORTC cuando se lee. xxxx xxxx uuuu uuuu
08h(5) PORTD Memoria de datos PORTD en escritura; patillas del PORTD cuando se lee. xxxx xxxx uuuu uuuu
09h(5) PORTE -- -- -- -- -- RE2 RE1 RE0 - - - - -xxx - - - - -uuu
0Ah(1,4) PCLATH -- -- -- Buffer de escritura para los 5 bits de ms peso del PC. - - -0 0000 - - -0 0000
0Bh(4) INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
0Ch PIR1 PSPIF(3) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
0Dh PIR2 -- (6) -- EEIF BCLIF -- -- CCP2IF - r -0 0- -0 - r -0 0- -0
0Eh TMR1L 8 bits de menor peso del registro de 16 bits TMR1. xxxx xxxx uuuu uuuu
0Fh TMR1H 8 bits de mayor peso del registro de 16 bits TMR1. xxxx xxxx uuuu uuuu
10h T1CON -- -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON - -00 0000 - -uu uuuu
11h TMR2 Registro del mdulo TIMER 2. 0000 0000 0000 0000
12h T2CON -- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 - 000 0000 - 000 0000
13h SSPBUF Registro de transmisin y buffer de recepcin del puerto serie sncrono. xxxx xxxx uuuu uuuu
14h SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000
15h CCPR1L Byte de menor peso del registro de Captura, Comparacin y PWM. xxxx xxxx uuuu uuuu
16h CCPR1H Byte de mayor peso del registro de Captura, Comparacin y PWM. xxxx xxxx uuuu uuuu
17h CCP1CON -- -- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 - -00 0000 - -00 0000
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x
19h TXREG Registro de dato a transmitir en la USART. 0000 0000 0000 0000
1Ah RCREG Registro de dato recibido en la USART. 0000 0000 0000 0000
1Bh CCPR2L Byte menos significativo del registro 2 de Captura/Comparacin/PWM. xxxx xxxx uuuu uuuu
1Ch CCPR2H Byte ms significativo del registro 2 de Captura/Comparacin/PWM. xxxx xxxx uuuu uuuu
1Dh CCP2CON -- -- CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 - -00 0000 - -00 0000
1Eh ADRESH Byte de ms peso del resultado de la conversin analgica digital (A/D) xxxx xxxx uuuu uuuu
1Fh ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/-DONE -- ADON 0000 00-0 0000 00-0
Explicacin: x = Desconocido; u = Sin cambio; q = Depende de condicin; r = Reservado
--- = Sin implementar (al leer da cero); delante de una referencia = Funcin negada
Las posiciones oscurecidas estn sin implementar; su lectura proporciona un cero.
Nota 1: El byte ms significativo del Contador de Programa est inaccesible. PCLATH es el registro de los 5
bits de ms peso del PC (PC12 - PC8).
Nota 2: Otros resets incluye el externo (por la patilla -MCLR) y el debido al Watchdog.
Nota 3: Los bits PSPIE y PSPIF estn reservados en los dispositivos de 28 patillas; se deben poner a cero.
Nota 4: Estos registros pueden direccionarse desde cualquier banco.
Nota 5: PORTD, PORTE, TRISD y TRISE no estn implementados en los dispositivos de 28 patillas. Al
leerlos, siempre se obtiene cero.
Nota 6: PIR2<6> y PIE2<6> estn reservados en dispositivos de 28 patillas; se deben mantener siempre a cero.
Microcontrolador PIC16F876 Pgina 7

TABLA 2-1:RESUMEN DEL REGISTRO DE FUNCIN ESPECIAL (CONTINUACIN)


Valor tras Valor tras
Direcc. Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR otros resets
Banco 1
80h(4) INDF No es un registro fsico. Se usa para direccionamiento de la memoria de datos. 0000 0000 0000 0000
81h OPTION_REG -RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
82h(4) PCL Byte menos significativo del Contador de Programa (PC). 0000 0000 0000 0000
83h(4) STATUS IRP RP1 RP0 -TO -PD Z DC C 0001 1xxx 000q quuu
84h(4) FSR Puntero de direccionamiento indirecto de la memoria de datos. xxxx xxxx uuuu uuuu
85h TRISA -- -- Registro de programacin de direccin del puerto A. - -11 1111 - -11 1111
86h TRISB Registro de programacin de direccin del puerto B. 1111 1111 1111 1111
87h TRISC Registro de programacin de direccin del puerto C. 1111 1111 1111 1111
88h(5) TRISD Registro de programacin de direccin del puerto D. 1111 1111 1111 1111
89h(5) TRISE IBF OBF IBOV PSPMODE -- Direccin de datos en puerto E. 0000 -111 0000 -111
8Ah(1,4) PCLATH -- -- -- Buffer de escritura para los 5 bits de ms peso del PC. - - -0 0000 - - -0 0000
8Bh(4) INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
8Ch PIE1 PSPIE(3) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
8Dh PIE2 -- (6) -- EEIE BCLIE -- -- CCP2IE -r -0 0- -0 -r -0 0- -0
8Eh PCON -- -- -- -- -- -- -POR BOR - - - - - -qq - - - - - -uu
8Fh -- Sin implementar. ---- ----
90h -- Sin implementar. ---- ----
91h SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 0000 0000
92h PR2 Registro de programacin del perodo del temporizador 2 (Timer 2). 1111 1111 1111 1111
93h SSPADD Registro de direccin del puerto serie sncrono en modo I2C. 0000 0000 0000 0000
94h SSPSAT SMP CKE D/-A P S R/-W UA BF 0000 0000 0000 0000
95h -- Sin implementar. ---- ----
96h -- Sin implementar. ---- ----
97h -- Sin implementar. ---- ----
98h TXSTA CSRC TX9 TXEN SYNC -- BRGH TRMT TX9D 0000 -010 0000 -010
99h SPBRG Registro generador de baudios de transmisin. 0000 0000 0000 0000
9Ah -- Sin implementar. ---- ----
9Bh -- Sin implementar. ---- ----
9Ch -- Sin implementar. ---- ----
9Dh -- Sin implementar. ---- ----
9Eh ADRESL Byte de menos peso del resultado de la conversin analgica digital (A/D) xxxx xxxx uuuu uuuu
9Fh ADCON1 ADFM -- -- -- PCFG3 PCFG2 PCFG1 PCFG0 0- - - 0000 0- - - 0000
Explicacin: x = Desconocido; u = Sin cambio; q = Depende de condicin; r = Reservado
--- = Sin implementar (al leer da cero); delante de una referencia = Funcin negada
Las posiciones oscurecidas estn sin implementar; su lectura proporciona un cero.
Nota 1: El byte ms significativo del Contador de Programa est inaccesible. PCLATH es el registro de los 5
bits de ms peso del PC (PC12 - PC8).
Nota 2: Otros resets incluye el externo (por la patilla -MCLR) y el debido al Watchdog.
Nota 3: Los bits PSPIE y PSPIF estn reservados en los dispositivos de 28 patillas; se deben poner a cero.
Nota 4: Estos registros pueden direccionarse desde cualquier banco.
Nota 5: PORTD, PORTE, TRISD y TRISE no estn implementados en los dispositivos de 28 patillas. Al
leerlos, siempre se obtiene cero.
Nota 6: PIR2<6> y PIE2<6> estn reservados en dispositivos de 28 patillas; se deben mantener siempre a cero.
Microcontrolador PIC16F876 Pgina 8

TABLA 2-1: RESUMEN DE REGISTRO DE FUNCIN ESPECIAL (CONTINUACIN)


Valor tras Valor tras
Direcc. Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, BOR otros resets
Banco 2
100h(4) INDF No es un registro fsico. Se usa para direccionamiento de la memoria de datos. 0000 0000 0000 0000
101h TMR0 Registro del mdulo temporizador 0 (Timer 0). xxxx xxxx uuuu uuuu
102h(4) PCL Byte menos significativo del Contador de Programa (PC). 0000 0000 0000 0000
103h(4) STATUS IRP RP1 RP0 -TO -PD Z DC C 0001 1xxx 000q quuu
104h(4) FSR Puntero de direccionamiento indirecto de la memoria de datos. xxxx xxxx uuuu uuuu
105h -- Sin implementar. ---- ----
106h PORTB Memoria de datos PORTB en escritura; patillas del PORTB cuando se lee. xxxx xxxx uuuu uuuu
107h -- Sin implementar. ---- ----
108h -- Sin implementar. ---- ----
109h -- Sin implementar. ---- ----
10Ah(1,4) PCLATH -- -- -- Buffer de escritura para los 5 bits de ms peso del PC. - - -0 0000 - - -0 0000
10Bh(4) INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10Ch EEDATA Registro de datos de la EEPROM. xxxx xxxx uuuu uuuu
10Dh EEADR Registro de direccin de la EEPROM. xxxx xxxx uuuu uuuu
10Eh EEDATH -- -- Byte alto del registro de datos de la EEPROM xxxx xxxx uuuu uuuu
10Fh EEADRH -- -- -- Byte alto del registro de direccin de la EEPROM xxxx xxxx uuuu uuuu
Banco 3
180h(4) INDF No es un registro fsico. Se usa para direccionamiento de la memoria de datos. 0000 0000 0000 0000
181h OPTION_REG -RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
182h(4) PCL Byte menos significativo del Contador de Programa (PC). 0000 0000 0000 0000
183h(4) STATUS IRP RP1 RP0 -TO -PD Z DC C 0001 1xxx 000q quuu
184h(4) FSR Puntero de direccionamiento indirecto de la memoria de datos. xxxx xxxx uuuu uuuu
185h -- Sin implementar. ---- ----
186h TRISB Registro de programacin de direccin del puerto B. 1111 1111 1111 1111
187h -- Sin implementar. ---- ----
188h -- Sin implementar. ---- ----
189h -- Sin implementar. ---- ----
18Ah(1,4) PCLATH -- -- -- Buffer de escritura para los 5 bits de ms peso del PC. - - -0 0000 - - -0 0000
18Bh(4) INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
18Ch EECON1 EEPGD -- -- -- WRERR WREN WR RD x- - - x000 x- - - u000
18Dh EECON2 Registro 2 de control de EEPROM. No es fsicamente un registro. ---- ---- ---- ----
18Eh -- Sin implementar. 0000 0000 0000 0000
18Fh -- Sin implementar. 0000 0000 0000 0000
Explicacin: x = Desconocido; u = Sin cambio; q = Depende de condicin; r = Reservado
--- = Sin implementar (al leer da cero); delante de una referencia = Funcin negada
Las posiciones oscurecidas estn sin implementar; su lectura proporciona un cero.
Nota 1: El byte ms significativo del Contador de Programa est inaccesible. PCLATH es el registro de los 5
bits de ms peso del PC (PC12 - PC8).
Nota 2: Otros resets incluye el externo (por la patilla -MCLR) y el debido al Watchdog.
Nota 3: Los bits PSPIE y PSPIF estn reservados en los dispositivos de 28 patillas; se deben poner a cero.
Nota 4: Estos registros pueden direccionarse desde cualquier banco.
Nota 5: PORTD, PORTE, TRISD y TRISE no estn implementados en los dispositivos de 28 patillas. Al
leerlos, siempre se obtiene cero.
Nota 6: PIR2<6> y PIE2<6> estn reservados en dispositivos de 28 patillas; se deben mantener siempre a cero.
Microcontrolador PIC16F876 Pgina 9

2.2.2.1 REGISTRO DE ESTADO (STATUS REGISTER)

El registro de estado contiene el estado despus de operaciones aritmticas y lgicas en el


bloque de la ALU, el estado del RESET y los bits de seleccin de banco para la memoria de
datos.

El SR (Status Register) puede alterarse debido a algunas instrucciones o a algunos registros. Si


el SR es el destino de alguna instruccin que afecta a los indicadores Z, DC o C, la escritura
sobre estos tres bits se inhibe. Estos bits se activan o se borran de acuerdo a circuitos lgicos.
Adems, los bits -TO y -PD no pueden modificarse, por tanto, el resultado de una instruccin
que tenga como destino el SR puede ser distinto de lo esperado. Por ejemplo, CLRF STATUS
borrar los tres bits de ms peso y pondr a 1 el bit Z. Esto dejar el SR como 000u u1uu, donde
u significa sin cambio.

Se recomienda, por lo tanto, que solamente se utilicen, para variar el SR, las instrucciones BCF,
BSF, SWAPF y MOVWF, porque stas no afectan a los bits Z, C o DC del registro SR. En el
Resumen de Instrucciones se marcan las instrucciones que no afectan a los bits del registro
SR.

REGISTRO 2-1: REGISTRO DE ESTADO (SR). (DIRECCIONES 03h, 83h, 103h y 183h.)

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


IRP RP1 RP0 -TO -PD Z DC C R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR
bit 7: IRP: Bit de seleccin de banco de registros (usado para direccionamiento indirecto).
1 = Bancos 2 y 3 (100h - 1FFh)
0 = Bancos 0 y 1 (00h - FFh)

bit 6-5: RP1:RP0: Bits de seleccin de banco de registros (usado para direccionamiento directo).
11 = Banco 3 (180h - 1FFh)
10 = Banco 2 (100h - 17Fh)
01 = Banco 1 (80h - FFh)
00 = Banco 0 (00h - 7Fh)
Cada banco dispone de 128 bytes.

bit 4: -TO: Bit de final de temporizacin.


1 = Despus de conexin, instruccin CLRWDT, o instruccin
SLEEP.
0 = Cuando sucede el final de temporizacin del WDT.

bit 3: -PD: Bit de bajada de tensin.


1 = Despus de la conexin o por la instruccin CLRWDT.
0 = Al ejecutar la instruccin SLEEP.

bit 2: Z: Bit de cero


1 = Despus de una operacin lgica o aritmtica con resultado cero.
0 = Despus de una operacin lgica o aritmtica con resultado distinto de cero.

bit 1: DC: Bit de acarreo o debe en las instrucciones ADDWF, ADDLM, SUBLW y SUBWF.
(El indicador de debe es de polaridad contraria.)
1 = Cuando hay acarreo en el cuarto bit.
0 = Cuando no hay acarreo en el cuarto bit.

bit 0: C: Bit de acarreo o debe en las instrucciones ADDWF, ADDLW, SUBLW y SUBWF.
1 = Cuando hay acarreo en el octavo bit (ms significativo).
0 = Cuando no hay acarreo en el octavo bit.

Nota: Para el debe, la polaridad es contraria. La resta se realiza sumando el complemento a dos del segundo
operando. Para instrucciones de rotacin (RRF y RLF), este bit se carga con el valor del bit de mayor o menor peso
del registro que se rota.
Microcontrolador PIC16F876 Pgina 10

2.2.2.2 REGISTRO DE OPCIONES (DIRECCIONES 81h, 181h)

El Registro de Opciones es un registro de lectura y escritura que contiene varios bits de control
para configurar el TMR0 (Temporizador0), valores del Predivisor, asignacin de ste,
Interrupcin Externa y Resistencias de Polarizacin del circuito de salida del Puerto B.

REGISTRO 2-2: REGISTRO DE OPCIONES (DIRECCIONES 81h Y 181h)

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1


-RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR
bit 7: -RBPU: Bit de habilitacin de resistencias de polarizacin en salida del PUERTO B.
1 = Resistencias inhibidas.
0 = Resistencias habilitadas.

bit 6: INTEDG: Bits de seleccin de flanco de interrupcin.


1 = Interrupcin activa en el flanco positivo en la patilla RB0/INT.
0 = Interrupcin activa en el flanco de bajada en la patilla RB0/INT.

T0CS: Bit de seleccin de fuente de reloj para TMR0


bit 5:
(Temporizador 0).
1 = Cambio en la patilla RA4/T0CKI.
0 = Reloj procedente del final del ciclo de instruccin (CLKOUT).

bit 4: T0SE: Bit de seleccin de flanco de reloj en el TMR0.


1 = Variacin de nivel alto a bajo en la patilla RA4/T0CKI.
0 = Variacin de nivel bajo a alto en la patilla RA4/T0CKI.

bit 3: PSA: Bit de asignacin del PRESCALER (Divisor de Frecuencia).


1 = El Prescaler se asigna al WDT.
0 = El Prescaler se asigna al mdulo TMR0.

bit 2-0: PS2:PS0: Bit de valor de divisin del prescaler.


1 = Despus de una operacin lgica o aritmtica con resultado cero.
0 = Despus de una operacin lgica o aritmtica con resultado distinto de cero.
Valor Divisor TMR0 Divisor WDT
000
bit 1: 2 1:1
001 1: 4 1: 2
010 1: 8 1: 4
011 1 : 16 1: 8
100 1 : 32 1 : 16
101 1 : 64 1 : 32
110 1 : 128 1 : 64
111 1 : 256 1 : 128

Nota: Cuando se use la baja tensin de programacin (LVP) y la polarizacin de la salida del PORTB est
habilitada, el bit 3 del registro TRISB debe ponerse a 0 para inhibir la polarizacin en RB3 y asegurar la correcta
operacin del dispositivo.
Microcontrolador PIC16F876 Pgina 11

2.2.2.3 REGISTRO INTCON (CONTROL DE INTERRUPCIONES)

El registro INTCON es un registro de lectura y escritura que contiene varios bits de sealizacin
y habilitacin para el desbordamiento (overflow) del TMR0, cambio sobre el puerto RB e
interrupcin externa en la patilla RB0/INT.

Nota: El bit indicador de interrupcin se activa cuando ocurre una interrupcin,


independientemente del estado de su correspondiente bit de habilitacin o del bit de habilitacin
general GIE (INTCON<7>). El programa debe asegurar que el bit indicador de interrupcin
apropiado est borrado antes de habilitar una interrupcin.

REGISTRO 2-3: REGISTRO INTCON (DIRECCIONES 0Bh, 8Bh, 10Bh Y 18Bh)

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


GIE PEIE T0IE INTE RBIE T0IF INTF RBIF R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR
bit 7: GIE: Bit de habilitacin general de interrupciones.
1 = Habilita todas las interrupciones no enmascaradas.
0 = Inhibe todas las interrupciones.

bit 6: PEIE: Bit de habilitacin de interrupcin de perifricos.


1 = Habilita todas las interrupciones no enmascaradas de perifricos.
0 = Inhibe todas las interrupciones de perifricos.

bit 5: T0IE: Bit de habilitacin de interrupcin por desbordamiento del TMR0.


1 = Habilita la interrupcin del TMR0.
0 = Inhibe la interrupcin del TMR0.

bit 4: INTE: Bit de habilitacin de interrupcin externa en la patilla RB0/INT.


1 = Habilita la interrupcin externa en la patilla RB0/INT.
0 = Inhibe la interrupcin externa en la patilla RB0/INT.

bit 3: RBIE: Bit de habilitacin de interrupcin por variacin en puerto RB.


1 = Habilita la interrupcin cuando sucede una variacin sobre el puerto RB.
0 = Inhibe la interrupcin cuando sucede una variacin sobre el puerto RB.

bit 2: T0IF: Bit indicador de interrupcin por desbordamiento del TMR0 .


1 = El TMR0 ha terminado su tiempo (desbordamiento). Este indicador se debe borrar en el programa.
0 = An no ha sucedido el desbordamiento del TMR0.

bit 1: INTF: Bit indicador de interrupcin externa en la patilla RB0/INT.


1 = Ha sucedido una interrupcin externa en la patilla RB0/INT. Debe borrarse en el programa.
0 = No ha llegado una interrupcin externa por la patilla RB0/INT.

bit 0: RBIF: Bit indicador de interrupcin por variacin sobre el puerto RB.
1 = Ha sucedido una interrupcin por variacin de nivel en el puerto RB. Se debe borrar por software.
0 = No ha habido variacin sobre el puerto RB.
Microcontrolador PIC16F876 Pgina 12

2.2.2.4 REGISTRO PIE1

El registro PIE1 posee los bits de habilitacin individual para las interrupciones de perifricos.
El bit PEIE del registro INTCON debe ser 1 para permitir la habilitacin de cualquier
interrupcin de perifrico.

REGISTRO 2-4: REGISTRO PIE1 (DIRECCIN 8Ch).

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


PSPIE (1)
ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR
bit 7: PSPIE: Bit habilitador de interrupcin por Lectura-Escritura en el Puerto Servidor Paralelo (PSP).
1 = Habilita la interrupcin del PSP.
0 = Inhibe la interrupcin del PSP.

bit 6: ADIE: Bit de habilitacin de interrupcin del Convertidor Analgico Digital (ADC).
1 = Habilita la interrupcin del ADC.
0 = Inhibe la interrupcin del ADC.

bit 5: RCIE: Bit de habilitacin de interrupcin de recepcin del USART.


1 = Habilita la interrupcin de recepcin del USART.
0 = Inhibe la interrupcin de recepcin del USART.

bit 4: TXIE: Bit de habilitacin de interrupcin para la transmisin en el USART.


1 = Habilita la interrupcin para la transmisin en el USART.
0 = Inhibe la interrupcin para la transmisin en el USART.

bit 3: SSPIE: Bit de habilitacin de interrupcin para el Puerto Sncrono Serie (SSP).
1 = Habilita la interrupcin del SSP.
0 = Inhibe la interrupcin del SSP.

bit 2: CCP1IE: Bit de habilitacin de interrupcin del mdulo de Captura /Comparacin/PWM.


1 = Habilita la interrupcin del mdulo CCP1.
0 = Inhibe la interrupcin del mdulo CCP1.

bit 1: TMR2IE: Bit de habilitacin de interrupcin por coincidencia del TMR2 con el PR2.
1 = Habilita la interrupcin cuando coincide los contenidos de TMR2 y PR2.
0 = Inhibe la interrupcin por coincidencia de los contenidos de TMR2 y PR2

bit 0: TMR1IE: Bit de habilitacin de interrupcin por desbordamiento del TMR1.


1 = Habilita la interrupcin cuando desborda el TMR1 (termina su tiempo programado).
0 = Inhibe la interrupcin del TMR1.

Nota 1: PSPIE queda reservado en los dispositivos de 28 patillas; se debe mantener siempre a cero.
Microcontrolador PIC16F876 Pgina 13

2.2.2.5 REGISTRO PIR1

El registro PIR1 contiene los bits de sealizacin individual de las interrupciones de perifricos.
Nota: El bit indicador de interrupcin se activa al ocurrir una interrupcin, independientemente
del estado de su correspondiente bit de habilitacin o del bit de habilitacin general GIE
(INTCON<7>). El programa debe asegurar que el bit indicador de interrupcin apropiado est
borrado antes de habilitar una interrupcin.

REGISTRO 2-5: REGISTRO PIR1 (DIRECCIN 0Ch)


R/W-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0
PSPIF (1)
ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF R = De lectura
W = De escritura
bit7 bit0 -n = Valor del reset POR
bit 7: PSPIF: Bit indicador de interrupcin por Lectura-Escritura del Puerto Servidor Paralelo (PSP).
1 = Una operacin de escritura o lectura ha tenido lugar. Debe borrarse por software.
0 = No ha ocurrido una operacin de lectura o escritura.

bit 6: ADIF: Bit de sealizacin de interrupcin del Convertidor Analgico Digital (ADC).
1 = Se ha completado la conversin del ADC.
0 = El ADC no ha terminado su conversin.

bit 5: RCIF: Bit de sealizacin de interrupcin por recepcin del USART.


1 = El buffer de recepcin del USART est lleno.
0 = El buffer de recepcin del USART est vaco.

bit 4: TXIF: Bit de sealizacin de interrupcin para la transmisin en el USART.


1 = El buffer de transmisin del USART est vaco (USART preparado para una nueva trasmisin).
0 = El buffer de transmisin del USART est lleno (an no se ha transmitido el byte).

bit 3: SSPIF: Bit de sealizacin de interrupcin para el Puerto Sncrono Serie (SSP).
1 = Ha ocurrido la condicin de interrupcin del SSP, y debe ser borrada en el software antes de
retornar de la rutina de servicio de la interrupcin. Las condiciones sealadas por este bit son:
SPI
Se ha producido una transmisin o recepcin.
I2C Slave (servidor)
Se ha producido una transmisin o recepcin.
I2C Master (maestro)
Se ha producido una transmisin o recepcin.
El mdulo SSP complet la condicin de START (arranque).
El mdulo SSP complet la condicin de STOP (detencin).
El mdulo SSP complet la condicin de RESTART (reinicio).
El mdulo SSP complet la condicin de ACK (Acknowledge = Reconocimiento).
Una condicin de START ha ocurrido cuando el mdulo est aislado (sistema Multimaestro).
Una condicin de STOP ha ocurrido cuando el mdulo est aislado (sistema Multimaestro).
0 = No ha sucedido la condicin de interrupcin del SSP.

bit 2: CCP1IF: Bit de sealizacin de interrupcin del mdulo de Captura /Comparacin/PWM.


Modo Captura
1 = Ha ocurrido una captura en el registro TMR1. Debe borrarse por software.
0 = No ha sucedido una captura del registro TMR1.
Modo Comparacin
1 = Ha ocurrido una coincidencia en la comparacin del registro TMR1. Debe borrarse por software.
0 = No existe coincidencia de comparacin en el registro TMR1.
Modo PWM
No se usa en este modo.

bit 1: TMR2IF: Bit de sealizacin de interrupcin por coincidencia del TMR2 con el PR2.
1 = Ha ocurrido la coincidencia entre los contenidos de TMR2 y PR2. Debe borrarse por software.
0 = No hay coincidencia de los contenidos de TMR2 y PR2.

bit 0: TMR1IF: Bit de sealizacin de interrupcin por desbordamiento del TMR1.


1 = Se ha producido el desbordamiento del TMR1 (termina su tiempo programado). Debe borrarse por
software.
0 = No ha finalizado su tiempo el TMR1.
Nota 1: PSPIF queda reservado en los dispositivos de 28 patillas; se debe mantener siempre a cero.
Microcontrolador PIC16F876 Pgina 14

2.2.2.6 REGISTRO PIE2

El registro PIE2 contiene los bits de habilitacin de interrupcin individual para los perifricos
CCP2, conflicto de bus de SSP y operacin de escritura en la EEPROM.

REGISTRO 2-6: REGISTRO PIE2 (DIRECCIN 8Dh)

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


--- --- --- EEIE BCLIE --- --- CCP2IE R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit 7: Sin implementar: Da cero al leer.

bit 6: Reservado: Siempre se debe mantener este bit a cero.

bit 5: Sin implementar: Da cero al leer.

bit 4: EEIE: Bit de habilitacin de interrupcin por la operacin de escritura en la EEPROM.


1 = Habilita la interrupcin para la escritura en la EEPROM.
0 = Inhibe la interrupcin para la escritura en la EEPROM.

bit 3: BCLIE: Bit de habilitacin de interrupcin por el conflicto de bus del Puerto Sncrono Serie (SSP).
1 = Habilita la interrupcin de conflicto de bus del SSP.
0 = Inhibe la interrupcin de conflicto de bus del SSP.

bit 2-1: Sin implementar: Da cero al leer.

bit 0: CCP2IE: Bit de habilitacin del mdulo CCP2.


1 = Habilita la interrupcin de CCP2.
0 = Inhibe la interrupcin de CCP2.
Microcontrolador PIC16F876 Pgina 15

2.2.2.7 REGISTRO PIR2

El registro PIR2 contiene los bits indicadores de las interrupciones de CCP2, conflicto de bus de
SSP y operacin de escritura en EPROM.

Nota: El bit indicador de interrupcin se activa cuando ocurre una interrupcin,


independientemente del estado de su correspondiente bit de habilitacin o del bit de habilitacin
general GIE (INTCON<7>). El programa debe asegurar que el bit indicador de interrupcin
apropiado est borrado antes de habilitar una interrupcin.

REGISTRO 2-7: REGISTRO PIR2 (DIRECCIN 0Dh)

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


--- --- --- EEIF BCLIF --- --- CCP2IF R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit 7: Sin implementar: Da cero al leer.

bit 6: Reservado: Siempre se debe mantener este bit a cero.

bit 5: Sin implementar: Da cero al leer.

bit 4: EEIF: Bit de sealizacin de interrupcin por la operacin de escritura en la EEPROM.


1 = Se ha completado la operacin de escritura en la EEPROM. Debe borrarse por software.
0 = No se ha completado la escritura en la EEPROM, o no se ha iniciado.

bit 3: BCLIF: Bit de sealizacin de interrupcin por el conflicto de bus del Puerto Sncrono Serie (SSP).
1 = Un conflicto de bus ha ocurrido en el SSP cuando estaba configurado en modo Maestro I 2C.
0 = No existe conflicto de bus del SSP.

bit 2-1: Sin implementar: Da cero al leer.

bit 0: CCP2IF: Bit de sealizacin de interrupcin del mdulo CCP2.


Modo Captura:
1 = Ha sucedido una captura en el registro TMR1. Debe borrarse por software.
0 = No hay captura en el registro TMR1.
Modo Comparacin:
1 = Ha ocurrido la coincidencia en la comparacin del registro TMR1. Debe borrarse por software.
0 = No hay coincidencia en la comparacin del registro TMR1.
Modo PWM:
No se usa.
Microcontrolador PIC16F876 Pgina 16

2.2.2.8 REGISTRO PCON

El registro de control de alimentacin PCON contiene los bits que permiten la diferenciacin
entre el reset de conexin (POR), el reset Brown.Out (BOR), el reset Watch-Dog (WDT) y el
reset externo -MCLR.

Nota: BOR se ignora durante la conexin (POR). Lo debe activar el usuario y chequearlo en los
subsiguientes resets para ver si BOR est borrado, indicando, con ello, que ha ocurrido un reset
BOR. El bit de estado de BOR es indiferente y no predecible si el circuito de Brown-Out se
inhibe (borrando el bit BODEN en la palabra de configuracin).

REGISTRO 2-8: REGISTRO PCON (DIRECCIN 8Eh)

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


--- --- --- --- --- --- -POR -BOR R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit 7-2: Sin implementar: Da cero al leer.

bit 1: -POR: Bit indicador del estado del reset de conexin (POR).
1 = No ha sucedido el reset de conexin
0 = Ha ocurrido un reset de conexin. Debe ponerse a 1 por software despus de la conexin.

bit 0: -BOR: Bit indicador del estado del reset BOR


1 = No ha sucedido un reset tipo BOR.
0 = Ha ocurrido un reset tipo BOR. Debe activarse por software despus del reset BOR.
Microcontrolador PIC16F876 Pgina 17

2.3 PCL Y PCLATH

El registro Contador de Programa (PC) tiene un tamao de 13 bits. El byte de menor peso reside
en el registro PCL, que es un registro de lectura y escritura. Los 5 bits de mayor peso
(PC<12:8>) no se pueden leer, pero son susceptibles de escritura indirectamente a travs del
registro PCLATH. Despus de cualquier reset, los bits de mayor peso quedan borrados. En la
figura 2-5 se muestra las dos situaciones para cargar el PC. El ejemplo superior de la figura
muestra cmo se carga el PC con la escritura del PCL (PCLATH<4:0> PCH). El ejemplo
inferior de la figura muestra la carga del PC durante una instruccin CALL o GOTO
(PCLATH<4:3> PCH).

FIGURA 2-5: CARGA DEL PC EN SITUACIONES DIFERENTES

2.3.1 CLCULO DEL SALTO


(GOTO)

El clculo del salto se realiza sumando


un desplazamiento al contenido del PC
(ADDWF PCL). Cuando se realiza la
lectura de una tabla usando el mtodo
del salto (GOTO), hay que tener
cuidado para no superar el lmite de
memoria (cada bloque de 256 bytes)

2.3.2 PILA

El PIC16F876 posee una pila por hardware de 8 niveles, con un ancho de palabra de 13 bits. El
espacio ocupado por la pila no forma parte de la memoria de usuario, y el puntero de pila no se
puede leer ni escribir. El PC se salva en pila cuando se ejecuta una instruccin CALL o cuando
se va a producir un salto debido a una interrupcin. Se extrae de la pila cuando se ejecuta una
instruccin RETURN, RETLW o RETFIE. El PCLATH no vara en operaciones de salvar o
recuperar de pila (operaciones PUSH o POP).

La pila opera como un buffer circular: despus de ocho memorizaciones (entradas) en pila, la
novena, sobrescribir su valor en la primera entrada, la dcima, sobrescribir en la que fue la
segunda entrada, y as sucesivamente.

Nota 1: No existe ningn bit de estado que indique condiciones de desbordamiento de pila.

Nota 2: No existen mnemnicos de instrucciones llamados PUSH o POP. Estas acciones


suceden al ejecutar instrucciones como CALL, RETURN, RETLW y RETFIE, o al vectorizarse
una interrupcin.

2.4 PAGINANDO LA MEMORIA DE PROGRAMA

El PIC16F876 es capaz de direccionar un bloque continuo de 8k palabras de memoria de


programa. Las instrucciones CALL o GOTO proporcionan solamente 11 bits de direccin para
permitir el salto entre una extensin de memoria de 2k palabras. Cuando se realiza una
instruccin CALL o GOTO, los 2 bits de mayor peso de la direccin son suministrados por el
registro PCLATH, bits 4 y 3. Cuando ejecute una instruccin CALL o GOTO, el usuario debe
Microcontrolador PIC16F876 Pgina 18

asegurarse que los bits de seleccin de pgina estn programados de manera adecuada a la
pgina de memoria deseada. Si se ejecuta un retorno de una instruccin CALL (o interrupcin),
el total de los 13 bits del PC son devueltos desde la pila, por consiguiente, la manipulacin de
los bits 4 y 3 del PCLATH no es necesaria para instrucciones de retorno.

El ejemplo 2-1 muestra la llamada de una subrutina en la pgina 1 de la memoria de programa.


Este ejemplo asume que el PCLATH es salvado y restaurado por la rutina de servicio de la
interrupcin (si se usa interrupcin).

Ejemplo 2-1: Llamada de una subrutina en pgina 1 desde la pgina 0.

ORG 0x500
BCF PCLATH,4
BSF PCLATH,3 ;Selecciona pgina 1 (800h - FFFh)
CALL SUB1_P1 :Llama a subrutina en pgina 1 (800h - FFFh)
:
:
ORG 0x900 ;Pgina 1 (800h - FFFh)
SUB1_P1
: ;Llamada a subrutina
: ;Pgina 1 (800h - FFFh)
:
RETURN ;Retorna a pgina 0 (000h - 7FF), de la llamada
de subrutina.
Microcontrolador PIC16F876 Pgina 19

2.5 Direccionamiento Indirecto: registros INDF y FSR.

El registro INDF no es un registro fsico y se usa para conseguir el direccionamiento indirecto.


Cualquier instruccin que utilice el registro INDF, lo que hace es acceder a la direccin
apuntada por FSR. Si se efecta una lectura sobre INDF, se leer 0; si se escribe sobre INDF no
se ejecuta ninguna accin, aunque los bits de estado pueden resultar afectados. Se puede obtener
una direccin efectiva de 9 bits encadenando los 8 bits del registro FSR y el bit IRP del registro
de estado (STATUS<7>), como se muestra en la figura 2-6.

Un programa sencillo, para borrar las posiciones de memoria que van desde 20h a 2Fh, usando
direccionamiento indirecto, se expone en el ejemplo 2-2.

EJEMPLO 2-2 DIRECCIONAMIENTO INDIRECTO

movlw 0x20 ;Inicializa el puntero de RAM.


movwf FSR ; "
NEXT clrf INDF ;Borra posicin de RAM.
incf FSR,1 ;Incrementa el puntero.
btfss FSR,4 ;Si se ha completado el borrado se salta la prxima
instruccin.
goto NEXT ;Si no se han borrado todas las posiciones se repite el
bucle.
:
:

FIGURA 2-6: DIRECCIONAMIENTO DIRECTO E INDIRECTO


Microcontrolador PIC16F876 Pgina 20

3.0 PUERTOS DE ENTRADA SALIDA

Algunas de las patillas destinadas a puertos de


entrada salida se multiplexan para obtener otras
funciones de perifricos del dispositivo. Como
regla general podemos decir que cuando un
perifrico se habilita, la patilla respectiva no se
utilizar como puerto de entrada salida.

3.1 Registros PORTA y TRISA

PORTA es un registro de puerto bidireccional de


6 bits, cuyo registro de direccin de datos es
TRISA. Programando TRISA a 1 conseguiremos
que el puerto A quede como entrada, quedando
el circuito (driver) de salida en estado de alta
impedancia o desconexin. Si ponemos a 0 el
registro TRISA conseguiremos programar el
puerto A como salida, y, con ello, que el
contenido del latch correspondiente aparezca en
la patilla de salida.

Leyendo el registro PORTA leeremos el estado


en las patillas del puerto A, mientras que si
escribimos en PORTA, lo estaremos haciendo en
el latch de salida.

La patilla RA4 se multiplexa con la entrada de


reloj del Timer0, y se llama RA4/T0CKI. Esta
patilla, como entrada es de tipo Schmitt Trigger,
como salida es de tipo drenador abierto. Las
dems patillas del PORTA poseen niveles TTL
de entrada y salidas CMOS amplificadas.

Las dems patillas del PORTA se multiplexan


con entradas analgicas y con la tensin de
referencia analgica VREF. La operacin de cada
patilla se selecciona activando o borrando los
bits de control en el registro ADCON1 (registro
1 de control del CAD).

Despus de Reset, estas patillas se configuran


como entradas analgicas, y se leen como 0.

El registro TRISA controla la direccin de las


patillas del PORTA, incluso cuando se usan
como entradas analgicas. Por este motivo, el
usuario debe asegurarse que los bits del registro
TRISA estn a 1 cuando se usen las patillas del
puerto como entradas analgicas.
Microcontrolador PIC16F876 Pgina 21

EJEMPLO 3.1: INICIALIZACIN DEL PORTA

BCF STATUS, RP0 ; Selecciona banco 0.


BCF STATUS, RP1 ;
CLRF PORTA ; Pone 0 en los latches de salida.
BSF STATUS, RP0 ; Selecciona banco 1.
MOVLW 0x06 ; Configura todas las patillas como entradas
MOVWF ADCON1 ; digitales.
MOVLW 0xCF ; Dato para configurar la direccin.
MOVWF TRISA ; Programa RA0-RA3 como entradas, y
; RA4-RA5 como salidas.
; TRISA (6-7) siempre se leern como 0.

TABLA 3-1: FUNCIONES DEL PUERTO A (PortA)


Nombre Bit Buffer Funcin

RA0/AN0 Bit0 TTL Entrada-salida o entrada analgica 0.


RA1/AN1 Bit1 TTL Entrada-salida o entrada analgica 1.
RA2/AN2 Bit2 TTL Entrada-salida o entrada analgica 2.
RA3/AN3/VREF Bit3 TTL Entrada-salida, entrada analgica 3, o VREF.
Entrada-salida, o entrada externa de reloj de TIMER0.
RA4/T0CKI Bit4 ST
La salida es de tipo drenador abierto.
Entrada-salida, seleccin de servidor para el puerto
RA5/-SS/AN4 Bit5 TTL
serie sncrono, o entrada analgica 4.
TTL = Entrada tipo TTL; ST = Entrada tipo Schmitt Trigger.

TABLA 3-2: RESUMEN DE REGISTROS ASOCIADOS AL PORTA

Valor tras Valor tras


Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
POR, BOR otros resets

05h PORTA --- --- RA5 RA4 RA3 RA2 RA1 RA0 - - 0x 0000 - - 0u 0000

85h TRISA --- --- Registro de direccin de datos del PORTA - - 11 1111 - - 11 1111

9Fh ADCON1 ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0 - - 0 - 0000 - - 0 - 0000
x = Desconocido; u = Sin cambio; --- = sin implementar (se lee 0). Las celdas sombreadas no se utilizan en
PORTA.

Cuando se use el mdulo SSP en modo servidor SPI, y SS habilitado, el convertidor


A/D debe fijarse a uno de los siguientes valores de PCFG3 PCFG0: 0100, 0101, 011x,
1101, 1110, 1111.
Microcontrolador PIC16F876 Pgina 22

3.2 REGISTROS PORTB Y TRISB

PORTB es un registro bidireccional de 8 bits que tiene su registro de direccin en TRISB.


Programando ste a 1, las lneas del PORTB quedan como entradas; borrando el registro
TRISB, las 8 lneas del puerto se programan como salidas (en este caso, el contenido de los
latches de salida aparecer en las patillas correspondientes).

Tres patillas del PORTB se multiplexan con las funciones de Baja Tensin de Programacin:
RB3/PGM, RB6/PGC y RB7/PGD. Estas funciones secundarias se describen en la seccin
Caractersticas Especiales.

Cada patilla del PORTB posee polarizacin interna a VDD, que puede activarse mediante un bit
de control. En el registro OPTION_REG, borrando el bit 7, llamado RBPU , se activar la
polarizacin. Este bit se programa a 1, y por lo tanto se suprime la polarizacin, cuando el
puerto se configura como salida. Tras un reset de conexin (Power-On-Reset), la polarizacin
queda inhibida.

Cuatro patillas del PORTB, RB7 a RB4, poseen una caracterstica especial por la que pueden
provocar interrupcin si cambian de estado (Interrupcin por Cambio), estando configuradas
como entradas. El estado de estas patillas se compara con su antiguo valor, memorizado en un
latch, de esta forma puede saber el circuito si ha habido un cambio de valor en la entrada. El
conjunto de salidas de RB7 a RB4 se conectan a una puerta OR, para, de esta forma, generar el
bit de peticin de interrupcin RBIF, cualquiera que sea la que cambie de valor.

Esta interrupcin puede sacar al dispositivo del estado SLEEP (reposo). El programador, en la
rutina de servicio de la interrupcin, puede borrar la interrupcin de la siguiente manera:

a) Leyendo o escribiendo sobre PORTB. Esto terminar con la condicin.


b) Borrando el bit indicador RBIF.
Microcontrolador PIC16F876 Pgina 23

Esta caracterstica se recomienda en operaciones con teclados, donde el PORTB trabaja con
cambios de valor. No se recomienda la tcnica de Consultas Sucesivas (Polling) del PORTB
cuando se aproveche la caracterstica de Interrupcin por Cambio.

RB0/INT es una patilla de interrupcin externa, y se configura utilizando el bit INTEDG del
registro OPTION_REG (bit 6). Esta patilla se analizar con profundidad en la seccin 12.10.1.

Cuando se use Programacin Serie en Baja Tensin (LVP) y las polarizaciones del puerto
estn habilitadas, el bit 3 del registro TRISB debe borrarse para inhibir la polarizacin
sobre RB3 y asegurar la correcta operacin del dispositivo.

TABLA 3-3: FUNCIONES DEL PORTB


Nombre Bit Buffer Funcin

Patilla de entrada-salida o entrada de interrupcin externa.


RB0/INT Bit0 TTL/ST(1) Polarizacin programable.

RB1 Bit1 TTL Patilla de entrada-salida. Polarizacin programable.

RB2 Bit2 TTL Patilla de entrada-salida. Polarizacin programable.

Patilla de entrada-salida o modo de programacin LVP. Polarizacin


RB3/PGM Bit3 TTL programable.

Patilla de entrada-salida (con Interrupcin por Cambio). Polarizacin


RB4 Bit4 TTL programable.

Patilla de entrada-salida (con Interrupcin por Cambio). Polarizacin


RB5 Bit5 TTL programable.

Patilla de entrada-salida (con Interrupcin por Cambio) o depuracin


RB6/PGC Bit6 TTL/ST(2) in-situ. Polarizacin programable. Reloj de programacin en serie.

Patilla de entrada-salida (con Interrupcin por Cambio) o depuracin


RB7/ Bit7 TTL/ST(2) in-situ. Polarizacin programable. Dato de programacin en serie.

TTL = Entrada con niveles TTL; ST = Entrada tipo Schmitt Trigger.


Nota 1: Este buffer es una entrada ST cuando se configura como interrupcin externa.
Nota 2: Este buffer es una entrada ST cuando se usa en modo de programacin serie.

TABLA 3-4: RESUMEN DE REGISTROS ASOCIADOS AL PORTB


Valor Valor tras
Direccin Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 tras POR, otros
BOR Resets

06h, 106h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu

86h, 186h TRISB Registro de direccin de datos del puerto B 1111 1111 1111 1111

81h, 181h OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

x = Desconocido; u = Sin cambio. Las celdas oscurecidas no se emplean en el puerto B.


Microcontrolador PIC16F876 Pgina 24

3.3 REGISTROS PORTC Y TRISC

El puerto C es un puerto bidireccional de 8 bits cuyo registro de sentido de circulacin de datos


es TRISC. Programando a 1 las lneas de TRISC, el sentido de esas lneas del puerto es de
entrada. En este momento, los amplificadores de salida estn desconectados (alta impedancia).
Por el contrario, programando a 0 TRISC, las lneas del puerto que reciben esta programacin
quedan conectadas como salidas y, por lo tanto, el contenido de los latches de salida aparecer
en las patillas del dispositivo.

PORTC se multiplexa con varias funciones de perifricos (como se aprecia en la tabla 3-5), y
posee buffers de entrada tipo Schmitt Trigger.

Cuando se habilita el mdulo I2C, las patillas 3 y 4 del PORTC pueden configurarse con niveles
normales I2C, o con niveles SMBUS, usando el bit CKE (SSPSTAT <6>).

Cuando se habiliten las funciones de perifricos hay que tener cuidado en definir la direccin de
cada bit del PORTC. Algunos perifricos anulan el bit de direccin para usar la patilla como
salida, mientras que otros hacen lo mismo para usarla como entrada. Ya que el bit anulado
(TRISC) est efectivo mientras que est habilitado el perifrico, hay que evitar el uso de
instrucciones, tanto de lectura como de escritura, sobre el registro TRISC.
Microcontrolador PIC16F876 Pgina 25

TABLA 3-5: FUNCIONES DEL PORTC


Nombre Bit Buffer Funcin

Entrada-salida. Salida de oscilacin de Timer1. Entrada de reloj del


RC0/T1OSO/T1CKI Bit0 ST
Timer1.
Entrada-salida. Entrada de oscilacin externa para Timer1. Entrada
RC1/T1OSI/CCP2 Bit1 ST del mdulo Capture2. Salida del mdulo Compare2. Salida del
mdulo PWM2.
Entrada-salida. Entrada de Capture1. Salida de Compare1. Salida de
RC2/CCP1 Bit2 ST
PWM1.

RC3/SCK/SCL Bit3 ST Entrada-salida. Reloj serie sncrono para los modos SPI y I2C.

Entrada-salida. Dato de entrada en modo SPI. Dato entrada/salida


RC4/SDI/SDA Bit4 ST
para el modo I2C.

RC5/SDO Bit5 ST Entrada-salida. Dato de salida del Puerto Serie Sncrono (SSP).

Entrada-salida. Reloj del USART (Transmisor Receptor Sncrono


RC6/TX/CK Bit6 ST
Asncrono).

Entrada-salida. Dato del USART (Transmisor Receptor Sncrono


RC7/RX/DT Bit7 ST
Asncrono).

ST = Entrada tipo Schmitt Trigger.

TABLA 3-6: RESUMEN DE REGISTROS ASOCIADOS AL PORTC


Valor tras Valor tras
Direccin Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
POR, BOR otros Resets

07h PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx uuuu uuuu

87h TRISC Registro de direccin de datos del puerto C 1111 1111 1111 1111

x = Desconocido; u = Sin cambio.

4.0 MEMORIA FLASH DE PROGRAMA Y EEPROM DE DATOS

Tanto la memoria de programa como la de datos son de lectura y escritura en operaciones


normales, en todo el rango de alimentacin. No puede realizarse un borrado de una gran zona de
memoria por el programa de usuario (que incluye la supresin del cdigo de proteccin). La
memoria de datos se direcciona por medio del Registro de Funciones Especiales (SFR).

Hay seis registros para leer o escribir en las memorias de programas y datos, que son:

EECON1
EECON2
EEDATA
EEDATH
EEADR
EEADRH
Microcontrolador PIC16F876 Pgina 26

La memoria de datos permite la lectura y escritura de bytes. Cuando se usa el bloque memoria
de datos, el registro EEDATA mantiene el byte para ser escrito, o que ha sido ledo, y el registro
EEADR mantiene la direccin a la que estamos accediendo. Los registros EEDATH y
EEADRH no se utilizan para acceder a la memoria EEPROM de datos; estos dispositivos
poseen 256 bytes de memoria de datos, y con 8 bits para direccionamiento hay suficiente.

La memoria de datos se trata mediante ocho ciclos de borrado y escritura. El tiempo de escritura
se controla mediante un temporizador interno, que puede variar por temperatura, tensin de
alimentacin y tolerancias entre dispositivos. Habr que leer el apartado de especificaciones
tcnicas para asegurar los proyectos.

La memoria de programa permite leer y grabar palabras de hasta 14 bits. Su acceso se controla
mediante clculo y comprobacin en una tabla almacenada. Al escribir un byte o una palabra
(14 bits), automticamente se borra la palabra anterior y despus se escribe la nueva. La
operacin de escritura no termina hasta que se completa la palabra grabada. No se puede
acceder a la memoria de programa cuando est siendo escrita, por consiguiente, no puede
ejecutarse cdigo alguno. Durante la operacin de escritura, el oscilador sigue dando reloj a los
perifricos, continuando, por lo tanto, su operacin. Posibles interrupciones se detectarn y se
pondrn en espera hasta que la escritura termine. Cuando esto suceda, la prxima instruccin en
curso se ejecutar, y se saltar a la direccin suministrada por el vector de interrupcin.

Cuando se trabaja con la memoria de programa, los registros EEDATH:EEDATA forman una
palabra de dos bytes que permite los 14 bits de longitud de palabra de datos de la memoria. Los
registros EEADRH:EEADR forman un bloque de dos bytes cuya misin es contener los 13 bits
de direccin que permite la capacidad de la memoria de programa. Estos dispositivos poseen
una capacidad de memoria de programa de 8Kpalabras, con un rango de direccin desde 0000h
hasta 3FFFh. Los 2 bits de ms peso del conjunto EEDATH:EEDATA, que sobran, se leern
como 0.

El valor escrito en la memoria de programa no tiene que ser necesariamente una instruccin
vlida. Nmeros mayores de 14 bits pueden guardarse en la memoria, como parmetros de
calibracin, nmeros de serie, encapsulados de 7 bits ASCII, etc. Si se ejecuta un programa con
datos de cdigos invlidos de instrucciones, el resultado es instrucciones NOP.

4.1 El registro EEADR

Este registro de direccin puede direccionar un mximo de 256 bytes de la memoria EEPROM
de datos, o un mximo de 8Kpalabras de la memoria FLASH de programa.

Cuando seleccionamos un valor de direccin en la memoria de programa, el bit ms


significativo (MSB) de la direccin se graba en el registro EEADRH, y el bit menos
significativo (LSB) se escribe en el registro EEADR. Al seleccionar un valor de direccin en la
memoria de datos, solamente se escribe en EEADR el bit LSB.

4.2 Los registros EECON1 y EECON2

EECON1 es el registro de control para el acceso a la memoria.

EECON2 no es fsicamente un registro. Si leemos EECON2 obtenemos todos 0. Este registro se


usa exclusivamente en la secuencia de escritura de la memoria.
Microcontrolador PIC16F876 Pgina 27

El bit de control EEPGD determina si el acceso debe producirse a la memoria de programa o a


la de datos. Cuando se borra, cualquier operacin subsiguiente se realizar en la memoria de
datos; activndolo, las operaciones que sigan lo harn con la memoria de programa.

Los bits de control RD y WR inician las operaciones de lectura y escritura, respectivamente.


Estos bits se pueden activar por software pero no borrar; se borran por hardware cuando se
finaliza la operacin de lectura o escritura. La inhabilitacin del borrado por software del bit
WR evita una accidental prematura finalizacin de la operacin de escritura.

El bit WREN, cuando se pone a 1, permite la operacin de escritura. Al conectar el dispositivo,


este bit est a 0. El bit WRERR se activa cuando se interrumpe una operacin de escritura
debido a un reset MCLR o WDT, durante una operacin normal. En este caso, a continuacin
del reset, el programador debe chequear el bit WRERR y volver a escribir la posicin. El valor
del dato, del registro de direccin y del bit EEPGD permanecen sin cambio.

El bit indicador de interrupcin EEIF, en el registro PIR2, se activa cuando se completa la


escritura. Debe borrarse por software.

REGISTRO 4-1: REGISTRO EECON1 (DIRECCIN 18Ch)

R/W-x U-0 U-0 U-0 R/W-x R/W-0 R/S-0 R/S-0


EEPGD --- --- --- WRERR WREN WR RD R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0
en lectura
-n = Valor del reset POR

bit 7: EEPGD: Bit de seleccin EEPROM Programa-Datos.


1 = Acceso a la memoria de Programa.
0 = Acceso a la memoria de Datos.
(Este bit no debe modificarse cuando est realizndose una operacin de lectura o escritura).

bit 6-4: Sin implementar: Da cero al leer.

bit 3: WRERR: Bit indicador de error en EEPROM.


1 = Se ha finalizado prematuramente una operacin de escritura.
(Si se produce un reset MCLR o WDT, durante una operacin normal).
0 = Se ha completado con xito la operacin de escritura..

bit 2: WREN: Bit de habilitacin de escritura en EEPROM.


1 = Permite ciclo de escritura.
0 = Inhibe el ciclo de escritura.

bit 1: WR: Bit de control de escritura.


1 = Inicia un ciclo de escritura. (Este bit se borra por hardware cuando se completa la escritura. Por
software, solamente puede activarse.
0 = Ciclo de escritura se ha completado correctamente.

bit 0: RD: Bit de control de lectura.


1 = Se inicia una lectura de EEPROM. Este bit se borra por hardware y se activa por software.
0 = No se inicia la lectura de la EEPROM.
Microcontrolador PIC16F876 Pgina 28

4.3 Lectura de la memoria EEPROM de datos

Para leer una posicin de la memoria de datos, el usuario debe escribir en el registro EEADR la
direccin deseada, borrar el bit de control EEPGD (EECON1<7>) y, entonces, activar el bit de
control RD (EECON1<0>). El dato estar disponible, en el prximo ciclo de instruccin, en el
registro EEDATA, por consiguiente podr leerse en la prxima instruccin. EEDATA
mantendr este valor, hasta que se efecte otra operacin de lectura, o sea modificado
expresamente por el programador.

4.4 Escritura de la memoria EEPROM de datos

Para escribir en una posicin de la memoria EEPROM de datos, primero hay que colocar la
direccin en el registro EEADR, y despus el dato a escribir, en el registro EEDATA. Entonces
se iniciar la secuencia del ejemplo 4-2, que completar el ciclo de escritura.

Ejemplo 4-2: Escritura en la EEPROM de datos

1 BSF STATUS, RP1 ; Seleccin de banco 2.


2 BCF STATUS, RP0 ;
3 MOVLW DATA_EE_ADDR ;
4 MOVWF EEADR ; Direccin de escritura.
5 MOVLW DATA_EE_DATA ;
6 MOVWF EEDATA ; Dato a escribir en memoria.
7 BSF STATUS, RP0 ; Seleccin de banco 3.
8 BCF EECON1, EEPGD ; Memoria de datos.
9 BSF EECON1, WREN ; Habilitacin de escritura.
10 BCF INTCON, GIE ; Inhibe las interrupciones.
11 MOVLW 55h ; Escribe 55h en EECON2.
12 MOVWF EECON2 ;
13 MOVLW AAh ;
14 MOVWF EECON2 ; Escribe AAh en EECON2.
15 BSF EECON1, WR ; Inicia la escritura.
16 BSF INTCON, GIE ; Habilita interrupciones.
17 SLEEP ; Espera hasta terminar la escritura.
18 BCF EECON1, WREN ; Inhibe la escritura.

La escritura no se iniciar si la secuencia no se sigue exactamente: escribir 55h en EECON2,


escribir AAh en EECON2, activar bit WR; esto para cada ciclo de escritura. Se recomienda muy
encarecidamente inhibir las interrupciones durante la operacin.

Asimismo, el bit WREN debe activarse al inicio de la secuencia y borrarse al final. De esta
manera evitaremos escrituras accidentales durante la ejecucin de programas.

Despus de iniciada la secuencia de escritura, un borrado del bit WREN no afectar a la correcta
conclusin de la operacin. El bit WR estar inhibido hasta despus de que se active el bit
WREN. Ambos bits no deben activarse en la misma instruccin.

Al final del ciclo de escritura, el bit WR se borrar por hardware, y el bit indicador de
interrupcin por finalizacin de ciclo de escritura (EEIF) se activar. Este bit debe borrarse por
software.
Microcontrolador PIC16F876 Pgina 29

4.5 Lectura de la memoria FLASH de Programa

Para leer una posicin de la memoria de programa escribiremos los dos bytes de la direccin en
los registros EEADR y EEADRH, activaremos el bit de control EEPGD (EECON1<7>), para,
finalmente, activar el bit de control RD (EECON1<0>). Siempre que el bit de control de lectura
est activo, el microcontrolador utiliza los dos siguientes ciclos de instruccin para leer el dato.
Este dato queda disponible en los registros EEDATA y EEDATH despus de la segunda
instruccin NOP. Durante estas instrucciones es cuando se efecta la lectura de los dos bytes (se
recuerda que la longitud de la palabra, en la memoria de programa, es de 14 bits). Los registros
EEDATA y EEDATH mantendrn el valor ledo hasta que se produzca otra lectura, o el
programador modifique su valor.

Ejemplo 4-3: Lectura de memoria FLASH

BSF STATUS, RP1 ; Seleccin de banco 2


BCF STATUS, RP0 ;
MOVLW ADDRH ; Carga byte de direccin alta en el
MOVWF EEADRH ; registro EEADRH.
MOVLW ADDRL ; Carga byte de direccin baja en el
MOVWF EEADR ; registro EEADR.
BSF STATUS, RP0 ; Selecciona banco 3.
BSF EECON1, EEPGD ; Selecciona memoria de programa.
BSF EECON1, RD ; Lectura de la EEPROM.
NOP ; Durante esta instruccin y la siguiente,
NOP ; se produce la lectura de los dos bytes.
BCF STATUS, RP0 ; Selecciona banco 2.
MOVF EEDATA, W ; Carga lectura byte bajo, en W.
MOVF EEDATH, W ; Carga lectura byte alto, en W.

4.6 Escritura de la memoria FLASH de Programa

Solamente podr escribirse una palabra en la memoria de programa si la palabra no es un cdigo


de proteccin de rea de memoria, y el bit de configuracin WRT est activado. Para escribir en
una posicin de esta memoria, primero deben estar grabados los dos bytes de la direccin en los
registros EEADR y EEADRH, posteriormente se grabarn los dos bytes del dato en los registros
EEDATA y EEDATH, despus se activar el bit de control EEPGD (EECON1<7>), y,
finalmente, se activar el bit WR (EECON1<1>). La secuencia se detalla en el ejemplo 4-4.

El microcontrolador realizar diez operaciones internas detenido durante las prximas dos
instrucciones, para tener el tiempo necesario de la escritura. Este estado no es como el modo
SLEEP, en el que el oscilador de perifricos segua funcionando. Por este motivo, las dos
siguientes instrucciones despus del BSF EECON1, WR sern NOP. Despus del ciclo de
escritura, el microcontrolador continuar con la tercera instruccin despus de BSF EECON1,
WR.

Ejemplo 4-4: Escritura en la memoria FLASH de Programa

BSF STATUS, RP1 ; Selecciona banco 2.


BCF STATUS, RP0 ;
MOVLW ADDRH ; Carga direccin alta.
MOVWF EEADRH ;
MOVLW ADDRL ; Carga direccin baja.
Microcontrolador PIC16F876 Pgina 30

MOVWF EEADR ; Carga direccin baja.


MOVLW DATAH ; Carga byte alto a escribir.
MOVWF EEDATH ;
MOVLW DATAL ; Carga byte bajo a escribir.
MOVWF EEDATA ;
BSF STATUS, RP0 ; Selecciona banco 3.
BSF EECON1, EEPGD ; Selecciona memoria de programa.
BSF EECON1, WREN ; Habilita escritura.
BCF INTCON, GIE ; Inhibe interrupciones.
MOVLW 55h ; Carga cdigo escritura.
MOVWF EECON2 ;
MOVLW AAh ;
MOVWF EECON2 ;
BSF EECON1, WR ; Comienza la escritura.
NOP ; Tiempo para escritura.
NOP ; Tiempo para escritura.
; Ahora, el microcontrolador quedar a
; la espera de que finalice la escritura.
; Cuando esto suceda, continuar con
; la tercera instruccin desde la
; BSF EECON1, WR.
BSF INTCON, GIE ; Habilita interrupciones.
BCF EECON1, WREN ; Se inhibe la escritura.

4.7 Verificacin de escritura

Dependiendo de la aplicacin, puede necesitarse la seguridad de que la grabacin corresponde


con el original. Esto se usa en aplicaciones en que excesivas escrituras pueden llevar a los datos
al lmite de las especificaciones.

Generalmente, el fallo de un bit corresponde a la lectura 0 cuando se escribi un 1 (debido al


diseo interno del dispositivo).

4.8 Proteccin contra picos transitorios en escritura

4.8.1 Memoria EEPROM de Datos

Existen condiciones en las que el dispositivo no debe ser escrito en su memoria de datos. Para
que esto no ocurra accidentalmente se han dispuesto varios mecanismos internos. En la
conexin, el bit WREN queda borrado, y adems, durante un tiempo de 72 milisegundos
despus de la conexin, la escritura de la EEPROM est bloqueada.

La forma de iniciar la secuencia de escritura y los mtodos de prevencin, evitan escrituras


accidentales en casos de bajadas de tensin, picos de alimentacin o errores en programas.

4.8.2 MEMORIA FLASH DE PROGRAMA

Para proteger la memoria de programa contra escrituras accidentales, el bit de configuracin


WRT debe programarse a 0. La secuencia de escritura debe respetarse escrupulosamente. El bit
WRT y la palabra de configuracin no pueden programarse con los cdigos del usuario;
solamente a travs de un programador externo.
Microcontrolador PIC16F876 Pgina 31

4.9 Cdigo de proteccin durante la operacin

Cada bloque de memoria reprogramable posee un cdigo propio como mecanismo de


proteccin. Lecturas y escrituras externas se impiden si cada uno de estos mecanismos estn
habilitados.

4.9.1 MEMORIA EEPROM DE DATOS

El microcontrolador, puede, por s mismo, leer y escribir en la EEPROM interna de datos,


indiferentemente del estado del bit de configuracin del cdigo de proteccin.

4.9.2 MEMORIA FLASH DE PROGRAMA

El microcontrolador puede leer y ejecutar instrucciones, fuera de la memoria interna de


programa, indiferentemente del estado de los bits de configuracin del cdigo de proteccin. Sin
embargo, el bit de configuracin WRT y los bits del cdigo de proteccin, producen diferentes
efectos en la escritura de la memoria de programa. En la tabla 4-1 se muestran varias
configuraciones y estados de lecturas y escrituras. Para borrar el bit WRT, o el cdigo de
proteccin, se requiere que el dispositivo est totalmente borrado.

TABLA 4-1: ESTADO DE LECTURA-ESCRITURA DE LA MEMORIA FLASH DE PROGRAMA


Bits de configuracin Lectura Escritura Lectura Escritura
Posiciones de memoria
CP1 CP0 WRT interna interna ICSP ICSP

0 0 X Toda la memoria de programa S No No No


0 1 0 reas desprotegidas S No S No
0 1 0 reas protegidas S No No No
0 1 1 reas desprotegidas S S S No
0 1 1 reas protegidas S No No No
1 0 0 reas desprotegidas S No S No
1 0 0 reas protegidas S No No No
1 0 1 reas desprotegidas S S S No
1 0 1 reas protegidas S No No No
1 1 0 Toda la memoria de programa S No S S
1 1 1 Toda la memoria de programa S S S S

TABLA 4-2: REGISTROS ASOCIADOS CON LA MEMORIA EEPROM FLASH DE PROGRAMA


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR, otros
BOR resets

0Bh, 8Bh,
10Bh, 18Bh
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u

10Dh EEADR Registro de direccin de la EEPROM xxxx xxxx uuuu uuuu


10Fh EEADRH --- --- --- Direccin alta de la EEPROM xxxx xxxx uuuu uuuu
10Ch EEDATA Registro de datos de la EEPROM xxxx xxxx uuuu uuuu
10Eh EEDATH --- --- Registro de datos de ms peso xxxx xxxx uuuu uuuu
18Ch EECON1 EEPGD --- --- --- WRERR WREN WR RD x--- x000 x--- u000
18Dh EECON2 Registro2 de control de la EEPROM (no es un registro fsico)
8Dh PIE2 --- (1) --- EEIE BCLIE --- --- CCP2IE -r-0 0--0 -r-0 00
0Dh PIR2 --- (1) --- EEIE BCLIE --- --- CCP2IE -r-0 0--0 -r-0 00
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0). Las celdas sombreadas no se
utilizan durante el acceso a la memoria FLASH.
Nota 1: Estos bits estn reservados; se deben mantener siempre a cero.
Microcontrolador PIC16F876 Pgina 32

5.0 MDULO TIMER 0 (TEMPORIZADOR 0)

El mdulo Timer0 es un bloque que puede trabajar como temporizador o contador, con las
siguientes caractersticas:
Temporizador o contador de 8 bits.
Se puede leer y programar.
Predivisor de 8 bits programable por software.
Seleccin de reloj interno o externo.
Provoca interrupcin cuando desborda (cuando pasa de FFh a 00h).
Seleccin de flanco para reloj externo.

La figura 5-1 representa el esquema a bloques del Timer0 y del Predivisor, compartido este
ltimo con el WDT.

El modo temporizador se selecciona poniendo a 0 el bit T0CS (OPTION_REG <5>). En este


modo, y trabajando sin Predivisor, la cantidad cargada en TMR0 se incrementar con cada ciclo
de instruccin. Si se escribe sobre TMR0, el incremento de ste se inhibir durante los dos
prximos ciclos de instruccin. El usuario puede trabajar con l escribiendo y ajustando el valor
del registro TMR0.

El modo contador se selecciona colocando a 1 el bit T0CS (OPTION_REG<5>). En este modo,


el Timer0 incrementa con cada flanco de subida o bajada que llega por la patilla RA4/T0CKI. El
tipo de flanco lo determina el bit T0SE (OPTION_REG<4>): 0 seleccionar flanco de subida, 1
lo contrario. En la seccin 5.2 se analizan las restricciones de la entrada externa de reloj.
Microcontrolador PIC16F876 Pgina 33

El mdulo Predivisor est compartido entre el Timer0 y el WDT, y no se puede leer ni escribir.
En la seccin 5.3 se ofrecen los detalles.

5.1 Interrupcin del Timer0

La interrupcin de TMR0 se genera cuando el registro TMR0 desborda. Este desbordamiento


activa el bit T0IF (INTCON<2>). La interrupcin puede enmascararse borrando el bit T0IE
(INTCON<5>). El bit T0IF debe borrarse por software en la rutina de servicio del Timer0 antes
de volver a habilitar esta interrupcin. La interrupcin TMR0 no puede sacar a la CPU del
estado SLEEP ya que el temporizador est bloqueado durante este estado.

5.2 Usando el Timer0 con reloj externo

Cuando no se usa el Predivisor, la entrada de reloj externo es la misma que la salida del
Predivisor. La sincronizacin de T0CKI con la fase de reloj interno se consigue capturando la
salida del Predivisor en los ciclos de reloj de fase interna Q2 y Q4. Por consiguiente, es
necesario para T0CKI: permanecer en alto al menos un tiempo igual al doble del perodo de
oscilador TOSC (y una pequea red RC de retraso de 20 ns), permanecer en bajo el mismo
tiempo, y con la misma red RC. En el apartado de especificaciones elctricas se ofrecen todos
los datos necesarios.

5.3 Predivisor

Solamente hay disponible un mdulo Predivisor, que est compartido por Timer0 y WDT. Si se
asigna a uno de los mdulos, no puede ser utilizado por el otro.

Los bits PSA y PS2:PS0 (OPTION_REG<3:0>) determinan la asignacin del Predivisor, y la


divisin que se efectuar.

Cuando se asigna al mdulo Timer0, todas las instrucciones que escriben sobre el registro
TMR0 (por ejemplo CLRF 1, MOVWF 1, BSF 1, x... etc.) borrarn el Predivisor. Cuando se
asigna al mdulo WDT, una instruccin CLRWDT borrar el Predivisor y el Watchdog Timer.
El Predivisor no se puede leer ni escribir.

Nota: Escribiendo sobre TMR0, cuando el Predivisor est asignado al Timer0, se borrar la
cuenta del Predivisor pero no se cambiar la asignacin de ste.
Microcontrolador PIC16F876 Pgina 34

REGISTRO 5-1: REGISTRO OPTION_REG

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1


-RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit 7: -RBPU:

bit 6: INTEDG

bit 5: T0CS: Bit de seleccin de origen de reloj


1 = Transicin en la patilla T0CKI.
0 = Reloj interno cada ciclo de instruccin (CLKOUT)

bit 4: T0SE: Bit de seleccin de flanco de reloj para TMR0.


1 = Incrementa con la transicin de alto a bajo en la patilla T0CKI.
0 = Incrementa con la transicin de bajo a alto en la patilla T0CKI.

bit 3: PSA: Bit de asignacin de Predivisor.


1 = Predivisor asignado al WDT.
0 = Predivisor asignado al mdulo Timer0.

bit 2-0: PS2:PS0: Bits de seleccin de divisin.

Valor de los bits Divisin TMR0 Divisin WDT

000 1:2 1:1


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

TABLA 5-1: REGISTROS ASOCIADOS AL TIMER0


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR, otros
BOR resets

01h, 101h, TMR0 Registro del mdulo Timer0 xxxx xxxx uuuu uuuu
0Bh, 8Bh,
10Bh, 18Bh
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u

81h, 181h OPTION_REG -RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

x = Desconocido; u = Sin cambio; r = Reservado. Las celdas sombreadas no se utilizan en el Timer0.


Microcontrolador PIC16F876 Pgina 35

6.0 Mdulo Timer1

Este mdulo es un temporizador-contador de 16 bits, formado por dos registros de lectura y


escritura de 8 bits llamados TMR1H y TMR1L. La pareja de registros TMR1H:TMR1L se
incrementan desde 0000h hasta FFFFh, volviendo a 0000h en el ciclo de reloj siguiente. A este
retorno a 0000h se llama desbordamiento, y si las interrupciones estn habilitadas se producir
una que advertir a la CPU que el Timer1 ha llegado al final. El bit indicador de esta
interrupcin es TMR1IF (PIR1<0>). La interrupcin puede habilitarse o inhibirse activando o
borrando, respectivamente, el bit TMR1IE (PIE<0>).

El Timer1 puede trabajar en cualquiera de los dos modos siguientes:


Como temporizador.
Como contador.

El modo de operacin lo determina el bit de seleccin de reloj TMR1CS (T1CON<1>).

En modo temporizador, el Timer1 se incrementa cada ciclo de instruccin, en modo contador, el


incremento se produce cada flanco de subida en la entrada de reloj externo. El Timer1 puede
habilitarse o inhibirse activando o borrando, respectivamente, el bit de control TMR1ON
(T1CON<0>). Timer1 posee, tambin, una entrada de reset interna, que puede activarla cada
uno de los dos mdulos CCP. El registro 6.1 muestra el control del Timer1.

REGISTRO 6-1: T1CON: REGISTRO DE CONTROL DEL TIMER1 (DIRECCIN 10h)

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


--- --- T1CKPS1 T1CKPS0 T1OSCEN -T1SYNC TMR1CS TMR1ON R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit 7-6: Sin implementar: Se lee como 0.

bit 5-4: T1CKPS1:T1CKPS0: Bits de seleccin de predivisin de reloj de entrada a Timer1.


11 = 1:8 Valor de predivisin
10 = 1:4 Valor de predivisin
01 = 1:2 Valor de predivisin
00 = 1:1 Valor de predivisin

bit 3: T1OSCEN: Bit de control de habilitacin de oscilador para TMR1.


1 = Oscilador habilitado.
0 = Oscilador anulado.

bit 2: -T1SYNC: Bit de control de sincronizacin de la entrada de reloj externo de Timer1.


TMR1CS = 1
1 = Entrada de reloj externo no sincronizada.
0 = Entrada de reloj externo sincronizada.
TMR1CS = 0
En esta circunstancia, Timer1 usa el reloj interno.

bit 1: TMR1CS: Bit de seleccin de origen de reloj para Timer1.


1 = Flanco de subida en la patilla RC0/T1OSO/T1CKI, o en la patilla RC1/T1OSI/CCP2.
0 = Reloj interno (Fosc/4).

bit 0: TMR1ON: Bit de conexin de Timer1.


1 = Timer1 habilitado.
0 = Timer1 detenido.

Cuando se habilita el oscilador del Timer1 (T1OSCEN = 1), las patillas RC1/T1OSI/CCP2 y
RC0/T1OSO/T1CKI quedan como entradas; o sea, que se ignora el valor de TRISC<1:0>.
Microcontrolador PIC16F876 Pgina 36

6.1 Operacin del Timer1 en modo temporizador

El modo temporizador se selecciona borrando el bit TMRCS (T1CON<1>). En este modo, la


entrada de reloj es Fosc/4; el bit de sincronizacin T1SYNC (T1CON<2>) no tiene efecto en
este modo porque el reloj interno siempre est sincronizado.

6.2 Operacin del Timer1 como contador

El Timer1 puede trabajar como contador asncrono o sncrono, dependiendo de la programacin


del bit TMR1CS.

Cuando el contador Timer1 va a incrementarse va externa, los incrementos suceden en el flanco


de subida. Despus de que el Timer1 se programe en modo contador, el mdulo esperar un
flanco de bajada antes de comenzar los incrementos con los flancos de subida.

6.3 El Timer1 como contador sincronizado

El modo contador se selecciona poniendo a 1 el bit TMR1CS. En este modo, el Timer1


incrementar en cada flanco de subida de la entrada de reloj en la patilla RC1/T1OSI/CCP2,
cuando el bit T1OSCEN est a 1, o en la patilla RC0/T1OSO/T1CKI, cuando el bit T1OSCEN
est a 0.

Si T1SYNC se borra, la entrada externa de reloj se sincroniza con la fase interna de reloj. La
sincronizacin se produce despus de la etapa del Predivisor. Este bloque es un contador cclico
asncrono.
Microcontrolador PIC16F876 Pgina 37

6.4 El Timer1 como contador asncrono

Si el bit de control T1SYNC (T1CON<2>) se activa, la entrada de reloj externa no queda


sincronizada. El temporizador contina su incremento, totalmente asncrono con la fase de reloj
interna. El temporizador continuar funcionando durante el estado de alerta (SLEEP), y puede
provocar una interrupcin en su desbordamiento que saque de su letargo a la CPU. De
cualquier modo, es necesario tomar algunas precauciones en el software para leer o escribir en
el Timer1 (Seccin 6.4.1).

6.4.1 LEYENDO Y ESCRIBIENDO EL TIMER1 COMO CONTADOR ASNCRONO

Al leer TMR1H o TMR1L cuando el Timer1 est funcionando como contador asncrono, el
hardware garantiza la lectura correcta. Sin embargo, el usuario debe conocer la existencia de
ciertos problemas al leer el contenido de 16 bits, en dos bloques de 8 bits, como quiera que
puede producirse el desbordamiento del contador entre las dos lecturas.

En la escritura, se recomienda al usuario detener el temporizador, y, entonces, escribir el valor


deseado sobre el registro. Una escritura cuando el temporizador est siendo incrementado puede
provocar un valor impredecible en el registro.

6.5 Oscilador del Timer1

Se debe conectar un cristal de cuarzo entre las patillas T1OSI (entrada) y T1OSO (salida del
amplificador oscilador). El oscilador se habilita con el bit T1OSCEN (T1CON<3>), y
funcionar en bajo consumo a partir de 200 KHz. Este oscilador contina funcionando aunque
la CPU entre en modo SLEEP (alerta), y est diseado especialmente para trabajar a 32 KHz. La
tabla 6-1 la seleccin del condensador dependiendo de la frecuencia de trabajo; en la figura 6-3
se aprecia una aplicacin del Timer1 como reloj de tiempo real.

Tabla 6-1: SELECCIN DE CONDENSADORES


PARA EL OSCILADOR DEL TIMER1

Tipo Frecuen-
C1 C2
Oscilador cia

32 KHz 33 pF 33 pF

LP 100 KHz 15 pF 15 pF

200 KHz 15 pF 15 pF

Estos valores son para gua de diseo

Cristales comprobados:

Epson C-
32,768 KHz +/- 20 PPM
001R32.768K-A

100 KHz Epson C-2 100.00KC-P +/- 20 PPM

200 KHz STD XTL 200.000KHz +/- 20 PPM

Nota 1: Una mayor capacidad aumenta la estabilidad


del oscilador pero tambin aumenta el tiempo de
arranque.

Nota 2: Ya que cada oscilador o resonador posee sus


propias caractersticas, el usuario debe consultar las
especificaciones del dispositivo a utilizar.
Microcontrolador PIC16F876 Pgina 38

6.6 Reset del Timer1 usando la salida de disparo del CCP

Si los mdulos CCP1 o CCP2 se configuran en modo comparacin para generar un disparo por
suceso especial (CCP1M3:CCP1M0 = 1011), esta seal provocar el reset del Timer1.

Nota: El disparo por suceso especial de los mdulos CCP1 y CCP2 no activar el bit
indicador de interrupcin TMR1IF (PIR<0>).

El Timer1 debe configurarse como temporizador o contador sncrono para disponer de esta
caracterstica. Si Timer1 est funcionando en modo contador asncrono, este reset no se
producir.

En el caso de que coincida la escritura sobre Timer1, y un disparo por suceso especial desde
CCP1 o CCP2, la escritura tendr preferencia.

En este modo de operacin, la pareja de registros CCPRxH:CCPRxL produce el perodo para


Timer1.

6.7 Reset de la pareja de registros TMR1H:TMR1L, del Timer1

Los registros TMR1H y TMR1L no se ponen a 00h con la conexin del sistema (POR), o con
otros resets, exceptuando el reset del disparo por suceso especial de CCP1 o CCP2.

El registro T1CON se borra con los reset POR o BOR. Esto produce la detencin del Timer1, y
pone el Predivisor a 1:1. Los dems resets no afectan a este registro.

6.7 Predivisor del Timer1

El contador Predivisor se borra al escribir sobre los registros TMR1H o TMR1L.

TABLA 6-2: REGISTROS ASOCIADOS AL TIMER1


Valor
Valor tras tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
POR, BOR otros
resets
0Bh, 8Bh,
10Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
18Bh
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
0Eh TMR1L Byte de menor peso del registro de 16 bits TMR1 xxxx xxxx uuuu uuuu
0Fh TMR1H Byte de mayor peso del registro de 16 bits TMR1 xxxx xxxx uuuu uuuu
10h T1CON --- --- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en el
Timer1.
Nota 1: Los bits PSPIE y PSPIF se reservan en el PIC 16F873/876; se deben mantener siempre a 0.
Microcontrolador PIC16F876 Pgina 39

7.0 Mdulo Timer2

El Timer2 es un temporizador de 8 bits con Predivisor y postdivisor. Puede utilizarse como base
de tiempos en modo PWM de los mdulos CCP. El registro TMR2 es de lectura y escritura, y
puede borrarse con cualquier reset.

La entrada de reloj (Fosc/4) tiene la opcin de predivisin por 1:1, 1:4 o 1:16, seleccionada por
los bits de control T2CKPS1:T2CKPS0 (T2CON<1:0>).

El mdulo Timer2 posee el registro de perodo de 8 bits TMR2. Este temporizador incrementa
desde 00h hasta la coincidencia con PR2. En ese momento, se inicializar a 00h en el siguiente
ciclo de incremento. PR2 es un registro de lectura y escritura, y se inicializa a FFh tras un reset.

La salida de coincidencia de TMR2 se pasa a travs de un postdivisor de 4 bits (ofreciendo una


divisin de frecuencia desde 1:1 hasta 1:16). Despus de esto, se activar la interrupcin de
TMR2, que queda memorizada en el bit indicador TMR2IF (PIR1<1>).

El Timer2 puede anularse, borrando el bit de control TMR2ON (T2CON<2>), para minimizar el
consumo del dispositivo.

El registro 7-1 muestra el registro de control del Timer2.

REGISTRO 7-1: T2CON: REGISTRO DE CONTROL DEL TIMER2 (DIRECCIN 12h)

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


--- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 R = De lectura
bit7 bit0 W = De escritura
U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit 7: Sin implementar: Se lee como 0.

bit 6-3: TOUTPS3:TOUTPS0: Bits de seleccin de postdivisin de Timer2.


0000 = 1:1 valor de postdivisin
0001 = 1:2 valor de postdivisin
0010 = 1:3 valor de postdivisin


1111 = 1:16 Valor de postdivisin

bit 2: TMR2ON: Bit de activacin de TMR2.


1 = Timer2 est activado.
0 = Timer2 est desactivado.

bit 1-0: T2CKPS1:T2CKPS0: Bit de seleccin de predivisin para Timer2.


00 = 1:1 valor de predivisin.
01 = 1:4 valor de predivisin.
1X = 1:16 valor de predivisin.
Microcontrolador PIC16F876 Pgina 40

7.1 Predivisin y postdivisin del Timer2

Los contadores pre y postdivisores se borran con cualquiera de estos acontecimientos:


Una escritura en el registro TMR2.
Una escritura en el registro T2CON.
Cualquier reset del dispositivo (POR, MCLR, WDT o BOR).

El registro TMR2 no se borra cuando se escribe en T2CON.

7.2 Salida de TMR2

La salida de TMR2, antes del postdivisor, sirve para dar reloj al puerto SSPort, quien utiliza esta
seal para crear su desplazamiento de datos serie. En la figura 7-1 se aprecia esto con detalle.

TABLA 7-1: REGISTROS ASOCIADOS AL TIMER2


Valor tras
Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR,BOR
otros
resets

0Bh,
8Bh, 0000
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x
10Bh, 000u
18Bh
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000
0000
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

11h TMR2 Registro del mdulo Timer2 0000 0000 0000 0000

12h T2CON --- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 000

92h PR2 Registro de perodo del Timer2 1111 1111 1111 1111
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0). Las celdas sombreadas no se
utilizan en el Timer1.
Nota 1: Los bits PSPIE y PSPIF se reservan en el PIC 16F873/876; se deben mantener siempre a 0.
Microcontrolador PIC16F876 Pgina 41

8.0 Mdulos CAPTURA/COMPARACIN/PWM

Cada mdulo Captura/Comparacin/PWM (CCP) contiene un registro de 16 bits que puede


trabajar como:
Registro de captura de 16 bits.
Registro de comparacin de 16 bits.
Registro de relacin de ciclo PWM.

El conjunto CCP1 y CCP2 son idnticos en el modo de operar, con la excepcin de la


operacin de disparo por suceso especial. La tabla 8-1 y 8-2 muestra los recursos e
interacciones del mdulo CCP. En las secciones siguientes, la actividad de CCP se describe con
respecto a CCP1.

Mdulo CCP1:

El registro CCPR1 est compuesto de dos registros de 8 bits: CCPR1L (byte bajo) y CCPR1H
(byte alto). El registro CCP1CON controla la operacin de CCP1. El disparo por suceso
especial se genera cuando existe una coincidencia en la comparacin, y se borrar el Timer1.

Mdulo CCP2:

El registro CCPR2 est compuesto de dos registros de 8 bits: CCPR2L (byte bajo) y CCPR2H
(byte alto). El registro CCP2CON es el encargado de controlar la operacin de CCP2. Un
disparo por suceso especial se genera por coincidencia en la comparacin, se borrar el Timer1
y se arranca el convertidor A/D, si est habilitado.

Tabla 8-1: Modo CCP Timer


Recursos
Modo CCP Temp. afectado

Captura Timer1
Comparacin Timer1
PWM Timer2

Tabla 8-2: Interaccin de los dos mdulos CCP

Modo CCPx Modo CCPy Interaccin

Captura Captura Misma base de tiempos que TMR1


El comparador se configurar para dispara por
Captura Comparacin
suceso especial, que borrar a TMR1.
El comparador se configurar para disparo por
Comparacin Comparacin
suceso especial, que borrar a TMR1.
El PWM tiene la misma frecuencia y ciclo de
PWM PWM
actualizacin (la interrupcin de TMR2).
PWM Captura Ninguna
PWM Comparacin Ninguna
Microcontrolador PIC16F876 Pgina 42

REGISTRO 8-1: REGISTRO CCP1CON/CCP2CON (DIRECCIN 17h/1Dh)

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


--- --- CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPcM0
R = De lectura
bit7 bit0 W = De escritura
U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit 7-6: Sin implementar: Se lee como 0.

bit 5-4: CCPxX:CCPxY: Bits menos significativos de PWM.


Modo Captura: No usado.
Modo Comparacin: No usado.
Modo PWM: Estos bits son los dos menos significativos de la relacin de ciclo de PWM. Los ocho
ms significativos se encuentran en el registro CCPRxL.

bit 3-0: CCPxM3:CCPxM0: Bits de seleccin de modo CCPx.


0000 = Captura/Comparacin/PWM desconectados (reset del mdulo CCPx).
0100 = Modo Captura, todos los flancos de bajada.
0101 = Modo Captura, todos los flancos de subida.
0110 = Modo Captura, cada 4 flancos de subida.
0111 = Modo Captura, cada 16 flancos de subida.
1000 = Modo Comparacin, activa la salida con la coincidencia (se activa el bit CCPxIF).
1001 = Modo Comparacin, borra la salida con la coincidencia (se activa el bit CCPxIF).
1010 = Modo Comparacin, genera una interrupcin cuando hay coincidencia (activa bit CCPxIF, sin
efecto en la patilla CCPx)
1011 = Modo Comparacin, disparo por suceso especial (activa bit CCPxIF, patilla CCPx sin efecto);
CCP1 borra a TMR1; CCP2 borra TMR1 y arranca el convertidor A/D (si este mdulo est
habilitado).
11xx = Modo PWM.

8.1 Modo Captura

En el modo Captura, CCPR1H:CCPR1L capturan los 16 bits del registro TMR1 cuando ocurre
un suceso sobre la patilla RC2/CCP1. Este suceso puede ser:
Cada flanco de bajada.
Cada flanco de subida.
Cada cuatro flancos de subida.
Cada diecisis flancos de subida.

El suceso se selecciona con los bits de control CCP1M3:CCP1M0 (CCP1CON<3:0>). Cuando


se realiza una captura, el bit indicador de peticin de interrupcin CCP1IF (PIR1<2>) se activa,
debiendo borrarse en el programa este bit. Si ocurre otra captura antes de que se lea el valor
anterior en el registro CCPR1, el antiguo valor capturado se perder.

8.1.1 CONFIGURACIN DE LA
PATILLA CCP

En modo Captura, la patilla RC2/CCP1 se


configurar como entrada activando el bit
TRISC<2>.

Nota: Si la patilla RC2/CCP1 se configura


como salida, una escritura en el puerto
puede provocar una condicin de captura.
Microcontrolador PIC16F876 Pgina 43

8.1.2 SELECCIN DE MODO DE TIMER1

El Timer1 debe funcionar en modo temporizador o contador sincronizado para que el mdulo
CCP pueda utilizar la caracterstica de captura. En modo contador asncrono, la captura no
puede producirse.

8.1.3 INTERRUPCIN POR SOFTWARE

Cuando se cambia el modo de captura, puede generarse una falsa interrupcin de captura. El
usuario mantendr borrado el bit CCP1IE (PIE1<2>) para evitar falsas interrupciones, y borrar
el bit indicador CCP1IF inmediatamente despus de cualquier cambio en el modo de operacin.

8.1.4 PREDIVISOR DE CCP

Existen cuatro posibles programaciones para el Predivisor, especificadas por los bits
CCP1M3:CCP1M0. Siempre que el mdulo CCP se desconecta, o que el mdulo CCP no est
en modo captura, el contador Predivisor est borrado. Cualquier reset borrar el contador
Predivisor.

El cambio de la predivisin de captura generar una interrupcin. Pero el contador Predivisor no


se borrar, por lo que la primera captura no encontrar a cero al Predivisor. En el ejemplo 8-1 se
muestra el mtodo recomendado para conmutar entre predivisores de captura. Este ejemplo
tambin borra el contador Predivisor y no generar una falsa interrupcin.

EJEMPLO 8-1: CONMUTANDO PREDIVISIONES DE CAPTURA

CLRF CCP1CON ; Desconecta el mdulo CCP.


MOVLW NEW_CAPT_PS ; Carga registro W con nueva predivisin
; y activa CCP.
MOVWF CCP1CON ; Carga CCP1CON con el nuevo valor.

8.2 Modo Comparacin

En modo comparacin, el valor del registro de 16 bits CCPR1 se compara constantemente con
el valor del par de registros de TMR1. Cuando hay coincidencia, la patilla RC2/CCP1 es:

Puesta a 1.
Puesta a 0.
Sin cambio.

La accin sobre esta patilla la selecciona el valor de los bits de control CCP1M3:CCP1M0
(CCP1CON<3:0>). Al mismo tiempo, se activa el indicador de interrupcin CCP1IF.
Microcontrolador PIC16F876 Pgina 44

8.2.1 CONFIGURACIN DE CCP

El usuario debe configurar la patilla


RC2/CCP1 como salida, borrando el bit
TRISC<2>.

Nota: Borrando el registro CCP1CON se


fuerza al latch de salida de comparacin
RC2/CCP1 al nivel bajo por defecto.

8.2.2 SELECCIN EN MODO TIMER1

Si deseamos que el mdulo CCP pueda


utilizar su caracterstica de comparacin, el
Timer1 slo puede funcionar en modo Temporizador o en modo Contador Sincronizado; no se
debe operar en modo Contador Asncrono.

8.2.3 MODO DE INTERRUPCIN POR SOFTWARE

Cuando se elige el modo de generar una interrupcin por programa, la patilla CCP1 no queda
afectada. El bit CCPIF se activa provocando una interrupcin en CCP (si est habilitado).

8.2.4 DISPARO POR SUCESO ESPECIAL

En este modo, se genera un disparo interno por hardware, que puede utilizarse para iniciar una
accin.

La salida de disparo por suceso especial de CCP1 borra el registro par TMR1. Esto lleva al
registro CCPR1 a ser, realmente, un registro programable de perodo de 16 bits para el Timer1.

La salida de disparo por suceso especial de CCP2 borra el registro par TMR1 y arranca el
convertidor A/D (si este mdulo estuviese habilitado).

Nota: El disparo por suceso especial de los mdulos CCP1 y CCP2 no activa el bit indicador de
interrupcin TMR1IF (PIR<0>).

8.3 Modo PWM (PWM)

En modo Modulacin por Ancho de Pulso


(PWM), la patilla CCPx produce una salida
PWM con 10 bits de resolucin. Como quiera
que la patilla CCP1 est multiplexada con el
latch de datos del puerto C, el bit TRISC<2>
se borrar para programar como salida la
patilla CCP1.

Nota: Borrando el registro CCP1CON se


forzar al latch de salida PWM CCP1 al nivel
bajo por defecto. Esto no afecta al latch de
datos del puerto C.

La figura 8-3 muestra el diagrama


simplificado a bloques del mdulo CCP en
modo PWM.
Microcontrolador PIC16F876 Pgina 45

Una salida PWM (figura 8-4) posee un perodo y un tiempo de alto (Duty Cycle). La frecuencia
de la onda PWM ser la inversa del perodo.

8.3.1 PERODO PWM

El perodo PWM se especifica escribiendo el registro PR2. El perodo PWM puede calcularse
usando la siguiente relacin:

Perodo(PWM) = [(PR2)+1]4Tosc(valor Predivisor TMR2); siendo Tosc=250 ns para 4 Mhz.

La frecuencia PWM ser la inversa del perodo: f(PWM) = 1/Perodo(PWM)

Cuando TMR2 se iguala a PR2, suceden los siguientes tres sucesos en el prximo ciclo de
incremento:
Se borra TMR2.
Se activa la patilla CCP1 (siempre y cuando el duty cycle no sea igual al 0%).
El duty cycle se carga desde CCPR1L a CCPR1H.

Nota: El postdivisor de Timer2 no se utiliza


en la determinacin de la frecuencia PWM.
El postdivisor podra usarse para tener un
rango auto-actualizable de frecuencias de
salida PWM.

8.3.2 TIEMPO EN ALTO (DUTY


CYCLE) DE PWM

El duty cycle de PWM se especifica


escribiendo en el registro CCPR1L y en los
bits de CCP1CON<5:4>. Se dispone de 10
bits de resolucin. El registro CCPR1L contiene los ocho bits ms significativos, y el registro
CCP1CON<5:4> los dos de menos peso. Este valor de 10 bits se representa por la notacin
CCPR1L:CCP1CON<5:4>. La siguiente ecuacin se utiliza para calcular el duty cycle, en
tiempo, de PWM:

PWM(duty cycle) = (CCPR1L:CCP1CON<5:4>)Tosc(TMR2(Predivisor))

CCPR1L y CCP1CON<5:4> pueden escribirse en cualquier momento, pero el valor del duty
cycle no se carga en CCPR1H hasta despus de que ocurra la coincidencia entre PR2 y TMR2
(un perodo completo). En modo PWM, CCPR1H es un registro de slo lectura.

El registro CCPR1H y un latch interno de 2 bits se utilizan como doble buffer del duty cycle
PWM. Este buffer doble es esencial para evitar los picos en la conmutacin PWM.

Cuando CCPR1H y el latch de dos bits coinciden con TMR2 unido a dos bits procedentes del
Predivisor, o dos bits procedentes de F/F internos, se borra la patilla CCP1.

A ttulo de ejemplo:

Cargamos CCPR1L con 210 (102) y ponemos 10 en los bits 5 y 4 de CCP1CON, el nmero
binario total ser 1010. Como TMR2 ahora recibe los impulsos de una fase Q interna (cuyo
perodo ser de 250 ns con un oscilador de 4 Mhz), la duracin del impulso alto (duty cucle),
con predivisor a 1, ser de 1010b x 250ns = 10d x 250 ns = 2,5 s.
Microcontrolador PIC16F876 Pgina 46

Nota: Si el valor del duty cycle es mayor que el perodo PWM, la patilla CCP1 no se pondr a
cero.

8.3.3 PROGRAMACIN PARA OPERACIN PWM

Los siguientes pasos deben respetarse para configurar el mdulo CCP como PWM:
1. Programar el perodo PWM, escribiendo en el registro PR2.
2. Programar el duty cycle, escribiendo en el registro CCPR1L y CCP1CON<5:4>.
3. Poner la patilla CCP1 como salida, borrando el bit 2 de TRISC (TRISC<2>).
4. Programar el valor Predivisor de TMR2 y habilitar Timer2, escribiendo T2CON.
5. Configurar el mdulo CCP1 para operacin como PWM.

TABLA 8-3: REGISTROS ASOCIADOS AL TIMER1, CAPTURA Y COMPARACIN


Valor tras
Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR,BOR
otros
resets

0Bh,
8Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10Bh,
18Bh
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

0Dh PIR2 --- --- --- --- --- --- --- CCP2IF ---- ---0 ---- ---0

8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

8Dh PIE2 --- --- --- --- --- --- --- CCP2IE ---- ---0 ---- ---0

87h TRISC Registro de direccin del puerto C. 1111 1111 1111 1111

0Eh TMR1L Byte menos significativo del registro TMR1 de 16 bits. xxxx xxxx uuuu uuuu

0Fh TMR1H Byte ms significativo del registro TMR1 de 16 bits. xxxx xxxx uuuu uuuu

10h T1CON --- --- T1CKPS1 T1CKPS0 T1OSCEN -T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu

15h CCPR1L Byte menos significativo del registro1 de Captura-Comparacin-PWM xxxx xxxx uuuu uuuu

16h CCPR1H Byte ms significativo del registro1 de Captura-Comparacin-PWM xxxx xxxx uuuu uuuu

17h CCP1CON --- --- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000

1Bh CCPR2L Byte menos significativo del registro2 de Captura-Comparacin-PWM xxxx xxxx uuuu uuuu

1Ch CCPR2H Byte ms significativo del registro2 de Captura-Comparacin-PWM xxxx xxxx uuuu uuuu

1Dh CCP2CON --- --- CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000

x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0). Las celdas sombreadas no se
utilizan en Captura y Timer1.
Nota 1: PSP no est implementado en el PIC 16F873/876; se debe mantener siempre a 0.
Microcontrolador PIC16F876 Pgina 47

TABLA 8-4: REGISTROS ASOCIADOS AL TIMER2 Y PWM


Valor
Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR,BOR
tras otros
resets

0Bh,
8Bh, 0000
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x
000u
10Bh,
18Bh
0000
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000
0000
0Dh PIR2 --- --- --- --- --- --- --- CCP2IF ---- ---0 ---- ---0

8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

8Dh PIE2 --- --- --- --- --- --- --- CCP2IE ---- ---0 ---- ---0

87h TRISC Registro de direccin del puerto C. 1111 1111 1111 1111

11h TMR2 Registro de los mdulos de TMR2. 0000 0000 0000 0000

92h PR2 Registro de perodo de los mdulos TMR2. 1111 1111 1111 1111

12h T2CON --- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 0000

15h CCPR1L Byte menos significativo del registro1 de Captura-Comparacin-PWM xxxx xxxx uuuu uuuu

16h CCPR1H Byte ms significativo del registro1 de Captura-Comparacin-PWM xxxx xxxx uuuu uuuu

17h CCP1CON --- --- CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000

1Bh CCPR2L Byte menos significativo del registro2 de Captura-Comparacin-PWM xxxx xxxx uuuu uuuu

1Ch CCPR2H Byte ms significativo del registro2 de Captura-Comparacin-PWM xxxx xxxx uuuu uuuu

1Dh CCP2CON --- --- CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000

x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0). Las celdas sombreadas no se
utilizan en PWM y Timer2.
Nota 1: Los bits PSPIE y PSPIF estn reservados en el PIC 16F873/876; se deben mantener siempre a 0.

9.0 MDULO PUERTO SERIE SNCRONO MAESTRO (MSSP)

El mdulo MSSP es un acoplamiento (interface) serie usada en comunicaciones con otros


perifricos o dispositivos microcontroladores. Estos dispositivos perifricos pueden ser
EEPROMs, registros de desplazamiento, controladores de displays, convertidores A/D, etc. El
mdulo MSSP puede trabajar en uno de estos dos modos:
Interface de Perifrico Serie (SPI).
Circuitos Inter-Integrados (I2C).

La figura 9-1 muestra un diagrama a bloques para el modo SPI; las figuras 9-5 y 9-9 muestran
los diagramas a bloques para dos diferentes modos de trabajar I2C.
Microcontrolador PIC16F876 Pgina 48

REGISTRO 9-1: SSPSTAT: REGISTRO DE ESTADO PUERTO SERIE SNCRONO


(DIRECCIN 94h)

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


SMP CKE D/-A P S R/-W UA BF R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit 7: SMP: Bit de captura.


SPI Modo Maestro
1 = Captura del dato de entrada al final del tiempo del dato de salida.
0 = Captura del dato de entrada en el centro del tiempo del dato de salida.
SPI Modo Servidor
SMP de borrarse cuando se use SPI en modo servidor.
En modo servidor, o maestro I2C:
1 = Inhibe control de velocidad para modo de velocidad estndar (100 KHz a 1 MHz).
0 = Habilita control de velocidad para modo de alta velocidad (400 KHz).
bit 6: CKE: Seleccin de flanco de reloj para SPI (figura 9-4, figura 9-5 y figura 9-6).
Modo SPI:
CKP = 0
1 = La transmisin sucede en la transicin del estado de reloj activo al estado de reloj aislado.
0 = La transmisin sucede en la transicin del estado de reloj aislado al estado de reloj activo.
CKP = 1
1 = El dato se transmite en el flanco de bajada de SCK.
0 = El dato se transmite en el flanco de subida de SCK.
En modo Servidor o Maestro I2C:
1 = Niveles de entrada conforme a las especificaciones SMBUS.
0 = Niveles de entrada conforme a las especificaciones I2C.
bit 5: D/A: Bit de seleccin de dato o direccin (Data/-Address), solamente en modo I2C.
1 = Indica que el ltimo byte recibido o transmitido fue un dato.
0 = Indica que el ltimo byte recibido o transmitido fue una direccin
bit 4: P: Bit de parada (stop)
(Solamente en modo I2C. Este bit se borra cuando se inhibe el mdulo MSSP. SSPEN est a cero).
1 = Indica que un bit de stop se ha detectado en ltimo lugar. (este bit se pone a cero con RESET).
0 = Indica que no se ha detectado en ltimo lugar un bit de stop.
bit 3: S: Bit de arranque (Start).
(Solamente en modo I2C. Este bit se borra cuando se inhibe el mdulo MSSP. SSPEN est a cero).
1 = Indica que un bit de start se ha detectado en ltimo lugar. (este bit se pone a cero con RESET).
0 = Indica que no se ha detectado en ltimo lugar un bit de start.
bit 2: R/W: Bit de informacin de lectura-escritura (solamente en modo I2C).
Este bit contiene la informacin de lectura-escritura de la ltima direccin tratada. Este bit solamente
es vlido desde la ltima direccin tratada hasta el prximo bit de Start, Stop o no ACK
En modo servidor I2C:
1 = Lectura.
0 = Escritura.
En modo maestro I2C:
1 = Transmisin en progreso.
0 = Transmisin detenida.
La funcin OR de este bit con SEN, RSEN, PEN, RCEN o ACKEN indicar si el MSSP est en modo
aislado.

bit 1: UA: Actualizacin de direccin (10 bits, solamente en modo I2C).


1= Indica que el usuario necesita actualizar la direccin en el registro SSPADD.
0 = Indica que la direccin no necesita ser actualizada.
bit 0: BF: Bit de estado de buffer lleno (buffer full).
Recepcin (modos SPI e I2C).
1 = Recepcin completa. SSPBUF est lleno.
0 = Recepcin incompleta. SSPBUF est vaco.
Transmisin (modos SPI e I2C).
1 = Dato transmitido est en progreso (no incluye ACK y bits de STOP). SSPBUF est lleno.
0 = Dato transmitido no est en progreso (no incluye ACK y bits de STOP). SSPBUF est vaco.
Microcontrolador PIC16F876 Pgina 49

REGISTRO 9-2: SSPCON: REGISTRO DE CONTROL PUERTO SERIE SNCRONO


(DIRECCIN 14h)

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


WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da
0 en lectura
-n = Valor del reset POR

bit 7: WCOL: Bit detector de conflicto en escritura.


Modo Maestro
1 = Se intent una escritura sobre SSPBUF cuando no eran vlidas las condiciones I2C.
0 = No existe conflicto.
Modo Servidor
1 = Se escribi en SSPBUF cuando estaba transmitiendo la palabra anterior (se borra por software).
0 = No existe conflicto.
bit 6: SSPOV: Bit indicador de desbordamiento en recepcin.
Modo entrada SPI:
1 = Se ha recibido un nuevo byte cuando SSPBUF an mantena el dato anterior. El dato en SSPSR se
pierde al desbordar. En modo Servidor, el usuario leer el SSPBUF, aunque est transmitiendo un dato,
para evitar desbordamiento. En modo maestro, el bit de desbordamiento no se activa para evitar ste,
ya que cada operacin se inicia escribiendo en el registro SSPBUF. Debe borrarse por software.
0 = No hay conflicto.
En modo I2C:
1 = Se recibe un byte mientras SSPBUF mantiene el dato previo. SSPOV es indiferente en trasmisin.
Debe borrarse por software.
0 = No existe conflicto.
bit 5: SSPEN: Bit de habilitacin de Puerto Serie Sncrono.
En modo SPI, cuando se habilite, estas patillas debern ser convenientemente configuradas como
entradas o salidas.
1 = Habilita puerto serie y configura las patillas SCK, SDO, SDI y SS como patillas del puerto serie.
0 = Inhibe puerto serie y configura estas patillas como lneas de puerto entrada-salida.
En modo I2C, cuando se habilite, estas patillas debern ser convenientemente configuradas como
entradas o salidas.
1 = Habilita puerto serie y configura las patillas SDA y SCL como patillas del puerto serie.
0 = Inhibe puerto serie y configura estas patillas como lneas de puerto entrada-salida.
bit 4: CKP: Bit de seleccin de polaridad de reloj.
En modo SPI:
1 = Reloj desconectado queda en nivel alto.
0 = Reloj desconectado queda en nivel bajo.
En modo servidor I2C, control de SCK.
1 = Habilita reloj.
0 = Mantiene bajo el reloj (prolongacin del reloj). El usuario asegura el tiempo de antelacin de datos.
En modo maestro I2C:
No utilizado en este modo.
bit 3-0: SSPM3:SSPM0: Bits de seleccin de modo para Puerto Serie Sncrono
0000 = Modo Maestro SPI, reloj = Fosc/4.
0001 = Modo Maestro SPI, reloj = Fosc/16.
0010 = Modo Maestro SPI, reloj = Fosc/64.
0011 = Modo Maestro SPI, reloj = salida/2 de TMR2.
0100 = Modo Servidor SPI, reloj = patilla SCK. Patilla de control SS habilitada.
0101 = Modo Servidor SPI, reloj = patilla SCK. Patilla de control SS inhibida. sta puede usarse
como entrada o salida.
0110 = Modo Servidor I2C, con 7 bits de direccin.
0111 = Modo Servidor I2C, con 10 bits de direccin.
1000 = Modo Maestro I2C, reloj = Fosc / [4(SSPADD+1)].
1011 = Modo Maestro controlado por el microprograma I2C (servidor desconectado).
1110 = Modo Maestro controlado por el microprograma I2C, direccin de 7 bits con bit de start y stop e
interrupciones habilitadas.
1111 = Modo Maestro controlado por el microprograma I2C, direccin de 10 bits con bit de start y stop,
e interrupciones habilitadas.
1001, 1010, 1100 y 1101 estn reservadas.
Microcontrolador PIC16F876 Pgina 50

REGISTRO 9-3: SSPCON2: REGISTRO2 DE CONTROL PUERTO SERIE SNCRONO


(DIRECCIN 91h)

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


GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar.
Da 0 en lectura
-n = Valor del reset POR

bit 7: GCEN: Bit de habilitacin de llamada general (solamente en modo servidor I2C).
1 = Habilitacin de interrupcin cuando se recibe en SSPSR una direccin de llamada general.
0 = Inhibida la direccin de llamada general.
bit 6: ACKSTAT: Bit de estado de reconocimiento (solamente en modo maestro I2C).
Modo maestro transmisin:
1 = No se recibi el reconocimiento desde el servidor.
0 = Se recibi el reconocimiento desde el servidor.
bit 5: ACKDT: Bit de reconocimiento de dato (solamente en modo maestro I2C).
Recepcin en modo maestro:
Valor que fue transmitido cuando el usuario inicia una secuencia de reconocimiento al final de una
recepcin.
1 = No hay reconocimiento,
0 = Reconocimiento.
bit 4: ACKEN: Bit de habilitacin de secuencia de reconocimiento (solamente en modo maestro I2C).
En modo maestro recepcin:
1 = Inicia una secuencia de reconocimiento en las patillas SDA y SCL, y transmite un bit de datos
ACKDT. Automticamente se borra por hardware.
0 = Detenida la secuencia de reconocimiento.
bit 3: RCEN: Bits de habilitacin de recepcin (solamente en modo maestro I2C).
1 = Habilita la recepcin en modo I2C.
0 = Recepcin detenida.
bit 2: PEN: Bit de habilitacin de condicin de parada (solamente en modo maestro I2C).
Control de SCK liberado
1 = Inicia la condicin de parada (STOP) en las patillas SDA y SCL. Se borra automticamente por
hardware.
0 = Detenida la condicin de parada.
bit 1: RSEN: Bit de habilitacin de la condicin de repeticin de arranque (solamente en modo maestro I2C).
1 = Inicia la condicin de repeticin de arranque en las patillas SDA y SCL. Se borra automticamente
por hardware.
0 = Detenida la condicin de repeticin de arranque.
bit 0: SEN: Bit de habilitacin de la condicin de arranque (solamente en modo maestro I 2C).
1 = Inicia la condicin de arranque en las patillas SDA y SCL. Se borra automticamente por hardware.
0 = Detenida la condicin de arranque.
Nota: Para los bits ACKEN, RCEN, PEN, RSEN y SEN: Si el mdulo I2C no est en modo detencin, estos
bits no pueden programarse y el SSPBUF no puede escribirse.
Microcontrolador PIC16F876 Pgina 51

9.1 Modo SPI

El modo SPI permite que 8 bits de datos sean, simultneamente, transmitidos y recibidos. Estn
desarrollados los cuatro modos de SPI. Para llevar a cabo la comunicacin, se usan tres patillas:
Dato de salida serie (SDO).
Dato de entrada serie (SDI).
Reloj serie (SCK).

Adicionalmente, una cuarta patilla puede usarse cuando se opera en modo servidor:

Seleccin de servidor ( SS ).

Al inicializar el SPI, dispondremos de varias opciones, que se consiguen programando los bits
de control (SSPCON<5:0> y SSPSTAT<7:6>). Estos bits permitirn lo siguiente:
Modo maestro (SCK es el reloj de salida).
Modo servidor (SCK es el reloj de entrada).
Polaridad del reloj (estado desconectado de SCK).
Fase de captura del dato de entrada (en el centro o al final del tiempo del dato de
salida).
Flanco de reloj (dato de salida en el flanco de subida-bajada de SCK).
Velocidad de reloj (solamente en modo maestro).
Modo de seleccin de servidor (solamente en modo servidor).

La figura 9-1 muestra el diagrama a bloques


del mdulos MSSP cuando est en modo
SPI.

Para habilitar el puerto serie (bit MSSP)


debe activarse SSPEN (SSPCON<5>). Para
borrar o reconfigurar el modo SPI, borrar el
bit SSPEN, reinicializar el registro
SSPCON, y, entonces, activar el bit SSPEN.
Esto configura las patillas SDI, SDO, SCK
y SS como patillas de puerto serie. Para que
las patillas se comporten como funciones de
puerto serie, hay que tener debidamente
programados los bits de direccin de puerto
(registro TRIS). O sea:
SDI se controla automticamente
por el mdulo SPI.
SDO debe tener borrado
TRISC<5>.
SCK (modo maestro) debe tener
borrado TRISC<3>.
SCK (modo servidor) debe tener en
1 el bit TRISC<3>.
SS debe tener activado TRISA<5>.

Cualquier funcin de puerto serie no


deseada debe anularse programando el
correspondiente registro de direccin de
datos (TRIS) con el valor opuesto.
Microcontrolador PIC16F876 Pgina 52

9.1.1 MODO MAESTRO

El maestro puede iniciar la transferencia de datos en cualquier momento porque es l quien


controla el reloj SCK. El maestro determina, por el protocolo de software, cundo el servidor
(Procesador 2, figura 9-5) est transmitiendo datos.

En modo maestro, el dato se transmite o recibe tan pronto como el registro SSPBUF se carga. Si
el mdulo SPI est preparado solamente para recibir, la salida SDO estar inhibida (programada
como entrada). El registro SSPSR continuar el desplazamiento con la seal presente en la
patilla SDI a la velocidad de reloj programada. Cuando el byte se recibe, se cargar en el
registro SSPBUF como una recepcin normal de byte (se activar la interrupcin y los bits
apropiados de datos).

La polaridad del reloj se selecciona programando adecuadamente el bit CKP (SSCON<4>). Esto
proporciona una formas de onda, para comunicaciones SPI, como se muestra en la Figura 9-2,
Figura 9-3 y Figura 9-4, donde el MSB se transmite en primer lugar. En modo maestro, la
velocidad del reloj SPI se programa por el usuario, de una de las siguientes formas:
Fosc/4 (o TCY).
Fosc/16 (o 4TCY).
Fosc/64 (o 16TCY).
(SalidaTimer2) : 2.

Esto permitir una frecuencia mxima de reloj de bit (a 20 MHz) de 5 MHz.

En la figura 9-2 se muestra las formas de onda para el modo Maestro. Cuando CKE = 1, el dato
en SDO debe ser vlido antes del flanco de reloj en SCK. El cambio en la captura de entrada se
muestra basndose en el estado del bit SMP. Se aprecia el instante en que se carga el registro
SSPBUF con el dato recibido.
Microcontrolador PIC16F876 Pgina 53

9.1.2 MODO SERVIDOR

En modo servidor, el dato se transmite y recibe cuando aparece el pulso externo de reloj en
SCK. Cuando se ha memorizado el ltimo bit, el bit indicador de interrupcin SSPIF (PIR<3>)
se activa.

En modo servidor, el reloj externo se suministra por la fuente externa de reloj en la patilla SCK.
Este reloj externo debe poseer un mnimo de tiempo en alto y bajo, tal y como indican las
caractersticas elctricas.

En modo SLEEP, el servidor puede transmitir y recibir datos. Cuando se recibe un byte, el
dispositivo abandonar el estado SLEEP.

Nota: Cuando el mdulo SPI est en modo servidor con la patilla SS habilitada
(SSPCON<3:0> = 0100), el mdulo SPI inicializar si la patilla SS se coloca a VDD.
Nota: Si el mdulo SPI se usa en modo servidor con CKE = 1, la patilla de control SS debe
habilitarse.
Microcontrolador PIC16F876 Pgina 54

TABLA 9-1: REGISTROS ASOCIADOS A LA OPERACIN SPI


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR,BOR otros resets

0Bh, 8Bh,
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10Bh, 18Bh

0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

13h SSPBUF Registro de recepcin y transmisin del Puerto Serie Sncrono xxxx xxxx uuuu uuuu

14h SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000

94h SSPSTAT SMP CKE D/-A P S R/-W UA BF 0000 0000 0000 0000
x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0). Las celdas sombreadas no se
utilizan por SSP en modo SPI.
Nota 1: Estos bits se reservan en los dispositivos de 28 patillas; se deben mantener siempre a 0.

9.2 Operacin del mdulo MSSP en modo I2C

El mdulo MSSP en modo I2C implementa las funciones de maestro y servidor (incluyendo el
soporte de la llamada general), y proporciona interrupciones por hardware en los bits de start y
stop para determinar la disponibilidad del bus (funcin multi-master). El mdulo MSSP
implementa las especificaciones de modo estndar, as como direccionamiento de 7 bits y 10
bits.

Un filtro de transitorios est dispuesto en las patillas SCL y SDA cuando trabajan como
entradas. Este filtro opera en el rango de 100 a 400 KHz. En modo 100 KHz, cuando estas
patillas estn como salidas, hay un control sobre la velocidad de subida de la patilla que es
independiente de la frecuencia del dispositivo.

Dos patillas se usan para transferencia de datos. Son las patillas SCL, que acta como reloj, y la
patilla SDA, que es el dato. Estas patillas se configuran automticamente cuando se habilita el
modo I2C. Las funciones del mdulo SSP se
habilitan activando SSPEN (SSPCON<5>).

El mdulo MSSP tiene seis registros para la


operacin I2C, que son:
Registro de Control SSP
(SSPCON).
Registro2 de Control SSP
(SSPCON2).
Registro de Estado (SSPSTAT).
Buffer de transmisin-recepcin
serie (SSPBUF).
Registro de Desplazamiento
(SSPSR). No es accesible
directamente.
Registro de direccin SSP
(SSPADD).
Microcontrolador PIC16F876 Pgina 55

El registro SSPCON permite el control de la operacin I2C. Cuatro bits de seleccin de modo
(SSPCON<3:0>) permiten seleccionar uno de los siguientes modos I2C:
Modo servidor I2C (direccin de 7 bits).
Modo servidor I2C (direccin de 10 bits).
Modo maestro I2C, reloj = OSC/4 (SSPADD + 1).

Antes de seleccionar cualquier modo I2C, las patillas SCL y SDA deben programarse como
entradas, activando los bits apropiados del registro TRIS. Al seleccionar un modo I2C,
programando el bit SSPEN, se habilitan las patillas SCL y SDA para ser usadas como lneas de
reloj y datos, respectivamente, en modo I2C.

El bit CKE (SSPSAT<6:7>) programa los niveles de las patillas SDA y SCL en los modos
maestro o servidor. Cuando CKE = 1, el nivel responder a las especificaciones de SMBUS;
cuando CKE = 0, los niveles respondern a las especificaciones de I2C.

El registro SSPSTAT contiene el estado de la transferencia. Esta informacin incluye: la


deteccin de los bits de Start (S) o Stop (P), la especificacin de si el byte recibido fue dato o
direccin, y si es esta ltima, si el prximo byte es el resto de la direccin de 10 bits, y, por
ltimo, si habr una lectura o escritura en la transferencia del dato.

SSPBUF es el registro donde se carga el dato a transferir, o donde est el dato recibido. Este
registro desplaza el dato hacia dentro o hacia fuera del dispositivo. En operaciones de recepcin,
SSPBUF y SSPSR crean un doble buffer receptor. Esto permitir la recepcin del prximo byte
antes de comenzar a leer el ltimo byte recibido. Cuando se ha recibido el dato completo, se
transfiere al registro SSPBUF y el bit indicador SSPIF se activa. Si se recibe algn otro byte
completo antes de leer el registro SSPBUF, se produce desbordamiento, y el bit SSPOV
(SSPCON<6>) se activa para indicar que se perdi el byte primero cargado en SSPBUF y no
ledo.

El registro SSPADD mantiene la direccin del servidor. En modo de 10 bits de direccin, el


usuario necesita escribir el byte alto de la direccin (1111 0-A9-A8-0). A continuacin, es
necesario cargar el byte bajo de la direccin (A7:A0).

9.2.1 MODO SERVIDOR

En este modo, las patillas SCL y SDA deben configurarse como entradas. El mdulo MSSP
sustituir el estado de la entrada con el dato de salida cuando se necesite (servidor-transmisor).

Cuando una direccin es reconocida, o se recibe un dato despus de reconocer una direccin, la
circuitera generar un pulso de reconocimiento ACK . Entonces se produce la carga del
registro SSPBUF con el valor actual recibido, cargado en el registro SSPSR.

Existen ciertas condiciones por las que el mdulo MSSP no producir el pulso ACK , y son:
a) El bit de buffer lleno BF (SSPSAT<0>) se activ antes de que la transferencia fuese
recibida.
b) El bit de desbordamiento SSPOV (SSPCON<6>) se activ antes de que fuese recibida
la transferencia.

Si el bit BF est activado, el valor del registro SSPSR no se carga en el registro SSPBUF, pero
se activan los bits SSPIF y SSPOV. La tabla 9-2 muestra, en el estado de los bits BF y SSPOV,
lo que ocurre cuando no se recibe un byte de datos transferido. Las celdas sombreadas muestran
las condiciones donde el software del usuario no producen el borrado apropiado de la condicin
Microcontrolador PIC16F876 Pgina 56

de desbordamiento. El bit indicador BF se borra leyendo el registro SSPBUF, mientras que el


borrado de SSPOV ser por software.

La entrada de reloj SCL debe tener un mnimo de duracin, tanto en alto como en bajo, para una
correcta operacin. Los tiempos de alto y bajo de las especificaciones de I2C, as como los
requisitos del mdulo MSSP, se muestran en las especificaciones elctricas.

9.2.1.1 DIRECCIONAMIENTO

Cada vez que el mdulo MSSP ha sido habilitado, espera a que ocurra una condicin de
arranque (Start). Seguidamente, se desplazan los 8 bits en el registro SSPSR. Todos los bits
entrantes se capturan con el flanco de subida de la lnea de reloj SCL. El valor del registro
SSPSR<7:1> se compara con el valor del registro SSPADD. La direccin se compara en el
flanco de bajada del octavo pulso de reloj en SCL. Si la direccin se reconoce y los bits BF y
SSPOV estn borrados, se suceden las siguientes operaciones:
a) El valor del registro SSPSR se carga en SSPBUF en el flanco de bajada del octavo pulso
de SCL.
b) El bit BF (buffer lleno) se activa en la bajada de reloj del octavo pulso en SCL.

c) Se genera un pulso de reconocimiento ACK .


d) El bit indicador de interrupcin SSPIF (PIR1<3>) se activa en el flanco de bajada del
noveno pulso en SCL. Se producir interrupcin, si estuviese habilitada.

En modo de direccin a 10 bits, se necesitan dos bytes para recibir la direccin por el servidor.
Los cinco bits de mayor peso del primer byte de direccin, especifican si es una direccin a 10
bits. El bit R / W (SPSAT<2>) indicar una escritura sobre el dispositivo servidor que recibir
el segundo byte de direccin. Para una direccin de 10 bits, el primer byte debe ser igual a
1111 0-A9-A8-0, donde A9 y A8 son los dos bits de mayor peso de la direccin de 10 bits.
La secuencia de operaciones para una direccin a 10 bits es la siguiente, con los pasos 7 a 9 para
servidor transmisor:
1. Recepcin del primer byte (ms peso) de la direccin (bits SSPIF, BF y UA
(SSPSTAT<1>) estn activados).
2. Actualizacin del registro SSPADD con el segundo byte (menos peso) de la direccin
(borra bit UA y libera la lnea SCL).
3. Lectura del registro SSPBUF (borra bit BF) y borrado del bit indicador SSPIF.
4. Recepcin el segundo byte (bajo) de la direccin (se activan los bits SSPIF, BF y UA).
5. Actualiza del registro SSPADD con el primer byte (alto) de la direccin. Esto borrar el
bit UA y liberar la lnea SCL.
6. Lectura del registro SSPBUF (borra bit BF) y borrado del bit SSPIF.
7. Recepcin de la condicin de Repeticin de Arranque.
8. Recepcin del primer byte (alto) de la direccin (se activan los bits SSPIF y BF).
9. Lectura del registro SSPBUF (se borra el bit BF) y borrado del bit indicador SSPIF.
Nota: A continuacin de la condicin de Repeticin de Arranque (paso 7) en modo 10 bits, el
usuario slo necesita encontrar los primeros 7 bits de la direccin, y no actualizar SSPADD
para la segunda mitad de la direccin.
Microcontrolador PIC16F876 Pgina 57

9.2.1.2 RECEPCIN SERVIDOR

Cuando el bit R / W del byte de direccin est borrado y sucede el reconocimiento de direccin,
el bit R / W del registro SSPSTAT se borra. La direccin recibida se carga en el registro
SSPBUF.

Cuando existe la condicin de byte de direccin con desbordamiento, el pulso de


reconocimiento ACK no se produce. Entonces se define una condicin de desbordamiento,
dada por el 1 del bit BF (SSPSTAT<0>) y el 1 del bit SSPOV (SSPCON<6>).

Se generar una interrupcin SSP por cada byte de datos transferido. El bit indicador SSPIF
(PIR<3>) debe borrarse en el programa. El registro SSPSTAT se usa para determinar el estado
del byte recibido.

Nota: El registro SSPBUF debe cargarse si el SSPOV est a 1 y el indicador BF est a 0. Si se


produce una lectura de SSPBUF, pero el usuario no ha borrado el estado de SSPOV antes de
que ocurra la prxima recepcin, ACK no se enva y el SSPBUF se cambia.

Tabla 9-2 ACCIONES DE BYTE RECIBIDO EN LA TRANSFERENCIA DE DATO


Bits de estado tal y como se
recibe la transferencia SSPSR Generacin de Activacin del bit SSPIF (Sucede la
SSPBUF pulso ACK interrupcin SSP si est habilitada)
BF SSPOV

0 0 S S S
1 0 No No S
1 1 No No S
0 1 S No S
Nota 1: Las celdas sombreadas muestran las condiciones donde el software del usuario no realiz adecuadamente el
borrado de la condicin de desbordamiento.

9.2.1.3 TRANSMISIN SERVIDOR

Cuando el bit R / W del byte de la direccin entrante est activado y sucede un reconocimiento
de direccin, el bit R / W del registro SSPSTAT se activa. La direccin recibida se carga en el
registro SSPBUF. EL pulso ACK se enviar en el noveno bit, y la patilla SCL se mantendr a
0. El dato transmitido debe cargarse en el registro SSPBUF, quien descargar, a su vez, sobre
SSPSR. En este momento, la patilla SCL se habilitar activando el bit CKP (SSPCON<4>). El
maestro debe vigilar la patilla SCL antes de asegurar otro impulso de reloj. El dispositivo
servidor se mantendr desconectado del maestro, alargndose el reloj. Los ocho bits de datos se
desplazarn hacia fuera en el flanco de bajada de la entrada en SCL. Esto asegura que la seal
SDA es vlida durante el tiempo en alto de SCL (Figura 9-7).

Se generar una interrupcin por cada byte de dato transferido. El bit indicador SSPIF debe
borrarse por programa, y el registro SSPSTAT se usar para determinar el estado del byte
transferido. El bit indicador SSPIF se activa en el flanco de bajada del noveno impulso de reloj.
Microcontrolador PIC16F876 Pgina 58

Al igual que el servidor-transmisor, el pulso ACK desde el maestro receptor se memoriza en el


flanco de subida del noveno impulso en la entrada SCL. Si la lnea SDA est en alto ( no
ACK ), la transferencia del dato es completa. Cuando el no ACK se memoriza por el servidor,
la lgica de ste se inicializa y el servidor espera otra aparicin del bit de arranque (start). Si la
lnea SDA est a 0 ( ACK ), el dato transmitido ser cargado en el registro SSPBUF, que, a su
vez, se carga en el registro SSPSR. Entonces la patilla SCL se habilitar, activando el bit CKP.

9.2.2 SOPORTE DE LA DIRECCIN DE LLAMADA GENERAL

El procedimiento de direccionamiento por el bus I2C es de tal manera que el primer byte
despus de la condicin de START determina qu dispositivo ser el servidor seleccionado por
el maestro. La excepcin es la direccin de llamada general, que puede seleccionar todos los
dispositivos. Cuando se usa esta direccin, todos los dispositivos deben, en teora, responder
con un reconocimiento.

La direccin de llamada general es una de ocho direcciones reservadas para propuestas


especficas por el protocolo I2C. Consiste en todo ceros, con R / W tambin a 0.

La direccin de llamada general se reconoce cuando el bit de habilitacin de llamada general


(GCEN) se habilita (SSPCON2<7> = 1). Siguiendo a la deteccin del bit de start, se
desplazarn 8 bits en SSPSR, y la direccin se compara con la de SSPADD. Tambin se
compara con la direccin de llamada general fijada por hardware.
Microcontrolador PIC16F876 Pgina 59

Si la direccin de llamada general coincide, el SSPSR se transfiere al SSPBUF, el indicador BF


se activa (octavo bit), y en el flanco de bajada del noveno bit (bit ACK ) el indicador SSPIF se
activa.

Cuando se sirve una interrupcin, la procedencia de la interrupcin puede chequearse leyendo el


contenido de SSPBUF para determinar si la direccin fue especfica del dispositivo o fue una
direccin de llamada general.

En modo 10-bit, el SSPADD se necesita para ser actualizado por la segunda mitad de la
direccin a reconocer, y el bit UA debe activarse (SSPSTAT<1>). Si se captura una direccin
de llamada general cuando GCEN est activo y el servidor est configurado en modo direccin
10-bit, la segunda mitad de la direccin no es necesaria, el bit UA no se activar, y el servidor
empezar recibiendo un dato despus del reconocimiento (Figura 9-8).

9.2.3 OPERACIN SLEEP (ALERTA)

Aunque el dispositivo est en modo SLEEP, el mdulo I2C puede recibir datos o direcciones.
Cuando ocurra la transferencia de un byte completo, o direccin reconocida, se saca al
procesador del estado sleep (si est habilitada la interrupcin SSP).

9.2.4 EFECTO DE UN RESET

Un reset inhibe al mdulo SSP y determina la transferencia actual.


Microcontrolador PIC16F876 Pgina 60

TABLA 9-3: REGISTROS ASOCIADOS A LA OPERACIN I2C


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR, otros
BOR resets

0Bh,
8Bh,
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10Bh,
18Bh
0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

0Dh PIR2 --- (2) --- EEIF BCLIF --- --- CCP2IF -r-0 0--0 -r-0 00

8Dh PIE2 --- (2) --- EEIE BCLIE --- --- CCP2IE -r-0 0--0 -r-0 00

13h SSPBUF Registro de recepcin y transmisin del Puerto Serie Sncrono xxxx xxxx uuuu uuuu

14h SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000

91h SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 0000 0000

94h SSPSTAT SMP CKE D/-A P S R/-W UA BF 0000 0000 0000 0000

x = Desconocido; u = Sin cambio; r = Reservado; --- = Sin implementar (se lee 0). Las celdas sombreadas no se
utilizan por SSP en modo I2C.
Nota 1: Estos bits se reservan en los dispositivos de 28 patillas; se deben mantener siempre a 0.
Nota2: Estos bits se reservan en estos dispositivos; se deben mantener a 0.

9.2.5 MODO MAESTRO

La operacin del modo maestro est dirigida por la generacin de interrupcin en la deteccin
de las condiciones de START y STOP. Los bits de STOP (P) y START (S) se borran con un
reset o cuando el mdulo MSSP est inhibido. El control del bus I2C puede acometerse cuando
el bit P est activado, o el bus est desconectado con el conjunto de los bits S y P borrados.

En modo maestro, las lneas SCL y SDA son manipuladas por el hardware de MSSP.

Los siguientes acontecimientos provocarn la activacin del bit SSPIF, indicador de


interrupcin de SSP, si la interrupcin SSP est habilitada:
Condicin de START.
Condicin de STOP.
Byte de transferencia de datos transmitido-recibido.
Transmisin de reconocimiento.
Repeticin de arranque.

9.2.6 MODO MULTI-MAESTRO

En modo multi-maestro, la generacin de la interrupcin en la deteccin de las condiciones de


START y STOP permite la deteccin de la disponibilidad del bus. Los bits de STOP (P) y
START (S) se borran con un reset, o cuando se inhibe el mdulo MSSP. El control del bus I2C
se realiza cuando el bit P (SSPSTAT<4>) se activa, estando el bus desconectado con la pareja S
y P a 0. Cuando el bus est ocupado, habilitando la interrupcin SSP se generar una
interrupcin cuando llegue una condicin de STOP.
Microcontrolador PIC16F876 Pgina 61

En operaciones multi-maestro, la lnea SDA ser chequeada para decidir si el nivel en la seal
es el nivel de salida esperado. Este chequeo se desarrolla por hardware, cuyo resultado lo tiene
el bit BCLIF.

Los estados en los que no existe toma de decisin, sern:


Transferencia de direccin.
Transferencia de dato.
Condicin de Start.
Condicin de repeticin de Start.
Condicin de reconocimiento.

9.2.7 SOPORTE EN MODO I2C

El modo maestro se habilita, activando y borrando los bits apropiados SSPM, en el registro
SSPCON, y activando el bit SSPEN. Una vez que se habilita el modo maestro, el usuario tiene
seis opciones:
- Confirmar una condicin start en SDA y SCL.
- Confirmar una condicin de repeticin de start en SDA y SCL.
- Escribir en el registro SSPBUF, iniciando as una transmisin de dato o direccin.
- Generar una condicin de stop en SDA y SCL.
- Configurar el puerto I2C para recibir dato.
- Generar una condicin de reconocimiento al final de la recepcin del byte de datos.

Nota: El mdulo MSSP, cuando se configura en modo maestro I2C, no permite colas de espera
de sucesos. Por ejemplo, el usuario no puede iniciar una condicin de start e, inmediatamente,
escribir el registro SSPBUF para iniciar una transmisin antes de completar la condicin start.
En este caso, el registro SSPBUF no debe escribirse hasta que el bit WCOL est activado. ste
ser el indicador de la escritura de SSPBUF.
Microcontrolador PIC16F876 Pgina 62

9.2.7.1 OPERACIN EN MODO MAESTRO I2C

El dispositivo maestro genera toda una serie de impulsos de reloj y las condiciones de START y
STOP. Se finaliza una transferencia, con la condicin de STOP o con la condicin de repeticin
de Start. Como quiera que la condicin de Repeticin de Start es tambin el comienzo de la
prxima serie transferida, el bus I2C no se desconectar.

En modo Maestro Transmisor, el dato serie se saca por SDA, mientras que la salida de reloj
serie es SCL. El primer byte transmitido contiene la direccin del dispositivo receptor servidor
(7 bits) y el bit de Lectura-Escritura ( R / W ). En este caso, el bit R / W ser 0. El dato serie se
transmite en 8 bits en este instante. Despus de transmitir cada byte, se recibe un bit de
reconocimiento. Se envan las condiciones de START y STOP para indicar el comienzo y el
final de la serie transmitida.

En modo Maestro Receptor, el primer byte transmitido contiene la direccin del servidor del
dispositivo transmisor (7 bits) y el bit R / W . En este caso, este bit deber tener valor lgico 1.
Por esto, el primer byte transmitido es una direccin de servidor de 7 bits, seguido de un 1
que indica bit de recepcin. El dato serie se recibe va SDA, y el reloj serie, por SCL. El dato
serie de 8 bits se recibe simultneamente al reloj. Tras la recepcin de cada byte, se transmite un
bit de reconocimiento. Las condiciones START y STOP indican el inicio y el final de la
transmisin.

El generador de velocidad de transmisin (generador de baudios) utilizado para operacin en


modo SPI, es ahora usado para programar la frecuencia de reloj de SCL, para 100 Khz., 400
Khz. o 1 Mhz , en operacin I2C. El generador de baudios recarga el valor contenido en los 7
bits de menos peso del registro SSPADD. El generador de baudios comenzar,
automticamente, contando con una escritura en SSPBUF. Una vez que la operacin se
completa (p.e. transmisin del ltimo bit de datos seguido por ACK), el reloj interno detiene
automticamente la cuenta, y la patilla SCL permanece en su ltimo estado.

Una secuencia tpica de transmisin ser as:


a) El usuario genera la Condicin de Start activando el bit de habilitacin de START
(SEN) en SSPCON2.
b) Se activa SSPIF. El mdulo esperar el tiempo necesario de start antes de que se
produzca otra operacin cualquiera.
c) El usuario carga SSPBUF con la direccin a transmitir.
d) La direccin se desplaza fuera de la patilla SDA hasta que son transmitidos los 8 bits.
e) El mdulo MSSP da entrada al bit ACK proveniente del dispositivo servidor y escribe
este valor en el registro SSPCON2 (SSPCON2<6>).
f) El mdulo genera una interrupcin, al final del noveno ciclo de reloj, activando SSPIF.
g) El usuario carga el registro SSPBUF con los 8 bits de datos.
h) El dato se desplaza fuera de la patilla SDA hasta la transmisin completa de los 8 bits.
i) El mdulo MSSP da entrada al bit ACK, proveniente del dispositivo servidor, y escribe
este valor en el registro SSPCON2 (SSPCON2<6>).
j) El mdulo genera una interrupcin al final del noveno ciclo de reloj, activando SSPIF.
k) El usuario genera una condicin de STOP activando el bit de habilitacin de STOP
(PEN) en el registro SSPCON2.
l) La interrupcin se genera cada vez que se completa la condicin de STOP.

9.2.8 GENERADOR DE BAUDIOS

En modo I2C, el valor de recarga para BRG se localiza en los 7 bits de menos peso del registro
SSPADD (Figura 9-10). Cuando se carga BRG con este valor, se inicia la cuenta atrs de BRG
Microcontrolador PIC16F876 Pgina 63

hasta llegar a 0. En este momento, el contaje se detiene hasta que tiene lugar una nueva recarga.
El contador BRG se decrementa dos veces por ciclo de instruccin (T CY), en los relojes Q2 y
Q4.

En modo I2C, el contador BRG se recarga automticamente. Si se produce arbitraje de reloj, por
ejemplo, el BRG se recargar cuando la patilla SCL se vea en alto (Figura 9-11).

9.2.9 OSCILOGRAMAS DE LA CONDICIN DE START EN MODO MAESTRO I2C

Para iniciar una condicin START, se activar el bit SEN, que habilita la condicin de start,
registro SSPCON2<0>. Si las patillas SDA y SCL estn en nivel alto, el generador de baudios
se recarga con el contenido de SSPADD<6:0> y se inicia el contaje. Si el grupo SCL y SDA
estn en 1 cuando el generador de baudios termina (TBRG), la patilla SDA se pone a 0. La accin
de SDA, siendo puesta a 0 cuando SCL est a 1, es la condicin de START, y hace que el bit S
se active (SSPSTAT<3> = 1). Despus de esto, el generador de baudios se recarga con el
contenido del registro SSPADD<6:0> y contina su contaje decremental. Cuando el generador
termina la cuenta (TBRG), el bit SEN (SSPCON2<0>) se borrar automticamente por el
hardware. El generador de baudios se detiene, dejando la lnea SDA a nivel bajo y completando
la condicin de START.

Nota: Si al comienzo de la condicin de START, las patillas SDA y SCL estaban ya en 0, o si


durante la condicin de START la lnea SCL se ve baja antes que la lnea SDA, ocurre un
conflicto de bus. En este caso, se activa el indicador de conflicto de bus BCLIF, se suspende la
condicin de START, y el mdulo I2C se inicializa en su estado IDLE.
Microcontrolador PIC16F876 Pgina 64

9.2.9.1 INDICADOR DE ESTADO WCOL

Si el usuario escribe el registro SSPBUF cuando est desarrollndose una secuencia START, se
activa WCOL, y el contenido del buffer permanece sin cambio.

Nota: Debido a que la cola de espera de acontecimientos no est permitida, escribiendo los
cinco bits de menor peso de SSPCON2 se inhibe hasta que la condicin de START se complete.

9.2.10 OSCILOGRAMAS DE LA CONDICIN DE REPETICIN DE START, EN MODO


MAESTRO I2C

Estamos ante una condicin de Repeticin de Start cuando el bit RSEN (SSPCON2<1>) se pone
en 1 y el mdulo I2C est en estado desconectado. Cuando RSEN = 1, la patilla SCL se pone en
0. Cuando la patilla SCL se ve baja, el generador de baudios se carga con el contenido de
SSPADD<6:0> y comienza la cuenta. La patilla SDA se libera y se coloca a 1, y se convierte en
un contador generador de baudios (TBRG). Cuando este contador termina su tiempo, si SDA est
en alto, la patilla SCL se pondr en alto. Cuando SCL se chequea en 1, el generador de baudios
se recarga con el contenido de SSPADD<6:0> y comienza la cuenta. SDA y SCL deben verse
en alto en un tiempo TBRG. Esta accin se sigue con la afirmacin de la patilla SDA (SDA en
bajo) por un tiempo TBRG, mientras SCL est alta. A continuacin de esto, el bit RSEN del
registro SSPCON2 se borrar automticamente y el generador de baudios no se recargar,
dejando la patilla SDA en bajo. Tan pronto como se detecta la condicin de start en las patillas
SDA y SCL, el bit S (SSPSTAT<3>) se activar. El bit SSPIF no se activar hasta que el
generador de baudios termine cuenta.

Nota 1: Si RSEN se programa mientras que otro suceso est desarrollndose, no se actualizar.

Nota 2: Sucede un conflicto de bus, durante la condicin de Repeticin de Start, si:


Se detecta en bajo SDA cuando SCL pasa de cero a uno.
SCL pasa a cero antes que SDA se estabilice en ese valor. Esto puede indicar que otro
maestro est intentando transmitir un dato 1.

Inmediatamente a continuacin de la puesta a 1 de SSPIF, el usuario puede escribir el SSPBUF


con los 7 bits de la direccin, en modo 7 bits, o la primera direccin prefijada en modo 10-bit.
Despus de que se transmitan los primeros 8 bits, y se ha recibido ACK, el usuario puede,
Microcontrolador PIC16F876 Pgina 65

entonces, transmitir ocho bits adicionales de direccin (en modo 10-bit), u ocho bits de datos
(en modo 7-bit).

9.2.10.1 INDICADOR DE ESTADO WCOL

Si el usuario escribe el SSPBUF cuando una secuencia de Repeticin de Start est en desarrollo,
WCOL se activa y el contenido del buffer no recibe el valor deseado (no se produce escritura).

Nota: A causa de que no se tolera la cola de sucesos, escribiendo los 5 bits de menor peso de
SSPCON2 se inhibe hasta que se completa la secuencia la condicin de Repeticin de Start.

9.2.11 TRANSMISIN EN MODO MAESTRO I2C

La transmisin de un byte de datos, una direccin de 7 bits o cualquiera de las dos mitades de
una direccin de 10 bits, se consigue con una simple escritura del valor en el registro SSPBUF.
Esta accin activar el bit BF y llevar al generador de baudios a comenzar la cuenta y arrancar
la prxima transmisin. Cada bit de direccin-dato ser desplazado fuera de la patilla SDA
despus de la estabilizacin del flanco de bajada del reloj de SCL. Esta seal se mantendr baja
durante una vuelta de contaje (TBRG) del generador de baudios. El dato ser vlido antes de que
SCL pase a nivel alto. Cuando la patilla SCL se pone a 1, se mantendr de esa manera durante
un TBRG. El dato en la patilla SDA permanecer estable durante ese tiempo, al que hay que
aadir el THOLD (que marcan las especificaciones elctricas) despus del prximo flanco de
bajada de SCL. Despus de sacar los 8 bits fuera de la patilla SDA (en el flanco de bajada del
octavo reloj), el indicador BF se borra, y el maestro abandona SDA permitiendo al servidor
direccionado responder con un bit ACK , durante el noveno tiempo de bit, si existiese un
reconocimiento de direccin o si el dato se recibi correctamente. El estado de ACK se carga
en ACKDT en el flanco de bajada del noveno reloj. Si el maestro recibe un reconocimiento, el
estado del bit de reconocimiento (ACKSTAT) se borra. Si no, este bit estar a 1. Despus del
noveno reloj, SSPIF se activa y el reloj maestro (generador de baudios) se suspende hasta que se
cargue el prximo byte de datos en SSPBUF, dejando SCL baja y SDA sin cambio (Figura 9-
14).

Despus de la escritura de SSPBUF, cada bit de la direccin ser desplazado fuera en el flanco
de bajada de SCL hasta completar los siete bits de direccin y el bit R / W . En el octavo flanco
de bajada, el maestro liberar la patilla SDA permitiendo al servidor responder con un
reconocimiento. En el noveno flanco de bajada, el maestro chequear la patilla SDA para ver si
la direccin fue reconocida por el servidor. El estado del bit ACK se carga en el bit de estado
ACKSTAT (SSPCON2<6>). Despus de que en el noveno reloj se transmita la direccin,
SSPIF se activa, el indicador BF se borra, y el generador de baudios se desconecta hasta que
Microcontrolador PIC16F876 Pgina 66

otra escritura sobre SSPBUF tenga lugar, manteniendo SCL baja y llevando SDA a alta
impedancia (desconexin).

9.2.11.1 INDICADOR DE ESTADO BF

En modo transmisin, el bit BF (SSPSTAT<0>) se activa cuando la CPU escribe en SSPBUF, y


se borra cuando los 8 bits han sido desplazados fuera.

9.2.11.2 INDICADOR DE ESTADO WCOL

Si el usuario escribe el SSPBUF cuando una transmisin todava est en desarrollo (an se est
sacando un byte de datos), WCOL se activa y el contenido del buffer no variar (no se produce
escritura). WCOL debe borrarse por software.

9.2.11.3 INDICADOR DE ESTADO ACKSTAT

En modo transmisin, el bit ACKSTAT (SSPCON2<6>) se borra cuando el servidor ha enviado


un reconocimiento ( ACK = 0), y se activa cuando el servidor no hace el reconocimiento
( ACK = 1). Un servidor enva un reconocimiento cuando reconoce su direccin (incluso una
llamada general), o cuando el servidor ha recibido correctamente su dato.
Microcontrolador PIC16F876 Pgina 67
Microcontrolador PIC16F876 Pgina 68

9.2.12 RECEPCIN EN MODO MAESTRO I2C

La recepcin en modo maestro se habilita programando el bit de habilitacin de modo


recepcin, RCEN (SSPCON2<3>).

Nota: El mdulo SSP debe estar en estado desconectado antes de que el bit RCEN se active o el
bit RCEN se despreciar.

El generador de baudios comienza la cuenta, y, en cada pasada, el estado de la patilla SCL


cambiar y el dato se desplazar en el registro SSPSR. Despus del octavo flanco de bajada, el
indicador de habilitacin de recepcin se borra automticamente, el contenido de SSPSR se
carga en SSPBUF, el indicador BF se activa, el bit SSPIF se activa, y el generador de baudios se
detiene, manteniendo baja SCL. El SSP queda de nuevo en estado desconectado, esperando la
prxima orden. Cuando se lee el buffer SSPBUF por la CPU, el indicador BF se borra
automticamente. El usuario puede ahora enviar un bit de reconocimiento, al final de la
recepcin, activando el bit de habilitacin de secuencia de reconocimiento ACKEN
(SSPCON2<4>).

9.2.12.1 INDICADOR BF DE ESTADO

En operaciones de recepcin, BF se activa cuando un byte de direccin o dato se carga en


SSPBUF desde SSPSR. Se borra cuando se lee SSPBUF.

9.2.12.2 INDICADOR SSPOV DE ESTADO

En operaciones de recepcin, SSPOV se activa cuando se han recibido los 8 bits en SSPSR y el
indicador BF est activado por una recepcin previa.

9.2.12.3 INDICADOR WCOL DE ESTADO

Si el usuario escribe SSPBUF cuando una recepcin est desarrollndose, WCOL se activa y el
contenido del buffer no cambia (no se realiza la escritura).
Microcontrolador PIC16F876 Pgina 69
Microcontrolador PIC16F876 Pgina 70

9.2.13 OSCILOGRAMA DE LA SECUENCIA DE RECONOCIMIENTO

Para habilitar una secuencia de reconocimiento hay que activar el bit ACKEN (SSPCON2<4>),
de habilitacin de la secuencia. Cuando este bit est activado, la patilla SCL se coloca a nivel
bajo y el contenido del bit de reconocimiento de dato aparece en la patilla SDA. Si el usuario
desea generar un reconocimiento, el bit ACKDT debe borrarse; si no, se activar el bit ACKDT
antes del inicio de la secuencia de reconocimiento. El generador de baudios desarrollar una
pasada, y la patilla SCL se libera (polarizada alta). Cuando la patilla SCL se escruta en alto, el
generador de baudios cuenta una vuelta (TBRG). La patilla SCL es ahora llevada a nivel bajo. A
continuacin, el bit ACKEN se borra automticamente, el generador de baudios se desconecta y
el mdulo SSP va al modo desconectado (Figura 9-16).

9.213.1 INDICADOR WCOL DE ESTADO

Si el usuario escribe SSPBUF cuando una secuencia de reconocimiento no ha terminado,


WCOL se activa y el contenido del buffer no cambiar (la escritura se desprecia).

9.2.14 OSCILOGRAMA DE LA CONDICIN DE STOP

Un bit de stop se asegura en la patilla SDA, al final de la recepcin-transmisin, programando el


bit PEN (SSPCON2<2>) de habilitacin de la secuencia de Stop. Al final de la recepcin-
transmisin, la lnea SCL se mantiene baja despus del noveno flanco de bajada. Cuando el bit
PEN se programa a 1, el maestro asegurar el nivel bajo de la lnea SDA. Al verse en bajo la
lnea SDA, el generador de baudios se recargar y comenzar su decremento hasta 0. Al
finalizar la cuenta, la patilla SCL se pondr a nivel alto, y una vuelta del generador de baudios
despus (TBRG) la patilla SDA ser liberada. Cuando sta se escrute en alto mientras SCL est en
1, el bit P (SSPSTAT<4>) se activar. Un tiempo TBRG despus, el bit PEN se borra y el bit
SSPIF se activa (Figura 9-17).

Siempre que el microprograma decide tomar el control del bus, l primero determina si el bus
est ocupado, chequeando los bits S y P en el registro SSPSTAT. Si el bus est ocupado,
entonces la CPU puede ser interrumpida cuando se detecta un bit de Stop (indicador de bus
libre).
Microcontrolador PIC16F876 Pgina 71

9.2.14.1 INDICADOR DE ESTADO WCOL

Si el usuario escribe SSPBUF cuando est desarrollndose una secuencia de STOP, el bit
WCOL se activa, y el contenido del buffer no cambia (se pierde la escritura).

9.2.15 ARBITRAJE DEL RELOJ

El arbitraje del reloj sucede cuando el maestro, durante una recepcin, transmite, o repite
condicin de start-stop, liberando la patilla SCL (SCL queda en estado flotante). En este
momento el generador de baudios (BRG) se suspende de contaje hasta que la patilla SCL se vea
realmente a nivel alto. Cuando esto suceda, el BRG se recarga con el contenido de
SSPADD<6:0> y comienza el contaje. Esto asegurar que el tiempo en alto de SCL ser, al
menos, una vuelta de contaje de BRG, en el caso de que el reloj se fuerce a nivel bajo por un
dispositivo externo (Figura 9-18).
Microcontrolador PIC16F876 Pgina 72

9.2.16 OPERACIN SLEEP (ALERTA)

Mientras se est en modo sleep, el mdulo I2C puede recibir direcciones o datos, y cuando
coincida la direccin o se complete una transferencia de byte, se saca al procesador del estado
sleep (si la interrupcin SSP est habilitada).

9.2.17 EFECTOS DE UN RESET

Un reset inhibe al mdulo SSP y determina la transferencia actual.

9.2.18 COMUNICACIONES MULTI-MAESTRO, CONFLICTO DE BUS Y ARBITRAJE


DE BUS

El funcionamiento del modo Multi-Maestro se consigue por arbitraje de bus. Cuando el maestro
saca bits de direccin o datos hacia la patilla SDA, el arbitraje se produce cuando el maestro
abandona SDA, dejndola flotante (alto). Si en este momento otro maestro coloca un 0 en esta
lnea, como el dato esperado sobre SDA es un 1 y, se detectar conflicto de bus. El maestro
programar el indicador de interrupcin por conflicto de bus, BCLIF, e inicializar el puerto I2C
llevndolo al estado desconectado (Figura 9-19).

Si est en desarrollo una transmisin cuando sucede el conflicto de bus, la transmisin se


detiene, el bit BF se borra, se liberan las lneas SDA y SCL, y SSPBUF puede volver a
escribirse. Cuando se utilice la rutina de servicio de interrupcin de conflicto de bus, y est libre
el bus I2C, el usuario puede continuar la comunicacin confirmando una condicin Start.

Si una condicin Start, Repeticin de Start, Stop, o Reconocimiento, est en desarrollo cuando
sucede el conflicto de bus, la condicin se detiene, las lneas SDA y SCL se liberan, y los
respectivos bits de control, en el registro SSPCON2, se borran. Cuando el usuario entra en la
rutina de servicio de la interrupcin del conflicto de bus, y el bus I2C est libre, puede continuar
la comunicacin, asegurando una condicin Start.

El maestro continuar la supervisin de las patillas SDA y SCL, y si sucede una condicin de
Stop, se activar el bit SSPIF.

Una escritura sobre SSPBUF arrancar la transmisin del dato, con el primer bit de ste,
independientemente de donde se qued el transmisor cuando se produjo el conflicto de bus.

En modo multi-maestro, la generacin de la interrupcin en la deteccin de las condiciones de


start o stop, permite determinar la disponibilidad del bus. El control del bus I2C puede realizarse
cuando se active el bit P, en el registro SSPSTAT, o se borren S y P, con el bus desconectado.
Microcontrolador PIC16F876 Pgina 73

9.2.18.1 CONFLICTO DE BUS DURANTE UNA CONDICIN DE START

Durante una condicin de START, un conflicto de bus se produce, si:


a) Las lneas SDA y SCL se ven en 0 al inicio de la condicin de START (Figura 9-20).
b) SCL se detecta baja antes de asegurar el nivel bajo de SDA (Figura 9-21).

Durante una condicin de Start, el conjunto de patillas SDA y SCL se supervisan si, la patilla SDA est
ya en bajo, o la patilla SCL est ya en bajo. Entonces: se suspende la condicin de START, se
activa el bit indicador BCLIF, y se inicializa el mdulo I2C, quedando en estado desconectado
(Figura 9-20).

La condicin Start comienza con la liberacin de las patillas SDA y SCL. Cuando la patilla
SDA se lee en 1, el generador de baudios se carga desde SSPADD<6:0> y comienza el contaje
decremental hasta 0. Si la patilla SCL se lee baja cuando SDA est en 1, sucede un conflicto de
bus porque est asumido que otro maestro est intentando enviar un 1 durante la condicin de
Start.

Si la patilla SDA se lee baja durante este contaje, el generador de baudios se inicializa y la lnea
SDA se libera enseguida (Figura 9-22). Si, no obstante, se lee un 1 en la patilla SDA, esta patilla
se pone baja al final de la cuenta de BRG. El generador de baudios se carga, entonces, y
comienza la cuenta a 0. Durante este tiempo, si la patilla SCL se lee en 0, el conflicto de bus no
se producir. Al final de la cuenta de BRG, la patilla SCL se queda en nivel bajo.

Nota: La razn de que el conflicto de bus no sea un factor, durante la condicin de START, es
que no pueden dos maestros, simultneamente, asegurar una condicin de START. Por
consiguiente, un maestro asegurar siempre la patilla SDA antes que el otro. Esta condicin no
provoca conflicto de bus, porque los dos maestros estarn autorizados a decidir la primera
direccin siguiente a la condicin de START. Si la direccin es la misma, la decisin ser,
permitir continuar con la parte del dato, o condiciones de Repeticin de START o STOP.
Microcontrolador PIC16F876 Pgina 74
Microcontrolador PIC16F876 Pgina 75

9.2.18.2 CONFLICTO DE BUS DURANTE LA CONDICIN DE REPETICIN DE START.

Durante una condicin de Repeticin de Start, un conflicto de bus sucede si:


a) Se observa un nivel bajo en SDA cuando SCL va de bajo a alto.
b) SCL se pone en 0 antes que se asegure el 0 en SDA. Esto indicara que otro maestro
esta intentando transmitir un 1.

Cuando el usuario deja la patilla SDA y sta queda flotante, el generador de baudios se carga
con SSPADD<6:0> y comienza la cuenta a cero. La patilla SCL se libera entonces, y cuando se
observa en alto, la patilla SDA se memoriza. Si SDA es 0, ha ocurrido un conflicto de bus (por
ejemplo, que otro maestro est intentando transmitir un 0). Si, por otra parte, SDA se lee en 1,
el generador de baudios se recarga y comienza el contaje. Si SDA transita de alto a bajo antes
que el BRG termine su cuenta, no existir conflicto de bus, porque no hay dos maestros
accediendo a SDA al mismo tiempo.

Sin embargo, si SCL cambia de alto a bajo antes que el BRG termine su cuenta, y SDA no est
estable, sucede un conflicto de bus. En cuyo caso, otro maestro est intentando transmitir un 1
durante la condicin de Repeticin de Start.

Si al final del tiempo de BRG, el conjunto SDA y SCL estn todava en alto, la patilla SDA se
pone a 0 y el BRG se recarga y comienza su cuenta. Al final de sta, independientemente del
estado de la patilla SCL, sta se pone a 0 y se completa la condicin de Repeticin de Start
(Figura 9-23).
Microcontrolador PIC16F876 Pgina 76

9.2.18.3 CONFLICTO DE BUS DURANTE UNA CONDICIN DE STOP

Durante una condicin de Stop, ocurre un conflicto de bus, si:


a) Despus de que la patilla SDA ha sido liberada y puesta en estado flotante, SDA se
observa en 0 despus del final de la cuenta de BRG.
b) Despus de liberar la patilla SCL, sta se lee en 0 antes de que SDA est en 1.

La condicin de STOP comienza fijando un 0 en SDA. Cuando sta se lea en este valor, la
patilla SCL se deja flotante. Si esta patilla de observa en 1 (arbitraje de reloj), el BRG se carga
con SSPADD<6:0> y comienza el contaje. Al finalizar ste, se memoriza el valor de SDA. Si
estuviese en 0, un conflicto de bus ha tenido lugar. Esto habr sucedido porque otro maestro
intenta enviar un 0. Si SCL se lee como 0 antes de que SDA quede flotante, no hay conflicto de
bus. Este es el caso de que otro maestro intente enviar un 0 (Figura 9-25).
Microcontrolador PIC16F876 Pgina 77

9.3 Consideraciones de conexin del bus I2C

Para dispositivos de modo estndar del bus I2C, los valores de resistores Rp y Rs, en la Figura
9-27, dependen de los siguientes parmetros:
Tensin de alimentacin.
Capacidad del bus.
Nmero de dispositivos conectados (corriente de entrada + corriente de fuga).

La tensin de alimentacin limita el mnimo valor del resistor Rp, debido al mnimo valor
especificado de corriente de carga de 3 mA, para una tensin de salida especificada de V OL mx =
0,4V. Por ejemplo, con una tensin de alimentacin de VDD = 5V +/- 10%, y una VOL mx = 0,4V
para 3 mA,

(5,5 0,4)
Rpmn 1,7 K
0,003

VDD en funcin de Rp se muestra en la Figura 9-27. El margen de ruido deseado de 0,1VDD


para el nivel bajo, limita el mximo valor de Rs. Opcionalmente se pueden agrupar en serie
resistores para mejorar la susceptibilidad a las descargas electrostticas (ESD).

La capacidad del bus es la capacidad total del cableado, conectores y patillas. Esta capacidad
limita el valor mximo de Rp, debido al tiempo especificado de subida (Figura 9-27).

El bit SMP es el habilitador del control del tiempo de subida. Este bit est en el registro
SSPSTAT, y controla la velocidad de subida en las patillas de entrada-salida cuando se trabaja
en modo I2C (maestro o servidor).
Microcontrolador PIC16F876 Pgina 78

10.0 TRANSMISOR RECEPTOR ASNCRONO SNCRONO UNIVERSAL (USART)

El mdulo USART es uno de los dos mdulos de E-S serie. (La USART es tambin conocida
como Interface de Comunicaciones Serie (SCI).) La USART puede configurarse como sistema
asncrono full duplex, que puede comunicarse con dispositivos perifricos como terminales
CRT y ordenadores personales, o puede configurarse como sistema sncrono half duplex, que
puede comunicarse con perifricos tales como circuitos integrados convertidores A/D y D/A,
EEPROMs serie, etc.

La USART puede configurarse en los siguientes modos:


Asncrono (full duplex).
Sncrono-maestro (half duplex).
Sncrono-servidor (half duplex).

El bit SPEN (RCSTA<7>) y los bits TRISC<7:6>) deben ser programados, en ese orden, para
configurar las patillas RC6/TX/CK y RC7/RX/DT como USART.

El mdulo USART tiene, tambin, un multiprocesador de comunicacin capaz de usar y


detectar 9 bits de direccin.

REGISTRO 10-1: TXSTA: REGISTRO DE CONTROL Y ESTADO DE TRANSMISIN


(DIRECCIN 98h)

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


CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0 en
lectura
-n = Valor del reset POR

bit 7: CSRC: Bit de seleccin de origen de reloj.


Modo Asncrono
Indiferente.
Modo Sncrono
1 = Modo Maestro (reloj interno procedente de BRG).
0 = Modo Servidor (reloj externo).
bit 6: TX9: Bit de habilitacin de transmisin con 9 bits.
1 = Seleccin de transmisin con 9 bits.
0 = Seleccin de transmisin con 8 bits.
bit 5: TXEN: Bit de habilitacin de transmisin.
1 = Transmisin habilitada.
0 = Transmisin inhibida.
Nota: SREN/CREN sustituyen a TXEN, en modo Sncrono.
bit 4: SYNC: Bit de seleccin de modo USART.
1 = Modo Sncrono.
0 = Modo Asncrono.
bit 3: Sin implementar: Se lee como 0.
bit 2: BRGH: Bit de seleccin de velocidad de baudios.
Modo Asncrono
1 = Alta velocidad.
0 = Baja velocidad.
Modo Sncrono
No usado en este modo.
bit 1: TRMT: Bit de estado del registro de desplazamiento de transmisin.
1 = TSR vaco.
0 = TSR lleno.
bit 0: TX9D: Noveno bit del dato transmitido. Puede ser el bit de paridad.
Microcontrolador PIC16F876 Pgina 79

REGISTRO 10-2: RCSTA: REGISTRO DE CONTROL Y ESTADO DE RECEPCIN


(DIRECCIN 18h)

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


SPEN RX9 SREN CREN ADDEN FERR OERR RX9D R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0 en lectura
-n = Valor del reset POR

bit 7: SPEN: Bit de habilitacin de puerto serie.


1 = Puerto Serie habilitado (configurar RC7/RX/DT y RC6/TX/CK como patillas de puerto serie).
0 = Puerto Serie inhibido.
bit 6: RX9: Bit de habilitacin de recepcin con 9 bits.
1 = Seleccin de recepcin con 9 bits.
0 = Seleccin de recepcin con 8 bits.
bit 5: SREN: Bit de habilitacin de recepcin simple.
Modo Asncrono
Irrelevante.
Modo Maestro Sncrono
1 = Recepcin simple habilitada.
0 = Recepcin simple inhibida.
Este bit se borra cuando se completa la recepcin.
Modo Servidor Sncrono
No se usa en este modo.
bit 4: CREN: Bit de habilitacin de recepcin continua.
Modo Asncrono
1 = Habilita la recepcin continua.
0 = Inhibe la recepcin continua.
Modo Sncrono
1 = Habilita recepcin continua hasta borrado de CREN (ste sustituye a SREN).
0 = Inhibe la recepcin continua.
bit 3: ADDEN: Bit de habilitacin de deteccin de direccin.
Modo Asncrono de 9 bits (RX9 = 1)
1 = Habilita la deteccin de la direccin, habilita la interrupcin y carga el buffer receptor cuando
RSR<8> = 1
0 = Inhibe la deteccin de la direccin, todos los bytes se reciben, y el noveno bit puede usarse como
paridad
bit 2: FERR: Bit de error por inconcordancia (framing).
1 = Error de concordancia (bit STOP=0). Puede cambiarse leyendo el registro RCREG
y recibiendo un prximo byte vlido
0 = No existe error.
bit 1: OERR: Bit de error por desbordamiento.
1 = Error de desbordamiento. Puede borrarse escribiendo 0 en el bit CREN.
0 = No existe error de desbordamiento.
bit 0: RX9D: Noveno bit del dato recibido. Puede ser el bit de paridad.
Microcontrolador PIC16F876 Pgina 80

10.1 Generador de baudios (BRG) de la USART

El BRG sirve a los modos sncrono y asncrono de la USART. Es un contador de 8 bits,


especializado en generar la velocidad de circulacin de los bits salientes o entrantes. El registro
SPBRG controla el perodo del temporizador independiente de 8 bits. En modo asncrono, el bit
BRGH (TXSTA<2>) es el encargado de controlar la velocidad; en modo sncrono, este bit se
ignora. La tabla 10-1 muestra la frmula para el clculo de la velocidad de los baudios para
diferentes modos de la USART, solamente aplicada en modo maestro (reloj interno).

Elegidos una velocidad y Fosc dadas, el valor entero ms prximo para SPBRG puede
calcularse usando la frmula en la tabla 10-1, pudiendo, adems, determinarse el valor del error
de velocidad existente para ese valor obtenido.

Ser interesante el uso de alta velocidad (BRGH = 1), aun para menores valores de reloj. Esto
es as porque la ecuacin Fosc / [16(X + 1)] puede reducir el error de velocidad en ciertos
casos.

Escribir un nuevo valor en el registro SPBRG provoca el borrado del temporizador BRG. Esto
asegurar que el BRG no espere al final del tiempo antes de sacar una nueva velocidad.

10.1.1 CAPTURA

El dato en la patilla RC7/RX/DT se captura tres veces por un circuito detector de mayora, que
determina el valor alto o bajo del dato presente en la patilla RX.

TABLA 10-1: FRMULA PARA CALCULAR LA VELOCIDAD


SYNC BRGH = 0 (Baja velocidad) BRGH = 1 (Alta velocidad)
0 Velocidad (Asncrono) = Fosc / [64 (X + 1)] Velocidad = Fosc / [16 (X + 1)]
1 Velocidad (Sncrono) = Fosc / [4 (X + 1)] No utilizado
X = valor en SPBRG (0 a 255)

TABLA 10-2: REGISTROS ASOCIADOS AL GENERADOR DE BAUDIOS


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
POR, BOR otros resets

98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x
99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en el mdulo BRG.
Microcontrolador PIC16F876 Pgina 81

TABLA 10-3: BAUDIOS EN MODO ASNCRONO (BRG = 0)


Fosc = 20 Mhz Fosc = 16 Mhz Fosc = 10 Mhz
BAUD Valor Valor Valor
% % %
(K) KBAUD decimal KBAUD decimal KBAUD decimal
ERROR ERROR ERROR
SPBRG SPBRG SPBRG
0,3 --- --- --- --- --- --- --- --- ---
1,2 1,221 1,75 255 1,202 0,17 207 1,202 0,17 129
2,4 2,404 0,17 129 2,404 0,17 103 2,404 0,17 64
9,6 9,766 1,73 31 9,615 0,16 25 9,766 1,73 15
19,2 19,531 1,72 15 19,231 0,16 12 19,531 1,72 7
28,8 31,250 8,51 9 27,778 3,55 8 31,250 8,51 4
33,6 34,722 3,34 8 35,714 6,29 6 31,250 6,99 4
57,6 62,500 8,51 4 62,500 8,51 3 52,083 9,58 2
ALTA 1,221 --- 255 0,977 --- 255 0,610 --- 255
BAJA 312,500 --- 0 250,000 --- 0 156,250 --- 0

Fosc = 4 Mhz Fosc = 3,6864 Mhz


BAUD Valor Valor
% %
(K) KBAUD decimal KBAUD decimal
ERROR ERROR
SPBRG SPBRG
0,3 0,300 0 207 0,301 0,33 185
1,2 1,202 0,17 51 1,216 1,33 46
2,4 2,404 0,17 25 2,432 1,33 22
9,6 8,929 6,99 6 9,322 2,90 5
19,2 20,833 8,51 2 18,643 2,90 2
28,8 31,250 8,51 1 --- --- ---
33,6 --- --- --- --- --- ---
57,6 62,500 8,51 0 55,930 2,90 0
ALTA 0,244 --- 255 0,218 --- 255
BAJA 62,500 --- 0 55,930 --- 0

TABLA 10-4: BAUDIOS EN MODO ASNCRONO (BRG = 1)


Fosc = 20 Mhz Fosc = 16 Mhz Fosc = 10 Mhz
BAUD Valor Valor Valor
% % %
(K) KBAUD decimal KBAUD decimal KBAUD decimal
ERROR ERROR ERROR
SPBRG SPBRG SPBRG
0,3 --- --- --- --- --- --- --- --- ---
1,2 --- --- --- --- --- --- --- --- ---
2,4 --- --- --- --- --- --- 2,441 1,71 255
9,6 9,615 0,16 129 9,615 0,16 103 9,615 0,16 64
19,2 19,231 0,16 64 19,231 0,16 51 19,531 1,72 31
28,8 29,070 0,94 42 29,412 2,13 33 28,409 1,36 21
33,6 33,784 0,55 36 33,333 0,79 29 32,895 2,10 18
57,6 59,524 3,34 20 58,824 2,13 16 56,818 1,36 10
ALTA 4,883 --- 255 3,906 --- 255 2,441 --- 255
BAJA 1250,000 --- 0 1000,000 --- 0 625,000 --- 0

Fosc = 4 Mhz Fosc = 3,6864 Mhz


BAUD Valor Valor
% %
(K) KBAUD decimal KBAUD decimal
ERROR ERROR
SPBRG SPBRG
0,3 --- --- --- --- --- ---
1,2 1,202 0,17 207 1,203 0,25 185
2,4 2,404 0,17 103 2,406 0,25 92
9,6 9,615 0,16 25 9,727 1,32 22
19,2 19,231 0,16 12 18,643 2,90 11
28,8 27,798 3,55 8 27,965 2,90 7
33,6 35,714 6,29 6 31,960 4,88 6
57,6 62,500 8,51 3 55,930 2,90 3
ALTA 0,977 --- 255 0,874 --- 255
BAJA 250,000 --- 0 273,722 --- 0
Microcontrolador PIC16F876 Pgina 82

10.2 USART en modo Asncrono

En este modo, la USART emplea el formato estndar no retorno a cero (NRZ) (un bit de start,
ocho o nueve bits de datos y un bit de stop). El formato ms comn de datos es el de 8 bits. Se
utilizar un contador especializado, llamado generador de baudios, para obtener las frecuencias
del oscilador. La USART transmite y recibe, en primer lugar, el bit menos significativo (LSb).
Los bloques transmisor y receptor de la USART son funcionalmente independientes, pero usan
el mismo formato de datos y la misma velocidad de transferencia. El generador de baudios
produce una seal de reloj cada x16 o x64 de la velocidad de desplazamiento de bit,
dependiendo del bit BRGH (TXSTA<2>). La paridad no est soportada por el hardware, pero
puede implementarse por software (y almacenarse como el noveno bit del dato). El modo
Asncrono se para durante el estado SLEEP, y se selecciona borrando el bit llamado SYNC
(TXSTA<4>).

El mdulo Asncrono USART consta de los siguientes elementos importantes:


Generador de velocidad de baudios (generador de baudios o BRG).
Circuito de captura.
Transmisor asncrono.
Receptor asncrono.

10.2.1 TRANSMISOR ASNCRONO USART

El diagrama a bloques del transmisor USART se muestra en la Figura 10-1. El corazn del
transmisor es el registro de desplazamiento de transmisin serie (TSR). El registro de
desplazamiento obtiene su dato del buffer de transmisin de lectura-escritura, TXREG. El
registro TXREG no se carga hasta que el bit de STOP, de la carga previa, ha sido transmitido.
Tan pronto como el bit de STOP se transmite, el TSR se carga con el nuevo dato proveniente
del registro TXREG (si est disponible). Enseguida que el registro TXREG transmite su
contenido al registro TSR (sucede en un ciclo TCY), el registro TXREG queda vaco, y el bit
indicador TXIF (PIR1<4>) se activa. Esta interrupcin puede habilitarse o inhibirse activando o
borrando, respectivamente, el bit de habilitacin TXIE (PIE1<4>). El bit indicador se activar,
independientemente del estado del bit de habilitacin TXIE, y no podr borrarse por software.
Solamente se borrar cuando un nuevo dato se cargue en el registro TXREG. Mientras el bit
indicador TXIF seala el estado del registro TXREG, otro bit, TRMT (TXSTA<1>), muestra el
estado del registro TSR. El bit de estado TRMT es de lectura, y se activa cuando el registro TSR
est vaco. Ninguna interrupcin est unida a este bit, de manera que el usuario debe consultar
este bit para determinar si el registro TSR est vaco.

Nota 1: El registro TSR no pertenece al mapa de memoria, por lo que no est disponible para el
usuario.
Nota 2: El indicador TXIF se activa cuando est activo el bit de habilitacin TXEN. TXIF se
borra cargando el registro TXREG.

La transmisin se habilita activando el bit de habilitacin TXEN (TXSTA<5>). La transmisin


actual no ocurrir, hasta que el registro TXREG sea cargado con el dato, y el generador de
baudios (BRG) haya producido el reloj de desplazamiento (Figura 10-2). La transmisin puede
detenerse, primero cargando el registro TXREG, y activando despus el bit de habilitacin
TXEN. Normalmente, cuando la transmisin se ha iniciado primero, el registro TSR est vaco.
En este punto, transferir al registro TXREG dar como resultado una transferencia inmediata de
aqul a TSR, quedando un registro TXREG vaco. Por esto, es posible una transferencia en
oposicin (back-to-back) (Figura 10-3). El borrado de TXEN durante una transmisin provocar
el abandono de sta y la inicializacin del transmisor. Como resultado, la patilla RC6/TX/CK
quedar en alta impedancia.
Microcontrolador PIC16F876 Pgina 83

Para seleccionar una transmisin a 9 bits, el bit TX9 (TXSTA<6>) deber activarse, y el noveno
bit deber escribirse en TX9D (TXSTA<0>). El noveno bit se escribir antes de cargar los 8 bits
de datos en el registro TXREG. Esto es necesario, porque al escribir un dato en el registro
TXREG puede tener lugar una transferencia inmediata del dato al registro TSR (si TSR est
vaco). En este caso, se habr cargado un dato incorrecto de nueve bits en el registro TSR.

Los pasos a seguir para activar una transmisin Asncrona, son:


1. Inicializar el registro SPBRG para la adecuada cadencia de bits. Si se desea un valor
alto, activar el bit BRGH. (Seccin 10.1)
2. Habilitar el puerto serie asncrono borrando el bit SYNC y activando el bit SPEN.
3. Si se desea interrupcin, activar el bit de habilitacin TXIE.
4. Si se desea una transmisin en 9 bits, activar el bit TX9.
5. Habilitar la transmisin activando el bit TXEN, que tambin activar el bit TXIF.
6. Si se selecciona transmisin a 9 bits, el noveno bit se cargar en TX9D.
7. Cargar el dato en el registro TXREG (se inicia la transmisin).
Microcontrolador PIC16F876 Pgina 84

TABLA 10-5: REGISTROS ASOCIADOS A LA TRANSMISIN ASNCRONA


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR, otros
BOR resets

OCh PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
18h RCSTA SPEN RX9 SREN CREN --- FERR OERR RX9D 0000 -00x 0000 -00x
19h TXREG Registro Transmisor USART 0000 0000 0000 0000
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010
99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en transmisin asncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de mantenerse a cero.

10.2.2 RECEPTOR ASNCRONO USART

En la Figura 10-4 se muestra el diagrama de bloques del receptor. El dato se recibe en la patilla
RC7/RX/DT y se conduce hasta el bloque Data Recovery (Recuperacin de dato). Este bloque
es un circuito desplazador de alta velocidad que opera con una cadencia x16, considerando que
el desplazador del receptor serie principal opera a Fosc.

Al seleccionar el modo asncrono, la recepcin se habilita activando el bit CREN (RCSTA<4>).

El corazn del receptor es el registro de desplazamiento serie de recepcin (RSR). Despus de la


captura del bit de STOP, el dato recibido en el registro RSR se transfiere al registro RCREG (si
est vaco). Si la transferencia se completa, se activa el bit indicador RCIF (PIR1<5>). La
interrupcin actual puede habilitarse-inhibirse, activando-borrando el bit de habilitacin RCIE
(PIE1<5>). El bit RCIF es de lectura, y se borrar por hardware. Esto se producir cuando el
registro RCREG se ha ledo y queda vaco. El RCREG es un registro de doble buffer (una FIFO
de dos posiciones). Por esto es posible, simultneamente, cargar RCREG desde la CPU,
transferir a RCREG desde el RSR, y comenzar a desplazar en RSR desde la patilla RX. Al
detectar el bit de STOP que entra por la patilla RX, si el registro RCREG est todava lleno, se
activar el bit de error por desbordamiento OERR (RCSTA<1>). En este caso, la palabra
existente en RSR se perder. El registro RCREG puede leerse dos veces seguidas para recuperar
los dos bytes de la FIFO. El bit OERR ser borrado por software, borrando CREN. Si el bit
OERR est en 1, se inhibe la transferencia desde el registro RSR hasta el registro RCREG, por
lo que es vital borrar el bit OERR, si estuviese activado. El error de concordancia FERR
Microcontrolador PIC16F876 Pgina 85

(RCSTA<2>) se activa si un bit de STOP se lee en nivel bajo. El bit FERR y el noveno bit
recibido se memorizan en el mismo canal que el dato recibido. Leyendo RCREG se cargarn los
bits RX9D y FERR con los nuevos valores. Por consiguiente, es necesario que el usuario lea el
registro RCSTA antes de leer el registro RCREG, para no perder los antiguos valores de FERR
y RX9D.

Para programar Recepcin Asncrona, hay que seguir los pasos siguientes:
1. Inicializar el registro SPBRG con la apropiada cadencia. Si se desea alta velocidad,
poner a 1 el bit BRGH. (Seccin 10.1).
2. Habilitar el puerto serie asncrono, borrando el bit SYNC y activando el bit SPEN.
3. Si se desea interrupcin, activar el bit RCIE.
4. Si se desea recepcin de 9 bits, activar RX9.
5. Habilitar la recepcin, activando el bit CREN.
6. El indicador RCIF se activar cuando se complete la recepcin. Esto generar una
interrupcin, si est activado el bit RCIE.
7. Leer el registro RCSTA para obtener el valor del noveno bit (si est habilitado el modo)
y determinar si ha existido error durante la recepcin.
8. Leer los 8 bits del dato recibido, leyendo el registro RCREG.
9. Si ha ocurrido algn error, cancelar ste borrando el bit de habilitacin CREN.
Microcontrolador PIC16F876 Pgina 86

TABLA 10-6: REGISTROS ASOCIADOS A LA RECEPCIN ASNCRONA


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR, otros
BOR resets

OCh PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
18h RCSTA SPEN RX9 SREN CREN --- FERR OERR RX9D 0000 -00x 0000 -00x
1Ah RCREG Registro Receptor USART 0000 0000 0000 0000
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010
99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepcin asncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de mantenerse a cero.

10.2.3 PROGRAMACIN DE MODO 9 BITS CON DETECCIN DE DIRECCIN

El C puede trabajar con varios servidores conectados a la misma lnea serie. La forma de
seleccionar a uno cualquiera es por el envo de un byte, que ser interpretado por el servidor
como una direccin identificativa debido a que en el envo de esta direccin el noveno bit estar
a 1. As pues, los receptores debern programarse inicialmente con recepcin de 9 bits y
deteccin de direccin. Esto pondr a 1 los bits RX9 y ADDEN de la figura 10.6. Cuando llegue
un byte en serie, si el bit noveno (RSR<8> de la figura 10.6) es 1, debido a la accin de la
puerta AND-3, el byte recibido en RSR se transferir al registro RCREG. Esto provocar la
interrupcin de recepcin (si estuviese habilitada) y el software del receptor mirar el registro
RCSTA para ver si ha habido error y si el noveno bit es 1. Si es as, el byte recibido se interpreta
como el cdigo de una direccin, y se comparar con el cdigo intrnseco de ese receptor. Si
hay coincidencia, se borrar ADDEN para que los prximos bytes enviados a l puedan llegar
hasta RCREG por la puerta OR de ceros (ya que ahora el noveno bit enviado por el maestro ser
un 0, indicativo de byte de datos). A partir de este momento, cada llegada de byte supondr una
interrupcin para el receptor, que se limitar a tomar los datos enviados.

Como a cada recepcin el software receptor comprobar el nivel de RSR<8>, cuando ste sea 1
(porque el transmisor desea enviar direccin), el receptor comprobar que el byte recibido
corresponde o no a su direccin intrnseca. Si la direccin recibida es la suya, todo seguir igual
y el receptor tomar los bytes enviados. Si al comprobar el byte de direccin sta no coincidiese
con la suya, el receptor sabe que los prximos envos de datos no van a ser para l. Pondr su bit
ADDEN a 1 para impedir que se carguen en su RCREG bytes de datos que no son para l y, de
esta forma, se impide que se le interrumpa en cada dato recibido. (Obsrvese que si ponemos a 1
el bit ADDEN la puerta OR de ceros dar 0 de salida pero la NAND-3 puede dar 1, y con ello
permitir la entrada del byte a RCREG cuando se reciba un byte de direccin, que tendr
RSR<8> a 1.) Con todo lo explicado se comprende que ahora, el receptor, solamente cargar un
byte en RCREG cuando aqul lleve el noveno bit a 1. Cuando esto ocurra, de nuevo se
comprobar el byte identificativo de direccin para ver si vuelve a ser seleccionado.

Cuando se programe Recepcin Asncrona con Habilitacin de Deteccin de Direccin,


resptense los siguientes pasos:
1. Inicializar el registro SPBRG con la apropiada cadencia. Si se desea alta velocidad,
poner a 1 el bit BRGH. (Seccin 10.1).
Microcontrolador PIC16F876 Pgina 87

2. Habilitar el puerto serie asncrono, borrando el bit SYNC y activando el bit SPEN.
3. Si se desea interrupcin, activar el bit RCIE.
4. Si se desea recepcin de 9 bits, activar RX9.
5. Activar ADDEN para habilitar la deteccin de la direccin.
6. Habilitar la recepcin, activando el bit CREN.
7. El indicador RCIF se activar cuando se complete la recepcin. Esto generar una
interrupcin, si est activado el bit RCIE.
8. Leer el registro RCSTA para obtener el valor del noveno bit y determinar si ha existido
error durante la recepcin.
9. Leer los 8 bits del dato recibido, leyendo el registro RCREG. Esto permitir saber si el
dispositivo est siendo direccionado.
10. Si ha ocurrido algn error, cancelarlo, borrando el bit de habilitacin CREN.
11. Si el dispositivo ha sido direccionado, borrar el bit ADDEN para permitir que sean
ledos los bytes de dato y direccin en el buffer receptor, e interrumpir a la CPU.
Microcontrolador PIC16F876 Pgina 88

TABLA 10-7: REGISTROS ASOCIADOS A LA RECEPCIN ASNCRONA


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
POR, BOR otros resets

OCh PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x

1Ah RCREG Registro Receptor USART 0000 0000 0000 0000


(1)
8Ch PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010

99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000

x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepcin asncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de mantenerse a cero.

10.3 USART en modo Maestro Sncrono

En el modo Maestro Sncrono, el dato se transmite en half-duplex (no pueden darse,


simultneamente, la transmisin y la recepcin). Cuando se transmite un dato, la recepcin
queda inhibida, y viceversa. El modo Sncrono se programa activando el bit SYNC
(TXSTA<4>). Adems, hay que activar el bit de habilitacin SPEN (RCSTA<7>) y, por este
orden, configurar las patillas RC6/TX/CK y RC7/RX/DT, la lnea de reloj CK y la de dato DT.
El modo Maestro indica que el procesador transmite el reloj maestro en la lnea CK. El modo
Maestro se programa activando el bit CSRC (TXSTA<7>).

10.3.1 TRANSMISIN DE USART EN MODO MAESTRO SNCRONO

El diagrama de bloques del transmisor de la USART se muestra en la Figura 10-6. El corazn


del transmisor es el registro de desplazamiento de transmisin serie TSR. El registro de
desplazamiento obtiene su dato del buffer del registro TXREG, quien, a su vez, obtendr el dato
por software. El registro TSR no se carga hasta que se ha transmitido el ltimo bit del dato
previo. Tan pronto como sea transmitido el ltimo bit, el TSR se cargar con el nuevo dato
procedente de TXREG (si est disponible). Mientras que TXREG transmite el dato a TSR (esto
sucede en un ciclo Tcycle), el TXREG se vaca, activndose el bit de peticin de interrupcin
TXIF (PIR1<4>). La interrupcin puede habilitarse o inhibirse, activando o borrando,
respectivamente, el bit TXIE (PIE1<4>). El bit indicador TXIF se activar, independientemente
del estado del bit TXIE, y no podr borrarse por software. Solamente se borra cuando un nuevo
dato se carga en el registro TXREG. Mientras que el bit TXIF indica el estado del registro
TXREG, otro bit, TRMT (TXSTA<1>), muestra el estado del registro TSR. TRMT es un bit de
Microcontrolador PIC16F876 Pgina 89

lectura, que se activa cuando TSR queda vaco. Ninguna interrupcin lgica va unida a este bit;
el usuario deber consultarlo para determinar si TSR est vaco. TSR no pertenece al bloque
memoria de registros, por lo que no es utilizable por el usuario.

La transmisin se habilita activando el bit TXEN (TXSTA<5>. La transmisin actual no se


iniciar hasta que el registro TXREG haya sido cargado con un dato. El primer bit del dato, ser
transmitido fuera de la patilla con la prxima subida de reloj disponible en la lnea CK. El dato
saliente ser estable con el flanco de bajada del reloj sncrono (Figura 10-9). La transmisin
puede detenerse, cargando primero el registro TXREG, y luego activando el bit TXEN (Figura
10-10). Esto es preferible cuando se selecciona baja velocidad, ya que el BRG est en reset
cuando los bits TXEN, CREN y SREN estn a cero. Activando el bit TXEN arrancar BRG,
produciendo un reloj de desplazamiento inmediatamente. Normalmente, con la primera
transmisin, el registro TSR est vaco, as que una transferencia sobre TXREG dar como
resultado una inmediata transferencia a TSR, quedando vaco el TXREG. Ser posible la
transferencia en oposicin.

Borrando el bit TXEN durante la transferencia, se producir que se cancel la transmisin y se


inicialice el transmisor. Las patillas DT y CK volvern al estado de alta impedancia. Si
cualquiera de los dos bits CREN o SREN se activan durante la transmisin, sta se cancela y la
patilla DT vuelve al estado de alta impedancia (queda lista para recepcin). La patilla CK
permanece como salida si el bit CSRC est activo (reloj interno). La lgica de transmisin, sin
embargo, no se inicializa, aunque se desconecta de las patillas. Para inicializar el transmisor, el
usuario ha de borrar el bit TXEN. Si SREN est activo, despus de recibir una nica palabra, el
bit SREN se borrar y el puerto serie retorna a transmisor, ya que el bit TXEN est todava
activado. La lnea DT conmuta inmediatamente desde alta impedancia en modo receptor, a
modo transmisor, y arranca la conduccin. Para evitar esto, se borrar el bit TXEN.

Para seleccionar transmisin con 9 bits, TX9 (TXSTA<6>) se activar y el noveno bit se
escribir en TX9D (TXSTA<0>). El noveno bit debe escribirse antes de escribir los 8 bits del
dato en el registro TXREG. Esto es porque el dato escrito en TXREG puede transferirse
inmediatamente al registro TSR (si ste estuviese vaco), dando como resultado la carga de los 8
bits del dato actual con el valor antiguo del noveno bit.

Los pasos a seguir para programar Maestro en Transmisin Sncrona, son:


1. Inicializar el registro SPBRG con la apropiada cadencia.
2. Habilitar el puerto serie como maestro sncrono, programando los bits SYNC, SPEN y
CSRC.
3. Si se desean interrupciones, programar el bit TXIE.
4. Si se desea transmisin en 9 bits, programar el bit TX9.
5. Habilitar la transmisin activando el bit TXEN.
6. Si se ha seleccionado transmisin con 9 bits, cargar el noveno bit en TX9D.
7. Arrancar la transmisin cargando el dato en el registro TXREG.
Microcontrolador PIC16F876 Pgina 90
Microcontrolador PIC16F876 Pgina 91

TABLA 10-8: REGISTROS ASOCIADOS AL MAESTRO EN TRANSMISIN SNCRONA


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
POR, BOR otros resets

OCh PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 -00x 0000 -00x

19h TXREG Registro Transmisor USART 0000 0000 0000 0000

8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010

99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000

x = Desconocido; - = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepcin asncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; siempre han de mantenerse a cero.
Microcontrolador PIC16F876 Pgina 92

10.3.2 USART MAESTRO EN RECEPCIN SNCRONA

Una vez seleccionado el modo sncrono, la recepcin se habilita programado cualquiera de los
dos bits SREN (RCSTA<5>) o CREN (RCST<4>). El dato se captura en la patilla RC7/RX/DT
en el flanco de bajada del reloj. Si est activado el bit SEN, solamente se recibir una palabra; si
est habilitado el bit CREN, la recepcin ser continua hasta el borrado de CREN. Si se han de
activar ambos bits, el primero en hacerlo ser CREN. Despus de la entrada del ltimo bit, el
dato recibido en el registro receptor RSR se transferir al registro RCREG (si est vaco).
Cuando se complete la transferencia, se activar el indicador de interrupcin RCIF (PIR1<5>).
La interrupcin actual puede habilitarse o inhibirse, activando o borrando, respectivamente, el
bit RCIE (PIE1<5>). El indicador RCIF es slo de lectura, y se borrar por hardware cuando se
lea el registro RCREG y ste quede vaco. El registro RCREG es de doble buffer (una FIFO de
dos posiciones). Por esto es posible, simultneamente, cargar RCREG desde la CPU, transferir a
RCREG desde el RSR, y comenzar a desplazar en RSR desde la patilla RX. Al detectar el bit de
STOP que entra por la patilla RX, si el registro RCREG est todava lleno, se activar el bit de
error por desbordamiento OERR (RCSTA<1>). En este caso, la palabra existente en RSR se
perder. El registro RCREG puede leerse dos veces seguidas para recuperar los dos bytes de la
FIFO. El bit OERR se borrar por software borrando CREN. Si el bit OERR est en 1, se inhibe
la transferencia desde el registro RSR hasta el registro RCREG, por lo que es vital borrar el bit
OERR, si estuviese activado. El noveno bit recibido se memoriza en el mismo latch que el dato
recibido. Leyendo RCREG se cargar el bit RX9D con el nuevo valor, por consiguiente, es
esencial para el usuario leer el registro RCSTA, antes de leer el registro RCREG, para no perder
la informacin en RX9D.

Los pasos a seguir cuando se programe Maestro en Recepcin Sncrona, son:


1. Inicializar el registro SPBRG con la apropiada cadencia. (Seccin 10.1).
2. Habilitar el puerto serie maestro sncrono programando los bits SYNC, SPEN y CSRC.
3. Asegurar el borrado de los bits CREN y SREN.
4. Si se desea interrupcin, activar el bit RCIE.
5. Si se desea recepcin de 9 bits, activar RX9.
6. Si se desea una recepcin, activar el bit SREN; para recepcin continua, activar CREN.
7. El indicador RCIF se activar cuando se complete la recepcin. Esto generar una
interrupcin, si est activado el bit RCIE.
8. Leer el registro RCSTA para tener el valor del noveno bit (si est habilitado el modo) y
determinar si ha existido error durante la recepcin.
9. Leer los 8 bits del dato recibido, leyendo el registro RCREG.
10. Si ha ocurrido algn error, cancelarlo borrando el bit de habilitacin CREN.

TABLA 10-9: REGISTROS ASOCIADOS AL MAESTRO EN RECEPCIN SNCRONA


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR, otros
BOR resets

OCh PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
18h RCSTA SPEN RX9 SREN CREN --- FERR OERR RX9D 0000 -00x 0000 -00x
1Ah RCREG Registro Receptor USART 0000 0000 0000 0000
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010
99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepcin asncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; siempre han de mantenerse a cero.
Microcontrolador PIC16F876 Pgina 93

10.4 USART SERVIDOR EN MODO SNCRONO

El modo Servidor Sncrono difiere del modo Maestro en el hecho de que el reloj se suministra
externamente a la patilla RC6/TX/CK. Esto permite al dispositivo transferir o recibir datos,
incluso en el estado SLEEP. Se entra en modo servidor, borrando el bit CSRC (TXSTA<7>).

10.4.1 USART EN TRANSMISIN SNCRONA COMO SERVIDOR

La operativa en modo sncrono maestro y servidor es idntica, excepto en el caso del estado
SLEEP.

Si se escriben dos palabras en TXREG, y se ejecuta entonces una instruccin SLEEP, ocurrir
lo siguiente:
a) La primera palabra ser inmediatamente transferida al registro TSR y transmitida.
b) La segunda palabra permanecer en el registro TXREG.
c) El bit indicador TXIF no se activar.
d) Cuando la primera palabra haya salida de TSR, el registro TXREG transferir la
segunda palabra al TSR, y el bit TXIF se activar por primera vez.
e) Si el bit de habilitacin TXIE est activado, la interrupcin saca el chip del estado
SLEEP, y si las interrupciones globales estn habilitadas, el programa saltar al vector
de interrupcin 0004h.

Los pasos a seguir para programar una Transmisin Sncrona como Servidor, son:

1. Habilitar el puerto serie sncrono servidor, activando los bits SYNC y SPEN, y
borrando CSRC.
2. Borrar los bits CREN y SREN.
3. Si se desea interrupcin, activar el bit de habilitacin TXIE.
4. Si se desea transmisin con 9 bits, activar el bit TX9.
5. Habilitar la transmisin, activando el bit TXEN.
6. Si se ha seleccionado 9 bits, el noveno bit se cargar en TX9D.
7. La transmisin comienza cargando el dato en el registro TXREG.
Microcontrolador PIC16F876 Pgina 94

10.4.2 USART EN RECEPCIN SNCRONA COMO SERVIDOR

La operacin como maestro y servidor sncronos es idntica, excepto en el caso del modo
SLEEP. En modo servidor, el bit SREN es indiferente.

Si est habilitada la recepcin, porque se activ el bit CREN antes de la instruccin SLEEP,
podr recibirse una palabra aunque est en estado SLEEP. A la completa recepcin de esta
palabra, el registro RSR transferir el dato en su poder al registro RCREG, y, si el bit de
habilitacin de interrupcin RCIE est activado, la interrupcin generada sacar al dispositivo
del estado SLEEP. Si las interrupciones globales estn habilitadas, el programa saltar al vector
de interrupcin 0004h.

Los pasos a seguir para programar una Recepcin Sncrona como Servidor, son:
1. Habilitar el puerto serie sncrono servidor, activando los bits SYNC y SPEN, y
borrando CSRC.
2. Si se desea interrupcin, activar el bit de habilitacin RCIE.
3. Si se desea recepcin con 9 bits, activar el bit RX9.
4. Habilitar la recepcin, activando el bit CREN.
5. El indicador RCIF se activar cuando se complete una recepcin. Se generar una
interrupcin, si el bit RCIE se activ en su momento.
6. Leer el registro RCSTA para obtener el noveno bit (si se program 9 bits) y determinar
si ha habido error durante la recepcin.
7. Leer los 8 bits de datos, efectuando la lectura del registro RCREG.
8. Si hubiese algn error, borrar ste escribiendo 0 en CREN.

TABLA 10-10: REGISTROS ASOCIADOS AL SERVIDOR EN TRANSMISIN SNCRONA


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
POR, BOR otros resets

OCh PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x

19h TXREG Registro Transmisor USART 0000 0000 0000 0000

8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010

99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000

x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepcin asncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; siempre han de mantenerse a cero.
Microcontrolador PIC16F876 Pgina 95

11.0 MDULO CONVERTIDOR ANALGICO-DIGITAL (CAD)

El mdulo CAD posee cinco entradas para dispositivos de 28 patillas, y ocho para el resto de
dispositivos.

La entrada analgica carga un condensador de muestreo y retencin. La salida de este circuito


de muestreo y retencin es la entrada al convertidor. ste, genera un resultado binario, funcin
del nivel analgico presente en la entrada, por medio de un CAD tipo aproximaciones sucesivas.
La conversin digital es un nmero de 10 bits. El mdulo CAD posee entrada de referencia de
tensin baja y alta, que el software seleccionar en combinacin con VDD, VSS, RA2 o RA3.

El CAD posee una caracterstica nica: est hbil para operar, incluso en el modo SLEEP. Para
trabajar en sleep, el reloj del CAD debe derivarse hacia el oscilador RC interno, expresamente
diseado para l.

El mdulo CAD posee cuatro registros, que son:


Registro Alto del Resultado A/D (ADRESH).
Registro Bajo del Resultado A/D (ADRESL).
Registro 0 de Control A/D (ADCON0).
Registro 1 de Control A/D (ADCON1).

El registro ADCON0, mostrado el REGISTER 11-1, controla la operacin del mdulo A/D. El
registro ADCON1, mostrado en REGISTER 11-2, configura la funcin de las patillas de los
puertos. stas, pueden configurarse como entradas analgicas (RA3 tambin puede ser la
tensin de referencia) o como entradas-salidas digitales.

TABLA 10-11: REGISTROS ASOCIADOS AL SERVIDOR EN RECEPCIN SNCRONA


Valor tras Valor tras
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
POR, BOR otros resets

OCh PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x

1Ah RCREG Registro Receptor USART 0000 0000 0000 0000

8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

98h TXSTA CSRC TX9 TXEN SYNC --- BRGH TRMT TX9D 0000 -010 0000 -010

99h SPBRG Registro Generador de Baudios 0000 0000 0000 0000

x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepcin asncrona.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; siempre han de mantenerse a cero.
Microcontrolador PIC16F876 Pgina 96

REGISTRO 11-2: REGISTRO ADCON1 (DIRECCIN 9Fh)

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


ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0 R = De lectura
W = De escritura
bit7 bit0 U = Sin implementar. Da 0 en lectura
-n = Valor del reset POR

bit 7: ADFM: Bit de seleccin de formato de resultado A/D.


1 = Justificacin derecha. Los 6 bits ms significativos de ADRESH se leen como 0.
0 = Justificacin izquierda. Los 6 bits menos significativos de ADRESL se leen como 0.
bit 6-4: Sin implementar: Se lee como 0.
bit 3-0: PCFG3:PCFG0: Bits de control de configuracin de puerto A/D.
Esta en la tabla inferior

Los registros ADRESH:ADRESL contienen los 10 bits del resultado de la conversin A/D.
Cuando sta se completa, el resultado binario se carga en esta pareja de registros del resultado,
el bit GO / DONE (ADCON0<2>) se borra, y el bit indicador de interrupcin ADIF se activa.
El diagrama de bloques del mdulo A/D se muestra en la Figura 11-1.

Despus de configurar el mdulo A/D como se desea, el canal seleccionado ser ledo antes de
iniciar la conversin. El canal analgico de entrada debe tener su correspondiente bit del
registro TRIS programado como entrada. Pasado el tiempo de adquisicin, la conversin A/D
puede iniciarse. Los pasos siguientes debern respetarse para realizar una conversin A/D:
1. Configuracin del mdulo A/D:
Configurar las patillas analgicas, tensin de referencia y E/S digital
(ADCON1).
Seleccionar el canal de entrada analgico (ADCON0).
Seleccionar el reloj de conversin A/D (ADCON0).
Conectar el mdulo A/D (ADCON0).
2. Configurar la interrupcin A/D, si se desea:
Borrar el bit ADIF.
PCFG3: AN7(1) AN6(1) AN5(1) AN4 AN3 AN2 AN1 AN0 CHAN /
VREF+ VREF-
PCFG0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 Rets(2)
0000 A A A A A A A A VDD VSS 8/0
0001 A A A A VREF+ A A A RA3 VSS 7/1
0010 D D D A A A A A VDD VSS 5/0
0011 D D D A VREF+ A A A RA3 VSS 4/1
0100 D D D D A D A A VDD VSS 3/0
0101 D D D D VREF+ D A A RA3 VSS 2/1
011x D D D D D D D D VDD VSS 0/0
1000 A A A A VREF+ VREF- A A RA3 RA2 6/2
1001 D D A A A A A A VDD VSS 6/0
1010 D D A A VREF+ A A A RA3 VSS 5/1
1011 D D A A VREF+ VREF- A A RA3 RA2 4/2
1100 D D D A VREF+ VREF- A A RA3 RA2 3/2
1101 D D D D VREF+ VREF- A A RA3 RA2 2/2
REGISTRO
1110 11-1:
D REGISTRO
D ADCON0
D D (DIRECCIN
D D 1Fh)
D A VDD VSS 1/0
1111 D D D D VREF+ VREF- D D RA3 RA2 1/2
A = Entrada analgica.
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0
D = Entrada-salida digital.
R = De lectura
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/-DONE --- de
Nota 1: Estos canales no estn disponibles en los dispositivos 28 patillas.
ADON
Nota 2: Esta columna indica el nmero de canales analgicos disponiblesW = De escritura
como entradas A/D, y el nmero de
bit7 bit0 U = Sin implementar. Da 0 en lectura
canales analgicos utilizados como entradas de referencia de tensin.
-n = Valor del reset POR
Microcontrolador PIC16F876 Pgina 97

Activar el bit ADIE.


Activar el bit GIE.
3. Espera del tiempo necesario para la adquisicin del valor analgico en la entrada.
4. Arranca la conversin:
Activar el bit GO / DONE (ADCON0).
5. Esperar a la finalizacin de la conversin A/D:

O bien leyendo el bit GO / DONE


O bien esperando la interrupcin A/D.
6. Leer la pareja de registros del resultado (ADRESH:ADRESL), y borrar el bit ADIF.
7. Para la prxima conversin, id al paso 1 o 2, segn necesidades. El tiempo de
conversin A/D por bit est definido como TAD. Se necesita un mnimo de 2 TAD antes
de iniciar la prxima adquisicin.

11.1 Requisitos para la adquisicin A/D


Microcontrolador PIC16F876 Pgina 98

Para que el convertidor A/D posea una precisin determinada, la carga del condensador de
adquisicin (CHOLD) debe completarse para el nivel analgico presente en el canal de entrada
seleccionado. El modelo de la entrada analgica se muestra en la Figura 11-2. La impedancia de
la fuente (RS) y la impedancia del conmutador de captura interno (RSS) afectan directamente al
tiempo necesitado para cargar el condensador CHOLD. La impedancia del conmutador de captura
vara segn la tensin del dispositivo (VDD) (ver Figura 11-2). La impedancia mxima
recomendada para la fuente analgica es de 10K. Cuando la impedancia decrece, el tiempo
de adquisicin tambin decrece. Despus de la seleccin del canal analgico de entrada, este
tiempo de adquisicin debe tenerse en cuenta antes de arrancar la conversin. Para calcular el
tiempo mnimo de adquisicin, puede utilizarse la ecuacin 11-1. sta, asume que existe un
error de LSB (1024 combinaciones para el A/D). El error de LSB es el mximo error
permitido por el mdulo A/D, segn las especificaciones tcnicas.

TACQ = Tiempo activacin amplificador + Tiempo carga CHOLD + Coeficiente de temperatura =


= TAMP + TC + TCOFF =

= 2s + TC + [(Temperatura 25C) (0,05s/C)]


TC = CHOLD (RIC + RSS + RS) ln (1 /2047) =
= 120pF (1K + 7 K + 10 K) ln 0,0004885) =
= 16,47s.
TACQ = 2s + 16,47s + [(50C 25C) 0,005s/C] =
= 19,72s.
Nota 1: La tensin de referencia no afecta a la ecuacin.
Nota 2: El condensador CHOLD no se descarga despus de cada conversin.
Nota 3: La impedancia mxima recomendada para la fuentes analgicas es de 10K. Esto es
necesario para cumplir las especificaciones.
Nota 4: Despus de completar la conversin, se debe esperar un tiempo de 2TAD antes de
iniciar otra. Durante este tiempo, el condensador CHOLD no se conecta al canal de
entrada analgico seleccionado.

11.2 Seleccin del reloj de Conversin A/D


Microcontrolador PIC16F876 Pgina 99

El tiempo por bit de la conversin A/D se define como TAD. La conversin A/D necesita un
mnimo de 12TAD por 10 bits de conversin. La fuente del reloj de conversin A/D se selecciona
por software. Cuatro opciones son posibles para TAD:
2Tosc
8Tosc
32Tosc
Oscilador RC interno

Para una correcta conversin A/D, el reloj debe seleccionarse para asegurar un tiempo mnimo
de 1,6s.

La Tabla 11-1 muestra los tiempos resultantes TAD, derivados de la frecuencia de trabajo del
dispositivo y de la fuente de reloj seleccionada.

Tabla 11-1: TAD para mximas frecuencias de trabajo del dispositivo [dispositivos estndar (c)]
Frecuencia mxima del dispositivo
Operacin ADCS1:ADCS0 Mx.
2Tosc 00 1,25 Mhz
8Tosc 01 5 Mhz
32Tosc 10 20 Mhz
RC(1,2,3) 11 Nota 1
Nota 1: La fuente RS tiene un tiempo tpico de 4s, pero puede variar entre 2 y 6s.
Nota 2: Cuando las frecuencias del dispositivo son mayores que 1Mhz, la fuente de reloj RC se
recomienda solamente para la operacin en modo SLEEP.
Nota 3: Para dispositivos de amplio margen de tensin (LC), mirar la seccin de Especificaciones
Elctricas.

11.3 Configuracin de patillas del puerto analgico

Los registros ADDCON1 y TRIS controlan la operacin de las patillas de puerto A/D. Las
patillas que se vayan a emplear como entradas analgicas, deben activarse como entradas, en los
bits correspondientes del registro TRIS. Si estos bits estn a 0, las patillas actuarn como
salidas, y los niveles de salida lgicos (VOH o VOL) sern convertidos a cdigo binario.

La operacin A/D es independiente del estado de los bits CHS2:CHS0 y de los bits TRIS.

Nota 1: Al leer el registro del puerto, cualquier patilla configurada como canal de entrada
analgico se leer como 0. Las patillas configuradas como entradas digitales convertirn en
binario sus valores de tensin lgica. Los niveles analgicos de las patillas configuradas como
entradas digitales, no afectarn a la precisin de la conversin.

Nota 2: Los niveles analgicos en cualquier patilla definida como entrada digital, puede hacer
que el buffer de entrada consuma ms corriente de la especificada en las caractersticas del
dispositivo.

11.4 Conversiones A/D


Microcontrolador PIC16F876 Pgina 100

Borrando el bit GO / DONE durante una conversin, se cancelar sta. El resultado del registro
del resultado no se actualizar con una conversin parcial; esto es: ADRESH:ADRESL
contendrn el valor convertido de la ltima operacin vlida que se complet. Despus de la
cancelacin de la conversin, se necesita esperar un tiempo de 2T AD antes de iniciar la siguiente
conversin. Despus de esta espera, la conversin del canal seleccionado arrancar
automticamente. En la Figura 11-3, despus de activar el bit GO, el primer segmento de tiempo
posee un mnimo de TCY y un mximo de TAD.

Nota: el bit GO / DONE no se activar en la misma instruccin que la activacin de A/D.

11.4.1 REGISTRO DE RESULTADO A/D

La pareja de registros ADRESH:ADRESL es el lugar donde se carga el resultado de la


conversin completa A/D de 10 bits. Este registro par tiene una capacidad de 16 bits. El mdulo
A/D ofrece la posibilidad de alinear a la derecha o izquierda el resultado de 10 bits, en un
registro de 16 bits. El bit de seleccin de formato A/D (ADFM) controla esta alineacin. La
Figura 11-4 muestra la operacin de alineacin del resultado de la conversin A/D. Los bits
sobrantes se cargan con 0. Cuando el resultado A/D no escriba en estas posiciones (inhibicin
del mdulo A/D), estos registros pueden utilizarse como dos registros de uso general de 8 bits
cada uno.

11.5 Operacin A/D durante el estado SLEEP

El mdulo A/D puede trabajar cuando el sistema se encuentra en modo SLEEP. Esto precisa
que la fuente de reloj de A/D debe ser la RC interna (ADCS1:ADCS0 = 11). Cuando se
selecciona la fuente de reloj RC interna, el mdulo A/D espera un ciclo de instruccin antes de
iniciar la conversin. Esto permitir la ejecucin de la instruccin SLEEP, que elimina todo el
ruido de conmutacin digital para la conversin. Cuando sta se complete, el bit GO / DONE
se borrar, y el resultado se cargar en el registro de resultado. Si est habilitada la interrupcin
A/D, el dispositivo abandonar el estado SLEEP; si la interrupcin A/D estuviese inhibida, el
mdulo A/D se desconectar, aunque el bit ADON permanece activado.

Cuando la fuente de reloj A/D es otra opcin (no la RC interna), la instruccin SLEEP provoca
que la conversin presente se cancele y el mdulo A/D se desconecte, a pesar de que el bit
ADON permanezca activado.

Desconectando el mdulo A/D conseguimos poner al dispositivo en el estado de menor


consumo.
Microcontrolador PIC16F876 Pgina 101

Nota: Para que el mdulo A/D opere en estado SLEEP, la fuente de reloj del A/D debe ser la
RC interna (ADCS1:ADCS0 = 11). Para conseguir que la conversin suceda durante SLEEP,
hay que asegurar que la instruccin SLEEP siga, inmediatamente, a la instruccin que activa el
bit GO/-DONE.

11.6 Efecto de un Reset

Un reset en el dispositivo, fuerza a todos los registros a su estado de reset. Esto har que el
mdulo A/D se desconecte y se cancele cualquier conversin.

El valor de los registros ADRESH:ADRESL no se altera con un reset tipo MCLR o WDT, y
contendrn datos desconocidos despus de un POR o BOR.

11.0 CARACTERSTICAS ESPECIALES DE LA CPU

TABLA 11-2: REGISTROS/BITS ASOCIADOS CON A/D


POR, -MCLR,
Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
BOR WDT

OBh INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u

0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

1Eh ADRESH Registro de resultado para byte alto. xxxx xxxx uuuu uuuu

9Eh ADRESL Registro de resultado para byte bajo. ----- -----

1Fh ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/- --- ADON 0000 00-0 0000 00-0
DONE
9Fh ADCON1 ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0 --0- 0000 --0- 0000

85h TRISA --- --- Registro de direccin del puerto A --11 1111 --11 1111

05h PORTA --- --- Latch de datos de PORTA en escritura; patillas de PORTA al --0x 0000 --0u 0000
leer.
89h TRISE IBF OBF IBOV PSPMODE --- Bits de direccin de PORTE 0000 -111 0000 111

09h PORTE --- --- --- --- --- RE2 RE1 RE0 ---- -xxx ---- -uuu

x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en conversin A/D.
Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas.
Estos dispositivos poseen un conjunto de caractersticas proyectadas, para aumentar al mximo
las posibilidades del sistema, minimizar costos eliminando componentes externos, y
Microcontrolador PIC16F876 Pgina 102

proporcionar potencia ahorrando modos de operacin y ofreciendo cdigos de proteccin. Estas


caractersticas son:
Seleccin de oscilador.
Reset:
- De conexin (POR).
- Retardo a la conexin (PWRT).
- Retardo de arranque de oscilacin (OST).
- Bajada de alimentacin (BOR).
Interrupciones.
Temporizador supervisor (WDT).
SLEEP.
Cdigo de proteccin.
Posiciones ID.
Circuito de entrada para programacin serie.
Circuito de entrada de baja tensin para programacin serie.
Circuito de entrada depurador.

Estos circuitos poseen un supervisor, que puede anularse, solamente, a travs de los bits de
configuracin. En desconexin, posee su propio oscilador RC para aumentar las posibilidades.
Existen dos temporizadores, que ofrecen los retardos necesarios a la conexin: uno es el
temporizador de inicio de oscilacin (OST), diseado para mantener el dispositivo en reset hasta
la estabilizacin de la oscilacin del cristal; el otro es el temporizador de conexin (PWRT), que
proporciona un retraso fijo de 72 ms desde la conexin. Est diseado para mantener una parte
en reset mientras se estabiliza la alimentacin. Con estos dos temporizadores en el chip, muchas
aplicaciones no necesitan circuitera externa de reset.

El modo SLEEP se ha diseado para ofrecer una forma de operacin de muy bajo consumo. El
usuario, puede sacar del modo SLEEP al dispositivo, a travs de un reset externo, final de
temporizacin del supervisor, o a travs de una interrupcin. Varias opciones de oscilacin
estn tambin disponibles para permitir aplicaciones a medida. La opcin de oscilacin RC
ahorra costos al sistema, mientras que la opcin de cristal LP ahorra consumo. Un conjunto de
bits de configuracin se usan para seleccionar estas opciones.

12.1 Bits de configuracin

Los bits de configuracin, pueden programarse (se leen como 0) o dejarse sin programar (ledos
como 1), para seleccionar varias configuraciones de dispositivos. Estos bits se guardan en la
posicin 2007h de memoria de programa.

El usuario notar que la direccin 2007h est fuera del espacio de la memoria de programa. En
fbrica, se crea una zona especial de memoria (2000h 3FFFh), reservada a configuracin y
pruebas, que solamente es accesible en el momento de la programacin del dispositivo.
Microcontrolador PIC16F876 Pgina 103

REGISTRO 12-1: PALABRA DE CONFIGURACIN (DIRECCIN 2007h)

_______
CP1 CP0 DEBUG --- WRT CPD LVP BODEN CP1 CP0 WDTE FOSC1 FOSC0
PWRTE
bit13 bit0

bits 13-12:
bits 5-4: CP1:CP0: Bits de proteccin del cdigo de memoria de Programa FLASH(2)
11 = Sin cdigo de proteccin.
10 = 1F00h a 1FFFh zona protegida para PIC16F876 y 877
10 = 0F00h a 0FFFh zona protegida para PIC16F873 y 874
01 = 1000h a 1FFFh zona protegida para PIC16F876 y 877
01 = 0800h a 0FFFh zona protegida para PIC16F873 y 874
00 = 0000h a 1FFFh zona protegida para PIC16F876 y 877

bit 11: DEBUG: Modo de depuracin en dispositivo.


1 = Inhibido el depurador. RB6 y RB7 son patillas de uso general de puerto E/S.
0 = Habilitado el depurador. RB6 y RBy se dedican a depuracin.

bit 10: Sin implementar: Se lee como 0.

bit 9: WRT: Bit de habilitacin de escritura en la Memoria Flash de Programa


1 = La memoria de programa sin proteger se puede escribir mediante el control de EECON.
0 = La memoria de programa sin proteger no se puede escribir mediante el control de EECON.

bit 8: CPD: Proteccin de cdigos de la memoria de datos


1 = Sin proteccin.
0 = Los cdigos de la memoria de datos estn sin proteccin.

bit 7: LVP: Bit de habilitacin de Bajo Voltaje en circuito para Programacin serie.
1 = La patilla RB3/PGM tiene la funcin PGM, que habilita la baja tensin de programacin.
0 = La patilla RB3 es un canal digital de E/S de puerto. HV, en MCLR, puede usarse para
programacin.

bit 6: BODEN: Bit de habilitacin de Reset Brown.Out (BOR = descenso de tensin)(1)


1 = Habilitado BOR
0 = Inhibido BOR.

bit 3: -PWRTE: Bit de habilitacin de retardo a la conexin (PWRT)(1)


1 = Inhibido el PWRT.
0 = Habilitado el PWRT.

bit 2: WDTE: Bit de habilitacin de Supervisor (Watchdog).


1 = Habilitado WDT (Watchdog).
0 = Inhibido el WDT.

bit 1:0: FOSC1:FOSC0: Bits de seleccin del Oscilador.


11 = Oscilador RC.
10 = Oscilador HS.
01 = Oscilador XT.
00 = Oscilador LP.

Nota 1: Habilitando BOR, automticamente se habilita PWRT, independientemente del valor del bit PWRTE.
Hay que asegurarse que PWRT est habilitado junto con BOR.
Nota 2: Las patillas CP1:CP0 deben tener el valor ofrecido en la lista, para habilitar el cdigo de proteccin.
Microcontrolador PIC16F876 Pgina 104

12.2 Configuraciones del oscilador

12.2.1 Tipos de osciladores

Este dispositivo puede trabajar en cuatro diferentes modos de oscilacin. El usuario puede
programar dos bits (Fosc1 y Fosc0) para seleccionar uno de estos cuatro modos:
LP Cristal, con bajo consumo.
XT Cristal-Resonador cermico.
HS Cristal-Resonador, en alta velocidad.
RC Resistor-Condensador.

12.2.2 OSCILADOR DE CRISTAL O RESONADOR CERMICO

En los modos XT, LP o HS, un cristal de cuarzo, o un resonador cermico, se conectan a las
patillas OSC1/CLKIN y OSC2/CLKOUT para establecer la necesitada oscilacin (Figura 12-1).
El oscilador diseado en el PIC16F87X necesita el uso de un cristal de corte paralelo. Si se usa
un cristal de corte serie, puede oscilar a una frecuencia fuera de las especificaciones del

fabricante del cristal. En los modos XT, LP y


HS, el dispositivo puede alimentarse de una
fuente externa de reloj, conectada a la patilla
OSC1 (Figura 12-2).

TABLA 12-1: RESONADORES CERMICOS


Rangos Probados 12.2.3 OSCILADOR RC
Modo Frec. OSC1 OSC2
455 KHz 68 100 pF 68 100 pF Para aplicaciones en las que el tiempo
XT 2,0 MHz 15 68 pF 15 68 pF no requiera precisin, el oscilador RC
4,0 MHz 15 68 pF 15 68 pF ofrece la opcin ms econmica. La
8,0 HMS 10 68 pF 10 68 pF frecuencia del oscilador RC es
HS funcin, del voltaje de alimentacin,
16,0 MHz 10 22 pF 10 22 pF
Estos valores son solamente, como gua para diseo de los valores de resistencia (REXT) y
Resonadores utilizados capacidad (CEXT), y de la temperatura
455 KHz Panasonic EFQ-A455K04B +/- 0,3% de trabajo. Adems de esto, la
2,0 MHz Murata Erie CSA2.00MG +/- 0,5% frecuencia del oscilador ira variando
4,0 MHz Murata Erie CSA4.00MG +/- 0,5% conforme lo hagan los parmetros
normales. Adems, las diferencias de
8,0 MHz Murata Erie CSA8.00MT +/- 0,5%
capacidad de las patillas del
16,0 MHz Murata Erie CSA16.00MX +/- 0,5%
condensador, segn el tipo de
Todos los resonadores utilizados no llevan, integrados,
encapsulado, afectarn a la frecuencia
los condensadores de oscilacin
del oscilador, especialmente para
Microcontrolador PIC16F876 Pgina 105

valores pequeos de capacidad CEXT. El usuario tambin necesita tener en cuenta la variacin
debido a la tolerancia de los componentes externos usados R y C. En la Figura 12-3 se muestra
cmo est conectada al PIC16F87X la combinacin R/C.

Nota1: Capacidades mayores incrementan la estabilidad del oscilador pero tambin incrementan
el tiempo de arranque.

Nota 2: Como cada cristal-resonador posee sus propias caractersticas, el usuario consultar al
fabricante del elemento oscilador para conseguir los valores apropiados de componentes
externos.

Nota 3: RS es necesaria, en modos HS y XT, para evitar sobreoscilaciones del cristal con
niveles de conduccin muy bajos.

Nota 4: Cuando se cambie a otros dispositivos PIC, las caractersticas de oscilacin se


revisarn.

TABLA 12-2: SELECCIN DE CONDENSADORES PARA


OSCILADOR DE CRISTAL
Tipo de Osc. Frec. Cristal C1 C2

32 KHz 33 pF 33 pF
LP
200 KHz 15 pF 15 pF
200 KHZ 47-68pF 47-68pF
XT 1 MHz 15 pF 15 pF
4 MHz 15 pF 15 pF
4 MHz 15 pF 15 pF
HS 8 MHz 15-33pF 15-33pF
20 MHz 15-33pF 15-33pF
Estos valores son orientativos para el diseo
Obsrvense las notas de arriba.
Cristales usados
32 Khz Epson C-001R32.768K-A +/- 20 PPM
200 Khz STD XTL 200.000KHz +/- 20 PPM
1 Mhz ECS ECS-10-13-1 +/- 50 PPM
4 Mhz ECS ECS-40-20-1 +/- 50 PPM
8 Mhz EPSON CA-301 8.000M-C +/- 30 PPM
20 Mhz EPSON CA-301 20.000M-C +/- 30 PPM

12-3 Reset

Los PIC16F87X poseen varios tipos de reset:


Reset a la conexin (POR).
Reset MCLR durante el trabajo normal.
Reset MCLR durante el modo SLEEP.
Reset WDT durante el trabajo normal.
Reset WDT para salir del modo SLEEP (wake-up).
Reset por bajada de tensin (BOR).
Microcontrolador PIC16F876 Pgina 106

Algunos registros no son afectados por ninguno de estos reset. Su estado es desconocido con
POR, y sin cambio con cualquier otro reset. Pero otros muchos registros se borran con el reset
tipo POR, MCLR , WDT, MCLR durante el modo SLEEP y BOR. Los bit TO y PD se
activan o borran, dependiendo de la situacin de reset encontrada, como se muestra en la Tabla
12-4. Estos bits se usan en software para determinar la naturaleza del reset. Ver tabla 12-6 para
una completa descripcin de los estados de reset para todos los registros.

En la figura 12-4 se muestra un esquema a bloques simplificado de la circuitera de reset que


contiene el dispositivo. ste, posee un filtro de ruido en la entrada de MCLR que detectar e
ignorar los pulsos muy cortos.

Hay que resaltar que el reset WDT no pone a cero a la patilla MCLR .

12.4 Reset de conexin (POR)

Se genera un impulso POR cada vez que se detecta la subida de V DD entre 1,2V y 1,7V. Para
conceder prioridad a POR, conectar MCLR directamente, o a travs de un resistor, al nivel
VDD. Esto eliminar componentes externos RC, normalmente necesitados para crear un reset de
conexin. El mximo tiempo de subida se detalla en el apartado de Especificaciones Elctricas.

Cuando el dispositivo arranca en operacin normal (sale de la condicin de reset), los


parmetros de trabajo del chip (tensin, frecuencia, temperatura,...) deben ser estables para
asegurar la operacin. Si estas condiciones no estn aseguradas, el dispositivo debe mantenerse
en reset hasta la correcta estabilidad de las condiciones de trabajo. BOR puede utilizarse para
conseguir las condiciones de arranque.
Microcontrolador PIC16F876 Pgina 107

12.5 Temporizador de conexin (PWRT)

EL PWRT proporciona un retardo de 72 ms para la conexin. El PWRT opera con una red RC
interna de oscilacin. El chip se mantiene en reset tanto tiempo como dura la activacin de
PWRT. Este retardo permite a VDD subir hasta el nivel aceptable de trabajo. Existe un bit de
configuracin para habilitar o inhibir el PWRT. El tiempo de retardo de PWRT variar de uno a
otro chip debido a tolerancias entre ellos.

12.6 Temporizador de inicio de oscilacin (OST)

Este temporizador proporciona un retardo de 1024 ciclos de oscilacin (desde la entrada OSC1)
desde que el retardo de PWRT termin. Esto asegura que el oscilador de cristal o resonador ha
arrancado y est estabilizado. La Temporizacin de OST se aplica solamente a los modos XT,
LP y HS, en reset POR o abandono de SLEEP.

12.7 Reset por cada de tensin (Brown-Out_Reset)(BOR)

El bit BODEN, de configuracin, puede habilitar o inhibir el circuito de BOR. Si VDD desciende
por debajo de VBOR (alrededor de 4V), por un tiempo mayor de 100s (TBOR), la situacin
Brown-Out inicializar al dispositivo. Si VDD baja ms de VBOR, pero la duracin de la bajada es
menor de TBOR, no sucede reset alguno.

Mientras que sucede el BOR, el dispositivo permanecer en reset BOR hasta que V DD suba por
encima de VBOR. El temporizador de conexin mantendr en reset al dispositivo, un tiempo
TPWRT (72 ms, aproximadamente). Si VDD bajase de VBOR durante la Temporizacin TPWRT, el
proceso de BOR se iniciar cuando VDD suba por encima de VBOR, con el temporizador de
conexin en reset. Este temporizador siempre est habilitado cuando se habilita el circuito BOR,
independientemente del estado del bit de configuracin de PWRT.

12.8 Secuencia de finalizacin de Temporizacin

En la conexin, la secuencia de temporizacin es as: el retardo de PWRT arranca (si est


habilitado) cuando ocurra el reset POR. Arranca OST, contando 1024 ciclos de reloj desde que
finaliz PWRT (modos LP, XT o HS). Cuando termine OST, se abandona el estado de reset.

Si MCLR mantiene un 0 suficientemente largo, la temporizacin terminar. Devolviendo el


nivel alto a MCLR , iniciar la ejecucin inmediatamente. Esto se usa para el chequeo, o para
sincronizar varios dispositivos PIC que trabajan en paralelo.

La Tabla 12-5 muestra las condiciones de reset para los registros STATUS, PCON y PC,
mientras que la Tabla 12-6 muestra las condiciones de reset para todos los registros.

12.9 Registro PCON (Control de conexin/Registro de estado)

El registro PCON posee dos bits, bit0 y bit1, dependiendo del dispositivo. Bit0 es el bit del
estado de BOR. El bit BOR no se reconoce en el reset POR. Debe activarse por el usuario, y
chequearse en subsiguientes resets para ver si est borrado, indicando con ello la existencia de
BOR. EL bit BOR es indiferente, y no es necesariamente previsible si el circuito de BOR est
inhibido (por el borrado del bit de configuracin BODEN). El bit1 corresponde a POR . Se
borra con el reset POR, y queda sin efecto en otros casos. El usuario debe activar este bit
despus del POR.
Microcontrolador PIC16F876 Pgina 108

TABLA 12-3: TEMPORIZACIN EN VARIAS SITUACIONES


Configuracin Conexin
Brown-out Salida de SLEEP
del oscilador -PWRTE = 0 -PWRTE = 1
XT, HS, LP 72ms + 1024Tosc 1024Tosc 72ms + 1024Tosc 1024Tosc
RC 72 ms --- 72 ms ---

TABLA 12-4: BITS DE ESTADO Y SU SIGNIFICADO


POR BOR TO PD
0 X 1 1 Reset de conexin (Power-On-Reset).
0 X 0 X Cdigo ilegal, TO se activa con POR.
0 X X 0 Cdigo ilegal, PD se activa con POR.
1 0 1 1 Reset de cada de tensin (Brown-Out-Reset).
1 1 0 1 Reset de supervisor (Watch-Dog-Timer).
1 1 0 0 Abandono de WDT.
1 1 u u -MCLR durante operacin normal.
1 1 1 u Reset MCLR durante SLEEP, o interrupcin de abandono de SLEEP.

TABLA 12-5: CONDICIN DE RESET PARA REGISTROS ESPECIALES


Contador de Registro de
Condicin Registro PCON
Programa Estado
Reset POR 000h 0001 1xxx ---- --0x
Reset MCLR durante operacin normal 000h 000u uuuu ---- --uu
Reset MCLR durante SLEEP 000h 0001 0uuu ---- --uu
Reset WDT 000h 0000 1uuu ---- --uu
Abandono WDT PC + 1 uuu0 0uuu ---- --uu
Reset BOR 000h 0001 1uuu ---- --u0
Abandono de SLEEP por interrupcin PC + 1(1) uuu10uuu ---- --uu
u = sin cambio; x = desconocido; --- = sin implementar (se lee como 0).
Nota 1: Cuando el abandono de SLEEP se debe a una interrupcin, y GIE est activada,
el PC se carga con el vector de interrupcin 0004h.
Microcontrolador PIC16F876 Pgina 109

TABLA 12-6: CONDICONES DE INICIALIZACIN PARA TODOS LOS REGISTROS


Reset POR, Reset MCLR, Abandono SLEEP por
Registros Dispositivos
Reset BOR Reset WDT WDT o Interrupcin
W 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
INDF 873 874 876 877 N/A N/A N/A
TMR0 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PCL 873 874 876 877 0000h 0000h PC + 1(2)
(3)
STATUS 873 874 876 877 0001 1xxx 000q quuu uuuq quuu(3)
FSR 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PORTA 873 874 876 877 --0x 000 --0u 000 --uu uuuu
PORTB 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PORTC 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PORTD 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
PORTE 873 874 876 877 ---- -xxx ---- -uuu ---- -uuu
PCLATH 873 874 876 877 ---0 0000 ---0 0000 ---u uuuu
INTCON 873 874 876 877 0000 000x 0000 000u uuuu uuuu(1)
873 874 876 877 r000 0000 r000 0000 ruuu uuuu(1)
PIR1
873 874 876 877 0000 0000 0000 0000 uuuu uuuu(1)
PIR2 873 874 876 877 -r-0 0--0 -r-0 0--0 -r-u uu(1)
TMR1L 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
TMR1H 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
T1CON 873 874 876 877 --00 0000 --uu uuuu --uu uuuu
TMR2 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
T2CON 873 874 876 877 -000 0000 -000 0000 -uuu uuuu
SSPBUF 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
SSPCON 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
CCPR1L 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
CCPR1H 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
CCP1CON 873 874 876 877 --00 0000 --00 0000 --uu uuuu
RCSTA 873 874 876 877 0000 000x 0000 000x uuuu uuuu
TXREG 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
RCREG 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
CCPR2L 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
CCPR2H 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
CCP2CON 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
ADRESH 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
ADCON0 873 874 876 877 0000 00-0 0000 00-0 uuuu uu-u
OPTION_REG 873 874 876 877 1111 1111 1111 1111 uuuu uuuu
TRISA 873 874 876 877 --11 1111 --11 1111 --uu uuuu
TRISB 873 874 876 877 1111 1111 1111 1111 uuuu uuuu
TRISC 873 874 876 877 1111 1111 1111 1111 uuuu uuuu
TRISD 873 874 876 877 1111 1111 1111 1111 uuuu uuuu
TRISE 873 874 876 877 0000 -111 0000 -111 uuuu uuu
873 874 876 877 r000 0000 r000 0000 ruuu uuuu
PIE1
873 874 876 877 0000 0000 0000 0000 uuuu uuuu
PIE2 873 874 876 877 -r-0 0--0 -r-0 0--0 -r-u uu
PCON 873 874 876 877 ---- --qq ---- --uu ---- --uu
PR2 873 874 876 877 1111 1111 1111 1111 1111 1111
SSPADD 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
SSPSTAT 873 874 876 877 --00 0000 --00 0000 --uu uuuu
TXSTA 873 874 876 877 0000 -010 0000 -010 uuuu uuu
SPBRG 873 874 876 877 0000 0000 0000 0000 uuuu uuuu
ADRESL 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
ADCON1 873 874 876 877 0--- 0000 0--- 0000 u--- uuuu
EEDATA 873 874 876 877 0--- 0000 0--- 0000 u--- uuuu
EEADR 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EEDATH 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EEADRH 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu
EECON1 873 874 876 877 x--- x000 u--- u000 u--- uuuu
EECON2 873 874 876 877 ---- ---- ---- ---- ---- ----
u = Sin cambio; x = Desconocido; --- = Sin implementar (se lee como 0); q = Depende de la condicin;
r = Reservado (mantener a 0).
Nota 1: Uno o ms bits en INTCON, PIR1 y/o PIR2 sern afectados (a causa del abandono).
Nota 2: Cuando el abandono se debe a una interrupcin, y el bit GIE est activado, el PC se carga
con el vector de interrupcin 0004h.
Nota 3: Ver Tabla 12-5 para valores de reset de condiciones especficas.
Microcontrolador PIC16F876 Pgina 110
Microcontrolador PIC16F876 Pgina 111

12.10 Interrupciones

La familia PIC16F87X tiene ms de 14 fuentes de interrupcin. El registro de control de


interrupciones (INTCON) posee, los bits de peticin de interrupcin de forma individual, los
bits de habilitacin individual, y el bit de habilitacin global (de todo el conjunto).

Nota: Los bits de habilitacin individual pueden activarse, independientemente del estado de
sus correspondientes bits de mscara, o del bit GIE (habilitacin global).
Microcontrolador PIC16F876 Pgina 112

El bit de habilitacin global GIE (INTCON<7>), habilita, si est programado a 1, todas las
interrupciones enmascarables, o inhibe, si est en 0, a todas ellas. Cuando se habilita GIE, y un
bit indicador de interrupcin y su mscara estn a 1, la interrupcin se atender inmediatamente.
Las interrupciones individuales pueden inhibirse a travs de sus correspondientes bits de
habilitacin, contenidos en varios registros. Los bits de interrupcin individual se activarn,
independientemente del estado del bit GIE. Este ltimo se borra con reset.

La instruccin de retorno de interrupcin, RETFIE, estar contenida en la rutina de interrupcin,


as como la activacin del bit GIE, que habilitar una nueva interrupcin.

Los bits indicadores de peticin de interrupcin de la patilla RB0/INT, la interrupcin por


cambio en puerto RB y la interrupcin por desbordamiento del TMR0, estn contenidos en el
registro INTCON.

Los indicadores de interrupcin de perifricos estn contenidos en los registros de funcin


especial PIR1 y PI2. Los bits correspondientes de habilitacin de estas interrupciones estn
contenidos en los registros de funcin especial PIE1 y PIE2, y el bit de habilitacin de
interrupcin de perifricos, en el registro de funcin especial INTCON.

Cuando se responde a una interrupcin, el bit GIE se borra para impedir cualquier otra
interrupcin, la direccin actual del PC (la de retorno) se mete en la pila, y el PC se carga con la
direccin 0004h. sta es la direccin llamada vector de interrupcin. Cada vez que se desarrolla
la rutina de interrupcin, la fuente de interrupcin se determina consultando el bit de peticin de
interrupcin. Este bit debe borrarse por software antes de volver a habilitar las interrupciones,
para impedir atenciones recurrentes de la misma interrupcin.

Para interrupcin por acontecimientos externos, como la patilla de interrupcin INT o


interrupcin por cambio de estado en PORTB, el retraso en captar la interrupcin es de tres o
cuatro ciclos de instruccin. El retraso exacto depende de cundo ocurra la interrupcin. El
retraso es el mismo para instrucciones de uno o dos ciclos. Los bits sealizadores de
interrupcin individual se activan, independientemente del estado de su correspondiente bit de
mscara o del bit GIE.

12.10.1 INTERRUPCIN INT

La interrupcin externa en la patilla RB0/INT se dispara por flanco de subida, si est activado el
bit INTEDG (OPTION_REG<6>), o de bajada, si est borrado este bit. Cuando un flanco vlido
aparece en la patilla RB0/INT, el indicador INTF (INTCON<1>) se activa. Esta interrupcin
puede inhibirse borrando el bit INTE (INTCON<4>). El bit indicador debe borrarse por
software en la rutina de servicio de interrupcin antes de volver a habilitar las interrupciones. La
interrupcin INT puede sacar al procesador del SLEEP, si el bit INTE fue activado antes de
entrar en el estado SLEEP. El estado del bit GIE decide si el procesador salta o no al vector de
interrupcin siguiente al abandono de SLEEP. En la seccin 12.13 se ofrecen los detalles del
modo SLEEP.

12.10.2 INTERRUPCIN TMR0

Un desbordamiento (paso de FFh a 00h) en el registro TMR0 activar el bit indicador T0IF
(INTCON<2>). La interrupcin puede habilitarse o inhibirse activando o borrando,
respectivamente, el bit de habilitacin T0IE (INTCON<5>).
Microcontrolador PIC16F876 Pgina 113

12.10.3 INTERRUPCIN POR CAMBIO EN PORTB

Un cambio de estado lgico en la entrada del PORTB<7:4> activa el indicador RBIF


(INTCON<0>). La interrupcin puede habilitarse o inhibirse activando o borrando,
respectivamente, el bit RBIE del registro INTCON<4>. Ver Seccin 3.2.

12.11 Salvando valores durante las interrupciones

Durante una interrupcin, solamente se salva en pila, de forma automtica, el PC. Normalmente,
el usuario desear salvar algn registro durante una interrupcin (por ejemplo el registro
STATUS); esto deber implementarlo en el programa con las instrucciones adecuadas.

Para los dispositivos PIC16F873/874, el registro W_TEMP estar definido en el conjunto de


bancos 0 y 1, y ser definido en la misma direccin relativa para ambos bancos (por ejemplo: si
W_TEMP se define en la direccin 020h en el banco 0, en el banco 1 su direccin ser 0A0h
(080h + 020h). Los registros PCLATH_TEMP y STATUS_TEMP estn definidos solamente en
el banco 0.
Puesto que los 16 bits ms altos de cada banco son comunes en los dispositivos PIC16F876/877,
los registros temporales W_TEMP, STATUS_TEMP y PCLATH_TEMP estarn situados aqu.
Estas 16 posiciones no necesitan dividirse en bancos y, por consiguiente, se hace ms fcil para
el programa la guarda y restauracin. En el Ejemplo 12-1 tenemos unos cdigos bsicos.

EJEMPLO 12-1: GUARDANDO EN RAM LOS REGISTROS STATUS, W Y PCLATH

MOVWF W_TEMP ;Copiar W en el registro temporal TEMP.


SWAPF STATUS,W ;Conmuta STATUS con W.
CLRF STATUS ;Selecciona banco 0. Borra IRP, RP1, RP0.
MOVWF STATUS_TEMP ;Salva STATUS de banco 0 en el registro
;STATUS_TEMP.
MOVF PCLATH,W ;Solamente requerido si se usa pginas 1,2
;y/0 3.
MOVWF PCLATH_TEMP ;Salva PCLATH en PCLATH_TEMP.
CLRF PCLATH ;Pgina 0, independientemente de la pgina
;actual.
:
: (ISR)
:
MOVF PCLATH_TEMP,W ;Restaura PCLATH a travs de W.
MOVWF PCLATH ;
SWAPF STATUS_TEMP,W ;Conmuta STATUS_TEMP con W (coloca
;el valor original del banco de trabajo.
MOVWF STATUS ;Carga W al registro STATUS.
SWAPF W_TEMP,F ;Devuelve el valor original a W. Se realiza
SWAPF W_TEMP,W ;pasando por el registro F y W_TEMP.

12-12 Temporizador supervisor (WDT)

El temporizador supervisor es un oscilador RC independiente que no necesita componente


externo alguno. Este oscilador RC est separado del oscilador RC de la patilla OSC1/CLKIN.
Este recurso permite funcionar al WDT aunque el reloj de OSC1/CLKIN y OSC2/CLKOUT
est detenido, por ejemplo, por la ejecucin de una instruccin SLEEP.

Durante la operacin normal, la finalizacin del tiempo de WDT genera un RESET al


dispositivo (Watchdog Timer Reset). Si el micro estuviese en modo SLEEP, el desbordamiento
Microcontrolador PIC16F876 Pgina 114

de WDT provoca el abandono de SLEEP y la continuacin con la operacin normal de


funcionamiento. El bit TO , en el registro STATUS, quedar en 0 cuando el WDT finalice su
cuenta.

El WDT puede inhibirse permanentemente borrando el bit de configuracin WDTE (Seccin


12.1).

El perodo del WDT, que puede encontrarse en las Especificaciones Elctricas, tiene un valor
tpico de 18 ms. y un mnimo de 7 ms. Los valores para el Predivisor de WDT (realmente es un
postdivisor, aunque es el mismo bloque que el Predivisor de Timer0) se asignarn usando el
registro OPTION_REG.

Nota: Las instrucciones CLRWDT y SLEEP borran el WDT y su postdivisor, si ste estuviese
asignado al WDT, y evitan la condicin de reset cuando se cumpla el tiempo de supervisin.

Nota: Cuando se ejecuta una instruccin CLRWDT, y el divisor est asignado al WDT
(postvisor), la cuenta de ste se borra pero la asignacin del divisor no vara.

FIGURA 12-11: RESUMEN DE REGISTROS DEL WATCHDOG


Direccin Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

2007h Bits de Config. (1) BODEN(1) CP1 CP0 -PWRTE(1) WDTE FOSC1 FOSC0

81h, 181h OPTION_REG -RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Las celdas sombreadas no se utilizan en el WDT.
Nota 1: Ver Registro 12-1 para operacin de estos bits.

12.13 Modo de bajo consumo (SLEEP)

Se entra en modo de bajo consumo ejecutando la instruccin SLEEP.

Si est habilitado, el Temporizador Supervisor (WDT) se inicializar, pero seguir funcionando,


el bit PD (STATUS<3>) se borra, TO (STATUS<4>) se activa, y el oscilador principal se
Microcontrolador PIC16F876 Pgina 115

desconecta. Las patillas de puertos E/S mantienen el estado que posean antes de que la
instruccin SLEEP se ejecutase (alto, bajo o alta impedancia).

Para el menor consumo en este modo, situar las patillas E/S en VDD o VSS, asegurndose de que
ningn circuito exterior conduce con este nivel, desconectar el convertidor A/D e inhibir los
relojes externos. Poner todas las patillas de E/S, que tienen entrada de alta impedancia, en alto o
bajo, para evitar corrientes de conmutacin por entradas en estado flotante. La entrada T0CKI
tambin debe conectarse a VDD o VSS, para obtener un consumo mnimo. La contribucin de las
polarizaciones internas en el PORTB sern tenidas en cuenta.

La patilla MCLR se deber poner a nivel lgico alto (VIHMC).

12.13.1 ABANDONO DEL ESTADO SLEEP

El dispositivo puede salir del estado SLEEP por una de las siguientes acciones:

1. Entrada de reset externo por la patilla MCLR .


2. Por final de temporizacin en WDT (si ste estuviese habilitado).
3. Interrupcin en la patilla INT, interrupcin por cambio en PORTB o interrupcin de
algn perifrico.

El reset externo MCLR provocar el reset del dispositivo. Los bits TO y PD , en el registro
de estado, pueden utilizarse para determinar la causa del reset. EL bit PD , que se pone a uno en
la conexin (POR), se borra cuando se entra en estado SLEEP. El bit TO se borra, si se
consume el tiempo WDT y se provoca el abandono del estado.

La interrupcin de los siguientes perifricos pueden ser la causa del abandono del estado
SLEEP:
1. Escritura o lectura de PSP.
2. Interrupcin de TMR1. Timer1 debe trabajar como contador asncrono.
3. Interrupcin en modo captura CCP.
4. Disparo por suceso especial (Timer1 en modo asncrono usando reloj externo).
5. Interrupcin por deteccin de bit SSP (Start/Stop).
6. Recepcin o transmisin de SSP en modo servidor (SPI/I2C).
7. RX o TX de la USART (modo servidor sncrono).
8. Conversin A/D (cuando la fuente de reloj de A/D es RC).
9. Operacin completa de escritura en EEPROM.

Otros perifricos no podrn generar interrupcin porque durante el estado SLEEP no es efectivo
el oscilador interno.

Cuando ha sido ejecutada la instruccin SLEEP, la prxima instruccin (PC + 1) se captura.


Para que el dispositivo abandone SLEEP por una interrupcin, el correspondiente bit de
habilitacin de interrupcin debe estar activo. La salida se produce, independientemente del
estado del bit GIE. Si ste estuviese borrado, el dispositivo continuar la ejecucin de la
instruccin siguiente al SLEEP. Si el bit GIE est activado, el dispositivo ejecuta la instruccin
siguiente al SLEEP y, despus, salta al vector de interrupcin 0004h. En casos en los que no se
desee la ejecucin siguiente al SLEEP, el usuario pondr una instruccin NOP (no operar)
despus del SLEEP.
Microcontrolador PIC16F876 Pgina 116

12.13.2 SALIDA USANDO INTERRUPCIONES

Cuando las interrupciones globales estn inhibidas (GIE borrado), y cualquier fuente de
interrupcin tenga activados los bits de habilitacin individual y sealizacin de interrupcin,
sucede algo de los siguiente:
Si la interrupcin ocurre antes de la ejecucin del SLEEP, sta se completa como una
instruccin NOP. Por consiguiente, el WDT y su postdivisor no se borrarn, el bit TO
no se activar, y el bit PD no se borrar.
Si la interrupcin sucede antes o durante la ejecucin de SLEEP, el dispositivo
abandonar inmediatamente el estado SLEEP. La instruccin SLEEP se ejecutar
completamente antes de producirse el abandono. De este modo, el WDT y su
postdivisor se borrarn, el bit TO se activar, y el bit PD se borrar.

Dependiendo del momento en que se chequearon los bits indicadores antes de ejecutar la
instruccin SLEEP, puede que stos se activen antes de que se complete la instruccin SLEEP.
Para determinar si se ejecut la instruccin SLEEP, hay que mirar el bit PD . Si ste es 1, la
instruccin se ejecut como una NOP. Para asegurar que el WDT est borrado, hay que ejecutar
una instruccin CLRWDT antes de la instruccin SLEEP.

12.14 Circuito interno de depuracin

Cuando se programa a 0 el bit DEBUG, en la palabra de configuracin, se habilita el circuito


interno de Depuracin. Esta funcin permite acciones sencillas de depuracin cuando se usa el
MPLAB. Cuando el microcontrolador tiene esta funcin habilitada, algunos de los recursos no
quedan disponibles para uso general. La Tabla 12-7 muestra las caractersticas consumidas por
el Depurador.

TABLA 12-7: RECURSOS DEL DEPURADOR


Patillas de E/S RB6 y RB7
Direccin 0000h contendr NOP
Memoria de Programa
ltimas 100h palabras
0x070(0x0F0, 0x170, 0x1F0)
Memoria de Datos
0x1EB 0x1EF
Microcontrolador PIC16F876 Pgina 117

Para usar la funcin interna de Depuracin del microcontrolador, el diseo debe implementar las
conexiones del circuito de Programacin Serie a MCLR/VPP, VDD, GND, RB7 y RB6. Esto
hace de interconexin para el mdulo del Depurador interno.

12.15 Verificacin del Programa/Cdigo de Proteccin

Si los bits del cdigo de proteccin no han sido programados, la Memoria de Programa interna
puede extraerse (leerse) para verificaciones.

12.16 Posiciones ID

Cuatro posiciones de memoria (2000h 2003h) se han previsto como posiciones ID, donde el
usuario puede almacenar cdigos de comprobacin o nmeros de identificacin. Estas
posiciones no son accesibles durante la ejecucin normal, pero pueden leerse y escribirse en el
proceso de programacin y verificacin. Se recomienda que solamente se usen los 4 bits menos
significativos de la posicin ID.

12.17 Circuito de Programacin Serie interno (ICSP)

Los microcontroladores PIC16F87X pueden programarse en serie. Es tan sencillo como dejar
dos lneas para datos y reloj, y otras tres para alimentacin, masa y tensin de programacin.

Cuando se utilice el ICSP, hay que suministrar 4,5V a 5,5V, si se ejecutaran una gran cantidad
de borrados, incluyendo reprogramacin de los cdigos de proteccin desde el estado de
conexin al de desconexin. En todos los dems casos de ICSP, se programar a la tensin
normal de trabajo.

12.18 Programacin ICSP en baja tensin

El bit LVP, de la palabra de configuracin, habilita la programacin ICSP en baja tensin. Este
modo permite al microcontrolador ser programado va ICSP, usando la tensin V DD como
tensin base de programacin. Para esto se necesita que VPP no se ponga a VIHH, pero puede, en
cambio, quedarse a la tensin normal de trabajo. En este modo, la patilla RB3/PGM se dedica a
la funcin de programacin, y deja de ser una patilla general de puerto E/S. Durante la
programacin, VDD se aplica a la patilla MCLR . Para entrar en modo programacin, VDD se
aplica a la patilla RB3/PGM, y se pondr a uno el bit LVP. Por defecto (de fbrica), el bit LVP
est a 1.

Nota 1: La programacin con alta tensin siempre est disponible, independientemente del
estado del bit LVP, aplicando VIHH a la patilla MCLR .
Nota 2: Mientras se est en modo ICSP de baja tensin, la patilla RB3 no puede utilizarse como
puerto de E/S.
Nota 3: Cuando se use programacin ICSP en baja tensin y las resistencias de polarizacin del
PORTB estn habilitadas, el bit 3 del registro TRISB debe borrarse para inhibir la polarizacin
de RB3 y asegurar la debida operacin del dispositivo.

Si no se utiliza la programacin en baja tensin, el bit LVP puede programarse a 0 y RB3/PGM


podr utilizarse como una patilla de puerto E/S. Sin embargo, el bit LVP ser programado,
nicamente, cuando se entre en modo programacin con V IHH en la patilla MCLR . El bit LVP
se cargar solamente cuando se use alta tensin sobre MCLR .

Cada vez que se programa a 0 el bit LVP, solamente se dispone de programacin en alta
tensin, y solamente este modo podr usarse para programar el dispositivo.
Microcontrolador PIC16F876 Pgina 118

13.0 RESUMEN DEL CONJUNTO DE INSTRUCCIONES

Cada instruccin en los PIC16F87X se compone de una palabra de 14 bits, dividida en un


Cdigo de Operacin (OPCODE), que especifica el tipo de instruccin, y uno o ms operandos
que especifican la operacin de la instruccin. El conjunto de instrucciones de la Tabla 13-2
lista las operaciones orientadas a bit, orientadas a byte, literales y de control. La Tabla 13-1
muestra el campo de descripciones del Cdigo de Operacin.

Para instrucciones orientadas a byte, f representa la designacin de un registro del fichero, y


d representa la designacin del destino. La designacin del registro fichero especifica qu
registro fichero est usando la instruccin.

La designacin del destino, especifica dnde se situar el resultado de la operacin: si d es 0,


el resultado se sita en el registro W, si d es 1, el resultado se coloca en el registro fichero
especificado en la propia instruccin.

Para instrucciones orientadas a byte, b representa un bit, cuyo nmero indica la posicin del
bit afectado por la operacin, en la que f es el registro en que se localiza el bit designado.

Para operaciones literales, k representa un valor constante de 8 bits; en operaciones de


control, k es un nmero de 11 bits.

TABLA 13-1: DESCRIPCIN DE


INDICADORES DEL CDIGO DE
OPERACIN
Indicador Descripcin
Registro fichero. Direccin 0x00 a
f
0x7Fh.
W Registro de trabajo (acumulador).
Nmero de bit en un registro de 8
b
bits
k Dato constante o etiqueta.
Cualquier valor (0 o 1).
El ensamblador generar cdigos
con x = 0. Es la forma de uso
x recomendada para la
compatibilidad con todas las
herramientas de desarrollo de
Microchip.
Seleccin de destino; d = 0:
resultado se guarda en W,
d d = 1: resultado se almacena en el
registro f.
Por defecto, f = 1.
PC Contador de Programa.
TO Bit de fin de temporizacin.
PD Bit de bajo consumo.

El conjunto de instrucciones est en orden alfabtico y agrupadas en tres categoras bsicas:


Operaciones orientadas a byte.
Operaciones orientadas a bit.
Operaciones literales y de control.
Microcontrolador PIC16F876 Pgina 119

Todas las instrucciones se ejecutan en un nico ciclo de instruccin, menos las de comparacin-
coincidencia, o las de cambio del Contador de Programa como resultado de una instruccin. En
estos casos, la ejecucin supone dos ciclos de instruccin. Un ciclo de instruccin consiste en
cuatro perodos del oscilador. Por esto, para una frecuencia del oscilador de 4 Mhz, la ejecucin
de una instruccin normal supone un tiempo de 1 s. Si se trata de instrucciones de
comparacin-coincidencia, o de cambio del valor del Contador de Programa como resultado de
una instruccin, el tiempo necesario ser el doble.

En la Tabla 13-2 se detallan las instrucciones reconocidas por el ensamblador MPASM.

En la Figura 13-1 se muestra el formato general que puede tener una instruccin.

Nota: Para mantener la compatibilidad con futuros dispositivos PIC, no usar las instrucciones
OPTION y TRIS.

Todos los ejemplso usan el formato 0xhh para representar cantidades hexadecimales, donde hh
representan las cifras hexadecimales.

TABLA 13:2 CONJUNTO DE ISTRUCCIONES DEL PIC16F87X


Mnemotcnicos, Cdigo de operacin 14 bits Status
Descripcin Ciclos Notas
Operandos MSb LSb afectado
OPERACIONES ORIENTADAS A BYTE
ADDWF f, d Suma W y f 1 00 0111 dfff ffff C, DC,Z 1, 2
ANDWF f, d Funcin AND de W con f 1 00 0101 dfff ffff Z 1, 2
CLRF f Borra f 1 00 0001 1fff ffff Z 2
CLRW Borra W 1 00 0001 0 xxx xxxx Z
COMF f, d Complementa f 1 00 1001 dfff ffff Z 1, 2
DECF f, d Decrementa f 1 00 0011 dfff ffff Z 1, 2
DECFSZ f, d Decrementa f y salta si cero 1 (2) 00 1011 dfff ffff 1, 2, 3
INCF f, d Incrementa f 1 00 1010 dfff ffff Z 1, 2
INCFSZ f, d Incrementa f y salta si cero 1 (2) 00 1111 dfff ffff 1, 2, 3
IORWF f, d Funcin OR de W con f 1 00 0100 dfff ffff Z 1, 2
MOVF f, d Mueve f 1 00 1000 dfff ffff Z 1, 2
MOVWF f Mueve W a f 1 00 0000 1fff ffff
NOP No opera 1 00 0000 0xx0 0000
RLF f, d Rotacin a izda. de f a travs de Carry 1 00 1101 dfff ffff C 1, 2
RRF f, d Rotacin a dcha. de f a travs de Carry 1 00 1100 dfff ffff C 1, 2
SUBWF f, d Resta W de f 1 00 0010 dfff ffff C, DC, Z 1, 2
SWAPF f, d Conmuta cuartetos en f 1 00 1110 dfff ffff 1, 2
XORWF f, d Funcin OREX de W con f 1 00 0110 dfff ffff Z 1, 2
OPERACIONES ORIENTADAS A BIT
BCF f, b Borra bit b de f 1 01 00bb bfff ffff 1, 2
BSF f, b Activa bit b de f 1 01 01bb bfff ffff 1, 2
BTFSC f, b Comprueba bit b de f y salto si 0 1 (2) 01 10bb bfff ffff 3
BTFSS f, b Comprueba bit b de f y salto si 1 1 (2) 01 11bb bfff ffff 3
OPERACIONES LITERALES Y DE CONTROL
ADDLW k Suma W y k. 1 11 111x kkkk kkkk C, DC, Z
ANDLW k Funcin AND de W y k 1 11 1001 kkkk kkkk Z
CALL k Llamada a subrutina 2 10 0kkk kkkk kkkk
CLRWDT Borra el WDT 1 00 0000 0110 0100 -TO, -PD
GOTO k Salto a la direccin k 2 10 1kkk kkkk kkkk
IORLW k Funcin OR de W y k 1 11 1000 kkkk kkkk Z
MOVLW k Mover k a W 1 11 00xx kkkk kkkk
RETFIE Retorno de interrupcin 2 00 0000 0000 1001
RETLW k Retorno cargando k en W 2 11 01xx kkkk kkkk
RETURN Retorno de subrutina 2 00 0000 0000 1000
SLEEP Va a modo reposo 1 00 0000 0110 0011 -TO, -PD
SUBLW k Resta W de k 1 11 110x kkkk kkkk C, DC, Z
XORLW k Funcin OREX de W y k 1 11 1010 kkkk kkkk Z
Nota 1: Cuando se modifica un registro de E/S en funcin de l mismo (por ejemplo MOVF PORTB,1), el valor
usado ser el valor presente en las mismas patillas. Por ejemplo, si el valor del latch de datos es 1 para una
patilla configurada como entrada, y se pone a 0 por una seal externa, el dato que se escribir ser un 0.
Nota 2: Si esta instruccin se ejecuta en el registro TMR0 (y cuando se aplique d = 1), el Predivisor se borrar si
est asignado al mdulo Timer0.
Nota 3: Si se modifica el Contador de Programa (PC), o es verdadero el resultado de una comparacin, la instruccin
requiere dos ciclos. EL segundo ciclo se ejecuta como un NOP (no se realiza trabajo aparente alguno).
Microcontrolador PIC16F876 Pgina 120

13.1 Descripcin de instrucciones

ADDLW Suma W y Literal BSF Activa un bit del registro f

Sintaxis: ADDLW k Sintaxis: BSF f, b


Operandos: 0 k 255 Operandos: 0 f 127
Operacin: (W) + k (W) 0b7
Estado afdo.: C, DC, Z Operacin: 1 (f<b>)
Descripcin: El contenido del registro W se Estado afdo.: Ninguno
suma al byte de k, y el Descripcin: Se activa el bit numerado b del
resultado se guarda en W. registro f.

ADDWF Suma W y f

Sintaxis: ADDWF f, d
Operandos: 0 f 127 BTFSS Chequea el bit b del registro
d [0,1] f, y salta si es 1.
Operacin: (W) + (f) (destino)
Estado afdo.: C, DC, Z Sintaxis: BTFSS f, b
Descripcin: El contenido del registro W se Operandos: 0 f 127
suma al registro f. Si d es 0, 0b7
el resultado se almacena en W; si Operacin: Salta si (f<b>) = 1
d es 1, el resultado se guarda en Estado afdo.: Ninguno
el registro f. Descripcin: Si el bit b del registro f es
uno, se salta la prxima
instruccin. Se invierten en total 2
ciclos de instruccin (2TCY).
ANDLW AND de W con Literal

Sintaxis: ANDLW k BTFSC Chequea el bit b del registro


Operandos: 0 k 255 f, y salta si es 0.
Operacin: (W) AND (k) (W)
Estado afdo.: Z Sintaxis: BTFSC f, b
Descripcin: Se realiza la funcin AND del Operandos: 0 f 127
contenido de W con la palabra 0b7
literal k. El resultado queda en Operacin: Salta si (f<b>) = 0
W. Estado afdo.: Ninguno
Descripcin: Si el bit b del registro f es
cero, se salta la prxima
instruccin. Se invierten en total 2
ciclos de instruccin.
ANDWF AND de W con f

Sintaxis: ANDWF f, d CALL Llamada a Subrutina.


Operandos: 0 f 127
d [0,1] Sintaxis: CALL k
Operacin: (W) AND (f) (destino) Operandos: 0 k 2047
Estado afdo.: Z Operacin: (PC) + 1 TOS,
Descripcin: And de W con el registro f. Si k PC<10:0>,
d es 0, el resultado se almacena (PCLATH<4:3>)PC<12:11>
en W; si d es 1, el resultado se Estado afdo.: Ninguno
guarda en el registro f. Descripcin: Salta a ejecutar el programa
(subrutina) que se encuentra en la
direccin dada por el contenido
de k (11 bits de menor peso) y
BCF Borra un bit del registro f el PCLATH (bits de mayor peso).
Antes de cargar PC con la nueva
Sintaxis: BCF f, b direccin, guarda en pila el PC
Operandos: 0 f 127 actual, para poder regresar cuando
0b7 se lo mande el programa. EL PC
Operacin: 0 (f<b>) actual ser la direccin donde se
Estado afdo.: Ninguno ubica el CALL ms uno.
Descripcin: Se borra el bit numerado b del
registro f.
Microcontrolador PIC16F876 Pgina 121

CLRF Borrado de f DECFSZ Decrementa f, y salto si = 0

Sintaxis: CLRF f Sintaxis: DECFSZ f, d


Operandos: 0 f 127 Operandos: 0 f 127
Operacin: 00 (f) d [0,1]
1 Z Operacin: (f) - 1 (destino);
Estado afdo.: Z salto si resultado = 0.
Descripcin: Se borra el contenido del registro Estado afdo.: ninguno
f, activndose el indicador Z. Descripcin: Se decrementa el contenido del
registro f. Si d es cero, el
resultado se almacena en W; si es
CLRW Borrado de W uno, en el propio registro f.
Si el resultado es 1, la prxima
Sintaxis: CLRW instruccin se ejecutar; si el
Operandos: Ninguno resultado es 0, se ejecutar una
Operacin: 00 (W) instruccin NOP, invirtiendo 2
1 Z ciclos de instruccin en ese caso.
Estado afdo.: Z
Descripcin: Se borra el contenido del registro GOTO Salto incondicional
W. Se activa el indicador Z.
Sintaxis: GOTO k
Operandos: 0 k 2047
CLRWDT Borrado del Watchdog Timer Operacin: k PC<10:0>
PCLATH<4:3> PC<12:11>
Sintaxis: CLRWDT Estado afdo.: ninguno
Operandos: Ninguno Descripcin: Salto incondicional a la direccin
Operacin: 00 WDT as conseguida:
0 Predivisor WDT Se carga PC, en sus 11 bits de
1 -TO menor peso (PC<10:0>), con el
1 -PD contenido de k. Los 2 bits de
Estado afdo.: -TO, -PD ms peso de PC se toman de
Descripcin: Se borra el contenido del registro PCLATH. Esta instruccin se
WDT y de su Predivisor. Se ejecuta en 2 ciclos de instruccin.
activan los bits indicadores de
estado TO y PD. INCF Incrementa el registro f

Sintaxis: INCF f, d
COMF Complementa el registro f Operandos: 0 f 127
d [0,1]
Sintaxis: COMF f, d Operacin: (f) + 1 (destino)
Operandos: 0 f 127 Estado afdo.: Z
d [0,1] Descripcin: Se incrementa el contenido del
Operacin: (f) (destino) registro f. Si d es cero, el
Estado afdo.: Z resultado se almacena en W; si es
Descripcin: Se complementa el contenido del uno, en el propio registro f.
registro f. Si d es cero, el
resultado se almacena en W; si es INCFSZ Incrementa f, y salto si = 0
uno, en el propio registro f.
Sintaxis: INCFSZ f, d
Operandos: 0 f 127
DECF Decrementa el registro f d [0,1]
Operacin: (f) + 1 (destino);
Sintaxis: DECF f, d salto si resultado = 0.
Operandos: 0 f 127 Estado afdo.: ninguno
d [0,1] Descripcin: Se incrementa el contenido del
Operacin: (f) - 1 (destino) registro f. Si d es cero, el
Estado afdo.: Z resultado se almacena en W; si es
Descripcin: Se decrementa el contenido del uno, en el propio registro f.
registro f. Si d es cero, el Si el resultado es 1, la prxima
resultado se almacena en W; si es instruccin se ejecutar; si el
uno, en el propio registro f. resultado es 0, se ejecutar una
instruccin NOP, invirtiendo 2
ciclos de instruccin en ese caso.
Microcontrolador PIC16F876 Pgina 122

IORLW Funcin OR de Literal con W NOP No Operar

Sintaxis: IORLW k Sintaxis: NOP


Operandos: 0 k 255 Operandos: Ninguno
Operacin: (W) OR k (W) Operacin: No opera
Estado afdo.: Z Estado afdo.: Ninguno
Descripcin: Se realiza la funcin OR entre el Descripcin: No se realiza operacin alguna.
contenido del registro W y la
palabra literal k. El resultado
queda en W.
RETFIE Retorno desde interrupcin

Sintaxis: RETFIE
IORWF Funcin OR entre W y f Operandos: Ninguno
Operacin: TOS PC; 1 GIE
Sintaxis: IORWF f, d Estado afdo.: Ninguno
Operandos: 0 f 127 Descripcin: Al cargar PC con el contenido de
d [0,1] la ltima posicin de pila, se
Operacin: (W) OR f (destino) retornar al programa principal,
Estado afdo.: Z que se abandon para atender la
Descripcin: Se realiza la funcin OR con los interrupcin.
contenidos de los registros W y
f. El resultado quedar en W si
d = 0; en caso contrario, el RETLW Retorno con Literal en W
resultado se almacena en f.
Sintaxis: RETLW k
Operandos: 0 k 255
Operacin: k (W); TOS PC
MOVF Mueve f Estado afdo.: Ninguno
Descripcin: El registro W se carga con la
Sintaxis: MOVF f, d palabra k. El contador de
Operandos: 0 f 127 programa se carga con el
d [0,1] contenido ltimo de la pila. Esta
Operacin: (f) (destino) instruccin tiene 2TCY.
Estado afdo.: Z
Descripcin: Se lleva el contenido de f al
destino, que depender del valor RETURN Retorno de Subrutina
de d: si ste es 0, el contenido
de f va a parar a W; en caso Sintaxis: RETURN
contrario, el contenido de f se Operandos: Ninguno
carga sobre s mismo. Esta ltima Operacin: TOS PC
operacin, aparentemente intil, Estado afdo.: Ninguno
puede servir para comprobar el Descripcin: Retorno desde una subrutina. Se
valor cero de f. extrae el ltimo valor que entr
en pila, para cargarse en el PC.
De esta forma se regresa al
programa principal en donde se
MOVLW Mueve Literal a W abandon para saltar a subrutina.
Esta instruccin tiene 2TCY.
Sintaxis: MOVLW k
Operandos: 0 k 255
Operacin: (k) (W)
Estado afdo.: Ninguno RLF Rotacin a izquierda a travs de
Descripcin: Los ocho bits de la palabra k se Carry
cargan en el registro W.
Sintaxis: RLF f, d
Operandos: 0 f 127
d [0,1]
MOVWF Mueve W a f Operacin: Ver descripcin abajo
Estado afdo.: C
Sintaxis: MOVWF f Descripcin: El contenido del registro f se
Operandos: 0 f 127 rota a la izquierda a travs del
Operacin: (W) (f) Carry, en quien se cargar el bit
Estado afdo.: Ninguno de ms peso de f. El resto de
Descripcin: Mueve el dato de W al registro bits de f se desplazan desde
f. menor a mayor peso.
Microcontrolador PIC16F876 Pgina 123

RRF Rotacin a derecha a travs de SWAPF Conmuta cuartetos de f


Carry
Sintaxis: SWAPF f, d
Sintaxis: RRF f, d Operandos: 0 f 127
Operandos: 0 f 127 d [0,1]
d [0,1] Operacin: (f<3:0>) (destino<7:4>)
Operacin: Ver descripcin abajo (f<7:4>) (destino<3:0>)
Estado afdo.: C Estado afdo.: Ninguno
Descripcin: El contenido del registro f se Descripcin: Se permutan los dos cuartetos
rota a la derecha a travs del (nibbles) del byte del registro f.
Carry, en quien se cargar el bit Si d = 0, el resultado de la
de menos peso de f. El resto de permuta se sita en el registro W;
bits de f se desplazan desde si d = 1, el resultado se coloca
mayor a menor peso. en f.

SLEEP Estado vigilante


XORLW XOR de Literal con W
Sintaxis: SLEEP
Operandos: Ninguno Sintaxis: XORLW k
Operacin: 00 WDT Operandos: 0 k 255
0 Predivisor WDT Operacin: (W) XOR k (W)
1 -TO Estado afdo.: Z
0 -PD Descripcin: Se realiza la funcin OR
Estado afdo.: -TO, -PD EXCLUSIVA entre el contenido
Descripcin: Se borra el bit de estado de bajo del registro W y la palabra literal
consumo PD y se activa el bit k. El resultado queda en W.
indicador de final de tiempo, -TO.
Se borra el registro WDT y su
Predivisor. El procesador se lleva
al modo SLEEP, con el oscilador
parado. XORWF XOR entre W y f

Sintaxis: XORWF f, d
Operandos: 0 f 127
SUBLW Resta W a Literal d [0,1]
Operacin: (W) XOR f (destino)
Sintaxis: SUBLW k Estado afdo.: Z
Operandos: 0 k 255 Descripcin: Se realiza la funcin OR
Operacin: (k) (W) (W) EXCLUSIVA con los contenidos
Estado afdo.: C, DC, Z de los registros W y f. El
Descripcin: El contenido del registro W se resultado quedar en W si d =
resta del byte contenido en k; el 0; en caso contrario, el resultado
resultado se guarda en W. se almacena en f.
C = 1 Resultado positivo
C = 0 Resultado negativo

SUBWF Resta W de f

Sintaxis: SUBWF f, d
Operandos: 0 f 127
d [0,1]
Operacin: (f) - (W) (destino)
Estado afdo.: C, DC, Z
Descripcin: El contenido del registro W se
resta del contenido del registro
f, por el mtodo del
complemento a dos. Si d es 0,
el resultado se almacena en W; si
d es 1, el resultado se guarda en
el registro f.
C = 1 Resultado positivo.
C = 0 Resultado negativo.
Microcontrolador PIC16F876 Pgina 124

15.0 CARACTERSTICAS ELCTRICAS

Rango Mximo Absoluto

Temperatura ambiente en polarizacin ..................................................................................... -55 a +125 C


Temperatura de almacenamiento ................................................................................................ -65 a 150 C
Tensin en cualquier patilla respecto a VSS (excepto VDD, -MCLR y RA4) ................ -0,3V a (VDD + 0,3V)
Tensin en VDD con respecto a VSS ............................................................................................ -0,3 a +7,5V
Tensin en MCLR con respecto a VSS .......................................................................................... 0 a +14V
Tensin en RA4 con respecto a VSS ................................................................................................. 0 a 8,5V
Disipacin total de potencia (Nota 1) .................................................................................................... 1,0W
Mxima corriente de salida de la patilla VSS ..................................................................................... 300 mA
Mxima corriente en la patilla VDD ................................................................................................... 250 mA
Corriente de entrada de proteccin, IIK (VI < 0 o VI > VDD) .......................................................... +/- 20 mA
Corriente de salida de proteccin, IOK (VO < 0 o VO > VDD) ......................................................... +/- 20 mA
Mxima corriente de salida de cualquier patilla E/S a V SS .................................................................. 25 mA
Mxima corriente de salida de cualquier patilla E/S a VDD ................................................................. 25 mA
Mxima corriente a VSS por PORTA, PORTB y PORTE (combinada) (Nota 3) .............................. 200 mA
Mxima corriente a VDD por PORTA, PORTB y PORTE (combinada) (Nota 3) ............................. 200 mA
Mxima corriente a VSS por PORTC y PORTD (combinada) (Nota 3)............................................. 200 mA
Mxima corriente a VDD por PORTC y PORTD (combinada) (Nota 3) ............................................ 200 mA

Nota 1: La potencia disipada se calcula as: Pdis = VDD (IDD - IOH) + [(VDD VOH) IOH] +
(VOL IOL).

Nota 2: Los picos de tensin por debajo de VSS en la patilla MCLR, que induzcan corrientes mayores
de 80 mA, pueden bloquear al dispositivo. Por esto se conecta un resistor en serie, de valor
hmico ente 50 y 100, cuando se aplique un nivel bajo a la patilla MCLR, y algo mayor
cuando se conecte directamente a VSS.

Nota 3: PORTD y PORTE no estn implementados en los dispositivos de 28 patillas.

IMPORTANTE: Valores por encima de los listados en Rango Mximo Absoluto pueden causar daos
en el dispositivo. Asimismo, exposiciones prolongadas de las condiciones arriba indicadas, pueden afectar
a la fiabilidad del dispositivo.
Microcontrolador PIC16F876 Pgina 125
Microcontrolador PIC16F876 Pgina 126
Microcontrolador PIC16F876 Pgina 127

Tabla 15-1: PIC16F873/874/876/877-04 (Comercial, Industrial)


PIC16F873/874/876/877-20 (Comercial, Industrial)
Condiciones de trabajo Estndar (salvo indicacin en contra)
CARACTERSTICAS DC Temperatura de trabajo 40C TA +85C para industrial y
0C TA +70C para comercial
Parm.
Caractersticas Smbolo Mn. Tp. Mx. Unid. Condiciones
N
Configuracin de oscilacin
4,0 --- 5,5
XT, RC y LP.
D001 Tensin de Configuracin de oscilacin
VDD 4,5 --- 5,5 V
D001A alimentacin HS.
BOR habilitado, Fmx = 14
VBOR* --- 5,5
Mhz (Nota 7)
Tensin de retencin
D002* VDR --- 1,5 --- V
datos RAM (Nota 1)
VDD arranque para
Ver seccin Reset de
D003 asegurar la seal de VPOR --- VSS --- V
conexin para los detalles.
Reset interno (POR)
Velocidad de subida
Ver seccin Reset de
D004* de VDD para asegurar SVDD 0,05 --- --- V/ms
conexin para los detalles.
el reset interno (POR)
Habilitado bit BODEN en
D005 Tensin de reset BOR VBOR 3,7 4,0 4,35 V
configuracin.
Oscilacin XT, y RC
D010 --- 1,6 4
Fosc = 4 Mhz, VDD = 5,5 V
Corriente alimentacin
(Nota 4)
(Nota 2, 5) IDD mA
Oscilacin HS
D013 --- 7 15
Fosc = 20 Mhz, VDD = 5,5 V
D015* Corriente BOR (Nota 6) IBOR --- 85 200 A BOR habilitado, VDD=5,0V
VDD=4,0V, WDT habilitado,
D020 --- 10,5 42
-40 C a 85 C
Corriente bajo consumo VDD=4,0V, WDT inhibido,
D021 IPD --- 1,5 16 A
(Nota 3, 5) 0 C a 70 C
VDD=4,0V, WDT inhibido,
D021A --- 1,5 19
-40 C a 85 C
Corriente BOR
D023* IBOR --- 85 200 A BOR habilitado, VDD = 5,0V
(Nota 6)
Smbolo: * Parmetros caractersticos, pero no probados.
Dato en columna Tp es a 5V, 25C, salvo otra especificacin. Estos parmetros son para gua de
diseo, pero no estn probados.
Nota 1: Este es el lmite al que puede bajar VDD sin perder los datos de la RAM.
2: La corriente de alimentacin es, principalmente, funcin de la tensin de trabajo y de la frecuencia. Otros
factores, como la carga de las patillas E/S, la velocidad de conmutacin, tipo de oscilador, modelo del
cdigo interno de ejecucin y temperatura, tambin tienen efecto sobre la corriente consumida.
Las condiciones de prueba para todas las medidas de IDD, en modo activo de operacin, son:
OSC1 = Onda cuadrada externa; todas las patillas triestado, conectadas a V DD.
-MCLR = VDD; WDT habilitado o inhibido, segn se especifique.
3: La corriente en modo SLEEP no depende del tipo de oscilador. Esta corriente se mide con el bloque en
modo SLEEP, con todas las patillas E/S en alta impedancia y conectadas a V DD y VSS.
4: Para configuracin de oscilador RC, no se incluye la corriente a travs de la R externa. sta puede
estimarse con la frmula Ir = VDD/2Rext (mA), con Rext en K.
5: El oscilador del Timer1, cuando se habilita, aade 20 A a la corriente especificada. Este valor sirve
como gua de diseo, pero no est probado.
6: La corriente es la corriente adicional consumida cuando este perifrico est habilitado. Esta corriente se
aadir a la base IDD o IPD medida.
7: Cuando se habilita BOR, el dispositivo operar correctamente hasta alcanzar el punto de cada de tensin
marcado como VBOR.
Microcontrolador PIC16F876 Pgina 128

Tabla 15-2: Caractersticas DC: PIC16F873/874/876/877-04 (Comercial, Industrial)


Condiciones de trabajo Estndar (salvo indicacin en contra)
CARACTERSTICAS DC Temperatura de trabajo 40 C TA +85 C para industrial y
0 C TA +70 C para comercial
Parm.
Caractersticas Smbolo Mn. Tp. Mx. Unid. Condiciones
N
Tensin de Configuracin de oscilacin
D001 VDD 2,0 --- 5,5 V
alimentacin XT, RC y LP (DC 4 Mhz).
Tensin de retencin
D002* VDR --- 1,5 --- V
datos RAM (Nota 1)
VDD arranque para
Ver seccin Reset de
D003 asegurar la seal de VPOR --- VSS --- V
conexin para los detalles.
Reset interno (POR)
Velocidad de subida
Ver seccin Reset de
D004* de VDD para asegurar SVDD 0,05 --- --- V/ms
conexin para los detalles.
el reset interno (POR)
Habilitado bit BODEN en
D005 Tensin de reset BOR VBOR 3,7 4,0 4,35 V
configuracin.
--- 0,6 2,0 mA Oscilacin XT, y RC
D010
Fosc = 4 Mhz, VDD = 3,0V
(Nota 4)
Corriente alimentacin
(Nota 2, 5) IDD
Oscilacin LP
Fosc = 32 Khz, VDD = 3,0V,
D010A
--- 20 35 A WDT inhibido.
Corriente BOR
D015* IBOR --- 85 200 A Habilitacin BOR, VDD = 5,0V
(Nota 6)
VDD = 3,0V, WDT habilitado,
D020 --- 7,5 30
-40 C a 85 C
Corriente bajo consumo VDD = 3,0 V, WDT inhibido,
D021 IPD --- 0,9 5 A
(Nota 3, 5) 0 C a 70 C
VDD = 3,0 V, WDT inhibido,
D021A --- 0,9 5
-40 C a 85 C
Corriente BOR
D023* IBOR --- 85 200 A Habilitacin BOR, VDD = 5,0V
(Nota 6)
Smbolo: * Parmetros caractersticos, pero no probados.
Dato en columna Tp es a 5V, 25C, salvo otra especificacin. Estos parmetros son para gua de
diseo, pero no estn probados.
Nota 1: Este es el lmite al que puede bajar VDD sin perder los datos de la RAM.
2: La corriente de alimentacin es, principalmente, funcin de la tensin de trabajo y de la frecuencia. Otros
factores como la carga de las patillas E/S, la velocidad de conmutacin, tipo de oscilador, modelo del
cdigo interno de ejecucin y temperatura, tambin tienen efecto sobre la corriente consumida.
Las condiciones de prueba para todas las medidas de IDD, en modo activo de operacin, son:
OSC1 = Onda cuadrada externa; todas las patillas triestado, conectadas a V DD.
-MCLR = VDD; WDT habilitado o inhibido, segn se especifique.
3: La corriente en modo SLEEP no depende del tipo de oscilador. Esta corriente se mide con el bloque en
modo SLEEP, con todas las patillas E/S en alta impedancia y conectadas a V DD y VSS.
4: Para configuracin de oscilador RC, no se incluye la corriente a travs de la R externa. sta puede
estimarse con la frmula Ir = VDD/2Rext (mA), con Rext en K.
5: El oscilador del Timer1, cuando se habilita, aade 20 A a la corriente especificada. Este valor sirve
como gua de diseo, pero no est probado.
6: La corriente es la corriente adicional consumida cuando este perifrico est habilitado. Esta corriente se
aadir a la base IDD o IPD medida.
Microcontrolador PIC16F876 Pgina 129

Tabla 15-3: Caractersticas DC: PIC16F873/874/876/877-04 (Comercial, Industrial)


PIC16F873/874/876/877-20 (Comercial, Industrial)
PIC16L873/874/876/877-04 (Comercial, Industrial)
Condiciones de trabajo Estndar (salvo indicacin en
contra)
CARACTERSTICAS DC
Temperatura de trabajo 40 C TA +85 C para industrial y
0 C TA +70 C para comercial
Parm.
Caractersticas Smbolo Mn. Tp. Mx. Unid. Condiciones
N
Tensin entrada baja
Puertos E/S
D030 con buffer TTL VSS 0,15VDD En todo el rango VDD
D030A VSS 0,8V 4,5 V VDD 5,5 V
D031 con buffer ST VSS 0,2VDD
VIL V
D032 -MCLR, OSC1 (modo RC) VSS 0,2VDD
---
D033 OSC1 (en XT, HS y LP) VSS 0,3VDD Nota 1
Puertos RC3 y RC4
D034 con buffer ST VSS 0,3VDD En todo el rango VDD
D034A con SMBus -0,5 0,6 para VDD = 4,5 a 5,5 V
Tensin entrada alta
Puertos E/S
D040 con buffer TTL 2,0 VDD En todo el rango VDD
D040A 0,25VDD VDD 4,5 V VDD 5,5 V
+0,8 VDD

D041 con buffer ST VIH 0,8VDD VDD En el rango de VDD


D042 -MCLR 0,8VDD --- VDD V
D042A OSC1 (XT, HS y LP) 0,7VDD VDD Nota 1
D043 OSC1 (en modo RC) 0,9VDD VDD
Puertos RC3 y RC4
D044 con buffer ST 0,7VDD VDD En todo el rango VDD
D044A con SMBus 1,4 5,5 para VDD = 4,5 a 5,5 V
PORTB con pequea
D070 IPURB 50 250 400 A VDD = 5 V, VPIN = VSS
corriente de polarizacin
I de fuga en entrada
(Notas 2 y 3)
VSS VPIN VDD,
D060 Puertos E/S +/- 1
patilla en alta imped.
IIL --- --- A
VSS VPIN VDD
D061 -MCLR, RA4/T0CKI +/- 5
D063 OSC1 +/- 5 VSS VPIN VDD,
config. XT, HS y LP.
Voltaje salida baja
D080 Puertos E/S IOL=8,5mA, VDD=4,5V
VOL --- --- 0,6 V de -40 C a 85 C
D083 OSC2/CLKOUT (config. IOL=1,6mA, VDD=4,5V
en modo RC) de -40 C a 85 C
Smbolo: * Parmetros caractersticos, pero no probados.
Dato en columna Tp es a 5V, 25C, salvo otra especificacin. Estos parmetros son para gua de
diseo, pero no estn probados.
Nota 1: En configuracin de oscilador RC, la patilla OSC1/CLKIN es una entrada Schmitt Trigger (ST). No se
recomienda que el PIC16F87X se conecte con reloj externo en modo RC.
2: La corriente de fugas en la patilla MCLR es muy dependiente del nivel de tensin aplicado. Los niveles
expresados representan condiciones normales de trabajo. Corrientes mayores de fuga se obtendrn con
diferentes tensiones de entrada.
3: Una corriente negativa quiere expresar la corriente saliente de la patilla.
Microcontrolador PIC16F876 Pgina 130

Condiciones de trabajo Estndar (salvo indicacin en contra)


CARACTERSTICAS DC Temperatura de trabajo 40 C TA +85 C para industrial y
0 C TA +70 C para comercial
Parm.
Caractersticas Smb. Mn. Tp. Mx. Unid. Condiciones
N
Tensin salida alta
D090 Puertos E/S (Nota 3) IOH=-3,0mA. VDD=4,5V,
VOH VDD - 0,7 --- --- V de 40 C a +85 C
D092 OSC2/CLKOUT (config. IOH=-1,3mA. VDD=4,5V,
modo RC) de 40 C a +85 C
Tensin alta drenador
D150 VOD --- --- 8,5 V Patilla RA4
abierto
Capacidad de carga en
patillas de salida
D100 Patilla OSC2 COSC2 15
En modos XT, HS y LP, cuando
--- --- pF
se usa reloj externo en OSC1.
D101 Todas las patillas E/S y OSC2 CIO 50
D102 (modo RC), SCL SDA en CB 400
modo I2C
Memoria EEPROM de datos
D120 Duracin ED 100K --- --- E/W 25 C a 5V
D121 VDD para lectura-escritura VDRW Vmn --- 5,5 V Usando EECON para leer/escribir

D122 Ciclo de borrado-escritura TDEW --- 4 8 ms Vmn= mnima tensin de trabajo


Memoria de Programa
FLASH
D130 Duracin EP 1000 --- --- E/W 25 C a 5 V
D131 VDD para lectura VPR Vmn --- 5,5 V Vmm = Mn. tensin de trabajo
D132a VDD para borrado-escritura Vmn --- 5,5 V usando EECON para leer-escribir

D133 Ciclo de borrado-escritura TPEW --- 4 8 ms Vmm = Mn. tensin de trabajo


Smbolo: * Parmetros caractersticos, pero no probados.
Dato en columna Tp es a 5V, 25C, salvo otra especificacin. Estos parmetros son para gua de diseo,
pero no estn probados.
Nota 1: En configuracin de oscilador RC, la patilla OSC1/CLKIN es una entrada Schmitt Trigger (ST). No se
recomienda que el PIC16F87X se conecte con reloj externo en modo RC.
2: La corriente de fugas en la patilla MCLR es muy dependiente del nivel de tensin aplicado. Los niveles
expresados representan condiciones normales de trabajo. Corrientes mayores de fuga se obtendrn con
diferentes tensiones de entrada.
3: Una corriente negativa quiere expresar la corriente saliente de la patilla.
Microcontrolador PIC16F876 Pgina 131

Tabla 15-1: REQUISITOS DE TEMPORIZACIN DE RELOJ EXTERNO


Parm.
Smb. Caractersticas Mn. Tp. Mx. Unid. Condiciones
N
DC --- 4 MHz
Frecuencia CLKIN externo DC --- 4 MHz Modos XTy RC
(Nota 1) DC --- 20 MHz Modo
DC --- 200 MHz
FOSC
DC --- 4 MHz Modo RC
Frecuencia del oscilador 0,1 --- 4 MHz Modo XT
(Nota 1) 4 --- 20 MHz Modo HS
5 --- 200 KHz Modo LP
250 --- --- ns Modo XT y RC
Perodo externo CLKIN 250 --- --- ns Modo HS
(Nota 1) 50 --- --- ns Modo HS
5 --- --- s Modo LP
1 TOSC 250 --- --- ns Modo RC
250 --- 10,0 ns Modo XT
Perodo del oscilador
250 --- 250 ns Modo HS (-04)
(Nota 1)
50 --- 250 ns Modo HS (-20)
5 --- --- s Modo LP
Duracin ciclo instruccin
2 TCY 200 TCY DC ns TCY = 4 / FOSC
(Nota 1)
100 --- --- ns Oscilador XT
TOSL, Duracin entrada reloj externo
3 2,5 --- --- s Oscilador LP
TOSH (OSC1) alta o baja
15 --- --- ns Oscilador HS
--- --- 25 ns Oscilador XT
TOSR, Tiempos de subida y bajada de la
4 --- --- 50 ns Oscilador LP
TOSF entrada externa de reloj (OSC1)
--- --- 15 ns Oscilador HS
Smbolo: Dato en columna Tp es a 5V, 25C, salvo otra especificacin. Estos parmetros son para gua de
diseo, pero no estn probados.
Nota 1: Perodo del ciclo de instruccin (TCY) igual a cuatro perodos de la entrada de oscilacin. Todos los
valores especificados se basan en la caracterizacin de los datos para un tipo de oscilador particular, bajo
condiciones de trabajo estndar, con el dispositivo en ejecucin de cdigos. Exceder estos lmites
especificados puede generar oscilaciones inestables y consumos de corriente mayores que los ofrecidos.
Todos los dispositivos se han probado trabajando con los valores Mn., y con un reloj externo aplicado
a la patilla OSC1/CLKIN. Cuando se usa una entrada de reloj externo, el lmite de perodo Mx. es DC
(sin reloj) para todos los dispositivos.
Microcontrolador PIC16F876 Pgina 132

TABLA 15-2: NECESIDADES DE TEMPORIZACIN DE CLKOUT Y E/S


Parm.
Smbolo Caractersticas Mn. Tp. Mx. Unid. Condicio.
N
10* TosH2ckL OSC1a CLKOUT --- 75 200 ns Nota 1
11* TosH2ckH OSC1 a CLKOUT --- 75 200 ns Nota 1
12* TckR Tiempo subida CLKOUT --- 35 100 ns Nota 1
13* TckF Tiempo bajada CLKOUT --- 35 100 ns Nota 1
14* TckL2ioV CLKOUT a salida vlida Puerto --- --- 0,5TCY+20 ns Nota 1
15* TioV2ckH Entrada Puerto vlida antes de CLKOUT Tosc+200 --- --- ns Nota 1
16* TckH2ioI Mantenimiento entrada puerto despus CLKOUT 0 --- --- ns Nota 1
17* TosH2ioV OSC1 (ciclo Q1) a salida puerto vlida --- 100 255 ns
OSC1 (ciclo Q2) a entrada puerto Estndar (F) 100 --- ns
18* TosH2ioI vlida (tiempo manten. entrada
Extendida(LF) 200 --- ns
puerto)
19* TioV2osH Entrada vlida puerto a OSC1 0 --- --- ns
Tiempo de subida de salida de Estndar (F) --- 10 40 ns
20* TioR
puerto Extendida(LF) --- --- 145 ns
Tiempo de bajada de salida de Estndar (F) --- 10 40 ns
21* TioF
Puerto Extendida(LF) --- --- 145 ns
22 Tinp Tiempo en bajo o alto en patilla INT TCY --- --- ns
Tiempo en bajo o alto para INT por cambio en
23 Trbp TCY --- --- ns
patilla RB7 RB4
* Estos parmetros son caractersticos pero no estn probados.
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.
Estos parmetros son sucesos asncronos no relacionados con ningn flanco de reloj interno.
Nota 1: Las medidas se han realizado en modo RC, donde la salida CLKOUT es 4Tosc.
Microcontrolador PIC16F876 Pgina 133

TABLA 15-2: NECESIDADES DE TEMPORIZACIN DE CLKOUT Y E/S


Parm.
Smb. Caractersticas Mn. Tp. Mx. Unid. Condicio.
N
VDD = 5V,
30* TmcL Ancho pulso -MCLR 2 --- --- s
-40 C a + 85 C
VDD = 5V,
31* Twdt Perodo temporiz. WDT 7 18 33 ms
-40 C a + 85 C
32* Tost Perodo arranque oscilacin --- 1024Tosc --- --- Tosc = pero. OSC1
VDD = 5V,
33* Tpwrt Perodo conexin 28 72 132 ms
-40 C a + 85 C
Tiempo de alta impedancia desde
34* TIOZ --- --- 2,1 s
bajada MCLR o reset WDT
35* TBOR Ancho pulso de reset BOR 100 --- --- s VDD VBOR (D005)
* Estos parmetros son caractersticos pero no estn probados.
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.
Microcontrolador PIC16F876 Pgina 134

TABLA 15-4: NECESIDADES DE RELOJ EXTERNO PARA TIMER1 Y TIMER2


Parm.
Smb. Caractersticas Mn Tp Mx Unid. Condiciones
N
Sin Prediv. 0,5TCY+20 --- --- ns Debe coincidir
40* Tt0H Ancho pulso alto T0CKI
Con Prediv. 10 --- --- ns param. 42
Sin Prediv. 0,5TCY+20 --- --- ns Debe coincidir
41* Tt0L Ancho pulso bajo T0CKI
Con Prediv. 10 --- --- ns param. 42
Sin Prediv. TCY + 40 --- --- ns
Mayor que:
42* Tt0P Perodo T0CKI N=valor Prediv.
Con Prediv. 20 --- --- ns
(2, 4,... 256)
(TCY+40)/N
Sncrono, Predivisor = 1 0,5TCY+20 --- --- ns
Sncr., Prediv. = Estndar(F) --- --- --- ns Debe coincidir
Tiempo alto
45* Tt1H 2, 4 y 8 Extendida(LF) --- --- --- ns tambin el
T1CKI
Estndar(F) --- --- --- ns parmetro 47
Asncrono
Extendida(LF) --- --- --- ns
Sncrono, Predivisor = 1 0,5TCY+20 --- --- ns
Sncr., Prediv. = Estndar(F) 15 --- --- ns Debe coincidir
Tiempo bajo
46* Tt1L 2, 4 y 8 Extendida(LF) 25 --- --- ns tambin el
T1CKI
Estndar(F) 30 --- --- ns parmetro 47
Asncrono
Extendida(LF) 50 --- --- ns
Mayor que:
N=valor Prediv.
Estndar(F) 30 --- --- ns
(1, 2, 4, 8)
(TCY+40)/N
Sncrono
Perodo de Mayor que:
47* Tt1P N=valor Prediv.
entrada T1CKI Extendida(LF) 50 --- --- ns
(1, 2, 4, 8)
(TCY+40)/N
Estndar(F) 60 --- --- ns
Asncrono
Extendida(LF) 100 --- --- ns
Margen de frecuencia de entrada oscilador Timer1
Ft1 DC --- 200 KHz
(Oscilador habilitado activando el bit T1OSCEN)
Retardo de increm. de Timer con respecto al
48 TCKEZtmr1 2Tosc --- 7Tosc ---
flanco de reloj externo
* Estos parmetros son caractersticos pero no estn probados.
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.
Microcontrolador PIC16F876 Pgina 135

TABLA 15-5: NECESIDADES DE CAPTURA/COMPARACIN/PWM (CCP1 Y CCP2)


Parm.
Smb. Caractersticas Mn Tp Mx Unid. Condiciones
N
Tiempo bajo Sin Predivisor 0,5TCY+20 --- --- ns
50* TLC entrada CCP1 y Con Estndar(F) 10 --- --- ns
CCP2 Predivisor Extendida(LF) 20 --- --- ns
Tiempo alto Sin Predivisor 0,5TCY+20 --- ns
51* TccH entrada CCP1 y Con 10 10 --- --- ns
CCP2 Predivisor 20 20 --- --- ns
3Tcy 40 N=Valor del
52* TccP Perodo de entrada CCP1 y CCP2 --- --- ns Predivisor
N (1, 4 o 16)
Tiempo de subida de la salida Estndar(F) --- 10 25 ns
53* TccR
de CCP1 y CCP2 Extendida(LF) --- 25 50 ns
Tiempo de bajada de la salida Estndar(F) --- 10 25 ns
54* TccF
de CCP1 y CCP2 Extendida(LF) --- 25 45 ns
* Estos parmetros son caractersticos pero no estn probados.
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.
Microcontrolador PIC16F876 Pgina 136

TABLA 15-6: NECESIDADES PUERTO SERVIDOR PARALELO (DISPOSITIVOS DE 40 PATILLAS)


Parm.
Smb. Caractersticas Mn Tp Mx Unid. Condiciones
N
20 --- --- ns
Dato vlido en la entrada antes de WR o
62 TdtV2wrH 25 --- --- ns Slo rango
CS (tset-up)
extendido
Mantenimiento dato entrada Estndar(F) 20
63* TwrH2dtI despus de WR o
Extendida(LF) 35
CS(thold)
--- --- 80 ns
64 TrdL2dtV --- --- 90 ns Slo rango
extendido
65 TrdH2dtI 10 --- 30 ns
* Estos parmetros son caractersticos pero no estn probados.
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.
Microcontrolador PIC16F876 Pgina 137
Microcontrolador PIC16F876 Pgina 138
Microcontrolador PIC16F876 Pgina 139

TABLA 15-7: NECESIDADES MODO SPI


Parm.
Smb. Caractersticas Mn Tp Mx Unid. Cond.
N
70* TssL2scH Entrada SS a SCK o SCK TCY --- --- ns
71* TscH Tiempo en alto de la entrada SCK (modo servidor) TCY+20 --- --- ns
72* TscL Tiempo en bajo de la entrada SCK (modo servidor) TCY+20 --- --- ns
TdiV2scH, Tiempo de anticipacin de SDI respecto flanco
73* 100 --- --- ns
TdiV2scL SCK
TscH2diL,
74* Tiempo estable de SDI respecto a flanco de SCK 100 --- --- ns
TscL2diL
Tiempo de subida del dato de Estndar (F) --- 10 25 ns
75* TdoR
salida SDO Extendida (LF) --- 25 50 ns
76* TdoF Tiempo de bajada del dato de salida SDO --- 10 25 ns
77* TssH2doZ -SS a salida alta impedancia de SDO 10 --- 50 ns
Tiempo de subida de salida SCK Estndar (F) --- 10 25 ns
78* TscR
en modo maestro Extendida (LF) --- 25 50 ns
79* TscF Tiempo de bajada salida SCK modo maestro --- 10 25 ns
TscH2doV, Dato de salida SDO vlido Estndar (F) --- --- 50 ns
80*
TscL2doV despus de flanco SCK Extendida (LF) --- --- 145 ns
TdoV2scH,
81* Tiempo de bajada del dato de salida SDO TCY --- --- ns
TdoV2scL
82* TssL2doV -SS a salida alta impedancia de SDO --- --- 50 ns
TscH2ssH,
83* -SS despus de flanco SCK 1,5TCY+40 --- --- ns
TscL2ssH
* Estos parmetros son caractersticos pero no estn probados.
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.

TABLA 15-8: NECESIDADES DE LOS BITS DE START Y STOP DEL BUS I2C
Parm.
Smb. Caractersticas Mn Tp Mx Unid. Cond.
N
Modo 100KHz 4700 --- --- Solamente en condicin
90 TSU:STA Antelacin bit START ns
Modo 400KHz 600 --- --- repeticin de START
Modo 100KHz 4000 --- --- Despus de este perodo
91 THD:STA Tiempo estable bit START ns
Modo 400KHz 600 --- --- se genera el primer reloj
Modo 100KHz 4700 --- ---
92 TSU:STO Antelacin bit STOP ns
Modo 400KHz 600 --- ---
Modo 100KHz 4000 --- ---
93 THD:STO Tiempo estable bit STOP ns
Modo 400KHz 600 --- ---
Microcontrolador PIC16F876 Pgina 140

TABLA 15-9: NECESIDADES DE LOS DATOS DEL BUS I2C


Parm.
Smbolo Caractersticas Mn Mx Unid. Condiciones
N
Mnima operacin
100KHz 4,0
1,5MHz
Tiempo alto de s
100 THIGH --- Mnima operacin
reloj 400KHz 0,6
10MHz
Mdulo SSP 1,5TCY
Mnima operacin
100KHz 4,7
1,5MHz
Tiempo bajo de s
101 TLOW --- Mnima operacin
reloj 400KHz 1,3
10MHz
Mdulo SSP 1,5TCY
Tiempo de subida 100KHz --- 1000
102 TR de ns
400KHz 20+0,1Cb 300 Cb entre 10 y 400 pF
SDA y SCL
Tiempo de bajada 100KHz ---
103 TF de 300 ns
400KHz 20+0,1Cb Cb entre 10 y 400 pF
SDA y SCL
100KHz 4,7 Solamente en
Antelacin bit
90 TSU:STA --- s condicin
START 400KHz 0,6
repeticin de START
100KHz 4,0 Despus de este
Tiempo estable del perodo
91 THD:STA --- s
bit START 400KHz 0,6 se genera el primer
reloj
Tiempo estable 100KHz 0 --- ns
106 THD:DAT dato de
400KHz 0 0,9 s
entrada
Antelacin del dato 100KHz 250
107 TSU:DAT de --- ns Nota 2
400KHz 100
entrada
Antelacin bit 100KHz 4,7
92 TSU:STO --- s
STOP 400KHz 0,6
Salida vlida desde 100KHz --- 3500 Nota 1
109 TAA ns
reloj 400KHz --- ---
100KHz 4,7 Tiempo bus libre antes
de
110 TBUF Tiempo de bus libre --- s
400KHz 1,3 inicio nueva
transmisin
Cb Capacidad de carga del bus --- 400 pF
Nota 1: Como transmisor, el dispositivo proporciona un retardo mnimo para saltar la regin indefinida del flanco de
bajada de SCL para evitar generaciones indeseadas de condicin de START y STOP.
2: Un dispositivo de modo rpido (400KHz) de bus I2C puede usarse en modo estndar de 100KHz, pero debe
respetarse el requisito de TSU:DAT 250 ns. Esto se producir automticamente en caso de que el dispositivo
no alargue el perodo bajo de la seal SCL. Si el dispositivo alarga el perodo de la seal SCL, sacar el bit de
datos prximo en la lnea SDA TRmx + TSU:DAT = 1000 + 250 = 1250 ns, antes de abandonar la lnea SCL.
Microcontrolador PIC16F876 Pgina 141

TABLA 15-10: NECESIDADES DE TRANSMISIN SNCRONA USART


Parm.
Smbolo Caractersticas Mn Tp Mx Unid. Cond.
N
SYNC XMIT (Maestro y Servidor) Estndar (F) 80
120 TckH2dtV --- --- ns
Dato salida vlido respecto a reloj alto Extendida (LF) 100
Tiempos de subida y bajada de reloj Estndar (F) 45
121 Tckrf --- --- ns
(modo Maestro) Extendida (LF) 50
Tiempos de subida y bajada del dato Estndar (F) 45
122 Tdtrf --- --- ns
de salida Extendida (LF) 50
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.

TABLA 15-11: NECESIDADES DE RECEPCIN SNCRONA USART


Parm.
Smbolo Caractersticas Mn Tp Mx Unid. Cond.
N
SYNC RCV (Maestro y Servidor)
125 TdtV2ckL 15 --- --- ns
Antelacin de dato respecto a CK
Tiempo estable del dato despus de
126 TckL2dtI 15 --- --- ns
CK
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.
Microcontrolador PIC16F876 Pgina 142

TABLA 15-12: PIC16F873/874/876/877-04 (COMERCIAL, INDUSTRIAL)


PIC16F873/874/876/877-20 (COMERCIAL, INDUSTRIAL)
PIC16LF873/874/876/877-04 (COMERCIAL, INDUSTRIAL)
Parm.
Smb. Caractersticas Mn Tp Mx Unid. Condiciones
N
VREF=VDD=5,12V
A01 NR Resolucin --- --- 10bits bit
VSS VAIN VREF
VREF=VDD=5,12V
A03 EIL Error linealidad integral --- --- < +/- 1 LSB
VSS VAIN VREF
VREF=VDD=5,12V
A04 EDL Error linealidad diferencial --- --- < +/- 1 LSB
VSS VAIN VREF
VREF=VDD=5,12V
A06 EOFF Error desplazamiento (offset) --- --- < +/- 2 LSB
VSS VAIN VREF
VREF=VDD=5,12V
A07 EGN Error de ganancia --- --- < +/- 1 LSB
VSS VAIN VREF
A10 --- Monotonicidad(3) --- garantizado --- --- VSS VAIN VREF
Mnimo para
Voltaje de referencia
A20 VREF 2,0 --- VDD+0,3 V aseguarar 10 bits
(VREF+ - VREF-)
de precisin
A21 VREF+ Tensin alta de referencia AVDD-2,5 AVDD+0,3 V
A22 VREF- Tensin baja de referencia AVSS-0,3 VREF+ - 2 V
A25 VAIN Tensin de entrada analgica VSS 0,3 --- VREF +0,3 V
Impedancia recomendada para
A30 ZAIN --- --- 10,0 K
la fuente de tensin analgica
Estndar --- 220 --- A Corriente media
Corriente de
A40 IAD cuando A/D es
conversin A/D Extendida --- 90 --- A efectivo (Nota 1)
Durante adquisicin
de VAIN. Basada en
la diferencia entre
10 --- 1000 A
Corriente de la entrada VREF VHOLD y VAIN, que
A50 IREF
(Nota 2) carga CHOD. Ver
Seccin 11.1.
Durante el ciclo de
--- --- 10 A
conversin A/D
* Estos parmetros son caractersticos pero no estn probados.
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.
Nota 1: Cuando A/D est desactivado, solamente consume la pequea corriente de fuga.
Las especificaciones de bajo consumo incluyen cualquier fuga desde el mdulo A/D.
Nota 2: La corriente VREF se refiere a la patilla RA3 o VDD, la que est seleccionada como entrada de referencia.
Nota 3: El resultado de la conversin A/D nunca disminuye con el incremento de tensin en la entrada, y no
pierde cdigos.
Microcontrolador PIC16F876 Pgina 143

TABLA 15-13: NECESIDADES DE CONVERSIN A/D


Parm.
Smb. Caractersticas Mn Tp Mx Unid. Condiciones
N
Estndar 1,6 --- --- s Basado TOSC, VREF 3,0V
Extendida 3,0 --- --- s Basado TOSC, VREF V
130 TAD Perodo reloj A/D
Estndar 2,0 4,0 6,0 s Modo RC A/D.
Extendida 3,0 6,0 9,0 s Modo RC A/D.
Tiempo de conversin (no incluido
131 TCNV --- 12 TAD
el tiempo S/H) (Nota 1)
Nota2 40 --- s
El tiempo mnimo es el de
programacin del amplifi-
cador. ste se usar si la
nueva tensin de entrada no
132 TACQ Tiempo de adquisicin
10* --- --- s ha cambiado ms de 1 LSB
(p. e., 20,0 mV a 5,12 V)
desde la ltima tensin cap-
turada (mientras est activo
CHOLD.
Si se selecciona reloj RC
como fuente de A/D, se aa-
de un tiempo TCY antes del
134 TGO Q4 a incio del reloj A/D --- TOSC/2 --- ---
inicio del reloj A/D. Esto
permite la ejecucin de la
instruccin SLEEP.
* Estos parmetros son caractersticos pero no estn probados.
Dato en columna Tp. es a 5V, 25 C, salvo especificacin en contra. Estos parmetros sirven como gua de
diseo pero no estn verificados.
Garantizada, esta especificacin, para el diseo.
Nota 1: El registro ADRES se leer en el siguiente ciclo TCY.
Nota 2: Para condiciones mnimas ver Seccin 11.1
Microcontrolador PIC16F876 Pgina 144

Leyenda: MM...M Informacin del nmero particular de Microchip.


XX...X Informacin especfica del fabricante.
AA Cdigo de ao (ltimas 2 cifras del ao del calendario).
BB Cdigo de semana (la primera semana de Enero ser 01)
C Cdigo que facilita la planta de fabricacin de la base de silicio.
O = Vendedor extranjero.
C = Lnea de 5.
S = Lnea de 6.
H = Lnea de 8.
D Nmero de revisin de mscara.
E= Cdigo de la planta de montaje, o regin de origen en la que se mont el bloque.

Nota: En el caso de que no est marcado el nmero particular de Microchip en una lnea, se habr
juntado en la siguiente, para limitar el nmero de caracteres disponible por la especificacin
del fabricante.

La marcacin estndar en dispositivos OTP consiste en un nmero particular de Microchip, cdigo


de ao, cdigo de semana, cdigo de planta, revisin de mscara y cdigo de montaje.
Microcontrolador PIC16F876 Pgina 145
Microcontrolador PIC16F876 Pgina 146

Unidades PULGADAS MILMETROS


Lmites dimensin MN NOM MX MN NOM MX
Distancia entre filas 0,300 7,62
Nmero de patillas n 28 28
Paso entre patillas p 0,100 2,54
Ancho patilla B 0,016 0,019 0,022 0,41 0,48 0,56
Ancho parte alta de patilla B1 0,040 0,053 0,065 1,02 1,33 1,65
Radio de taladro en placa R 0,000 0,005 0,010 0,00 0,13 0,25
Grosor de patilla c 0,008 0,010 0,012 0,20 0,25 0,30
Altura desde plano de placa A 0,140 0,150 0,160 3,56 3,81 4,06
Altura desde placa a centro A1 0,070 0,090 0,110 1,78 2,29 2,79
Separacin de la placa base A2 0,015 0,020 0,025 0,38 0,51 0,64
Largo de patilla en taladro L 0,125 0,130 0,135 3,18 3,30 3,43
Longitud de encapsulado D 1,345 1,365 1,385 34,16 34,67 35,18
Ancho hasta doblado de patillas E 0,280 0,288 0,295 7,11 7,30 7,49
Ancho de cpsula plstica E1 0,270 0,283 0,295 6,86 7,18 7,49
Distancia extrema entre filas de patillas eB 0,320 0,350 0,380 8,13 8,89 9,65
ngulo de biselado de cpsula 5 10 15 5 10 15
ngulo de biselado inferior de cpsula 5 10 15 5 10 15
Microcontrolador PIC16F876 Pgina 147

Unidades PULGADAS MILMETROS


Lmites dimensin MN NOM MX MN NOM MX
Paso entre patillas p 0,050 1,27
Nmero de patillas n 28 28
Altura desde plano de placa A 0,093 0,099 0,104 2,36 2,50 2,64
Altura desde placa a centro A1 0,048 0,058 0,068 1,22 1,47 1,73
Separacin de la placa base A2 0,004 0,008 0,011 0,10 0,19 0,28
Longitud de encapsulado D 0,700 0,706 0,712 17,78 17,93 18,08
Ancho hasta doblado de patillas E 0,292 0,296 0,299 7,42 7,51 7,59
Ancho de cpsula plstica E1 0,394 0,407 0,419 10,01 10,33 10,64
Biselado superior indicativo X 0,010 0,020 0,029 0,25 0,50 0,74
Radio de doblado superior R1 0,005 0,005 0,010 0,13 0,13 0,25
Radio de doblado inferior R2 0,005 0,005 0,010 0,13 0,13 0,25
Largo de apoyo en placa, de patilla L 0,011 0,016 0,021 0,28 0,41 0,53
ngulo de apoyo en placa 0 4 8 0 4 8
Distancia desde cpsula hasta inicio de doblado superior L1 0,010 0,015 0,020 0,25 0,38 0,51
Grosor de patilla c 0,009 0,011 0,012 0,23 0,27 0,30
Ancho patilla B 0,014 0,017 0,019 0,36 0,42 0,48
ngulo de biselado de cpsula 0 12 15 0 12 15
ngulo de biselado inferior de cpsula 0 12 15 0 12 15
Microcontrolador PIC16F876 Pgina 148

Unidades PULGADAS MILMETROS


Lmites dimensin MN NOM MX MN NOM MX
Distancia entre filas 0,600 15,24
Nmero de patillas n 40 40
Paso entre patillas p 0,100 2,54
Ancho patilla B 0,016 0,018 0,020 0,41 0,46 0,51
Ancho parte alta de patilla B1 0,045 0,050 0,055 1,14 1,27 1,40
Radio de taladro en placa R 0,000 0,005 0,010 0,00 0,13 0,25
Grosor de patilla c 0,009 0,010 0,011 0,23 0,25 0,28
Altura desde plano de placa A 0,110 0,160 0,160 2,79 4,06 4,06
Altura desde placa a centro A1 0,073 0,093 0,113 1,85 2,36 2,87
Separacin de la placa base A2 0,020 0,020 0,040 0,51 0,51 1,02
Largo de patilla en taladro L 0,125 0,130 0,135 3,18 3,30 3,43
Longitud de encapsulado D 2,013 2,018 2,023 51,13 51,26 51,38
Ancho hasta doblado de patillas E 0,530 0,535 0,540 13,46 13,59 13,72
Ancho de cpsula plstica E1 0,545 0,565 0,585 13,84 14,35 14,86
Distancia extrema entre filas de patillas eB 0,630 0,610 0,670 16,00 15,49 17,02
ngulo de biselado de cpsula 5 10 15 5 10 15
ngulo de biselado inferior de cpsula 5 10 15 5 10 15
Microcontrolador PIC16F876 Pgina 149

Unidades PULGADAS MILMETROS


Lmites dimensin MN NOM MX MN NOM MX
Paso entre patillas p 0,031 0,80
Nmero de patillas n 44 44
Ancho hasta centro de patillas extremas n1 11 11
Altura desde plano de placa A 0,039 0,043 0,047 1,00 1,10 1,20
Altura desde placa a centro A1 0,015 0,025 0,035 0,38 0,64 0,89
Separacin de la placa base A2 0,002 0,004 0,006 0,05 0,10 0,15
Radio de doblado superior R1 0,003 0,003 0,010 0,08 0,08 0,25
Radio de doblado inferior R2 0,003 0,006 0,008 0,08 0,14 0,20
Largo de apoyo en placa, de patilla L 0,005 0,010 0,015 0,13 0,25 0,38
ngulo de apoyo en placa 0 3,5 7 0 3,5 7
Distancia desde cpsula hasta inicio de doblado superior L1 0,003 0,008 0,013 0,08 0,20 0,33
Grosor de patilla c 0,004 0,006 0,008 0,09 0,15 0,20
Ancho patilla B 0,012 0,015 0,018 0,30 0,38 0,45
Longitud entre extremos de patillas extremas lado 1 D1 0,463 0,472 0,482 11,75 12,00 12,25
Longitud entre extremos de patillas extremas lado 2 E1 0,463 0,472 0,482 11,75 12,00 12,25
Longitud de encapsulado lado 1 D 0,390 0,394 0,398 9,90 10,00 10,10
Longitud de encapsulado lado 2 E 0,390 0,394 0,398 9,90 10,00 10,10
Biselado esquina indicativo de patilla 1 X 0,025 0,035 0,045 0,64 0,89 1,14
ngulo de biselado de cpsula 5 10 15 5 10 15
ngulo de biselado inferior de cpsula 5 12 15 5 12 15
Microcontrolador PIC16F876 Pgina 150

Unidades PULGADAS MILMETROS


Lmites dimensin MN NOM MX MN NOM MX
Paso entre patillas p 0,031 0,80
Nmero de patillas n 44 44
Ancho hasta centro de patillas extremas n1 11 11
Altura desde plano de placa A 0,079 0,086 0,093 2,00 2,18 2,35
Altura desde placa a centro A1 0,032 0,044 0,056 0,81 1,11 1,41
Separacin de la placa base A2 0,002 0,006 0,010 0,05 0,15 0,25
Radio de doblado superior R1 0,005 0,005 0,010 0,13 0,13 0,25
Radio de doblado inferior R2 0,005 0,012 0,015 0,13 0,30 0,38
Largo de apoyo en placa, de patilla L 0,015 0,020 0,025 0,38 0,51 0,64
ngulo de apoyo en placa 0 3,5 7 0 3,5 7
Distancia desde cpsula hasta inicio de doblado superior L1 0,011 0,016 0,021 0,28 0,41 0,53
Grosor de patilla c 0,005 0,007 0,009 0,13 0,18 0,23
Ancho patilla B 0,012 0,015 0,018 0,30 0,37 0,45
Longitud entre extremos de patillas extremas lado 1 D1 0,510 0,520 0,530 12,95 13,20 13,45
Longitud entre extremos de patillas extremas lado 2 E1 0,510 0,520 0,530 12,95 13,20 13,45
Longitud de encapsulado lado 1 D 0,390 0,394 0,398 9,90 10,00 10,10
Longitud de encapsulado lado 2 E 0,390 0,394 0,398 9,90 10,00 10,10
Biselado esquina indicativo de patilla 1 X 0,025 0,035 0,045 0,64 0,89 1,14
ngulo de biselado de cpsula 5 10 15 5 10 15
ngulo de biselado inferior de cpsula 5 12 15 5 12 15
Microcontrolador PIC16F876 Pgina 151

Unidades PULGADAS MILMETROS


Lmites dimensin MN NOM MX MN NOM MX
Nmero de patillas n 44 44
Paso entre patillas p 0,050 1,27
Altura desde plano de placa A 0,165 0,173 0,180 4,19 4,38 4,57
Altura desde placa a centro A1 0,095 0,103 0,110 2,41 2,60 2,79
Separacin de la placa base A2 0,015 0,023 0,030 0,38 0,57 0,76
Altura del bisel del lado 1 A3 0,024 0,029 0,034 0,61 0,74 0,86
Achaflanado de la esquina 1 CH1 0,040 0,045 0,050 1,02 1,14 1,27
Achaflanado de cualquier otra esquina CH2 0,000 0,005 0,010 0,00 0,13 0,25
Longitud entre extremos de patillas extremas lado 2 E1 0,685 0,690 0,695 17,40 17,53 17,65
Longitud entre extremos de patillas extremas lado 1 D1 0,685 0,690 0,695 17,40 17,53 17,65
Longitud de encapsulado lado 2 E 0,650 0,653 0,656 16,51 16,59 16,66
Longitud de encapsulado lado 1 D 0,650 0,653 0,656 16,51 16,59 16,66
Ancho de base E2 0,610 0,620 0,630 15,49 15,75 16,00
Distancia centros de curvatura de patillas extremas D2 0,610 0,620 0,630 15,49 15,75 16,00
Ancho hasta centro de patillas extremas n1 11 11
Grosor de patilla c 0,008 0,010 0,012 0,20 0,25 0,30
Ancho superior de patilla B1 0,026 0,029 0,032 0,66 0,74 0,81
Ancho inferior de patilla B 0,015 0,018 0,021 0,38 0,46 0,53
Largo parte superior de patilla L 0,050 0,058 0,065 1,27 1,46 1,65
Radio de doblado superior R1 0,003 0,005 0,010 0,08 0,13 0,25
Radio de doblado inferior R2 0,015 0,025 0,035 0,38 0,64 0,89
ngulo de biselado de cpsula 0 5 10 0 5 10
ngulo de biselado inferior de cpsula 0 5 10 0 5 10

Vous aimerez peut-être aussi