You are on page 1of 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 Frecuencia de trabajo Borrados y retardos Memoria de programa tipo flash (palabras de 14 bits) Memoria de datos (bytes) Memoria de datos EEPROM Interrupciones Puertos de entrada salida Temporizadores Mdulos Captura/Comparacin/PWM Comunicaciones serie Mdulo CAD de 10 bits Repertorio de instrucciones

PIC16F876 Continua- 20Mhz. POR, BOR (PWRT, OST) 8K 368 256 13 PUERTOS A, B, C 3 2 MSSP y USART 5 canales 35

Microcontrolador PIC16F876

Pgina 3

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


Nombre de la patilla OSC1/CLKIN OSC2/CLKOUT -MCLR/Vpp/ THV N DIP 9 10 1 N SOIC 9 10 1 Tipo I/O/P I O I/P Familia ST/CMOS ST Descripcin Entrada de cristal oscilador/entrada reloj externo. Salida del oscilador. Esta patilla saca de la frecuencia de reloj de la patilla OSC1, e indica la duracin del ciclo de instruccin. Entrada de reset por nivel bajo, entrada de tensin de programacin o alta tensin de prueba de control.

El puerto A es un puerto bidireccional RA0/AN0 2 2 RA1/AN1 3 3

RA0 puede ser, tambin, la entrada analgica 0. 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 RB3/PGM RB4 RB5 RB6/PGC 23 24 25 26 27 23 24 25 26 27 I/O I/O I/O I/O I/O I/O TTL TTL TTL TTL TTL/ST TTL/ST RB3 puede ser, tambin, la entrada de programacin. Patilla de cambio de interrupcin activa. Patilla de cambio de interrupcin activa. Cambio de interrupcin activa o reloj para programacin en serie. Cambio de interrupcin activa o dato para programacin en serie. RC0 puede ser, tambin, la salida de oscilacin del Timer1 o la entrada de reloj del Timer1. RC1 puede ser, tambin, la entrada de oscilacin del Timer1, la entrada de Captura2, salida de Comparacin2 o salida de PWM2. RC2 puede ser, tambin, la entrada de Captura1, salida de Comparacin1 o salida de PWM1. RC3 puede ser, tambin, entrada de reloj sncrono serie o salida del bloque SPI en modo I2C. RC4 puede ser, tambin, el dato de entrada en modo SPI o el dato de entada salida en modo I2C. RC5 puede ser, tambin, el dato de salida en modo SPI. RC6 puede ser tambin, el reloj de la USART. RC7 puede ser, tambin, el dato de la USART. Conexin de 0V para circuitos lgicos y entradas/salidas. Alimentacin positiva para lgica y entradas/salidas.

I/O I/O

TTL TTL

RB7/PGD 28 28 El puerto C es un puerto bidireccional RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT Vss VDD 11 12 13 14 15 16 17 18 8,19 20 11 12 13 14 15 16 17 18 8,19 20

I/O I/O I/O I/O I/O I/O I/O I/O P P

ST ST ST ST ST ST ST ST -

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 00 01 10 11 Banco 0 1 2 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.

Dir. ind.(*) TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD(1) PORTE(1) PCLATH INTCON PIR1 PIR2 TMR1L TMR1H T1CON TMR2 T2CON SSPBUF SSPCON CCPR1L CCPR1H CCP1CON RCSTA TXREG RCREG CCPR2L CCPR2H CCP2CON ADRESH ADCON

00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h

Dir. ind.(*) OPTION REG PCL STATUS FSR TRISA TRISB TRISC TRISD(1) TRISE(1) PCLATH INTCON PIE1 PIE2 PCON

SSPCON2 PR2 SSPADD SSPSTAT

TXSTA SPBRG

ADRESL ADCON1 80 bytes de Registros de Propsito General

80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh A0h

Dir. ind.(*) TMR0 PCL STATUS FSR PORTB

PCLATH INTCON EEDATA EEADR EEDATH EEADRH

16 bytes de Registros de Propsito General

100h 101h 102h 103h 104h 105h 106h 107h 108h 109h 10Ah 10Bh 10Ch 10Dh 10Eh 10Fh 110h 111h 112h 113h 114h 115h 116h 117h 118h 119h 11Ah 11Bh 11Ch 11Dh 11Eh 11Fh 120h

Direc. de fichero Dir. ind.(*) 180h OPTION REG 181h PCL 182h STATUS 183h FSR 184h 185h TRISB 186h 187h 188h 189h PCLATH 18Ah INTCON 18Bh EECON1 18Ch EECON2 18Dh Reservado(2) 18Eh Reservado(2) 18Fh 190h 191h 192h 193h 194h 195h 196h 16 bytes de Registros de 197h Propsito 198h General 199h 19Ah 19Bh 19Ch 19Dh 19Eh 19Fh 1A0h 80 bytes de Registros de Propsito General Acceso 70h - 7Fh

96 bytes de Registros de Propsito General 7Fh Banco 0

80 bytes de Registros de Propsito General EFh F0h 16Fh 170H Acceso 70h - 7Fh FFh 17Fh Banco 2

1EFh 1F0h

Acceso 70h - 7Fh Banco 1

1FFh 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
Direcc. Banco 0 00h(4) 01h 02h(4) 03h(4) 04h(4) 05h 06h 07h 08h(5) 09h(5) 0Ah(1,4) 0Bh(4) 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh Nombre INDF TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD PORTE PCLATH INTCON PIR1 PIR2 TMR1L TMR1H T1CON TMR2 T2CON SSPBUF SSPCON CCPR1L CCPR1H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Valor tras POR, BOR 0000 0000 xxxx xxxx 0000 0000 0001 1xxx xxxx xxxx - -0x 0000 xxxx xxxx xxxx xxxx xxxx xxxx - - - - -xxx - - -0 0000 0000 000x 0000 0000 - r -0 0- -0 xxxx xxxx xxxx xxxx - -00 0000 0000 0000 - 000 0000 xxxx xxxx 0000 0000 xxxx xxxx xxxx xxxx - -00 0000 0000 000x 0000 0000 0000 0000 xxxx xxxx xxxx xxxx - -00 0000 xxxx xxxx 0000 00-0 Valor tras otros resets 0000 0000 uuuu uuuu 0000 0000 000q quuu uuuu uuuu - -0u 0000 uuuu uuuu uuuu uuuu uuuu uuuu - - - - -uuu - - -0 0000 0000 000u 0000 0000 - r -0 0- -0 uuuu uuuu uuuu uuuu - -uu uuuu 0000 0000 - 000 0000 uuuu uuuu 0000 0000 uuuu uuuu uuuu uuuu - -00 0000 0000 000x 0000 0000 0000 0000 uuuu uuuu uuuu uuuu - -00 0000 uuuu uuuu 0000 00-0

No es un registro fsico. Se usa para direccionamiento de la memoria de datos. Registro del mdulo Timer 0. Byte de menor peso del registro Contador de Programa (PC). IRP RP1 RP0 -TO -PD Z DC C Puntero de direccionamiento indirecto de la memoria de datos. Memoria de datos PORTA en escritura; patillas PORTA en lectura. --Memoria de datos PORTB en escritura; patillas del PORTB cuando se lee. Memoria de datos PORTC en escritura; patillas del PORTC cuando se lee. Memoria de datos PORTD en escritura; patillas del PORTD cuando se lee. -----RE2 RE1 RE0 ---Buffer de escritura para los 5 bits de ms peso del PC. GIE PEIE T0IE INTE RBIE T0IF INTF RBIF PSPIF(3) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF -(6) -EEIF BCLIF --CCP2IF 8 bits de menor peso del registro de 16 bits TMR1. 8 bits de mayor peso del registro de 16 bits TMR1. --T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON Registro del mdulo TIMER 2. TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -Registro de transmisin y buffer de recepcin del puerto serie sncrono. WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 Byte de menor peso del registro de Captura, Comparacin y PWM. Byte de mayor peso del registro de Captura, Comparacin y PWM. CCP1CON --CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D TXREG Registro de dato a transmitir en la USART. RCREG Registro de dato recibido en la USART. CCPR2L Byte menos significativo del registro 2 de Captura/Comparacin/PWM. CCPR2H Byte ms significativo del registro 2 de Captura/Comparacin/PWM. CCP2CON --CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 ADRESH Byte de ms peso del resultado de la conversin analgica digital (A/D) GO/-DONE ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 -ADON

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)


Direcc. Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Valor tras POR, BOR 0000 0000 1111 1111 0000 0000 0001 1xxx xxxx xxxx - -11 1111 1111 1111 1111 1111 1111 1111 0000 -111 - - -0 0000 0000 000x 0000 0000 -r -0 0- -0 - - - - - -qq ------0000 0000 1111 1111 0000 0000 0000 0000 ---------0000 -010 0000 0000 ------------xxxx xxxx 0- - - 0000 Valor tras otros resets 0000 0000 1111 1111 0000 0000 000q quuu uuuu uuuu - -11 1111 1111 1111 1111 1111 1111 1111 0000 -111 - - -0 0000 0000 000u 0000 0000 -r -0 0- -0 - - - - - -uu ------0000 0000 1111 1111 0000 0000 0000 0000 ---------0000 -010 0000 0000 ------------uuuu uuuu 0- - - 0000

Banco 1 80h(4) INDF No es un registro fsico. Se usa para direccionamiento de la memoria de datos. 81h OPTION_REG -RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 82h(4) PCL Byte menos significativo del Contador de Programa (PC). 83h(4) STATUS IRP RP1 RP0 -TO -PD Z DC C 84h(4) FSR Puntero de direccionamiento indirecto de la memoria de datos. 85h TRISA --Registro de programacin de direccin del puerto A. 86h TRISB Registro de programacin de direccin del puerto B. 87h TRISC Registro de programacin de direccin del puerto C. 88h(5) TRISD Registro de programacin de direccin del puerto D. -89h(5) TRISE IBF OBF IBOV PSPMODE Direccin de datos en puerto E. 8Ah(1,4) PCLATH ---Buffer de escritura para los 5 bits de ms peso del PC. 8Bh(4) INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 8Ch PIE1 PSPIE(3) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 8Dh PIE2 -(6) -EEIE BCLIE --CCP2IE 8Eh PCON -------POR BOR 8Fh -Sin implementar. 90h -Sin implementar. SSPCON2 91h GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 92h PR2 Registro de programacin del perodo del temporizador 2 (Timer 2). 93h SSPADD Registro de direccin del puerto serie sncrono en modo I 2C. 94h SSPSAT SMP CKE D/-A P S R/-W UA BF 95h -Sin implementar. 96h -Sin implementar. 97h -Sin implementar. 98h TXSTA CSRC TX9 TXEN SYNC -BRGH TRMT TX9D 99h SPBRG Registro generador de baudios de transmisin. 9Ah -Sin implementar. 9Bh -Sin implementar. 9Ch -Sin implementar. 9Dh -Sin implementar. ADRESL Byte de menos peso del resultado de la conversin analgica digital (A/D) 9Eh ADCON1 9Fh ADFM ---PCFG3 PCFG2 PCFG1 PCFG0

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)


Direcc. Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Valor tras POR, BOR 0000 0000 xxxx xxxx 0000 0000 0001 1xxx xxxx xxxx ---xxxx xxxx ---------- - -0 0000 0000 000x xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000 0000 1111 1111 0000 0000 0001 1xxx xxxx xxxx ---1111 1111 ---------- - -0 0000 0000 000x x- - - x000 ---- ---0000 0000 0000 0000 Valor tras otros resets 0000 0000 uuuu uuuu 0000 0000 000q quuu uuuu uuuu ---uuuu uuuu ---------- - -0 0000 0000 000u uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu 0000 0000 1111 1111 0000 0000 000q quuu uuuu uuuu ---1111 1111 ---------- - -0 0000 0000 000u x- - - u000 ---- ---0000 0000 0000 0000

Banco 2 100h(4) INDF No es un registro fsico. Se usa para direccionamiento de la memoria de datos. 101h TMR0 Registro del mdulo temporizador 0 (Timer 0). 102h(4) PCL Byte menos significativo del Contador de Programa (PC). 103h(4) STATUS IRP RP1 RP0 -TO -PD Z DC C 104h(4) FSR Puntero de direccionamiento indirecto de la memoria de datos. 105h -Sin implementar. 106h PORTB Memoria de datos PORTB en escritura; patillas del PORTB cuando se lee. 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. 10Bh(4) INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 10Ch EEDATA Registro de datos de la EEPROM. 10Dh EEADR Registro de direccin de la EEPROM. 10Eh EEDATH --Byte alto del registro de datos de la EEPROM 10Fh EEADRH ---Byte alto del registro de direccin de la EEPROM Banco 3 180h(4) INDF No es un registro fsico. Se usa para direccionamiento de la memoria de datos. 181h OPTION_REG -RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 182h(4) PCL Byte menos significativo del Contador de Programa (PC). 183h(4) STATUS IRP RP1 RP0 -TO -PD Z DC C 184h(4) FSR Puntero de direccionamiento indirecto de la memoria de datos. 185h -Sin implementar. 186h TRISB Registro de programacin de direccin del puerto B. 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. 18Bh(4) INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 18Ch EECON1 EEPGD ---WRERR WREN WR RD 18Dh EECON2 Registro 2 de control de EEPROM. No es fsicamente un registro. 18Eh -Sin implementar. 18Fh -Sin implementar.

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
bit7

RP1

RP0

-TO

-PD

DC

C
bit0

R = De lectura W = De escritura 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) 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. -TO: Bit de final de temporizacin. 1 = Despus de conexin, instruccin CLRWDT, o instruccin SLEEP. 0 = Cuando sucede el final de temporizacin del WDT. -PD: Bit de bajada de tensin. 1 = Despus de la conexin o por la instruccin CLRWDT. 0 = Al ejecutar la instruccin SLEEP. 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. 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. 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.

bit 6-5:

bit 4:

bit 3:

bit 2:

bit 1:

bit 0:

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
bit7

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
bit0

R = De lectura W = De escritura 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. 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 (Temporizador 0). 1 = Cambio en la patilla RA4/T0CKI. 0 = Reloj procedente del final del ciclo de instruccin (CLKOUT). 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. PSA: Bit de asignacin del PRESCALER (Divisor de Frecuencia). 1 = El Prescaler se asigna al WDT. 0 = El Prescaler se asigna al mdulo TMR0. 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 1: 2 1:1 bit 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

bit 6:

bit 5:

bit 4:

bit 3:

bit 2-0:

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
bit7

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF
bit0

R = De lectura W = De escritura 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. PEIE: Bit de habilitacin de interrupcin de perifricos. 1 = Habilita todas las interrupciones no enmascaradas de perifricos. 0 = Inhibe todas las interrupciones de perifricos. T0IE: Bit de habilitacin de interrupcin por desbordamiento del TMR0. 1 = Habilita la interrupcin del TMR0. 0 = Inhibe la interrupcin del TMR0. 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. 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. 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. 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. 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.

bit 6:

bit 5:

bit 4:

bit 3:

bit 2:

bit 1:

bit 0:

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
bit0

PSPIE
bit7

(1)

ADIE

RCIE

TXIE

SSPIE CCP1IE TMR2IE TMR1IE

R = De lectura W = De escritura 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. ADIE: Bit de habilitacin de interrupcin del Convertidor Analgico Digital (ADC). 1 = Habilita la interrupcin del ADC. 0 = Inhibe la interrupcin del ADC. 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. 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. SSPIE: Bit de habilitacin de interrupcin para el Puerto Sncrono Serie (SSP). 1 = Habilita la interrupcin del SSP. 0 = Inhibe la interrupcin del SSP. 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. 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 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.

bit 6:

bit 5:

bit 4:

bit 3:

bit 2:

bit 1:

bit 0:

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
bit0

PSPIF
bit7

(1)

ADIF

RCIF

TXIF

SSPIF CCP1IF TMR2IF TMR1IF

R = De lectura W = De escritura -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. 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. 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. 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). 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. 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. 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 6:

bit 5:

bit 4:

bit 3:

bit 2:

bit 1:

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

--bit7

---

---

EEIE

BCLIE

---

---

CCP2IE
bit0

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

bit 7: bit 6: bit 5: bit 4:

Sin implementar: Da cero al leer. Reservado: Siempre se debe mantener este bit a cero. Sin implementar: Da cero al leer. 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. 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. Sin implementar: Da cero al leer. CCP2IE: Bit de habilitacin del mdulo CCP2. 1 = Habilita la interrupcin de CCP2. 0 = Inhibe la interrupcin de CCP2.

bit 3:

bit 2-1: bit 0:

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

--bit7

---

---

EEIF

BCLIF

---

---

CCP2IF
bit0

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

bit 7: bit 6: bit 5: bit 4:

Sin implementar: Da cero al leer. Reservado: Siempre se debe mantener este bit a cero. Sin implementar: Da cero al leer. 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. 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. Sin implementar: Da cero al leer. 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.

bit 3:

bit 2-1: bit 0:

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

--bit7

---

---

---

---

---

-POR

-BOR
bit0

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

bit 7-2: bit 1:

Sin implementar: Da cero al leer. -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. -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.

bit 0:

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 (GOTO)

DEL

SALTO

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 BCF BSF CALL : : ORG SUB1_P1 : : : RETURN ;Llamada a subrutina ;Pgina 1 (800h - FFFh) ;Retorna a pgina 0 (000h - 7FF), de la llamada de subrutina. 0x500 PCLATH,4 PCLATH,3 SUB1_P1

;Selecciona pgina 1 (800h - FFFh) :Llama a subrutina en pgina 1 (800h - FFFh)

0x900

;Pgina 1 (800h - FFFh)

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 movlw movwf clrf incf btfss goto DIRECCIONAMIENTO INDIRECTO 0x20 FSR INDF FSR,1 FSR,4 NEXT : : ;Inicializa el puntero de RAM. ; " ;Borra posicin de RAM. ;Incrementa el puntero. ;Si se ha completado el borrado se salta la prxima instruccin. ;Si no se han borrado todas las posiciones se repite el bucle.

NEXT

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

TABLA 3-1: Nombre RA0/AN0 RA1/AN1 RA2/AN2

FUNCIONES DEL PUERTO A (PortA) Bit Bit0 Bit1 Bit2 Buffer TTL TTL TTL TTL ST TTL Funcin Entrada-salida o entrada analgica 0. Entrada-salida o entrada analgica 1. Entrada-salida o entrada analgica 2. Entrada-salida, entrada analgica 3, o VREF. Entrada-salida, o entrada externa de reloj de TIMER0. La salida es de tipo drenador abierto. Entrada-salida, seleccin de servidor para el puerto serie sncrono, o entrada analgica 4.

RA3/AN3/VREF Bit3 RA4/T0CKI RA5/-SS/AN4 Bit4 Bit5

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

TABLA 3-2:
Dir. Nombre

RESUMEN DE REGISTROS ASOCIADOS AL PORTA


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

05h 85h 9Fh

PORTA TRISA
ADCON1

----ADFM

-------

RA5

RA4

RA3

RA2

RA1

RA0

- - 0x 0000 - - 11 1111 - - 0 - 0000

- - 0u 0000 - - 11 1111 - - 0 - 0000

Registro de direccin de datos del PORTA


----PCFG3 PCFG2 PCFG1 PCFG0

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) b) Leyendo o escribiendo sobre PORTB. Esto terminar con la condicin. 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 RB0/INT RB1 RB2 Bit Buffer Funcin
Patilla de entrada-salida o entrada de interrupcin externa. Polarizacin programable. Patilla de entrada-salida. Polarizacin programable. Patilla de entrada-salida. Polarizacin programable. Patilla de entrada-salida o modo de programacin LVP. Polarizacin programable. Patilla de entrada-salida (con Interrupcin por Cambio). Polarizacin programable. Patilla de entrada-salida (con Interrupcin por Cambio). Polarizacin programable. Patilla de entrada-salida (con Interrupcin por Cambio) o depuracin in-situ. Polarizacin programable. Reloj de programacin en serie. Patilla de entrada-salida (con Interrupcin por Cambio) o depuracin in-situ. Polarizacin programable. Dato de programacin en serie.

Bit0 TTL/ST(1) Bit1 TTL Bit2 TTL

RB3/PGM Bit3 TTL RB4 RB5 RB6/PGC RB7/ Bit4 TTL Bit5 TTL Bit6 TTL/ST(2) Bit7 TTL/ST(2)

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 Direccin Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Valor Valor tras Bit0 tras POR, otros BOR Resets RB0 xxxx xxxx uuuu uuuu 1111 1111 1111 1111 PS1 PS0 1111 1111 1111 1111

06h, 106h 86h, 186h

PORTB TRISB

RB7

RB6

RB5

RB4

RB3

RB2

RB1

Registro de direccin de datos del puerto B PS2

81h, 181h OPTION_REG RBPU INTEDG T0CS T0SE PSA

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


ST

Funcin
Entrada-salida. Salida de oscilacin de Timer1. Entrada de reloj del Timer1. Entrada-salida. Entrada de oscilacin externa para Timer1. Entrada del mdulo Capture2. Salida del mdulo Compare2. Salida del mdulo PWM2. Entrada-salida. Entrada de Capture1. Salida de Compare1. Salida de PWM1. Entrada-salida. Reloj serie sncrono para los modos SPI y I2C. Entrada-salida. Dato de entrada en modo SPI. Dato entrada/salida para el modo I2C. Entrada-salida. Dato de salida del Puerto Serie Sncrono (SSP). Entrada-salida. Reloj del USART (Transmisor Receptor Sncrono Asncrono). Entrada-salida. Dato del USART (Transmisor Receptor Sncrono Asncrono).

RC0/T1OSO/T1CKI Bit0

RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT

Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7

ST ST ST ST ST ST ST

ST = Entrada tipo Schmitt Trigger.

TABLA 3-6: RESUMEN DE REGISTROS ASOCIADOS AL PORTC Direccin Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor tras Valor tras POR, BOR otros Resets xxxx xxxx 1111 1111 uuuu uuuu 1111 1111

07h 87h

PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 TRISC Registro de direccin de datos del puerto C

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
bit7

---

---

---

WRERR WREN

WR

RD
bit0

R = De lectura W = De escritura 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). Sin implementar: Da cero al leer. 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 6-4: bit 3:

bit 2:

WREN: Bit de habilitacin de escritura en EEPROM. 1 = Permite ciclo de escritura. 0 = Inhibe el ciclo de escritura. 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. 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.

bit 1:

bit 0:

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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 BSF BCF MOVLW MOVWF MOVLW MOVWF BSF BCF BSF BCF MOVLW MOVWF MOVLW MOVWF BSF BSF SLEEP BCF STATUS, RP1 STATUS, RP0 DATA_EE_ADDR EEADR DATA_EE_DATA EEDATA STATUS, RP0 EECON1, EEPGD EECON1, WREN INTCON, GIE 55h EECON2 AAh EECON2 EECON1, WR INTCON, GIE EECON1, WREN ; Seleccin de banco 2. ; ; ; Direccin de escritura. ; ; Dato a escribir en memoria. ; Seleccin de banco 3. ; Memoria de datos. ; Habilitacin de escritura. ; Inhibe las interrupciones. ; Escribe 55h en EECON2. ; ; ; Escribe AAh en EECON2. ; Inicia la escritura. ; Habilita interrupciones. ; Espera hasta terminar la escritura. ; 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 BCF MOVLW MOVWF MOVLW MOVWF BSF BSF BSF NOP NOP BCF MOVF MOVF STATUS, RP1 STATUS, RP0 ADDRH EEADRH ADDRL EEADR STATUS, RP0 EECON1, EEPGD EECON1, RD ; Seleccin de banco 2 ; ; Carga byte de direccin alta en el ; registro EEADRH. ; Carga byte de direccin baja en el ; registro EEADR. ; Selecciona banco 3. ; Selecciona memoria de programa. ; Lectura de la EEPROM. ; Durante esta instruccin y la siguiente, ; se produce la lectura de los dos bytes. ; Selecciona banco 2. ; Carga lectura byte bajo, en W. ; Carga lectura byte alto, en W.

STATUS, RP0 EEDATA, W EEDATH, 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 BCF MOVLW MOVWF MOVLW STATUS, RP1 STATUS, RP0 ADDRH EEADRH ADDRL ; Selecciona banco 2. ; ; Carga direccin alta. ; ; Carga direccin baja.

Microcontrolador PIC16F876

Pgina 30

MOVWF MOVLW MOVWF MOVLW MOVWF BSF BSF BSF BCF MOVLW MOVWF MOVLW MOVWF BSF NOP NOP

EEADR DATAH EEDATH DATAL EEDATA STATUS, RP0 EECON1, EEPGD EECON1, WREN INTCON, GIE 55h EECON2 AAh EECON2 EECON1, WR

BSF BCF

INTCON, GIE EECON1, WREN

; Carga direccin baja. ; Carga byte alto a escribir. ; ; Carga byte bajo a escribir. ; ; Selecciona banco 3. ; Selecciona memoria de programa. ; Habilita escritura. ; Inhibe interrupciones. ; Carga cdigo escritura. ; ; ; ; Comienza la escritura. ; Tiempo para escritura. ; 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. ; Habilita interrupciones. ; 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 4.8.1

Proteccin contra picos transitorios en escritura 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 CP1 0 0 0 0 0 1 1 1 1 1 1 CP0 0 1 1 1 1 0 0 0 0 1 1 WRT X 0 0 1 1 0 0 1 1 0 1 Posiciones de memoria Toda la memoria de programa reas desprotegidas reas protegidas reas desprotegidas reas protegidas reas desprotegidas reas protegidas reas desprotegidas reas protegidas Toda la memoria de programa Toda la memoria de programa Lectura interna S S S S S S S S Escritura interna No No No S No No No S No No S Lectura ICSP No S No S No S No S No S S Escritura ICSP No No No No No No No No No S 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, INTCON 10Bh, 18Bh

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:
R/W-1
bit7

REGISTRO OPTION_REG
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
bit0

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

bit 7: bit 6: bit 5:

-RBPU: INTEDG T0CS: Bit de seleccin de origen de reloj 1 = Transicin en la patilla T0CKI. 0 = Reloj interno cada ciclo de instruccin (CLKOUT) 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. PSA: Bit de asignacin de Predivisor. 1 = Predivisor asignado al WDT. 0 = Predivisor asignado al mdulo Timer0. PS2:PS0: Bits de seleccin de divisin. Valor de los bits 000 001 010 011 100 101 110 111 Divisin TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 Divisin WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128

bit 4:

bit 3:

bit 2-0:

TABLA 5-1: Dir.


01h, 101h, 0Bh, 8Bh, 10Bh, 18Bh 81h, 181h

REGISTROS ASOCIADOS AL TIMER0 Nombre TMR0 INTCON Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor tras Valor tras POR, otros BOR resets xxxx xxxx
RBIE T0IF INTF RBIF

Registro del mdulo Timer0


GIE PEIE T0IE INTE

uuuu uuuu 0000 000u 1111 1111

0000 000x 1111 1111

OPTION_REG -RBPU INTEDG T0CS T0SE

PSA

PS2

PS1

PS0

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:
U-0 U-0

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


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

--bit7

---

T1CKPS1 T1CKPS0 T1OSCEN -T1SYNC TMR1CS TMR1ON

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

bit 7-6: bit 5-4:

Sin implementar: Se lee como 0. 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 T1OSCEN: Bit de control de habilitacin de oscilador para TMR1. 1 = Oscilador habilitado. 0 = Oscilador anulado. -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. 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). TMR1ON: Bit de conexin de Timer1. 1 = Timer1 habilitado. 0 = Timer1 detenido.

bit 3:

bit 2:

bit 1:

bit 0:

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 T 1SYNC (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 T 1SYNC 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 T 1SYNC (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 Oscilador Frecuencia 32 KHz LP 100 KHz 200 KHz C1 C2

33 pF 15 pF 15 pF

33 pF 15 pF 15 pF

Estos valores son para gua de diseo Cristales comprobados: 32,768 KHz Epson 001R32.768K-A C+/- 20 PPM

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

REGISTROS ASOCIADOS AL TIMER1


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

Nombre

0Bh, 8Bh, 0000 000x 0000 000u 10Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 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 xxxx xxxx uuuu uuuu 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 ----T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu 10h T1CON 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:
U-0 R/W-0

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


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

--bit7

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

R = De lectura 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: Dir. Nombre


0Bh, 8Bh, INTCON 10Bh, 18Bh 0Ch 8Ch 11h 12h 92h PIR1 PIE1 TMR2 T2CON PR2

REGISTROS ASOCIADOS AL TIMER2 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Valor tras POR,BOR Valor tras otros resets

GIE PSPIF(1) PSPIE(1)

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

0000 000x

0000 000u

ADIF ADIE

RCIF RCIE

TXIF TXIE

SSPIF SSPIE

CCP1IF CCP1IE

0000 0000 TMR2IE TMR1IE 0000 0000 0000 0000 TMR2IF TMR1IF 0000 0000 0000 0000 0000 0000

Registro del mdulo Timer2 --TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

-000 0000

-000 000

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 Captura Comparacin Misma base de tiempos que TMR1

El comparador se configurar para dispara por 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 PWM Captura Ninguna

Comparacin Ninguna

Microcontrolador PIC16F876

Pgina 42

REGISTRO 8-1:
U-0 U-0

REGISTRO CCP1CON/CCP2CON (DIRECCIN 17h/1Dh)


R/W-0
CCPxX

R/W-0
CCPxY

R/W-0
CCPxM3

R/W-0

R/W-0

R/W-0
bit0

--bit7

---

CCPxM2 CCPxM1 CCPcM0

R = De lectura 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 PATILLA CCP DE LA

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 MOVLW MOVWF CCP1CON NEW_CAPT_PS CCP1CON ; Desconecta el mdulo CCP. ; Carga registro W con nueva predivisin ; y activa CCP. ; 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 CYCLE) DE PWM ALTO (DUTY

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: Dir. Nombre REGISTROS ASOCIADOS AL TIMER1, CAPTURA Y COMPARACIN Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Valor tras POR,BOR Valor tras otros resets

0Bh, 8Bh, INTCON GIE 10Bh, 18Bh PIR1 PSPIF(1) 0Ch 0Dh 8Ch 8Dh 87h 0Eh 0Fh 10h 15h 16h 17h 1Bh 1Ch 1Dh
PIR2 PIE1 PIE2 TRISC --PSPIE(1) ---

PEIE ADIF --ADIE ---

T0IE RCIF --RCIE ---

INTE TXIF --TXIE ---

RBIE SSPIF --SSPIE ---

T0IF CCP1IF --CCP1IE ---

INTF TMR2IF --TMR2IE ---

RBIF TMR1IF CCP2IF TMR1IE CCP2IE

0000 000x

0000 000u

0000 0000 ---- ---0 0000 0000 ---- ---0 1111 1111 xxxx xxxx xxxx xxxx

0000 0000 ---- ---0 0000 0000 ---- ---0 1111 1111 uuuu uuuu uuuu uuuu --uu uuuu uuuu uuuu uuuu uuuu --00 0000 uuuu uuuu uuuu uuuu --00 0000

Registro de direccin del puerto C.

TMR1L Byte menos significativo del registro TMR1 de 16 bits. TMR1H Byte ms significativo del registro TMR1 de 16 bits. T1CON
----T1CKPS1 T1CKPS0 T1OSCEN -T1SYNC TMR1CS TMR1ON

--00 0000 xxxx xxxx xxxx xxxx --00 0000 xxxx xxxx xxxx xxxx --00 0000

CCPR1L Byte menos significativo del registro1 de Captura-Comparacin-PWM CCPR1H Byte ms significativo del registro1 de Captura-Comparacin-PWM CCP1CON ----CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0

CCPR2L Byte menos significativo del registro2 de Captura-Comparacin-PWM CCPR2H Byte ms significativo del registro2 de Captura-Comparacin-PWM CCP2CON ----CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0

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

REGISTROS ASOCIADOS AL TIMER2 Y PWM


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

0Bh, 8Bh, INTCON 10Bh, 18Bh 0Ch 0Dh 8Ch 8Dh 87h 11h 92h 12h 15h 16h 17h 1Bh 1Ch 1Dh PIR1 PIR2 PIE1 PIE2 TRISC TMR2 PR2 T2CON

GIE PSPIF(1) --PSPIE(1) ---

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

0000 000x

0000 000u 0000 0000 ---- ---0 0000 0000 ---- ---0 1111 1111 0000 0000 1111 1111 -000 0000 uuuu uuuu uuuu uuuu --00 0000 uuuu uuuu uuuu uuuu --00 0000

ADIF --ADIE ---

RCIF --RCIE ---

TXIF --TXIE ---

SSPIF --SSPIE ---

CCP1IF --CCP1IE ---

TMR2IF --TMR2IE ---

TMR1IF CCP2IF TMR1IE CCP2IE

0000 0000 ---- ---0 0000 0000 ---- ---0 1111 1111 0000 0000 1111 1111

Registro de direccin del puerto C. Registro de los mdulos de TMR2. Registro de perodo de los mdulos TMR2.
--TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

-000 0000 xxxx xxxx xxxx xxxx

CCPR1L Byte menos significativo del registro1 de Captura-Comparacin-PWM CCPR1H Byte ms significativo del registro1 de Captura-Comparacin-PWM CCP1CON ----CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0

--00 0000 xxxx xxxx xxxx xxxx

CCPR2L Byte menos significativo del registro2 de Captura-Comparacin-PWM CCPR2H Byte ms significativo del registro2 de Captura-Comparacin-PWM CCP2CON ----CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0

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

R/W-0
CKE

R-0
D/-A

R-0
P

R-0
S

R-0
R/-W

R-0
UA

R-0
BF bit0

R = De lectura W = De escritura 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). 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. 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 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. 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. 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. 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. 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.

bit 6:

bit 5:

bit 4:

bit 3:

bit 2:

bit 1:

bit 0:

Microcontrolador PIC16F876

Pgina 49

REGISTRO 9-2: SSPCON: REGISTRO DE CONTROL PUERTO SERIE SNCRONO (DIRECCIN 14h)
R/W-0
WCOL bit7

R/W-0
SSPOV

R/W-0
SSPEN

R/W-0
CKP

R/W-0
SSPM3

R/W-0
SSPM2

R/W-0
SSPM1

R/W-0
SSPM0 bit0

R = De lectura W = De escritura 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. 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. 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 2puerto serie y configura estas patillas como lneas de puerto entrada-salida. En modo I C, 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. 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 6:

bit 5:

bit 4:

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 I22C, con 10 bits de direccin. 1000 = Modo Maestro I C, reloj = Fosc / [4(SSPADD+1)]. 1011 = Modo Maestro controlado por el microprograma I2 C (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
GCEN bit7

R/W-0
ACKSTAT

R/W-0
ACKDT

R/W-0
ACKEN

R/W-0
RCEN

R/W-0
PEN

R/W-0
RSEN

R/W-0
SEN bit0

R = De lectura W = De escritura 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. 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. 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. 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. RCEN: Bits de habilitacin de recepcin (solamente en modo maestro I2C). 1 = Habilita la recepcin en modo I2C. 0 = Recepcin detenida. 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. 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. SEN: Bit de habilitacin de la condicin de arranque (solamente en modo maestro I2C). 1 = Inicia la condicin de arranque en las patillas SDA y SCL. Se borra automticamente por hardware. 0 = Detenida la condicin de arranque. 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.

bit 6:

bit 5:

bit 4:

bit 3:

bit 2:

bit 1:

bit 0:

Nota:

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

REGISTROS ASOCIADOS A LA OPERACIN SPI Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Valor tras POR,BOR Valor tras otros resets

Nombre

0Bh, 8Bh, INTCON 10Bh, 18Bh 0Ch 8Ch 13h 14h 94h PIR1 PIE1

GIE PSPIF(1) PSPIE


(1)

PEIE ADIF ADIE

T0IE RCIF RCIE

INTE TXIF TXIE

RBIE SSPIF SSPIE

T0IF CCP1IF

INTF TMR2IF

RBIF TMR1IF

0000 000x 0000 0000 0000 0000 xxxx xxxx

0000 000u 0000 0000 0000 0000 uuuu uuuu 0000 0000 0000 0000

CCP1IE TMR2IE TMR1IE

SSPBUF Registro de recepcin y transmisin del Puerto Serie Sncrono SSPCON SSPSTAT WCOL SSPOV SSPEN SMP CKE D/-A CKP P SSPM3 S SSPM2 R/-W SSPM1 UA SSPM0 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 2 (SSPCON<3:0>) permiten seleccionar uno de los siguientes modos I C: 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 I 2C, las patillas SCL y SDA deben programarse como entradas, activando los bits apropiados del registro TRIS. Al seleccionar un modo I 2C, 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 I 2C. 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 I 2C, 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 Generacin de SSPSR Activacin del bit SSPIF (Sucede la recibe la transferencia SSPBUF interrupcin SSP si est habilitada) ACK pulso BF SSPOV 0 1 1 0 0 0 1 1 S No No S S No No No S S S 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 I 2C 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
REGISTROS ASOCIADOS A LA OPERACIN I2C
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

Pgina 60

TABLA 9-3:
Dir. Nombre

Valor tras POR, BOR

Valor tras otros resets

0Bh, 8Bh, INTCON GIE 10Bh, 18Bh 0Ch 8Ch 0Dh 8Dh 13h 14h 91h 94h PIR1 PIE1 PIR2 PIE2 PSPIF(1) PSPIE(1) -----

PEIE ADIF ADIE (2) (2)

T0IE RCIF RCIE -----

INTE TXIF TXIE EEIF EEIE

RBIE SSPIF SSPIE BCLIF BCLIE

T0IF CCP1IF CCP1IE -----

INTF

RBIF

0000 000x

0000 000u

TMR2IF TMR1IF TMR2IE TMR1IE ----CCP2IF CCP2IE

0000 0000 0000 0000 -r-0 0--0 -r-0 0--0 xxxx xxxx

0000 0000 0000 0000 -r-0 00 -r-0 00 uuuu uuuu 0000 0000 0000 0000 0000 0000

SSPBUF Registro de recepcin y transmisin del Puerto Serie Sncrono SSPCON WCOL SSPOV SSPEN CKP ACKEN P SSPM3 RCEN S SSPM2 PEN R/-W SSPM1 RSEN UA SSPM0 SEN BF

0000 0000 0000 0000 0000 0000

SSPCON2 GCEN ACKSTAT ACKDT SSPSTAT SMP CKE D/-A

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. SOPORTE EN MODO I2C

9.2.7

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 direcci n 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 I 2C. 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 (T BRG), 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 (T BRG), 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 (T BRG). 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 T BRG. Esta accin se sigue con la afirmacin de la patilla SDA (SDA en bajo) por un tiempo T BRG, 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 (T BRG) 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 914). 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 (T BRG). 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 recepcintransmisin, 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 T BRG 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 I 2C 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 I 2C 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 I 2C 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 I 2C, 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 I 2C, 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,

Rpmn

(5,5 0,4) 0,003

1,7 K

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

R/W-0
TX9

R/W-0
TXEN

R/W-0
SYNC

U-0
---

R/W-0
BRGH

R-1
TRMT

R/W-0
TX9D bit0

R = De lectura W = De escritura U = Sin implementar. Da lectura -n = Valor del reset POR

0 en

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). TX9: Bit de habilitacin de transmisin con 9 bits. 1 = Seleccin de transmisin con 9 bits. 0 = Seleccin de transmisin con 8 bits. TXEN: Bit de habilitacin de transmisin. 1 = Transmisin habilitada. 0 = Transmisin inhibida. Nota: SREN/CREN sustituyen a TXEN, en modo Sncrono. SYNC: Bit de seleccin de modo USART. 1 = Modo Sncrono. 0 = Modo Asncrono. Sin implementar: Se lee como 0. BRGH: Bit de seleccin de velocidad de baudios. Modo Asncrono 1 = Alta velocidad. 0 = Baja velocidad. Modo Sncrono No usado en este modo. TRMT: Bit de estado del registro de desplazamiento de transmisin. 1 = TSR vaco. 0 = TSR lleno. TX9D: Noveno bit del dato transmitido. Puede ser el bit de paridad.

bit 6:

bit 5:

bit 4:

bit 3: bit 2:

bit 1:

bit 0:

Microcontrolador PIC16F876

Pgina 79

REGISTRO 10-2: RCSTA: REGISTRO DE CONTROL Y ESTADO DE RECEPCIN (DIRECCIN 18h)


R/W-0
SPEN bit7

R/W-0
RX9

R/W-0
SREN

R/W-0
CREN

R/W-0
ADDEN

R-0

R-0

R-x
bit0

FERR OERR RX9D

R = De lectura W = De escritura 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. RX9: Bit de habilitacin de recepcin con 9 bits. 1 = Seleccin de recepcin con 9 bits. 0 = Seleccin de recepcin con 8 bits. 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. 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. 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 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. OERR: Bit de error por desbordamiento. 1 = Error de desbordamiento. Puede borrarse escribiendo 0 en el bit CREN. 0 = No existe error de desbordamiento. RX9D: Noveno bit del dato recibido. Puede ser el bit de paridad.

bit 6:

bit 5:

bit 4:

bit 3:

bit 2:

bit 1:

bit 0:

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: Dir. Nombre 98h 18h 99h REGISTROS ASOCIADOS AL GENERADOR DE BAUDIOS Bit7 Bit6 Bit5 Bit4 Bit3 --Bit2 Bit1 Bit0 Valor tras Valor tras POR, BOR otros resets 0000 -010 0000 000x 0000 0000 0000 -010 0000 000x 0000 0000

TXSTA CSRC TX9 TXEN SYNC

BRGH TRMT TX9D

RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D SPBRG Registro Generador de Baudios

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 2,4 9,6 19,2 28,8 33,6 57,6 ALTA BAJA --1,221 2,404 9,766 19,531 31,250 34,722 62,500 1,221 312,500 --1,75 0,17 1,73 1,72 8,51 3,34 8,51 ------255 129 31 15 9 8 4 255 0 --1,202 2,404 9,615 19,231 27,778 35,714 62,500 0,977 250,000 --0,17 0,17 0,16 0,16 3,55 6,29 8,51 ------207 103 25 12 8 6 3 255 0 --1,202 2,404 9,766 19,531 31,250 31,250 52,083 0,610 156,250 --0,17 0,17 1,73 1,72 8,51 6,99 9,58 ------129 64 15 7 4 4 2 255 0

Fosc = 4 Mhz Fosc = 3,6864 Mhz BAUD Valor Valor % % (K) KBAUD decimal KBAUD decimal ERROR ERROR SPBRG SPBRG 0,3 1,2 2,4 9,6 19,2 28,8 33,6 57,6 ALTA BAJA 0,300 1,202 2,404 8,929 20,833 31,250 --62,500 0,244 62,500 0 0,17 0,17 6,99 8,51 8,51 --8,51 ----207 51 25 6 2 1 --0 255 0 0,301 1,216 2,432 9,322 18,643 ----55,930 0,218 55,930 0,33 1,33 1,33 2,90 2,90 ----2,90 ----185 46 22 5 2 ----0 255 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 --9,6 9,615 19,2 19,231 28,8 29,070 33,6 33,784 57,6 59,524 ALTA 4,883 BAJA 1250,000 ------0,16 0,16 0,94 0,55 3,34 ----------129 64 42 36 20 255 0 ------9,615 19,231 29,412 33,333 58,824 3,906 1000,000 ------0,16 0,16 2,13 0,79 2,13 ----------103 51 33 29 16 255 0 ----2,441 9,615 19,531 28,409 32,895 56,818 2,441 625,000 ----1,71 0,16 1,72 1,36 2,10 1,36 --------255 64 31 21 18 10 255 0

Fosc = 4 Mhz Fosc = 3,6864 Mhz BAUD Valor Valor % % (K) KBAUD decimal KBAUD decimal ERROR ERROR SPBRG SPBRG 0,3 1,2 2,4 9,6 19,2 28,8 33,6 57,6 ALTA BAJA --1,202 2,404 9,615 19,231 27,798 35,714 62,500 0,977 250,000 --0,17 0,17 0,16 0,16 3,55 6,29 8,51 ------207 103 25 12 8 6 3 255 0 --1,203 2,406 9,727 18,643 27,965 31,960 55,930 0,874 273,722 --0,25 0,25 1,32 2,90 2,90 4,88 2,90 ------185 92 22 11 7 6 3 255 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 T CY), 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: Dir. Nombre OCh 18h 19h 8Ch 98h 99h PIR1 RCSTA

REGISTROS ASOCIADOS A LA TRANSMISIN ASNCRONA Bit7 Bit6 Bit5 RCIF Bit4 TXIF Bit3 Bit2 Bit1 Bit0 Valor tras POR, BOR Valor tras otros resets 0000 0000 0000 -00x 0000 0000 0000 0000 0000 -010 0000 0000

PSPIF(1) ADIF SPEN RX9

SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 --FERR OERR RX9D 0000 -00x 0000 0000

SREN CREN

TXREG Registro Transmisor USART PIE1 TXSTA PSPIE


(1)

ADIE RCIE TX9

TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 --BRGH TRMT TX9D 0000 -010 0000 0000

CSRC

TXEN SYNC

SPBRG Registro Generador de Baudios

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: Dir. Nombre OCh 18h 1Ah 8Ch 98h 99h PIR1 RCSTA

REGISTROS ASOCIADOS A LA RECEPCIN ASNCRONA Bit7 Bit6 Bit5 RCIF Bit4 TXIF Bit3 Bit2 Bit1 Bit0 Valor tras POR, BOR Valor tras otros resets 0000 0000 0000 -00x 0000 0000 0000 0000 0000 -010 0000 0000

PSPIF(1) ADIF SPEN RX9

SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 --FERR OERR RX9D 0000 -00x 0000 0000

SREN CREN

RCREG Registro Receptor USART PIE1 TXSTA PSPIE


(1)

ADIE RCIE TX9

TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 --BRGH TRMT TX9D 0000 -010 0000 0000

CSRC

TXEN SYNC

SPBRG Registro Generador de Baudios

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. 3. 4. 5. 6. 7. 8. 9. 10. 11.

Habilitar el puerto serie asncrono, borrando el bit SYNC y activando el bit SPEN. Si se desea interrupcin, activar el bit RCIE. Si se desea recepcin de 9 bits, activar RX9. Activar ADDEN para habilitar la deteccin de la direccin. Habilitar la recepcin, activando el bit CREN. El indicador RCIF se activar cuando se complete la recepcin. Esto generar una interrupcin, si est activado el bit RCIE. Leer el registro RCSTA para obtener el valor del noveno bit y determinar si ha existido error durante la recepcin. Leer los 8 bits del dato recibido, leyendo el registro RCREG. Esto permitir saber si el dispositivo est siendo direccionado. Si ha ocurrido algn error, cancelarlo, borrando el bit de habilitacin CREN. 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:
Dir. Nombre

REGISTROS ASOCIADOS A LA RECEPCIN ASNCRONA


Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor tras POR, BOR 0000 0000 0000 000x 0000 0000 TXIE SSPIE --CCP1IE TMR2IE TMR1IE BRGH TRMT TX9D 0000 0000 0000 -010 0000 0000 Valor tras otros resets 0000 0000 0000 000x 0000 0000 0000 0000 0000 -010 0000 0000

OCh 18h 1Ah 8Ch 98h 99h

PIR1 RCSTA RCREG PIE1 TXSTA SPBRG

PSPIF(1) SPEN

ADIF RX9

RCIF SREN

TXIF

SSPIF

CCP1IF FERR

TMR2IF OERR

TMR1IF RX9D

CREN ADDEN

Registro Receptor USART PSPIE


(1)

ADIE TX9

RCIE

CSRC

TXEN SYNC

Registro Generador de Baudios

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

REGISTROS ASOCIADOS AL MAESTRO EN TRANSMISIN SNCRONA


Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor tras Valor tras POR, BOR otros resets 0000 0000 0000 -00x 0000 0000 SSPIE --CCP1IE TMR2IE TMR1IE BRGH TRMT TX9D 0000 0000 0000 -010 0000 0000 0000 0000 0000 -00x 0000 0000 0000 0000 0000 -010 0000 0000

OCh 18h 19h 8Ch 98h 99h

PIR1 RCSTA

PSPIF(1) ADIF SPEN RX9

RCIF

TXIF

SSPIF

CCP1IF TMR2IF TMR1IF FERR OERR RX9D

SREN CREN ADDEN

TXREG Registro Transmisor USART PIE1 TXSTA SPBRG PSPIE(1) ADIE CSRC TX9 RCIE TXIE

TXEN SYNC

Registro Generador de Baudios

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

TABLA 10-9:

REGISTROS ASOCIADOS AL MAESTRO EN RECEPCIN SNCRONA Valor tras Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR, BOR PIR1 RCSTA PSPIF(1) ADIF SPEN RX9 RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 --FERR OERR RX9D 0000 -00x 0000 0000 TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 --BRGH TRMT TX9D 0000 -010 0000 0000

Valor tras otros resets 0000 0000 0000 -00x 0000 0000 0000 0000 0000 -010 0000 0000

OCh 18h 1Ah 8Ch 98h 99h

SREN CREN

RCREG Registro Receptor USART PIE1 TXSTA PSPIE


(1)

ADIE RCIE TX9

CSRC

TXEN SYNC

SPBRG Registro Generador de Baudios

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) b) c) d) La primera palabra ser inmediatamente transferida al registro TSR y transmitida. La segunda palabra permanecer en el registro TXREG. El bit indicador TXIF no se activar. 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: Dir. Nombre REGISTROS ASOCIADOS AL SERVIDOR EN TRANSMISIN SNCRONA Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor tras Valor tras POR, BOR otros resets 0000 0000 0000 000x 0000 0000 SSPIE --CCP1IE TMR2IE TMR1IE BRGH TRMT TX9D 0000 0000 0000 -010 0000 0000 0000 0000 0000 000x 0000 0000 0000 0000 0000 -010 0000 0000

OCh 18h 19h 8Ch 98h 99h

PIR1 RCSTA

PSPIF(1) ADIF SPEN RX9

RCIF

TXIF

SSPIF

CCP1IF TMR2IF TMR1IF FERR OERR RX9D

SREN CREN ADDEN

TXREG Registro Transmisor USART PIE1 TXSTA SPBRG PSPIE


(1)

ADIE TX9

RCIE

TXIE

CSRC

TXEN SYNC

Registro Generador de Baudios

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

REGISTROS ASOCIADOS AL SERVIDOR EN RECEPCIN SNCRONA


Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Valor tras Valor tras POR, BOR otros resets 0000 0000 0000 000x 0000 0000 TXIE SSPIE --CCP1IE TMR2IE TMR1IE BRGH TRMT TX9D 0000 0000 0000 -010 0000 0000 0000 0000 0000 000x 0000 0000 0000 0000 0000 -010 0000 0000

OCh 18h 1Ah 8Ch 98h 99h

PIR1 RCSTA

PSPIF(1) ADIF SPEN RX9

RCIF

TXIF

SSPIF

CCP1IF TMR2IF TMR1IF FERR OERR RX9D

SREN CREN ADDEN

RCREG Registro Receptor USART PIE1 TXSTA SPBRG PSPIE(1) ADIE CSRC TX9 RCIE

TXEN SYNC

Registro Generador de Baudios

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 bit7 ------PCFG3 PCFG2 PCFG1 PCFG0 bit0 R = De lectura W = De escritura 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: PCFG0

AN7(1) AN6(1) AN5(1) AN4 RE2 RE1 RE0 RA5

AN3 RA3

AN2 RA2

AN1 AN0 CHAN / VREF+ VREFRA1 RA0 Rets(2) A A A A A A D A A A A A A A D VDD RA3 VDD RA3 VDD RA3 VDD RA3 VDD RA3 RA3 RA3 RA3 VDD RA3 VSS VSS VSS VSS VSS VSS VSS RA2 VSS VSS RA2 RA2 RA2 VSS RA2 8/0 7/1 5/0 4/1 3/0 2/1 0/0 6/2 6/0 5/1 4/2 3/2 2/2 1/0 1/2

0000 A A A A A A A 0001 A A A A VREF+ A A 0010 D D D A A A A 0011 D D D A VREF+ A A 0100 D D D D A D A 0101 D D D D VREF+ D A 011x D D D D D D D 1000 A A A A VREF+ VREF- A 1001 D D A A A A A 1010 D D A A VREF+ A A 1011 D D A A VREF+ VREF- A 1100 D D D A VREF+ VREF- A 1101 D D D D VREF+ VREF- A REGISTRO 11-1: ADCON0 1110 D REGISTRO D D D (DIRECCIN D D 1Fh) D 1111 D D D D VREF+ VREF- D

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 Nota 1: Estos canales no estn disponibles en los dispositivos 28 patillas. ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/-DONE --- de ADON = De escritura Nota 2: Esta columna indica el nmero de canales analgicos disponiblesW 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 T AD. Se necesita un mnimo de 2 T AD 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 (R SS) afectan directamente al tiempo necesitado para cargar el condensador C HOLD. 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 C HOLD + Coeficiente de temperatura = = TAMP + TC + TCOFF =

= 2 s + TC + [(Temperatura 25C) (0,05 s/C)] TC = CHOLD (RIC + RSS + RS) ln (1 /2047) = = 120pF (1K = 16,47 s. TACQ = 2 s + 16,47 s + [(50C 25C) 0,005 s/C] = = 19,72 s. 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 2T AD antes de iniciar otra. Durante este tiempo, el condensador C HOLD no se conecta al canal de entrada analgico seleccionado. 11.2 Seleccin del reloj de Conversin A/D +7K + 10 K ) ln 0,0004885) =

Microcontrolador PIC16F876

Pgina 99

El tiempo por bit de la conversin A/D se define como T AD. 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 T AD: 2Tosc 8Tosc 32Tosc Oscilador RC interno Para una correcta conversin A/D, el reloj debe seleccionarse para asegurar un tiempo mnimo de 1,6 s. La Tabla 11-1 muestra los tiempos resultantes T AD, 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 4 s, pero puede variar entre 2 y 6 s. 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 T CY 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: Dir. Nombre


OBh 0Ch 8Ch 1Eh 9Eh 1Fh 9Fh 85h 05h 89h 09h INTCON PIR1 PIE1

REGISTROS/BITS ASOCIADOS CON A/D Bit7


GIE PSPIF
(1)

Bit6
PEIE ADIF ADIE

Bit5
T0IE RCIF RCIE

Bit4
INTE TXIF TXIE

Bit3
RBIE SSPIF SSPIE

Bit2
T0IF CCP1IF CCP1IE

Bit1
INTF

Bit0
RBIF

POR, BOR
0000 000x 0000 0000 0000 0000 xxxx xxxx -----

-MCLR, WDT
0000 000u 0000 0000 0000 0000 uuuu uuuu ----0000 00-0 --0- 0000 --11 1111 --0u 0000 0000 111 ---- -uuu

TMR2IF TMR1IF TMR2IE TMR1IE

PSPIE(1)

ADRESH Registro de resultado para byte alto. ADRESL Registro de resultado para byte bajo. ADCS0 CHS2 ------OBF ----CHS1 --CHS0 PCFG3 GO/DONE PCFG2 --PCFG1 ADON PCFG0

ADCON0 ADCS1 ADCON1 TRISA PORTA TRISE PORTE ADFM ----IBF ---

0000 00-0 --0- 0000 --11 1111 --0x 0000 0000 -111 ---- -xxx

Registro de direccin del puerto A Latch de datos de PORTA en escritura; patillas de PORTA al leer. IBOV PSPMODE --Bits de direccin de PORTE ------RE2 RE1 RE0

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
REGISTRO 12-1: PALABRA DE CONFIGURACIN (DIRECCIN 2007h)
CP1 CP0 DEBUG --WRT CPD LVP BODEN CP1 CP0 _______ WDTE PWRTE FOSC1 FOSC0

Pgina 103

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

bit0

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. Sin implementar: Se lee como 0. 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. CPD: Proteccin de cdigos de la memoria de datos 1 = Sin proteccin. 0 = Los cdigos de la memoria de datos estn sin proteccin. 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. BODEN: Bit de habilitacin de Reset Brown.Out (BOR = descenso de tensin) (1) 1 = Habilitado BOR 0 = Inhibido BOR. -PWRTE: Bit de habilitacin de retardo a la conexin (PWRT) (1) 1 = Inhibido el PWRT. 0 = Habilitado el PWRT. WDTE: Bit de habilitacin de Supervisor (Watchdog). 1 = Habilitado WDT (Watchdog). 0 = Inhibido el WDT. FOSC1:FOSC0: Bits de seleccin del Oscilador. 11 = Oscilador RC. 10 = Oscilador HS. 01 = Oscilador XT. 00 = Oscilador LP. Habilitando BOR, automticamente se habilita PWRT, independientemente del valor del bit PWRTE. Hay que asegurarse que PWRT est habilitado junto con BOR. Las patillas CP1:CP0 deben tener el valor ofrecido en la lista, para habilitar el cdigo de proteccin.

bit 10: bit 9:

bit 8:

bit 7:

bit 6:

bit 3:

bit 2:

bit 1:0:

Nota 1: Nota 2:

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 XT HS RC Cristal, con bajo consumo. Cristal-Resonador cermico. Cristal-Resonador, en alta velocidad. 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 Modo Frec. OSC1 OSC2 455 KHz 68 100 pF 68 100 pF XT 2,0 MHz 15 68 pF 15 68 pF 4,0 MHz 15 68 pF 15 68 pF 8,0 HMS 10 68 pF 10 68 pF HS 16,0 MHz 10 22 pF 10 22 pF Estos valores son solamente, como gua para diseo Resonadores utilizados 455 KHz Panasonic EFQ-A455K04B +/- 0,3% 2,0 MHz Murata Erie CSA2.00MG +/- 0,5% 4,0 MHz Murata Erie CSA4.00MG +/- 0,5% 8,0 MHz Murata Erie CSA8.00MT +/- 0,5% 16,0 MHz Murata Erie CSA16.00MX +/- 0,5% Todos los resonadores utilizados no llevan, integrados, los condensadores de oscilacin

12.2.3

OSCILADOR RC

Para aplicaciones en las que el tiempo no requiera precisin, el oscilador RC ofrece la opcin ms econmica. La frecuencia del oscilador RC es funcin, del voltaje de alimentacin, de los valores de resistencia (REXT) y capacidad (CEXT), y de la temperatura de trabajo. Adems de esto, la frecuencia del oscilador ira variando conforme lo hagan los parmetros normales. Adems, las diferencias de capacidad de las patillas del condensador, segn el tipo de encapsulado, afectarn a la frecuencia 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. LP Frec. Cristal 32 KHz 200 KHz 200 KHZ XT 1 MHz 4 MHz 4 MHz HS 8 MHz C1 33 pF 15 pF 15 pF 15 pF 15 pF C2 33 pF 15 pF 15 pF 15 pF 15 pF

47-68pF 47-68pF

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 200 Khz 1 Mhz 4 Mhz 8 Mhz 20 Mhz Epson C-001R32.768K-A STD XTL 200.000KHz ECS ECS-10-13-1 ECS ECS-40-20-1 EPSON CA-301 8.000M-C EPSON CA-301 20.000M-C +/- 20 PPM +/- 20 PPM +/- 50 PPM +/- 50 PPM +/- 30 PPM +/- 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 VDD 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 100 s (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 VDD 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 T PWRT, 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 Conexin Configuracin Brown-out Salida de SLEEP del oscilador -PWRTE = 0 -PWRTE = 1 XT, HS, LP RC 72ms + 1024Tosc 72 ms 1024Tosc --72ms + 1024Tosc 72 ms 1024Tosc ---

TABLA 12-4: BITS DE ESTADO Y SU SIGNIFICADO POR BOR TO PD 0 0 0 1 1 1 1 1 X X X 0 1 1 1 1 1 0 X 1 0 0 u 1 1 X 0 1 1 0 u u Reset de conexin (Power-On-Reset). Cdigo ilegal, TO se activa con POR. Cdigo ilegal, PD se activa con POR. Reset de cada de tensin (Brown-Out-Reset). Reset de supervisor (Watch-Dog-Timer). Abandono de WDT. -MCLR durante operacin normal. 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 INDF TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD PORTE PCLATH INTCON 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu 873 874 876 877 N/A N/A N/A 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu 873 874 876 877 0000h 0000h PC + 1(2) (3) 873 874 876 877 0001 1xxx 000q quuu uuuq quuu(3) 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu 873 874 876 877 --0x 000 --0u 000 --uu uuuu 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu 873 874 876 877 ---- -xxx ---- -uuu ---- -uuu 873 874 876 877 ---0 0000 ---0 0000 ---u uuuu 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 SWAPF CLRF MOVWF MOVF MOVWF CLRF : : (ISR) : MOVF MOVWF SWAPF MOVWF SWAPF SWAPF W_TEMP STATUS,W STATUS STATUS_TEMP PCLATH,W PCLATH_TEMP PCLATH ;Copiar W en el registro temporal TEMP. ;Conmuta STATUS con W. ;Selecciona banco 0. Borra IRP, RP1, RP0. ;Salva STATUS de banco 0 en el registro ;STATUS_TEMP. ;Solamente requerido si se usa pginas 1,2 ;y/0 3. ;Salva PCLATH en PCLATH_TEMP. ;Pgina 0, independientemente de la pgina ;actual.

PCLATH_TEMP,W ;Restaura PCLATH a travs de W. PCLATH ; STATUS_TEMP,W ;Conmuta STATUS_TEMP con W (coloca ;el valor original del banco de trabajo. STATUS ;Carga W al registro STATUS. W_TEMP,F ;Devuelve el valor original a W. Se realiza 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 2007h Bits de Config. (1) BODEN(1) CP1 CP0

Bit2

Bit1

Bit0

-PWRTE(1) WDTE FOSC1 FOSC0 PSA PS2 PS1 PS0

81h, 181h OPTION_REG -RBPU INTEDG

T0CS T0SE

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. 2. 3. 4. 5. 6. 7. 8. 9. Escritura o lectura de PSP. Interrupcin de TMR1. Timer1 debe trabajar como contador asncrono. Interrupcin en modo captura CCP. Disparo por suceso especial (Timer1 en modo asncrono usando reloj externo). Interrupcin por deteccin de bit SSP (Start/Stop). Recepcin o transmisin de SSP en modo servidor (SPI/I2C). RX o TX de la USART (modo servidor sncrono). Conversin A/D (cuando la fuente de reloj de A/D es RC). 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 VDD 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 VIHH 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 f W b k Registro fichero. Direccin 0x00 a 0x7Fh. Registro de trabajo (acumulador). Nmero de bit en un registro de 8 bits Dato constante o etiqueta. Cualquier valor (0 o 1). El ensamblador generar cdigos con x = 0. Es la forma de uso recomendada para la compatibilidad con todas las herramientas de desarrollo de Microchip. Seleccin de destino; d = 0: resultado se guarda en W, d = 1: resultado se almacena en el registro f. Por defecto, f = 1. Contador de Programa. Bit de fin de temporizacin. Bit de bajo consumo.

PC TO PD

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 comparacincoincidencia, 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, Operandos ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF BCF BSF BTFSC BTFSS ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW f, d f, d f f, d f, d f, d f, d f, d f, d f, d f f, d f, d f, d f, d f, d f, b f, b f, b f, b k k k k k k k Descripcin Ciclos Cdigo de operacin 14 bits MSb LSb dfff dfff 1fff 0 xxx dfff dfff dfff dfff dfff dfff dfff 1fff 0xx0 dfff dfff dfff dfff dfff bfff bfff bfff bfff kkkk kkkk kkkk 0110 kkkk kkkk kkkk 0000 kkkk 0000 0110 kkkk kkkk ffff ffff ffff xxxx ffff ffff ffff ffff ffff ffff ffff ffff 0000 ffff ffff ffff ffff ffff ffff ffff ffff ffff kkkk kkkk kkkk 0100 kkkk kkkk kkkk 1001 kkkk 1000 0011 kkkk kkkk C, DC, Z Z -TO, -PD Z Status afectado C, DC,Z Z Z Z Z Z Z Z Z Notas

k k

OPERACIONES ORIENTADAS A BYTE Suma W y f 1 00 0111 Funcin AND de W con f 1 00 0101 Borra f 1 00 0001 Borra W 1 00 0001 Complementa f 1 00 1001 Decrementa f 1 00 0011 Decrementa f y salta si cero 1 (2) 00 1011 Incrementa f 1 00 1010 Incrementa f y salta si cero 1 (2) 00 1111 Funcin OR de W con f 1 00 0100 Mueve f 1 00 1000 Mueve W a f 1 00 0000 No opera 1 00 0000 Rotacin a izda. de f a travs de Carry 1 00 1101 Rotacin a dcha. de f a travs de Carry 1 00 1100 Resta W de f 1 00 0010 Conmuta cuartetos en f 1 00 1110 Funcin OREX de W con f 1 00 0110 OPERACIONES ORIENTADAS A BIT Borra bit b de f 1 01 00bb Activa bit b de f 1 01 01bb Comprueba bit b de f y salto si 0 1 (2) 01 10bb Comprueba bit b de f y salto si 1 1 (2) 01 11bb OPERACIONES LITERALES Y DE CONTROL Suma W y k. 1 11 111x Funcin AND de W y k 1 11 1001 Llamada a subrutina 2 10 0kkk Borra el WDT 1 00 0000 Salto a la direccin k 2 10 1kkk Funcin OR de W y k 1 11 1000 Mover k a W 1 11 00xx Retorno de interrupcin 2 00 0000 Retorno cargando k en W 2 11 01xx Retorno de subrutina 2 00 0000 Va a modo reposo 1 00 0000 Resta W de k 1 11 110x Funcin OREX de W y k 1 11 1010

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

C C C, DC, Z Z

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

-TO, -PD C, DC, Z 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 Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Suma W y Literal ADDLW k 0 k 255 (W) + k (W) C, DC, Z El contenido del registro W se suma al byte de k, y el resultado se guarda en W.

BSF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Activa un bit del registro f BSF f, b 0 f 127 0 b 7 1 (f<b>) Ninguno Se activa el bit numerado b del registro f.

ADDWF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Suma W y f ADDWF f, d 0 f 127 d [0,1] (W) + (f) (destino) C, DC, Z El contenido del registro W se suma al registro f. Si d es 0, el resultado se almacena en W; si d es 1, el resultado se guarda en el registro f. Chequea el bit b del registro f, y salta si es 1. BTFSS f, b 0 f 127 0 b 7 Salta si (f<b>) = 1 Ninguno Si el bit b del registro f es uno, se salta la prxima instruccin. Se invierten en total 2 ciclos de instruccin (2TCY). Chequea el bit b del registro f, y salta si es 0. BTFSC f, b 0 f 127 0 b 7 Salta si (f<b>) = 0 Ninguno Si el bit b del registro f es cero, se salta la prxima instruccin. Se invierten en total 2 ciclos de instruccin.

BTFSS Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

ANDLW Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

AND de W con Literal ANDLW 0 k 255 (W) AND (k) Z Se realiza la contenido de literal k. El W. k (W) funcin AND del W con la palabra resultado queda en Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin: BTFSC

ANDWF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

AND de W con f ANDWF f, d 0 f 127 d [0,1] (W) AND (f) (destino) Z And de W con el registro f. Si d es 0, el resultado se almacena en W; si d es 1, el resultado se guarda en el registro f. CALL Sintaxis: Operandos: Operacin: Llamada a Subrutina. CALL k 0 k 2047 (PC) + 1 TOS, k PC<10:0>, (PCLATH<4:3>) PC<12:11> Ninguno Salta a ejecutar el programa (subrutina) que se encuentra en la direccin dada por el contenido de k (11 bits de menor peso) y el PCLATH (bits de mayor peso). Antes de cargar PC con la nueva direccin, guarda en pila el PC actual, para poder regresar cuando se lo mande el programa. EL PC actual ser la direccin donde se ubica el CALL ms uno.

Estado afdo.: Descripcin:

BCF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Borra un bit del registro f BCF f, b 0 f 127 0 b 7 0 (f<b>) Ninguno Se borra el bit numerado b del registro f.

Microcontrolador PIC16F876

Pgina 121

CLRF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Borrado de f CLRF f 0 f 127 00 (f) 1 Z Z Se borra el contenido del registro f, activndose el indicador Z.

DECFSZ Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Decrementa f, y salto si = 0 DECFSZ f, d 0 f 127 d [0,1] (f) - 1 (destino); salto si resultado = 0. ninguno Se decrementa el contenido del registro f. Si d es cero, el resultado se almacena en W; si es uno, en el propio registro f. Si el resultado es 1, la prxima instruccin se ejecutar; si el resultado es 0, se ejecutar una instruccin NOP, invirtiendo 2 ciclos de instruccin en ese caso. Salto incondicional GOTO k 0 k 2047 k PC<10:0> PCLATH<4:3> PC<12:11> ninguno Salto incondicional a la direccin as conseguida: Se carga PC, en sus 11 bits de menor peso (PC<10:0>), con el contenido de k. Los 2 bits de ms peso de PC se toman de PCLATH. Esta instruccin se ejecuta en 2 ciclos de instruccin. Incrementa el registro f INCF f, d 0 f 127 d [0,1] (f) + 1 (destino) Z Se incrementa el contenido del registro f. Si d es cero, el resultado se almacena en W; si es uno, en el propio registro f. Incrementa f, y salto si = 0 INCFSZ f, d 0 f 127 d [0,1] (f) + 1 (destino); salto si resultado = 0. ninguno Se incrementa el contenido del registro f. Si d es cero, el resultado se almacena en W; si es uno, en el propio registro f. Si el resultado es 1, la prxima instruccin se ejecutar; si el resultado es 0, se ejecutar una instruccin NOP, invirtiendo 2 ciclos de instruccin en ese caso.

CLRW Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Borrado de W CLRW Ninguno 00 (W) 1 Z Z Se borra el contenido del registro W. Se activa el indicador Z.

GOTO Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

CLRWDT Sintaxis: Operandos: Operacin:

Borrado del Watchdog Timer CLRWDT Ninguno 00 WDT 0 Predivisor WDT 1 -TO 1 -PD -TO, -PD Se borra el contenido del registro WDT y de su Predivisor. Se activan los bits indicadores de estado TO y PD.

Estado afdo.: Descripcin:

INCF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

COMF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Complementa el registro f COMF f, d 0 f 127 d [0,1] (f) (destino) Z Se complementa el contenido del registro f. Si d es cero, el resultado se almacena en W; si es uno, en el propio registro f.

INCFSZ Sintaxis: Operandos:

DECF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Decrementa el registro f Operacin: DECF f, d 0 f 127 d [0,1] (f) - 1 (destino) Z Se decrementa el contenido del registro f. Si d es cero, el resultado se almacena en W; si es uno, en el propio registro f. Estado afdo.: Descripcin:

Microcontrolador PIC16F876

Pgina 122

IORLW Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Funcin OR de Literal con W IORLW k 0 k 255 (W) OR k (W) Z Se realiza la funcin OR entre el contenido del registro W y la palabra literal k. El resultado queda en W.

NOP Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

No Operar NOP Ninguno No opera Ninguno No se realiza operacin alguna.

RETFIE Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Retorno desde interrupcin RETFIE Ninguno TOS PC; 1 GIE Ninguno Al cargar PC con el contenido de la ltima posicin de pila, se retornar al programa principal, que se abandon para atender la interrupcin.

IORWF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Funcin OR entre W y f IORWF f, d 0 f 127 d [0,1] (W) OR f (destino) Z Se realiza la funcin OR con los contenidos de los registros W y f. El resultado quedar en W si d = 0; en caso contrario, el resultado se almacena en f.

RETLW Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Retorno con Literal en W RETLW k 0 k 255 k (W); TOS PC Ninguno El registro W se carga con la palabra k. El contador de programa se carga con el contenido ltimo de la pila. Esta instruccin tiene 2TCY. Retorno de Subrutina RETURN Ninguno TOS PC Ninguno Retorno desde una subrutina. Se extrae el ltimo valor que entr en pila, para cargarse en el PC. De esta forma se regresa al programa principal en donde se abandon para saltar a subrutina. Esta instruccin tiene 2TCY.

MOVF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Mueve f MOVF f, d 0 f 127 d [0,1] (f) (destino) Z Se lleva el contenido de f al destino, que depender del valor de d: si ste es 0, el contenido de f va a parar a W; en caso contrario, el contenido de f se carga sobre s mismo. Esta ltima operacin, aparentemente intil, puede servir para comprobar el valor cero de f.

RETURN Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

MOVLW Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Mueve Literal a W MOVLW k 0 k 255 (k) (W) Ninguno Los ocho bits de la palabra k se cargan en el registro W.

RLF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Rotacin a izquierda a travs de Carry RLF f, d 0 f 127 d [0,1] Ver descripcin abajo C El contenido del registro f se rota a la izquierda a travs del Carry, en quien se cargar el bit de ms peso de f. El resto de bits de f se desplazan desde menor a mayor peso.

MOVWF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Mueve W a f MOVWF f 0 f 127 (W) (f) Ninguno Mueve el dato de W al registro f.

Microcontrolador PIC16F876

Pgina 123

RRF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Rotacin a derecha a travs de Carry RRF f, d 0 f 127 d [0,1] Ver descripcin abajo C El contenido del registro f se rota a la derecha a travs del Carry, en quien se cargar el bit de menos peso de f. El resto de bits de f se desplazan desde mayor a menor peso.

SWAPF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Conmuta cuartetos de f SWAPF f, d 0 f 127 d [0,1] (f<3:0>) (destino<7:4>) (f<7:4>) (destino<3:0>) Ninguno Se permutan los dos cuartetos (nibbles) del byte del registro f. Si d = 0, el resultado de la permuta se sita en el registro W; si d = 1, el resultado se coloca en f.

SLEEP Sintaxis: Operandos: Operacin:

Estado vigilante XORLW SLEEP Ninguno 00 WDT 0 Predivisor WDT 1 -TO 0 -PD -TO, -PD Se borra el bit de estado de bajo consumo PD y se activa el bit 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. Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin: XOR de Literal con W XORLW k 0 k 255 (W) XOR k (W) Z Se realiza la funcin OR EXCLUSIVA entre el contenido del registro W y la palabra literal k. El resultado queda en W.

Estado afdo.: Descripcin:

XORWF Sintaxis: Operandos:

XOR entre W y f XORWF f, d 0 f 127 d [0,1] (W) XOR f (destino) Z Se realiza la funcin OR EXCLUSIVA con los contenidos de los registros W y f. El resultado quedar en W si d = 0; en caso contrario, el resultado se almacena en f.

SUBLW Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Resta W a Literal SUBLW k 0 k 255 (k) (W) (W) C, DC, Z El contenido del registro W se resta del byte contenido en k; el resultado se guarda en W. C = 1 Resultado positivo C = 0 Resultado negativo Operacin: Estado afdo.: Descripcin:

SUBWF Sintaxis: Operandos: Operacin: Estado afdo.: Descripcin:

Resta W de f SUBWF f, d 0 f 127 d [0,1] (f) - (W) (destino) C, DC, Z 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 VSS............................................................... 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). 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. PORTD y PORTE no estn implementados en los dispositivos de 28 patillas.

Nota 2:

Nota 3:

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) Temperatura de trabajo 40C TA +85C para industrial y CARACTERSTICAS DC 0C TA +70C para comercial Parm. Caractersticas Smbolo Mn. Tp. Mx. Unid. Condiciones N 4,0 D001 D001A Tensin de alimentacin VDD 4,5 VBOR* D002* D003 D004* D005 D010 Corriente alimentacin (Nota 2, 5) D013 D015* D020 D021 D021A D023* Corriente bajo consumo (Nota 3, 5) IPD Corriente BOR (Nota 6) IBOR IDD ----------7 85 10,5 1,5 1,5 15 200 42 16 19 A A Tensin de retencin datos RAM (Nota 1) VDD arranque para asegurar la seal de Reset interno (POR) Velocidad de subida de VDD para asegurar el reset interno (POR) Tensin de reset BOR VDR VPOR SVDD VBOR ----------1,5 VSS --4,0 1,6 5,5 5,5 5,5 ----V V Ver seccin Reset de conexin para los detalles. Ver seccin Reset de conexin para los detalles. Habilitado bit BODEN en configuracin. Oscilacin XT, y RC Fosc = 4 Mhz, VDD = 5,5 V (Nota 4) Oscilacin HS Fosc = 20 Mhz, VDD = 5,5 V BOR habilitado, VDD=5,0V VDD=4,0V, WDT habilitado, -40 C a 85 C VDD=4,0V, WDT inhibido, 0 C a 70 C VDD=4,0V, WDT inhibido, -40 C a 85 C V Configuracin de oscilacin XT, RC y LP. Configuracin de oscilacin HS. BOR habilitado, Fmx = 14 Mhz (Nota 7)

0,05 3,7 ---

--4,35 4

V/ms V

mA

Corriente BOR --85 200 BOR habilitado, VDD = 5,0V IBOR A (Nota 6) Smbolo: * Parmetros caractersticos, pero no probados. Dato en columna Tp es a 5V, 25C, salvo otra especificacin. Estos parmetros son para gua d e 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) Temperatura de trabajo 40 C TA +85 C para industrial y 0 C TA +70 C para comercial Smbolo VDD VDR VPOR SVDD VBOR Mn. 2,0 ----Tp. --1,5 VSS --4,0 0,6 Mx. 5,5 ----Unid. V V V Ver seccin Reset de conexin para los detalles. Ver seccin Reset de conexin para los detalles. Habilitado bit BODEN en configuracin. Oscilacin XT, y RC Fosc = 4 Mhz, VDD = 3,0V (Nota 4) Oscilacin LP Fosc = 32 Khz, VDD = 3,0V, WDT inhibido. Habilitacin BOR, VDD = 5,0V VDD = 3,0V, WDT habilitado, -40 C a 85 C VDD = 3,0 V, WDT inhibido, 0 C a 70 C VDD = 3,0 V, WDT inhibido, -40 C a 85 C Condiciones Configuracin de oscilacin XT, RC y LP (DC 4 Mhz).

CARACTERSTICAS DC Parm. N D001 D002* D003 D004* D005 D010 Corriente alimentacin (Nota 2, 5) IDD Caractersticas Tensin de alimentacin Tensin de retencin datos RAM (Nota 1) VDD arranque para asegurar la seal de Reset interno (POR) Velocidad de subida de VDD para asegurar el reset interno (POR) Tensin de reset BOR

0,05 3,7 ---

--4,35 2,0

V/ms V mA

D010A D015 D020 D021 D021A D023* Corriente bajo consumo (Nota 3, 5) IPD
*

--Corriente BOR (Nota 6) IBOR ---------

20 85 7,5 0,9 0,9

35 200 30 5 5

A A

Corriente BOR 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) Temperatura de trabajo 40 C TA +85 C para industrial y 0 C TA +70 C para comercial Smbolo Mn. Tp. Mx. Unid. Condiciones

CARACTERSTICAS DC Parm. N

Caractersticas Tensin entrada baja Puertos E/S con buffer TTL con buffer ST -MCLR, OSC1 (modo RC) OSC1 (en XT, HS y LP) Puertos RC3 y RC4 con buffer ST con SMBus Tensin entrada alta Puertos E/S con buffer TTL

D030 D030A D031 D032 D033 D034 D034A

VIL

VSS VSS VSS VSS VSS VSS -0,5

---

0,15VDD 0,8V 0,2VDD 0,2VDD 0,3VDD 0,3VDD 0,6

En todo el rango VDD 4,5 V VDD 5,5 V V Nota 1 En todo el rango VDD para VDD = 4,5 a 5,5 V En todo el rango VDD 4,5 V VDD 5,5 V En el rango de VDD V Nota 1 En todo el rango VDD para VDD = 4,5 a 5,5 V A VDD = 5 V, VPIN = VSS

D040 D040A D041 D042 D042A D043 D044 D044A D070

2,0 0,25VDD +0,8 VIH 0,8VDD 0,8VDD 0,7VDD 0,9VDD 0,7VDD 1,4 IPURB 50 250 ---

VDD VDD VDD VDD VDD VDD VDD VDD 5,5 400

con buffer ST -MCLR OSC1 (XT, HS y LP) OSC1 (en modo RC) Puertos RC3 y RC4 con buffer ST con SMBus PORTB con pequea corriente de polarizacin I de fuga en entrada (Notas 2 y 3) Puertos E/S

D060 D061 D063 D080 D083

+/- 1 IIL ----+/- 5 +/- 5 A

VSS VPIN VDD, patilla en alta imped. VSS VPIN VDD VSS VPIN VDD, config. XT, HS y LP.
IOL=8,5mA, VDD=4,5V de -40 C a 85 C IOL=1,6mA, VDD=4,5V de -40 C a 85 C

-MCLR, RA4/T0CKI OSC1 Voltaje salida baja Puertos E/S VOL -----

0,6

OSC2/CLKOUT (config. en modo RC) 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

CARACTERSTICAS DC Parm. N D090 D092 D150 Caractersticas Tensin salida alta Puertos E/S (Nota 3) VOH OSC2/CLKOUT (config. modo RC) Tensin alta drenador abierto Capacidad de carga en patillas de salida Patilla OSC2 Todas las patillas E/S y OSC2 (modo RC), SCL SDA en modo I2C Memoria EEPROM de datos Duracin VDD para lectura-escritura Smb.

Condiciones de trabajo Estndar (salvo indicacin en contra) Temperatura de trabajo 40 C TA +85 C para industrial y 0 C TA +70 C para comercial Mn. Tp. Mx. Unid. Condiciones

VDD - 0,7

---

---

IOH=-3,0mA. VDD=4,5V, de 40 C a +85 C IOH=-1,3mA. VDD=4,5V, de 40 C a +85 C Patilla RA4

VOD

---

---

8,5

D100 D101 D102

COSC2 --CIO CB ---

15 pF 50 400

En modos XT, HS y LP, cuando se usa reloj externo en OSC1.

D120 D121 D122

ED VDRW TDEW

100K Vmn ---

----4

--5,5 8

E/W V ms

25 C a 5V Usando EECON para leer/escribir Vmn= mnima tensin de trabajo

Ciclo de borrado-escritura Memoria de Programa FLASH D130 Duracin D131 VDD para lectura D132a VDD para borrado-escritura

EP VPR

1000 Vmn Vmn

-------

--5,5 5,5

E/W V V

25 C a 5 V Vmm = Mn. tensin de trabajo 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: Parm. Smb. N

REQUISITOS DE TEMPORIZACIN DE RELOJ EXTERNO Caractersticas Mn. DC DC DC DC DC 0,1 4 5 250 250 50 5 250 250 250 50 5 200 Tp. ----------------------------------TCY Mx. 4 4 20 200 4 4 20 200 ----------10,0 250 250 --DC Unid. MHz MHz MHz MHz MHz MHz MHz KHz ns ns ns s ns ns ns ns s ns Condiciones

Frecuencia CLKIN externo (Nota 1) FOSC Frecuencia del oscilador (Nota 1)

Modos XTy RC Modo Modo RC Modo XT Modo HS Modo LP Modo XT y RC Modo HS Modo HS Modo LP Modo RC Modo XT Modo HS (-04) Modo HS (-20) Modo LP TCY = 4 / FOSC

Perodo externo CLKIN (Nota 1) 1 TOSC Perodo del oscilador (Nota 1) Duracin ciclo instruccin (Nota 1) Duracin entrada reloj externo (OSC1) alta o baja

2 3

TCY TOSL, TOSH

ns 100 ----Oscilador XT 2,5 ----Oscilador LP s 15 ----Oscilador HS ns ----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 N 10* 11* 12* 13* 14* 15* 16* 17* 18* 19* 20* 21* 22 23 *
TosH2ckL TosH2ckH TckR TckF TckL2ioV TioV2ckH TckH2ioI TosH2ioV TosH2ioI TioV2osH TioR TioF Tinp Trbp

Mn.

Tp.
75 75 35 35 ------100 ------10 --10 -------

Mx.
200 200 100 100 0,5TCY+20 ----255 ns ns --40 145 40 145 -----

Unid. Condicio.
ns ns ns ns ns ns ns ns Nota 1 Nota 1 Nota 1 Nota 1 Nota 1 Nota 1 Nota 1

OSC1 a CLKOUT --OSC1 a CLKOUT --Tiempo subida CLKOUT --Tiempo bajada CLKOUT ----CLKOUT a salida vlida Puerto Entrada Puerto vlida antes de CLKOUT Tosc+200 0 Mantenimiento entrada puerto despus CLKOUT --OSC1 (ciclo Q1) a salida puerto vlida 100 OSC1 (ciclo Q2) a entrada puerto Estndar (F) vlida (tiempo manten. entrada Extendida(LF) 200 puerto) 0 Entrada vlida puerto a OSC1 Estndar (F) --Tiempo de subida de salida de puerto Extendida(LF) --Estndar (F) --Tiempo de bajada de salida de Puerto Extendida(LF) --Tiempo en bajo o alto en patilla INT TCY Tiempo en bajo o alto para INT por cambio en TCY patilla RB7 RB4

ns ns ns ns ns ns 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. 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. N 30* 31* 32* 33* 34* TmcL Ancho pulso -MCLR Twdt Tost Perodo temporiz. WDT Perodo arranque oscilacin 2 7 --28 --18 1024Tosc 72 --33 --132 s ms --ms

Condicio. VDD = 5V, -40 C a + 85 C VDD = 5V, -40 C a + 85 C Tosc = pero. OSC1 VDD = 5V, -40 C a + 85 C

Tpwrt Perodo conexin TIOZ

Tiempo de alta impedancia desde ----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 N 40* 41* Tt0H Tt0L Ancho pulso alto T0CKI Ancho pulso bajo T0CKI Sin Prediv. Con Prediv. Sin Prediv. Con Prediv. Sin Prediv. Con Prediv. Sncrono, Predivisor = 1 Sncr., Prediv. = Estndar(F) 2, 4 y 8 Extendida(LF) Estndar(F) Asncrono Extendida(LF) Sncrono, Predivisor = 1 Sncr., Prediv. = Estndar(F) 2, 4 y 8 Extendida(LF) Estndar(F) Asncrono Extendida(LF) Estndar(F) 47* Tt1P Perodo de entrada T1CKI Sncrono Extendida(LF) Asncrono 0,5TCY+20 10 0,5TCY+20 10 TCY + 40 Mayor que: 20 (TCY+40)/N 0,5TCY+20 --------0,5TCY+20 15 25 30 50 Mayor que: 30 (TCY+40)/N Mayor que: 50 (TCY+40)/N 60 100 DC 2Tosc -----------------------------------

Mx -----------------------------------

Unid. ns ns ns ns ns ns ns ns ns ns ns ns ns ns ns ns ns

Condiciones Debe coincidir param. 42 Debe coincidir param. 42 N=valor Prediv. (2, 4,... 256) Debe coincidir tambin el parmetro 47

42*

Tt0P

Perodo T0CKI

45*

Tt1H

Tiempo alto T1CKI

46*

Tt1L

Tiempo bajo T1CKI

Debe coincidir tambin el parmetro 47 N=valor Prediv. (1, 2, 4, 8) N=valor Prediv. (1, 2, 4, 8)

-----------

------200 7Tosc

ns ns ns KHz ---

48

Estndar(F) Extendida(LF) Margen de frecuencia de entrada oscilador Timer1 Ft1 (Oscilador habilitado activando el bit T1OSCEN) Retardo de increm. de Timer con respecto al TCKEZtmr1 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 50* Tiempo bajo entrada CCP1 y CCP2 Tiempo alto TccH entrada CCP1 y CCP2 TLC Sin Predivisor Estndar(F) Con Predivisor Extendida(LF) Sin Predivisor 10 Con Predivisor 20 0,5TCY+20 10 20 0,5TCY+20 10 20 --------------------------ns ns ns ns ns ns ns N=Valor del Predivisor (1, 4 o 16)

51*

52* 53*

TccP Perodo de entrada CCP1 y CCP2 TccR

3Tcy 40 N

--10 25 ns Tiempo de subida de la salida Estndar(F) de CCP1 y CCP2 Extendida(LF) --25 50 ns --10 25 ns Tiempo de bajada de la salida Estndar(F) 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 62 TdtV2wrH Dato vlido en la entrada antes de WR o CS (tset-up) Estndar(F) Extendida(LF) 20 25 20 35 --------80 90 ns ns Slo rango extendido --------ns ns Slo rango extendido

63*

Mantenimiento dato entrada TwrH2dtI despus de WR o CS (thold) TrdL2dtV

64

65 TrdH2dtI 10 --30 ns Estos parmetros son caractersticos pero no estn probados. Dato en columna Tp. es a 5V, 25 C, salvo espe cificacin 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 N 70* 71* 72* 73* 74* 75* TssL2scH TscH TscL TdiV2scH, TdiV2scL TscH2diL, TscL2diL TdoR Entrada SS a SCK o SCK Tiempo en alto de la entrada SCK (modo servidor) Tiempo en bajo de la entrada SCK (modo servidor) Tiempo de anticipacin de SDI respecto flanco SCK Tiempo estable de SDI respecto a flanco de SCK

Mn TCY TCY+20 TCY+20 100 100

Tp Mx Unid. Cond. --------------------ns ns ns ns ns

Estndar (F) --10 25 ns Tiempo de subida del dato de 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 --10 25 ns Tiempo de subida de salida SCK Estndar (F) 78* TscR en modo maestro Extendida (LF) --25 50 ns 79* TscF Tiempo de bajada salida SCK modo maestro --10 25 ns Estndar (F) ----50 ns TscH2doV, Dato de salida SDO vlido 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* 1,5TCY+40 ----ns -SS despus de flanco SCK 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. N 90 91 92 93 TSU:STA Antelacin bit START THD:STA TSU:STO THD:STO Modo 100KHz Modo 400KHz Modo 100KHz Tiempo estable bit START Modo 400KHz Modo 100KHz Antelacin bit STOP Modo 400KHz Modo 100KHz Tiempo estable bit STOP Modo 400KHz 4700 600 4000 600 4700 600 4000 600 --------------------------------ns ns ns ns

Cond. Solamente en condicin repeticin de START Despus de este perodo se genera el primer reloj

Microcontrolador PIC16F876

Pgina 140

TABLA 15-9: NECESIDADES DE LOS DATOS DEL BUS I2C Parm. Smbolo Caractersticas Mn N 100KHz 100 THIGH Tiempo alto de reloj 400KHz Mdulo SSP 100KHz 101 TLOW Tiempo bajo de reloj Tiempo de subida de SDA y SCL Tiempo de bajada de SDA y SCL Antelacin bit START Tiempo estable del bit START Tiempo estable dato de entrada Antelacin del dato de entrada Antelacin bit STOP Salida vlida desde reloj Tiempo de bus libre 400KHz Mdulo SSP 100KHz 400KHz 100KHz 400KHz 100KHz 400KHz 100KHz 91 THD:STA 400KHz 100KHz 400KHz 100KHz 400KHz 100KHz 400KHz 100KHz 400KHz 100KHz 400KHz 4,0 0,6 1,5TCY 4,7 1,3 1,5TCY --20+0,1Cb --20+0,1Cb 4,7 0,6 4,0 0,6 0 0 250 100 4,7 0,6 ----4,7 1,3

Mx

Unid.

Condiciones Mnima operacin 1,5MHz Mnima operacin 10MHz Mnima operacin 1,5MHz Mnima operacin 10MHz

---

---

1000 300 300 ns Cb entre 10 y 400 pF

102

TR TF TSU:STA

103

ns

Cb entre 10 y 400 pF Solamente en condicin repeticin de START Despus de este perodo se genera el primer reloj

90

---

----0,9 ----3500 -----

s ns s ns s ns

106

THD:DAT TSU:DAT TSU:STO TAA

107 92 109

Nota 2

Nota 1 Tiempo bus libre antes de inicio nueva transmisin

110

TBUF

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 Estndar (F) 80 SYNC XMIT (Maestro y Servidor) ----ns Dato salida vlido respecto a reloj alto Extendida (LF) 100 Estndar (F) 45 Tiempos de subida y bajada de reloj 121 Tckrf ----ns (modo Maestro) Extendida (LF) 50 Estndar (F) 45 Tiempos de subida y bajada del dato 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. 120 TckH2dtV

TABLA 15-11: NECESIDADES DE RECEPCIN SNCRONA USART Parm. Smbolo Caractersticas Mn N 125 TdtV2ckL

Tp

Mx

Unid.

Cond.

SYNC RCV (Maestro y Servidor) 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 Mx Tp N A01 A03 A04 A06 A07 A10 A20 A21 A22 A25 A30 A40 NR EIL EDL EOFF EGN --VREF Resolucin Error linealidad integral Error linealidad diferencial Error desplazamiento (offset) Error de ganancia Monotonicidad
(3)

Unid. bit LSB LSB LSB LSB --V V V V K A A

Condiciones VREF=VDD=5,12V VSS VAIN VREF VREF=VDD=5,12V VSS VAIN VREF VREF=VDD=5,12V VSS VAIN VREF VREF=VDD=5,12V VSS VAIN VREF VREF=VDD=5,12V VSS VAIN VREF VSS VAIN VREF Mnimo para aseguarar 10 bits de precisin

------------2,0

----------garantizado ---

10bits < +/- 1 < +/- 1 < +/- 2 < +/- 1 --VDD+0,3 AVDD+0,3 VREF+ - 2 VREF +0,3 10,0 -----

Voltaje de referencia (VREF+ - VREF-)

VREF+ Tensin alta de referencia AVDD-2,5 VREF- Tensin baja de referencia AVSS-0,3 VAIN Tensin de entrada analgica VSS 0,3 Impedancia recomendada para ZAIN --la fuente de tensin analgica Estndar --Corriente de IAD conversin A/D Extendida ---

----220 90

A50

IREF

Corriente de la entrada VREF (Nota 2)

10

---

1000

--*

---

10

Corriente media cuando A/D es efectivo (Nota 1) Durante adquisicin de VAIN. Basada en la diferencia entre VHOLD y VAIN, que carga CHOD. Ver Seccin 11.1. Durante el ciclo de 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 N Estndar Extendida Perodo reloj A/D Estndar Extendida Tiempo de conversin (no incluido el tiempo S/H) (Nota 1) 1,6 3,0 2,0 3,0

Tp ----4,0 6,0 ---

Mx Unid. ----6,0 9,0 12 --s s s s TAD s

Condiciones Basado TOSC, VREF Basado TOSC, VREF Modo RC A/D. Modo RC A/D. 3,0V V

130

TAD

131

TCNV

Nota2

40

132

TACQ

Tiempo de adquisicin

10*

---

---

134

TGO

Q4 a incio del reloj A/D

---

TOSC/2

---

---

El tiempo mnimo es el de programacin del amplificador. ste se usar si la nueva tensin de entrada no ha cambiado ms de 1 LSB (p. e., 20,0 mV a 5,12 V) desde la ltima tensin capturada (mientras est activo CHOLD. Si se selecciona reloj RC como fuente de A/D, se aade un tiempo TCY antes del 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 XX...X AA BB C

D E= Nota:

Informacin del nmero particular de Microchip. Informacin especfica del fabricante. Cdigo de ao (ltimas 2 cifras del ao del calendario). Cdigo de semana (la primera semana de Enero ser 01) 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. Nmero de revisin de mscara. Cdigo de la planta de montaje, o regin de origen en la que se mont el bloque.

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 Lmites dimensin Distancia entre filas Nmero de patillas Paso entre patillas Ancho patilla Ancho parte alta de patilla Radio de taladro en placa Grosor de patilla Altura desde plano de placa Altura desde placa a centro Separacin de la placa base Largo de patilla en taladro Longitud de encapsulado Ancho hasta doblado de patillas Ancho de cpsula plstica Distancia extrema entre filas de patillas ngulo de biselado de cpsula ngulo de biselado inferior de cpsula

n p B B1 R c A A1 A2 L D E E1 eB

PULGADAS MN NOM MX 0,300 28 0,100 0,016 0,019 0,022 0,040 0,053 0,065 0,000 0,005 0,010 0,008 0,010 0,012 0,140 0,150 0,160 0,070 0,090 0,110 0,015 0,020 0,025 0,125 0,130 0,135 1,345 1,365 1,385 0,280 0,288 0,295 0,270 0,283 0,295 0,320 0,350 0,380 5 10 15 5 10 15

MILMETROS MN NOM MX 7,62 28 2,54 0,41 0,48 0,56 1,02 1,33 1,65 0,00 0,13 0,25 0,20 0,25 0,30 3,56 3,81 4,06 1,78 2,29 2,79 0,38 0,51 0,64 3,18 3,30 3,43 34,16 34,67 35,18 7,11 7,30 7,49 6,86 7,18 7,49 8,13 8,89 9,65 5 10 15 5 10 15

Microcontrolador PIC16F876

Pgina 147

Unidades Lmites dimensin Paso entre patillas Nmero de patillas Altura desde plano de placa Altura desde placa a centro Separacin de la placa base Longitud de encapsulado Ancho hasta doblado de patillas Ancho de cpsula plstica Biselado superior indicativo Radio de doblado superior Radio de doblado inferior Largo de apoyo en placa, de patilla ngulo de apoyo en placa Distancia desde cpsula hasta inicio de doblado superior Grosor de patilla Ancho patilla ngulo de biselado de cpsula ngulo de biselado inferior de cpsula

p n A A1 A2 D E E1 X R1 R2 L L1 c B

PULGADAS MN NOM MX 0,050 28 0,093 0,099 0,104 0,048 0,058 0,068 0,004 0,008 0,011 0,700 0,706 0,712 0,292 0,296 0,299 0,394 0,407 0,419 0,010 0,020 0,029 0,005 0,005 0,010 0,005 0,005 0,010 0,011 0,016 0,021 0 4 8 0,010 0,015 0,020 0,009 0,011 0,012 0,014 0,017 0,019 0 12 15 0 12 15

MILMETROS MN NOM MX 1,27 28 2,36 2,50 2,64 1,22 1,47 1,73 0,10 0,19 0,28 17,78 17,93 18,08 7,42 7,51 7,59 10,01 10,33 10,64 0,25 0,50 0,74 0,13 0,13 0,25 0,13 0,13 0,25 0,28 0,41 0,53 0 4 8 0,25 0,38 0,51 0,23 0,27 0,30 0,36 0,42 0,48 0 12 15 0 12 15

Microcontrolador PIC16F876

Pgina 148

Unidades Lmites dimensin Distancia entre filas Nmero de patillas Paso entre patillas Ancho patilla Ancho parte alta de patilla Radio de taladro en placa Grosor de patilla Altura desde plano de placa Altura desde placa a centro Separacin de la placa base Largo de patilla en taladro Longitud de encapsulado Ancho hasta doblado de patillas Ancho de cpsula plstica Distancia extrema entre filas de patillas ngulo de biselado de cpsula ngulo de biselado inferior de cpsula

n p B B1 R c A A1 A2 L D E E1 eB

PULGADAS MN NOM MX 0,600 40 0,100 0,016 0,018 0,020 0,045 0,050 0,055 0,000 0,005 0,010 0,009 0,010 0,011 0,110 0,160 0,160 0,073 0,093 0,113 0,020 0,020 0,040 0,125 0,130 0,135 2,013 2,018 2,023 0,530 0,535 0,540 0,545 0,565 0,585 0,630 0,610 0,670 5 10 15 5 10 15

MILMETROS MN NOM MX 15,24 40 2,54 0,41 0,46 0,51 1,14 1,27 1,40 0,00 0,13 0,25 0,23 0,25 0,28 2,79 4,06 4,06 1,85 2,36 2,87 0,51 0,51 1,02 3,18 3,30 3,43 51,13 51,26 51,38 13,46 13,59 13,72 13,84 14,35 14,86 16,00 15,49 17,02 5 10 15 5 10 15

Microcontrolador PIC16F876

Pgina 149

Unidades Lmites dimensin Paso entre patillas Nmero de patillas Ancho hasta centro de patillas extremas Altura desde plano de placa Altura desde placa a centro Separacin de la placa base Radio de doblado superior Radio de doblado inferior Largo de apoyo en placa, de patilla ngulo de apoyo en placa Distancia desde cpsula hasta inicio de doblado superior Grosor de patilla Ancho patilla Longitud entre extremos de patillas extremas lado 1 Longitud entre extremos de patillas extremas lado 2 Longitud de encapsulado lado 1 Longitud de encapsulado lado 2 Biselado esquina indicativo de patilla 1 ngulo de biselado de cpsula ngulo de biselado inferior de cpsula

p n n1 A A1 A2 R1 R2 L L1 c B D1 E1 D E X

PULGADAS MN NOM MX 0,031 44 11 0,039 0,043 0,047 0,015 0,025 0,035 0,002 0,004 0,006 0,003 0,003 0,010 0,003 0,006 0,008 0,005 0,010 0,015 0 3,5 7 0,003 0,008 0,013 0,004 0,006 0,008 0,012 0,015 0,018 0,463 0,472 0,482 0,463 0,472 0,482 0,390 0,394 0,398 0,390 0,394 0,398 0,025 0,035 0,045 5 10 15 5 12 15

MILMETROS MN NOM MX 0,80 44 11 1,00 1,10 1,20 0,38 0,64 0,89 0,05 0,10 0,15 0,08 0,08 0,25 0,08 0,14 0,20 0,13 0,25 0,38 0 3,5 7 0,08 0,20 0,33 0,09 0,15 0,20 0,30 0,38 0,45 11,75 12,00 12,25 11,75 12,00 12,25 9,90 10,00 10,10 9,90 10,00 10,10 0,64 0,89 1,14 5 10 15 5 12 15

Microcontrolador PIC16F876

Pgina 150

Unidades Lmites dimensin Paso entre patillas Nmero de patillas Ancho hasta centro de patillas extremas Altura desde plano de placa Altura desde placa a centro Separacin de la placa base Radio de doblado superior Radio de doblado inferior Largo de apoyo en placa, de patilla ngulo de apoyo en placa Distancia desde cpsula hasta inicio de doblado superior Grosor de patilla Ancho patilla Longitud entre extremos de patillas extremas lado 1 Longitud entre extremos de patillas extremas lado 2 Longitud de encapsulado lado 1 Longitud de encapsulado lado 2 Biselado esquina indicativo de patilla 1 ngulo de biselado de cpsula ngulo de biselado inferior de cpsula

p n n1 A A1 A2 R1 R2 L L1 c B D1 E1 D E X

PULGADAS MN NOM MX 0,031 44 11 0,079 0,086 0,093 0,032 0,044 0,056 0,002 0,006 0,010 0,005 0,005 0,010 0,005 0,012 0,015 0,015 0,020 0,025 0 3,5 7 0,011 0,016 0,021 0,005 0,007 0,009 0,012 0,015 0,018 0,510 0,520 0,530 0,510 0,520 0,530 0,390 0,394 0,398 0,390 0,394 0,398 0,025 0,035 0,045 5 10 15 5 12 15

MILMETROS MN NOM MX 0,80 44 11 2,00 2,18 2,35 0,81 1,11 1,41 0,05 0,15 0,25 0,13 0,13 0,25 0,13 0,30 0,38 0,38 0,51 0,64 0 3,5 7 0,28 0,41 0,53 0,13 0,18 0,23 0,30 0,37 0,45 12,95 13,20 13,45 12,95 13,20 13,45 9,90 10,00 10,10 9,90 10,00 10,10 0,64 0,89 1,14 5 10 15 5 12 15

Microcontrolador PIC16F876

Pgina 151

Unidades Lmites dimensin Nmero de patillas Paso entre patillas Altura desde plano de placa Altura desde placa a centro Separacin de la placa base Altura del bisel del lado 1 Achaflanado de la esquina 1 Achaflanado de cualquier otra esquina Longitud entre extremos de patillas extremas lado 2 Longitud entre extremos de patillas extremas lado 1 Longitud de encapsulado lado 2 Longitud de encapsulado lado 1 Ancho de base Distancia centros de curvatura de patillas extremas Ancho hasta centro de patillas extremas Grosor de patilla Ancho superior de patilla Ancho inferior de patilla Largo parte superior de patilla Radio de doblado superior Radio de doblado inferior ngulo de biselado de cpsula ngulo de biselado inferior de cpsula

PULGADAS MN NOM MX n 44 p 0,050 A 0,165 0,173 0,180 A1 0,095 0,103 0,110 A2 0,015 0,023 0,030 A3 0,024 0,029 0,034 CH1 0,040 0,045 0,050 CH2 0,000 0,005 0,010 E1 0,685 0,690 0,695 D1 0,685 0,690 0,695 E 0,650 0,653 0,656 D 0,650 0,653 0,656 E2 0,610 0,620 0,630 D2 0,610 0,620 0,630 n1 11 c 0,008 0,010 0,012 B1 0,026 0,029 0,032 B 0,015 0,018 0,021 L 0,050 0,058 0,065 R1 0,003 0,005 0,010 R2 0,015 0,025 0,035 0 5 10 0 5 10

MILMETROS MN NOM MX 44 1,27 4,19 4,38 4,57 2,41 2,60 2,79 0,38 0,57 0,76 0,61 0,74 0,86 1,02 1,14 1,27 0,00 0,13 0,25 17,40 17,53 17,65 17,40 17,53 17,65 16,51 16,59 16,66 16,51 16,59 16,66 15,49 15,75 16,00 15,49 15,75 16,00 11 0,20 0,25 0,30 0,66 0,74 0,81 0,38 0,46 0,53 1,27 1,46 1,65 0,08 0,13 0,25 0,38 0,64 0,89 0 5 10 0 5 10

You might also like