Microcontrolador PIC16F876
Página 1
EL MICROCONTROLADOR PIC16F876 Características principales: -
-
-
CPU CPU tip tipoo RIS RISCC CC de alta altass pre prest stac acio ione nes. s. Repert Repertori orioo de 35 instru instrucci ccione oness de de una una palabr palabra. a. Todas las instru instruccion cciones es son son de un único único ciclo, ciclo, except exceptoo las de salto, salto, que que llevan llevan dos. dos. Veloci Velocidad dad de de trabajo trabajo de 20 Mhz, Mhz, con con un un ciclo ciclo de instr instrucc ucción ión de de 200 ns. ns. Memo Memoria ria de pro progr gram amaa tipo tipo flas flashh de 8 Kpa Kpalab labra ras. s. Memo Memori riaa de de dat datos os de 368 368 byt bytes es.. Memo Memoria ria EEPR EEPROM OM de de dat datos os de 256 256 byt bytes es.. Patill Pat illaje aje compat compatibl iblee con PIC16C PIC16C73B 73B/74 /74B/7 B/76/7 6/77. 7. Hast Hastaa 14 14 fue fuent ntes es de inte interr rrup upci ción ón.. Pi Pila la por por har hardw dwar aree de de 8 nivel iveles es.. Modos Modos de de direcc direccion ionami amient entoo direc directo, to, ind indire irecto cto y relat relativo ivo.. Reset eset de con conex exió iónn (P (POR). OR). Tempor Temporizac ización ión de de conexi conexión ón y tempo temporiz rizació aciónn de inici inicioo de oscil oscilaci ación. ón. Circuito supervisor (watchdog). Códi Código go de prot protec ecci ción ón prog progra rama mabl ble. e. Tecnología de alta velocidad y bajo consumo en la memoria CMOS EEPROM/FLASH. Progra Programac mación ión in-sit in-situu vía vía serie serie con dos patilla patillas. s. Posibilidad Posibilidad de progra programación mación in-situ, in-situ, vía vía serie, serie, mediante mediante tensión tensión simple simple de 5 voltios. voltios. Acceso Acceso para para lectu lectura ra o escri escritura tura a la memori memoriaa de progra programa. ma. Gran margen de alimentación entre 2 y 5,5 voltios. Corr Corrie ient ntee de sali salida da de 25 mA. 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 periféricos: -
-
-
-
Timer0: Temporizador-Contador de 8 bits, con Predivisor también de 8 bits. Timer1 Timer1:: Temporiz Temporizado ador-C r-Cont ontado adorr de 16 bits con Pred Predivi ivisor sor,, que puede puede trabaja trabajarr con reloj externo en el modo reposo (sleep). Time Timer2 r2:: Temp Tempor oriza izado dorr-Co Conta ntado dorr de 8 bits bits con regis registro tro de períod períodoo de la mism mismaa longitud, con Predivisor y Postdivisor. Dos Dos módulo móduloss de Captur Capturaa y Comp Compar arac ació iónn y uno uno PWM (modu (modulac lació iónn por anch anchoo de impulso: La captura es de 16 bits, con resolución máxima de 12,5 ns. La comparación es de 16 bits, con resolución máxima de 200 ns. El bloque PWM tiene una resolución máxima de 10 bits. Conver Convertid tidor or mul multic ticana anall anal analógi ógico co dig digita itall de de 10 10 bits bits.. Puerto serie síncrono (SSP), con modo Maestro (SPI) e I 2C (maestro/servidor). Transm Transmiso isorr Receptor Receptor Univers Universal al Síncron Síncronoo Asíncro Asíncrono no (USART/ (USART/SCI SCI)) con detecció detecciónn de 9 bits y de dirección. Circui Circuito to de de detec detecció ciónn de BROWNBROWN-OUT OUT (baj (bajada ada de tens tensión ión). ).
Microcontrolador PIC16F876
PATILLAJE
Página 2
PRESTACIONES
PIC16F876
Frecuencia de trabajo Borrados y retardos
Continua- 20Mhz. POR, BOR (PWRT, OST) 8K
Memoria de programa tipo flash (palabras de 14 bits) Memoria de datos (bytes) Memoria de datos EEPROM Interrupciones Puertos de entrada salida Temporizadores Módu Módulo loss Capt Captur ura/ a/Co Comp mpar arac ació ión/ n/PW PWM M Comunicaciones serie Módulo CAD de 10 bits Repertorio de instrucciones
36 8 256 13 PUERTOS A, B, C 3 2 MSSP y USART 5 canales 35
Microcontrolador PIC16F876
Página 3
TABLA 1-1: DESCRIPCIÓN DEL Patillaje DEL PIC16F873 Y PIC16F876 Nº DIP
Nº SOIC
Tipo I/O/P
Familia
Descripción
OSC1/CLKIN
9
9
I
ST/CMOS
OSC2/CLKOUT
10
10
O
-
-MCLR/Vpp/ THV
1
1
I/P
ST
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 duración del ciclo de instrucción. Entrada de reset por nivel bajo, entrada de tensión de programación o alta tensión de prueba de control.
I/O I/O
TTL TTL
Nombre de la patilla
El puerto A es un puerto bidireccional RA0/AN0 2 2 RA1/AN1 3 3
RA0 puede ser, también, la entrada analógica 0. RA1 puede ser, también, la entrada analógica 1. RA2 puede ser la entrada analógica 2 o la tensión negativa de RA2/AN2/VREF4 4 I/O TTL referencia analógica. RA3 puede serla entrada analógica 3 o la tensión positiva de RA3/AN3/VREF+ 5 5 I/O TTL referencia analógica. RA4 puede ser, también, la entrada de reloj del Temporizador 0. RA4/T0CKI 6 6 I/O ST La salida es en drenador abierto. RA5 puede ser, también, la entrada analógica 4 o la selección de RA5/-SS/AN4 7 7 I/O TTL servidor para el puerto serie síncrono. El puerto B es bidireccional y puede programarse la conexión interna de resistencias a +Vcc RB0/INT 21 21 I/O TTL/ST RB0 puede ser, también, la interrupción externa. RB1 22 22 I/O TTL RB2 23 23 I/O TTL RB3/PGM 24 24 I/O TTL RB3 puede ser, también, la entrada de programación. RB4 25 25 I/O TTL Patilla de cambio de interrupción activa. RB5 26 26 I/O TTL Patilla de cambio de interrupción activa. RB6/PGC 27 27 I/O TTL/ST Cambio de interrupción activa o reloj para programación en serie. RB7/PGD 28 28 I/O TTL/ST Cambio de interrupción activa o dato para programación en serie. El puerto C es un puerto bidireccional RC0 puede ser, también, la salida de oscilación del Timer1 o la RC0/T1OSO/T1CKI 11 11 I/O ST entrada de reloj del Timer1. RC1 puede ser, también, la entrada de oscilación del Timer1, la RC1/T1OSI/CCP2 12 12 I/O ST entrada de Captura2, salida de Comparación2 o salida de PWM2. RC2 puede ser, ser, tambié también, n, la entrada entrada de Captur Captura1, a1, salida salida de RC2/CCP1 13 13 I/O ST Comparación1 o salida de PWM1. RC3 puede ser, también, entrada de reloj síncrono serie o salida del RC3/SCK/SCL 14 14 I/O ST bloque SPI en modo I2C. RC4 puede ser, también, el dato de entrada en modo SPI o el dato RC4/SDI/SDA 15 15 I/O ST de entada salida en modo I2C. RC5/SDO 16 16 I/O ST RC5 puede ser, también, el dato de salida en modo SPI. RC6/TX/CK 17 17 I/O ST RC6 puede ser también, el reloj de la USART. RC7/RX/DT 18 18 I/O ST RC7 puede ser, también, el dato de la USART. Vss 8,19 8,19 P Conexión de 0V para circuitos lógicos y entradas/salidas. VDD 20 20 P Alimentación positiva para lógica y entradas/salidas.
I = Entrada; O = Salida; I/O = Entrada o salida; P = Alimentación - = No utilizado; TTL = Entrada de ese tipo; ST = Entrada tipo Trigger de Schmitt
2.0
ORGANIZACIÓN DE DE LA LA ME MEMORIA
Microcontrolador PIC16F876
Página 4
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 simultáneo. 2.1
ORG ORGANIZACIÓN DE DE LA MEMORIA DE PR 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 dirección 0000h, 0000h, queriendo esto decir que tras un reset al dispositivo el PC se cargará con esa cantidad. El vector de la interrupción se encuentra situado en la dirección 0004h. En la figura 2.1 se representa esquemáticamente 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 Regist istro de Funcion iones Especiales (SFR). RP1:RP0 00 01 10 11
Banco 0 1 2 3
Cada banco tiene una extensión de 128 bytes (7Fh). Las posiciones más bajas de cada banco se reservan para el registro SFR. Tanto SFR como el GPR (Registro de Propósito General) se implementan como una RAM estática. Los regist registros ros que son son muy utiliza utilizados dos dentro dentro del SFR, se duplican en otros bancos para evitar los continuos cambios de éstos en los programas.
2.2. 2.2.11
FICH FICHER ERO O DE DE REG REGIS ISTR TROS OS DE DE PRO PROPÓ PÓSI SITO TO GENE GENERA RAL L
Al fichero fichero de registros registros de propósito propósito general general se puede acceder acceder directament directamentee o indirectame indirectamente nte a través del Fichero de Selección de Registros FSR. En la figura 2.3 se ofrece el mapa del fichero de registros del PIC16F876.
Microcontrolador PIC16F876
Página 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 TXR EG RCREG CCPR2L CCPR2H CCP2CON ADRESH A DC O N
00h 01 h 0 2h 03 h 0 4h 05h 0 6h 0 7h 08 h 09 h 0A h 0Bh 0Ch 0D h 0Eh 0Fh 1 0h 11 h 1 2h 13h 14h 15h 16h 17 h 1 8h 1 9h 1A h 1Bh 1Ch 1D h 1Eh 1Fh 20 h
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 Propósito General
96 bytes de Registros de Propósito General
Dir. ind.(*) TMR0 PCL STATUS FSR PORTB
PCLATH INTCON EEDATA EEADR EEDATH EEADRH
16 bytes de Registros de Propósito General
Acceso 70h - 7Fh
16Fh 1 7 0H Acceso 70h - 7Fh
FFh Banco 1
100h 10 1h 102h 103h 10 4h 105 h 106h 10 7h 108h 109h 1 0A h 10Bh 10Ch 1 0D h 10Eh 10Fh 110h 11 1h 112h 1 13h 11 4h 11 5h 1 16h 117h 118 h 1 19h 1 1A h 11Bh 11Ch 1 1D h 11Eh 11Fh 120 h
80 bytes de Registros de Propósito General EFh F0h
7Fh Banco 0
80h 81 h 82h 83h 84 h 85 h 86h 87h 88h 89h 8A h 8Bh 8Ch 8D h 8Eh 8Fh 90 h 9 1h 9 2h 93h 94 h 9 5h 96h 97h 98 h 99 h 9A h 9Bh 9Ch 9D h 9Eh 9Fh A 0h
Direc. de fichero Dir. ind.(*) 180h OPTION REG 181h PCL 182 h STATUS 183h FSR 184h 18 5h TRISB 186h 187 h 188h 189h PCLATH 1 8A h INTCON 18Bh EECON1 18Ch EECON2 1 8D h Reservado(2) 18Eh Reservado(2) 18Fh 190h 1 91h 1 92h 193h 19 4h 1 95h 16 bytes de 196h Registros de 197h Propósito 19 8h General 19 9 h 1 9A h 19Bh 19Ch 1 9D h 19Eh 19Fh 1A 0 h 80 bytes de Registros de Propósito General Acceso 70h - 7Fh
17Fh Banco 2
1FFh Banco 3
Posiciones sin implementar. Al leerlas se obtiene 0. *
1EFh 1F0h
No es físicamente un registro.
Nota 1: Estos registros no se implementan en los dispositivos de 28 patillas. Nota 2: Estos registros están reservados; hay que mantenerlos en 0.
Microcontrolador PIC16F876
2.2. 2.2.22
Página 6
REGI REGIST STRO ROSS DE FUNC FUNCIÓ IÓN N ESPE ESPECI CIAL AL (SFR (SFR))
Los Registros de Función Especial son registros usados por la CPU y módulos periféricos para controlar las operaciones deseadas en el microcontrolador. Estos registros se implementan i mplementan como una RAM estática, y la lista se ofrece en la Tabla 2.1. El SFR puede clasificarse en dos grupos: para la CPU y para los periféricos. Los registros asociados a operaciones de la CPU se describen detalladamente en esta sección; los relacionados con operaciones periféricas se detallarán en secciones posteriores. TABLA 2-1: RESUMEN DEL REGISTRO DE FUNCIÓN ESPECIAL Direcc. Banco 0 00h(4) 01 h 02h(4) 03h(4) 04h(4) 05 h 06h 06h 07h 07h 08h(5) 09h(5) 0Ah(1,4) 0Bh(4) 0Ch 0D h 0Eh 0Fh 0Fh 10 h 11 h 12 h 13h 13h 14 h 15h 15h 16h 16h 17h 18 h 19h 1A h 1Bh 1Bh 1Ch 1Ch 1Dh 1Eh 1Fh
Nombre INDF TMR0 PCL STATUS FSR PORTA PORT PORTB B PORT PORTC C PORTD PORTE PCLATH INTCON PIR1 PIR2 TMR1L TMR TMR1H T1CON TMR2 T2CON SS SSPB PBUF UF SSPCON CCPR CCPR1L 1L CCPR CCPR1H 1H CCP1CON
RCSTA TXREG RCREG CCPR CCPR2L 2L CCPR CCPR2H 2H CCP2CON ADRESH ADCON0
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Valor tras POR, BOR
0000 0000 No es un registro registro físico. físico. Se usa para para direccion direccionamient amientoo de la memori memoriaa de datos. xxxx xxxx Registro del módulo Timer 0. 0000 0000 Byte Byte de menor menor peso peso del regist registro ro Cont Contador ador de Progr Programa ama (PC). (PC). 0001 1xxx IRP RP1 RP0 -TO -PD Z DC C xxxx xxxx Puntero Punt ero de dire direcci ccionam onamien iento to iindi ndirec recto to de de la memori memoriaa de datos. datos. Memoria ria de de datos atos PORTA RTA en escri scrittura; ura; pati atill llas as POR PORTA en lect lectur ura. a. - -0x -0x 0000 0000 --x x x x xxxx Memo Memori riaa de de dat datos os POR PORTB en escr escrit itur ura; a; pati patill llas as del del POR PORTB TB cuan cuando do se lee. lee. x x x x xxxx Memo Memori riaa de de dat datos os POR PORTC en escr escrit itur ura; a; pati patill llas as del del POR PORTC TC cuan cuando do se lee. lee. xxxx xxxx Memoria Memoria de datos datos PORTD PORTD en escritura escritura;; patillas patillas del PORTD cuando cuando se se lee. - - - - -xxx -----RE2 RE1 RE0 - - -0 0000 ---Buffer de escritura para los 5 bits de más peso del PC. 0000 000x GIE PEIE T0IE INTE RBIE T0IF INTF RBIF PSPIF(3) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 -(6) -EEIF BCLIF --CCP2IF - r -0 0- -0 xxxx xxxx 8 bi bits de de me menor nor pe peso de del re registro de 16 16 bi bits TM TMR1. xxxx xxxx 8 bits bits de mayor ayor peso eso del del regi regist stro ro de 16 bit bits TMR TMR1. --T1CKPS1 T1 T1CKPS0 T1OSCEN T1SY T1SYNC NC TMR TMR1CS 1CS TMR TMR1ON 1ON - -00 0000 0000 0000 Registro del módulo TIMER 2. TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 - 00 000 0000 -xxxx xxxx Regi Regist stro ro de de tran transm smis isió iónn y buff buffer er de de rece recepc pció iónn del del puer puerto to ser serie ie sín síncr cron ono. o. WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 xxxx xxxx Byte Byte de meno menorr pes pesoo del del regi regist stro ro de Capt Captur ura, a, Comp Compar arac ació iónn y PWM. PWM. xxxx xxxx Byte Byte de mayo mayorr pes pesoo del del regi regist stro ro de Capt Captur ura, a, Comp Compar arac ació iónn y PWM. PWM. --CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0 - -00 0000 0000 000x SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 0000 Registro de dato ato a tran ransmitir en la USAR SART. 0000 0000 Registro de dato ato reci ecibido en la USART. xxxx xxxx Byte Byte menos menos sign signifi ificat cativ ivoo del regis registr troo 2 de Capt Captur ura/ a/Co Comp mpara araci ción ón/P /PWM WM.. xxxx xxxx Byte Byte más más signi signifi fica cati tivo vo del regi regist stro ro 2 de Capt Captur ura/ a/Co Comp mpar arac ació ión/ n/PW PWM. M. --CCP2X CCP2Y CCP2M3 CCP2M2 CCP2M1 CCP2M0 - -00 0000 xxxx xxxx Byte de más peso del resultado de la conversión analógica digital (A/D) 0000 00-0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/-DONE -ADON
Valor tras otros resets 0000 0000 uuuu uuuu 0000 0000 000q quuu uuuu uuuu - -0u -0u 000 00000 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 00-0
Explicación: x = Desconocido; u = Sin cambio; q = Depende de condición; r = Reservado “---“ = Sin implementar (al leer da cero); “ – “ delante de una referencia = Función negada Las posiciones oscurecidas están sin implementar; su lectura proporciona un cero. Nota 1: El byte más significativo del Contador de Programa está inaccesible. PCLATH es el registro de los 5 bits de más 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 están 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 están implementados en los dispositivos de 28 patillas. Al leerlos, siempre se obtiene cero. Nota 6: PIR2<6> y PIE2<6> están reservados en dispositivos de 28 patillas; se deben mantener siempre a cero.
TABLA 2-1:RESUMEN DEL REGISTRO DE FUNCIÓN ESPECIAL (CONTINUACIÓN) Direcc.
Nombre
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Valor tras POR, BOR
Valor tras otros resets
Microcontrolador PIC16F876 Banco 1 80h(4) 81h 82h(4) 83h(4) 84h(4) 85 h 86h 87h 88h(5) 89h(5) 8Ah(1,4) 8Bh(4) 8Ch 8D h 8Eh 8Fh 90 h 91h 92h 93h 93h 94 h 95 h 96 h 97 h 98 h 99h 9A h 9Bh 9Ch 9D h 9Eh 9Fh
INDF INDF
Página 7
0000 0000 No es un regist registro ro físico físico.. Se usa para para direcc direccion ionami amient entoo de la memori memoriaa de datos. datos. 1111 1111 INTEDG T0CS T0SE PSA PS2 PS1 PS0 0000 0000 Byte Byte menos menos signifi significati cativo vo del del Cont Contador ador de Program Programaa (PC). (PC). 0001 1xxx IRP RP1 RP0 -TO -PD Z DC C xxxx xxxx Puntero Punt ero de dire direcci ccionam onamien iento to iindi ndirec recto to de de la memori memoriaa de datos. datos. - -11 1111 --Registro de programación de dirección del puerto A. 1111 1111 Registro de pro proggramación de de di dirección de del ppuuerto rto B. B. 1111 1111 Registro de pro proggramación de de di dirección de del ppuuerto rto C. C. 1111 1111 Regist Registro ro de progra programac mación ión de dire direcci cción ón del puer puerto to D. --111 IBF OBF IBOV PSPMODE Dirección de datos en puerto E. 0000 -1 0 0 000 ---Buffer de escritura para los 5 bits de más peso del PC. 0 0 0 0 0 0 0x GIE PEIE T0IE INTE RBIE T0IF INTF RBIF (3) PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0 - -0 -(6) -EEIE BCLIE --CCP2IE -r -0 0-qq -------POR BOR - - - - - -q ---Sin implementar. ---Sin implementar. 0000 0000 GCEN AC KS TAT ACKDT ACKEN RCEN PEN RSEN SEN 1111 1111 Registro de pro proggramación de del ppeeríodo del del ttem empporiz rizador dor 2 (Timer 2) 2). 0000 0000 Regi Regist stro ro de dire direcc cció iónn del del puer puerto to seri seriee sín síncr cron onoo en en mod modoo I2C. 0000 0000 SMP CKE D/-A P S R/-W UA BF ---Sin implementar. ---Sin implementar. ---Sin implementar. 0000 -010 CSRC TX9 TXEN SYNC -BRGH TRMT T X 9D 0000 0000 Registro gener eneraador dor de de bau bauddios de de tra trannsmisión. ---Sin implementar. ---Sin implementar. ---Sin implementar. ---Sin implementar. xxxx xxxx Byte de menos peso del resultado de la conversión analógica digital (A/D) ADFM ---PCFG3 PCFG2 PCFG1 PCFG0 0- - - 0000000
O PT IO N _R G E -RBPU
PCL STATUS FSR TRISA TRISB TRISC TRISD TRISD TRISE PCLATH INTCON PIE1 PIE2 PCON --SSPCON2
PR2 SS SSPA PADD DD SSPSAT ---TXSTA SPBRG ----ADRESL ADCON1
0000 0000 1111 1111 0000 0000 000q quuu uuuu uuuu - -11 1111 1111 1111 1111 1111 1111 1111 0000 -1 -111 - - -0 0000 0000 000u 0000 0000 -r -0 00- -0 - - - - - -u -uu ------0000 0000 1111 1111 0000 0000 0000 0000 ---------0000 -010 0000 0000 ------------uuuu uuuu 0- - - 0000000
Explicación: x = Desconocido; u = Sin cambio; q = Depende de condición; r = Reservado “---“ ---“ = Sin implementar (al leer da cero); “ – “ delante de una referencia = Función negada Las posiciones oscurecidas están sin implementar; su lectura proporciona un cero. Nota 1: El byte más significativo del Contador de Programa está inaccesible. PCLATH es el registro de los 5 bits de más 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 están 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 están implementados en los dispositivos de 28 patillas. Al leerlos, siempre se obtiene cero. Nota 6: PIR2<6> y PIE2<6> están reservados en dispositivos de 28 patillas; se deben mantener siempre a cero.
TABLA 2-1: RESUMEN DE REGISTRO DE FUNCIÓN ESPECIAL (CONTINUACIÓN) Direcc.
Nombre
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Valor tras POR, BOR
Valor tras otros resets
Microcontrolador PIC16F876 Banco 2 100h(4) 101h 01h 102h(4) 103h(4) 104h(4) 10 5h 106h 106h 10 7h 10 8h 10 9h 10Ah(1,4) 10Bh(4) 10C 10Ch 10Dh 0Dh 10 Eh 10Fh Banco 3 180h(4) 181h 182h(4) 183h(4) 184h(4) 18 5h 186h 186h 18 7h 18 8h 18 9h 18Ah(1,4) 18Bh(4) 18Ch 18Dh 18Dh 18 Eh 18Fh
Página 8
INDF INDF TMR TMR0 PCL STATUS FSR -PORT PORTB B ---PCLATH INTCON EEDA EEDATA TA EEADR EEDATH EEADRH
No es un regist registro ro físico físico.. Se usa para para direcc direccion ionami amient entoo de la memori memoriaa de datos. datos. Registro del módulo tem tempporiza rizaddor 0 (Ti (Timer 0) 0). Byte Byte menos menos signifi significati cativo vo del del Cont Contador ador de Program Programaa (PC). (PC). IRP RP1 RP0 -TO -PD Z DC C Puntero Punt ero de dire direcci ccionam onamien iento to iindi ndirec recto to de de la memori memoriaa de datos. datos. Sin implementar. Memo Memori riaa de dat datos os POR PORTB TB en en escr escrit itur ura; a; pat patil illa lass del del POR PORTB TB cua cuand ndoo se se lee. lee. Sin implementar. Sin implementar. Sin implementar. ---Buffer de escritura para los 5 bits de más peso del PC. GIE PEIE T0IE INTE RBIE T0IF INTF RBIF Regi Regisstro tro de datos atos de la EEPR EEPROM OM.. Registro de di dirección ción de la la EE EEPROM. --Byte alto del registro de datos de la EEPROM ---Byte alto del registro de dirección de la EEPROM
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 uuuu uuuu 0000 0000 000q quuu uuuu uuuu ---uuuu uuuu ---------- - -0 0000 0000 000u uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
INDF INDF
No es un regist registro ro físico físico.. Se usa para para direcc direccion ionami amient entoo de la memori memoriaa de datos. datos. INTEDG T0CS T0SE PSA PS2 PS1 PS0 Byte Byte menos menos signifi significati cativo vo del del Cont Contador ador de Program Programaa (PC). (PC). IRP RP1 RP0 -TO -PD Z DC C Puntero Punt ero de dire direcci ccionam onamien iento to iindi ndirec recto to de de la memori memoriaa de datos. datos. Sin implementar. Regi Regisstro tro de prog progra ram mació aciónn de de dire direcc cció iónn del del pue puerto rto B. B. Sin implementar. Sin implementar. Sin implementar. ---Buffer de escritura para los 5 bits de más peso del PC. GIE PEIE T0IE INTE RBIE T0IF INTF RBIF EEPGD ---WRERR WREN WR RD Regi Regist stro ro 2 de cont control rol de EEPR EEPROM OM.. No es físi física came ment ntee un un regi regist stro. ro. Sin implementar. Sin implementar.
0000 0000 1111 1111 0000 0000 0001 1xxx xxxx xxxx ---1111 1111 ---------- - -0 0000 0000 000x x- - - xx00000 ---- ---0000 0000 0000 0000
0000 0000 1111 1111 0000 0000 000q quuu uuuu uuuu ---1111 1111 ---------- - -0 0000 0000 000u x- - - uu00000 ---- ---0000 0000 0000 0000
O PT IO N _R G E -RBPU
PCL STATUS FSR -TRIS TRISB B ---PCLATH INTCON EECON1 EECO EECON2 N2 ---
Explicación: x = Desconocido; u = Sin cambio; q = Depende de condición; r = Reservado “---“ ---“ = Sin implementar (al leer da cero); “ – “ delante de una referencia = Función negada Las posiciones oscurecidas están sin implementar; su lectura proporciona un cero. Nota 1: El byte más significativo del Contador de Programa está inaccesible. PCLATH es el registro de los 5 bits de más 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 están 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 están implementados en los dispositivos de 28 patillas. Al leerlos, siempre se obtiene cero. Nota 6: PIR2<6> y PIE2<6> están reservados en dispositivos de 28 patillas; se deben mantener siempre a cero.
2.2.2. 2.2.2.11 REGIST REGISTRO RO DE ESTADO ESTADO (STATU (STATUS S REGI REGISTE STER) R)
Microcontrolador PIC16F876
Página 9
El registro de estado contiene el estado después de operaciones aritméticas y lógicas en el bloque de la ALU, el estado del RESET y los bits de selección 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 instrucción 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 lógicos. Además, Además, los bits -TO y -PD no pueden pueden modificarse, modificarse, por tanto, el resultado resultado de una instrucción instrucción que tenga como destino el SR puede ser distinto de lo esperado. Por ejemplo, CLRF STATUS borrará los tres bits de más 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 SWAPF y MOVWF, porque 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
IR P
RP1
RP0
-TO
-PD
Z
DC
C
bit7
bit0
R = De lectura W = De escritura U = Sin implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
IRP: Bit de selección de banco de registros (usado para direccionamiento indirecto). 1 = Bancos 2 y 3 (100h - 1FFh) 0 = Bancos 0 y 1 (00h - FFh)
bit 6-5:
RP1:RP0: Bits de selección de banco de registros (usado para direccionamiento directo). 11 = Banco 3 (180h - 1FFh) 10 = Banco 2 (100h - 17Fh) 01 = Banco 1 (80h - FFh) 00 = Banco 0 (00h - 7Fh) Cada banco dispone de 128 bytes.
bit 4:
-TO: Bit de final de temporización. 1 = Después de conexión, instrucción CLRWDT, o instrucción SLEEP. 0 = Cuando sucede el final de temporización del WDT.
bit 3:
-PD: Bit de bajada de tensión. 1 = Después de la conexión o por la instrucción CLRWDT. 0 = Al ejecutar la instrucción SLEEP.
bit 2:
Z: Bit de cero 1 = Después de una operación lógica o aritmética con resultado cero. 0 = Después de una operación lógica o aritmética con resultado distinto de cero.
bit 1:
DC: Bit de acarreo o debe en las instrucciones ADDWF, ADDLM, SUBLW y SUBWF. (El indicador de “debe” es de polaridad contraria.) 1 = Cuando hay acarreo en el cuarto bit. 0 = Cuando no hay acarreo en el cuarto bit.
bit 0:
C: Bit de acarreo o debe en las instrucciones ADDWF, ADDLW, SUBLW y SUBWF. 1 = Cuando hay acarreo en el octavo bit (más significativo). 0 = Cuando no hay acarreo en el octavo bit.
Nota: Para el “debe”, la polaridad es contraria. La resta se realiza sumando el complemento a dos del segundo operando. Para instrucciones de rotación (RRF y RLF), este bit se carga con el valor del bit de mayor o menor peso del registro que se rota.
2.2.2. 2.2.2.22 REGIST REGISTRO RO DE OPCI OPCIONE ONES S (DIRECC (DIRECCION IONES ES 81h, 81h, 181h) 181h)
Microcontrolador PIC16F876
Página 10
El Registro de Opciones es un registro de lectura y escritura que contiene varios bits de control para para config configura urarr el TMR0 TMR0 (Tempo (Temporiz rizado ador0) r0),, valore valoress del Prediv Prediviso isor, r, asigna asignació ciónn de éste, éste, Interrupción Externa y Resistencias de Polarización del circuito de salida del Puerto B. REGISTRO 2-2: REGISTRO DE OPCIONES (DIRECCIONES 81h Y 181h) R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
-RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0
bit7
bit0
R = De lectura W = De escritura U = Sin implementar. implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
salida del PUERTO B. -RBPU: Bit de habilitación de resistencias de polarización en salida 1 = Resistencias inhibidas. 0 = Resistencias habilitadas.
bit 6:
INTEDG: Bits de selección de flanco de interrupción. 1 = Interrupción activa en el flanco positivo en la patilla RB0/INT. 0 = Interrupción activa en el flanco de bajada en la patilla RB0/INT.
bit 5:
Bit de selecci cción de fuent ente de reloj par para TMR0 T0CS: Bit (Temporizador 0). 1 = Cambio en la patilla RA4/T0CKI. 0 = Reloj procedente del final del ciclo de instrucción (CLKOUT).
bit 4:
T0SE: Bit de selección de flanco de reloj en el TMR0. 1 = Variación de nivel alto a bajo en la patilla RA4/T0CKI. 0 = Variación de nivel bajo a alto en la patilla RA4/T0CKI.
bit 3:
PSA: Bit de asignación del PRESCALER (Divisor de Frecuencia). 1 = El Prescaler se asigna al WDT. 0 = El Prescaler se asigna al módulo TMR0.
bit 2-0:
PS2:PS0: Bit de valor de división del prescaler. 1 = Después de una operación lógica o aritmética con resultado cero. 0 = Después de una operación lógica o aritmética con resultado distinto de cero. Valo alor Div Divisor TMR0 Divisor WDT 00 0 1: 2 1:1 00 1 1: 4 1: 2 01 0 1: 8 1: 4 01 1 1 : 16 1: 8 10 0 1 : 32 1 : 16 10 1 1 : 64 1 : 32 11 0 1 : 128 1 : 64 11 1 1 : 256 1 : 12 8
Nota: Cuando se use la baja tensión de programación (LVP) y la polarización de la salida del PORTB esté habilitada, habilitada, el bit 3 del registro registro TRISB debe ponerse a 0 para inhibir inhibir la polarización polarización en RB3 y asegurar la correcta operación del dispositivo.
2.2.2. 2.2.2.33 REGIST REGISTRO RO INTCO INTCON N (CONTR (CONTROL OL DE INTER INTERRUP RUPCIO CIONES NES))
Microcontrolador PIC16F876
Página 11
El registro INTCON es un registro de lectura lect ura y escritura que contiene varios bits de señalización y habilitación para el desbordamiento (overflow) del TMR0, cambio sobre el puerto RB e interrupción externa en la patilla RB0/INT. Nota: El bit bit indi indica cado dorr de inte interr rrup upci ción ón se acti activa va cuan cuando do ocur ocurre re una una inte interr rrup upci ción ón,, independientemente del estado de su correspondiente bit de habilitación o del bit de habilitación general GIE (INTCON<7>). El programa debe asegurar que el bit indicador de interrupción apropiado está borrado antes de habilitar una interrupción. REGISTRO 2-3: REGISTRO INTCON (DIRECCIONES 0Bh, 8Bh, 10Bh Y 18Bh) R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-x
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
bit7
bit0
R = De lectura W = De escritura U = Sin implementar. implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
GIE: Bit de habilitación general de interrupciones. 1 = Habilita todas las interrupciones no enmascaradas. 0 = Inhibe todas las interrupciones. interrupcione s.
bit 6:
PEIE: Bit de habilitación de interrupción de periféricos. 1 = Habilita todas las interrupciones no enmascaradas de periféricos. 0 = Inhibe todas las interrupciones interrupcione s de periféricos.
bit 5:
T0IE: Bit de habilitación de interrupción por desbordamiento del TMR0. 1 = Habilita la interrupción del TMR0. 0 = Inhibe la interrupción del TMR0.
bit 4:
INTE: Bit de habilitación de interrupción externa en la patilla RB0/INT. 1 = Habilita la interrupción externa en la patilla RB0/INT. 0 = Inhibe la interrupción externa en la patilla RB0/INT.
bit 3:
RBIE: Bit de habilitación de interrupción por variación en puerto RB. 1 = Habilita la interrupción cuando sucede una variación sobre el puerto RB. 0 = Inhibe la interrupción cuando sucede una variación sobre el puerto RB.
bit 2:
T0IF: Bit indicador de interrupción por desbordamiento del TMR0 . 1 = El TMR0 ha terminado su tiempo (desbordamiento). Este indicador se debe borrar en el programa. 0 = Aún no ha sucedido el desbordamiento del TMR0.
bit 1:
INTF: Bit indicador de interrupción externa en la patilla RB0/INT. 1 = Ha sucedido una interrupción externa en la patilla RB0/INT. Debe borrarse en el programa. 0 = No ha llegado una interrupción externa por la patilla RB0/INT.
bit 0:
RBIF: Bit indicador de interrupción por variación sobre el puerto RB. 1 = Ha sucedido una interrupción por variación de nivel en el puerto RB. Se debe borrar por software. 0 = No ha habido variación sobre el puerto RB.
2.2.2 .2.2.4 .4 REG REGISTR ISTRO O PIE PIE11
Microcontrolador PIC16F876
Página 12
El registro PIE1 posee los bits de habilitación individual para las interrupciones de periféricos. El bit bit PEIE PEIE del del regi regist stro ro INTC INTCON ON debe debe ser ser 1 para para perm permit itir ir la habi habilit litac ación ión de cualq cualqui uier er interrupción de periférico. REGISTRO 2-4: REGISTRO PIE1 (DIRECCIÓN 8Ch). R/W-0
R/W-0
R/W-0
R/W-0
PSPIE(1) ADIE
RCIE
TXIE SSPIE CCP1IE TMR2IE TMR1IE
bit7
R/W-0
R/W-0
R/W-0
R/W-0 bit0
R = De lectura W = De escritura U = Sin implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
PSPIE: Bit habilitador de interrupción por Lectura-Escritura en el Puerto Servidor Paralelo (PSP). 1 = Habilita la interrupción del PSP. 0 = Inhibe la interrupción del PSP.
bit 6:
ADIE: Bit de habilitación de interrupción del Convertidor Analógico Digital (ADC). 1 = Habilita la interrupción del ADC. 0 = Inhibe la interrupción del ADC.
bit 5:
RCIE: Bit de habilitación de interrupción de recepción del USART. 1 = Habilita la interrupción de recepción del USART. 0 = Inhibe la interrupción de recepción del USART.
bit 4:
TXIE: Bit de habilitación de interrupción para la transmisión en el USART. 1 = Habilita la interrupción para la transmisión en el USART. 0 = Inhibe la interrupción para la transmisión en el USART.
bit 3:
SSPIE: Bit de habilitación de interrupción para el Puerto Síncrono Serie (SSP). 1 = Habilita la interrupción del SSP. 0 = Inhibe la interrupción del SSP.
bit 2:
CCP1IE: Bit de habilitación de interrupción del módulo de Captura /Comparación/PWM. 1 = Habilita la interrupción del módulo CCP1. 0 = Inhibe la interrupción del módulo CCP1.
bit 1:
TMR2IE: Bit de habilitación de interrupción por coincidencia del TMR2 con el PR2. 1 = Habilita la interrupción cuando coincide los contenidos de TMR2 y PR2. 0 = Inhibe la interrupción por coincidencia de los contenidos de TMR2 y PR2
bit 0:
TMR1IE: Bit de habilitación de interrupción por desbordamiento del TMR1. 1 = Habilita la interrupción cuando desborda el TMR1 (termina su tiempo programado). 0 = Inhibe la interrupción del TMR1.
Nota 1: PSPIE queda reservado en los dispositivos de 28 patillas; se debe mantener siempre a cero.
2.2.2 .2.2.5 .5 REG REGISTR ISTRO O PIR PIR11
Microcontrolador PIC16F876
Página 13
El registro PIR1 contiene los bits de señalización individual de las interrupciones de periféricos. Nota: El bit indicador de interrupción se activa al ocurrir una interrupción, independientemente del estado de su correspondiente bit de habilitación o del bit de habilitación general GIE (INTCON<7>). El programa debe asegurar que el bit indicador de interrupción apropiado está borrado antes de habilitar una interrupción. REGISTRO 2-5: REGISTRO PIR1 (DIRECCIÓN 0Ch) R/W-0
R/W-0
PSPIF (1) ADIF
R-0
R-0
R/W-0
RCIF
TXIF
SSPIF CCP1IF TMR2IF TMR1IF
bit7
R/W-0
R/W-0
R/W-0 bit0
R = De lectura W = De escritura -n = Valor del reset POR
bit 7:
PSPIF: Bit indicador de interrupción por Lectura-Escritura del Puerto Servidor Paralelo (PSP). 1 = Una operación de escritura o lectura ha tenido lugar. Debe borrarse por software. 0 = No ha ocurrido una operación de lectura o escritura.
bit 6:
ADIF: Bit de señalización de interrupción del Convertidor Analógico Digital (ADC). 1 = Se ha completado la conversión del ADC. 0 = El ADC no ha terminado su conversión.
bit 5:
RCIF: Bit de señalización de interrupción por recepción del USART. 1 = El buffer de recepción del USART está lleno. 0 = El buffer de recepción del USART está vacío.
bit 4:
TXIF: Bit de señalización de interrupción para la transmisión en el USART. 1 = El buffer de transmisión del USART está vacío (USART preparado para una nueva trasmisión). 0 = El buffer de transmisión del USART está lleno (aún no se se ha transmitido el byte).
bit 3:
SSPIF: Bit de señalización de interrupción para el Puerto Síncrono Serie (SSP). 1 = Ha ocurrido la condición de interrupción del SSP, y debe ser borrada en el software antes de retornar de la rutina de servicio de la interrupción. Las condiciones señaladas por este bit son: SPI Se ha producido una transmisión o recepción. I2C Slave (servidor) Se ha producido una transmisión o recepción. I2C Master (maestro) Se ha producido una transmisión o recepción. El módulo SSP completó la condición de START (arranque). El módulo SSP completó la condición de STOP (detención). El módulo SSP completó la condición de RESTART (reinicio). El módulo SSP completó la condición de ACK (Acknowledge = Reconocimiento). Una condición de START ha ocurrido cuando el módulo está aislado (sistema Multimaestro). Una condición de STOP ha ocurrido cuando el módulo está aislado (sistema Multimaestro). 0 = No ha sucedido la condición de interrupción del SSP.
bit 2:
CCP1IF: Bit de señalización de interrupción del módulo de Captura /Comparación/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 Comparación 1 = Ha ocurrido una coincidencia en la comparación del registro TMR1. Debe borrarse por software. 0 = No existe coincidencia de comparación en el registro TMR1. Modo PWM No se usa en este modo.
bit 1:
TMR2IF: Bit de señalización de interrupción por coincidencia del TMR2 con el PR2. 1 = Ha ocurrido la coincidencia entre los contenidos de TMR2 y PR2. Debe borrarse por software. 0 = No hay coincidencia de los contenidos de TMR2 y PR2.
bit 0:
TMR1IF: Bit de señalización de interrupción 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.
2.2.2 .2.2.6 .6 REG REGISTR ISTRO O PIE PIE22
Microcontrolador PIC16F876
Página 14
El registro PIE2 contiene los bits de habilitación de interrupción individual para los periféricos CCP2, conflicto de bus de SSP y operación de escritura en la EEPROM. REGISTRO 2-6: REGISTRO PIE2 (DIRECCIÓN 8Dh) U- 0
R/W-0
U- 0
R/W-0
R/W-0
U-0
U- 0
R/W-0
---
---
---
EEIE BCLIE
---
---
CCP2IE
bit7
bit0
R = De lectura W = De escritura U = Sin implementar. implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
Sin implementar: Da cero al leer.
bit 6:
Reservado : Siempre se debe mantener este bit a cero.
bit 5:
Sin implementar: Da cero al leer.
bit 4:
EEIE: Bit de habilitación de interrupción por la operación de escritura en la EEPROM. 1 = Habilita la interrupción para la escritura en la EEPROM. 0 = Inhibe la interrupción para la escritura en la EEPROM.
bit 3:
BCLIE: Bit de habilitación de interrupción por el conflicto de bus del Puerto Síncrono Serie (SSP). 1 = Habilita la interrupción de conflicto de bus del SSP. 0 = Inhibe la interrupción de conflicto de bus del SSP.
bit 2-1:
Sin implementar: Da cero al leer.
bit 0:
CCP2IE : Bit de habilitación del módulo CCP2. 1 = Habilita la interrupción de CCP2. 0 = Inhibe la interrupción de CCP2.
2.2.2 .2.2.7 .7 REG REGISTR ISTRO O PIR PIR22
Microcontrolador PIC16F876
Página 15
El registro PIR2 contiene los bits indicadores de las interrupciones de CCP2, conflicto de bus de SSP y operación de escritura en EPROM. Nota: El bit bit indi indica cado dorr de inte interr rrup upci ción ón se acti activa va cuan cuando do ocur ocurre re una una inte interr rrup upci ción ón,, independientemente del estado de su correspondiente bit de habilitación o del bit de habilitación general GIE (INTCON<7>). El programa debe asegurar que el bit indicador de interrupción apropiado está borrado antes de habilitar una interrupción. REGISTRO 2-7: REGISTRO PIR2 (DIRECCIÓN 0Dh) U- 0
R/W-0
U- 0
R/W-0
R/W-0
U-0
U- 0
R/W-0
---
---
---
EEIF BCLIF
---
---
CCP2IF
bit7
bit0
R = De lectura W = De escritura U = Sin implementar. implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
Sin implementar: Da cero al leer.
bit 6:
Reservado : Siempre se debe mantener este bit a cero.
bit 5:
Sin implementar: Da cero al leer.
bit 4:
EEIF: Bit de señalización de interrupción por la operación de escritura en la EEPROM. 1 = Se ha completado la operación de escritura en la EEPROM. Debe borrarse por software. 0 = No se ha completado la escritura en la EEPROM, o no se ha iniciado.
bit 3:
BCLIF: Bit de señalización de interrupción por el conflicto de bus del Puerto Síncrono Serie (SSP). 1 = Un conflicto de bus ha ocurrido en el SSP cuando estaba configurado en modo Maestro I 2C. 0 = No existe conflicto de bus del SSP.
bit 2-1:
Sin implementar: Da cero al leer.
bit 0:
CCP2IF : Bit de señalización de interrupción del módulo 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 Comparación: 1 = Ha ocurrido la coincidencia en la comparación del registro TMR1. Debe borrarse por software. 0 = No hay coincidencia en la comparación del registro TMR1. Modo PWM: No se usa.
2.2.2 .2.2.8 .8 REG REGISTR ISTRO O PC PCON
Microcontrolador PIC16F876
Página 16
El registro de control de alimentación PCON contiene los bits que permiten la diferenciación entre el reset de conexión (POR), (POR), el reset Brown.Out Brown.Out (BOR), el reset Watch-Dog Watch-Dog (WDT) y el reset externo -MCLR. Nota: BOR se ignora durante la conexión c onexión (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 configuración). REGISTRO 2-8: REGISTRO PCON (DIRECCIÓN 8Eh) U- 0
U- 0
U- 0
U- 0
U- 0
U-0
R/W-0
R/W-1
---
---
---
---
---
---
-POR
-BOR R = De lectura
bit7
bit0
W = De escritura U = Sin implementar. implementar. Da 0 en lectura -n = Valor del reset POR
bit 7-2:
Sin implementar: Da cero al leer.
bit 1:
-POR : Bit indicador del estado del reset de conexión (POR). 1 = No ha sucedido el reset de conexión 0 = Ha ocurrido un reset de conexión. Debe ponerse a 1 por software después de la conexión.
bit 0:
-BOR : Bit indicador del estado del reset BOR 1 = No ha sucedido un reset tipo BOR. 0 = Ha ocurrido un reset tipo BOR. Debe activarse por software después del reset BOR.
2.3
PCL Y PCLATH
Microcontrolador PIC16F876
Página 17
El registro Contador de Programa (PC) tiene un tamaño 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 través del registro PCLATH. Después 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 cómo se carga el PC con la escritura del PCL (PCLATH<4:0> PCH). El ejemplo infe inferi rior or de la figu figura ra mu mues estr traa la carg cargaa del del PC dura durant ntee una una inst instru rucc cció iónn CALL CALL o GOTO GOTO (PCLATH<4:3> PCH). FIGURA FIGURA 2-5: CARGA DEL DEL PC EN EN SITUACIONE SITUACIONES S DIFERENTE DIFERENTESS
2.3.1 CÁLCULO SALTO (GOTO)
DEL
El cálculo del salto se realiza sumando un desplazamiento al contenido del PC (ADDWF (ADDWF PCL). PCL). Cuando Cuando se realiza realiza la lectura de una tabla usando el método del del salt saltoo (GOT (GOTO) O),, hay que que tene tener r cuidado para no superar el límite 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 instrucción CALL o cuando se va a producir un salto debido debido a una interrupción. Se extrae de la pila cuando se ejecuta una instrucción RETURN, RETLW o RETFIE. El PCLATH no varía en operaciones de salvar o recuperar de pila (operaciones PUSH o POP). La pila opera como un buffer circular: después de ocho memorizaciones (entradas) en pila, la novena, sobrescribirá su valor en la primera entrada, la décima, sobrescribirá en la que fue la segunda entrada, y así sucesivamente. Nota 1: No 1: No existe ningún bit de estado que indique condiciones de desbordamiento de pila. Nota 2: No existen mnemónicos de instrucciones llamados PUSH o POP. Estas acciones suceden al ejecutar instrucciones como CALL, RETURN, RETLW y RETFIE, o al vectorizarse una interrupción. 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 dirección para permitir el salto entre una extensión de memoria de 2k palabras. Cuando se realiza una instrucción CALL o GOTO, los 2 bits de mayor peso de la dirección son suministrados por el registro PCLATH, bits 4 y 3. Cuando ejecute una instrucción CALL o GOTO, el usuario debe asegurarse que los bits de selección de página están programados de manera adecuada a la
Microcontrolador PIC16F876
Página 18
página de memoria deseada. Si se ejecuta un retorno de una instrucción CALL (o interrupción), el total de los 13 bits del PC son devueltos desde la pila, por consiguiente, la manipulación 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 página 1 de la memoria de programa. Este ejemplo asume que el PCLATH es salvado y restaurado por la rutina de servicio de la interrupción (si se usa interrupción). Ejemplo Ejemplo 2-1: 2-1: Llamada Llamada de una subrutina subrutina en página página 1 desde la página página 0. 0. ORG BCF BSF CALL : : ORG
0x500 PCLATH,4 PCLATH,3 SUB1_P1
;Selecciona página 1 (800h - FFFh) :Llama a subrutina en página 1 (800h - FFFh)
0x900
;Página 1 (800h - FFFh)
SUB1_P1 : : : RETURN
;Llamada a subrutina ;Página 1 (800h - FFFh) ;Retorna a página 0 (000h - 7FF), de la llamada de subrutina.
Microcontrolador PIC16F876
2.5
Página 19
Dire Direcc ccio iona nam mient ientoo Ind Indiirect rectoo: reg regis isttros ros IND INDF F y FSR FSR..
El registro INDF no es un registro físico y se usa para conseguir el direccionamiento indirecto. Cualquier instrucción que utilice el registro INDF, lo que hace es acceder a la dirección apuntada por FSR. Si se efectúa una lectura sobre INDF, se leerá 0; si se escribe sobre INDF no se ejecuta ninguna acción, aunque los bits de estado pueden resultar afectados. Se puede obtener una dirección 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
NE XT
DIRECCIONAMIENTO INDIRECTO
movlw movwf clrf incf btfss goto
0 x2 0 FSR INDF FSR,1 FSR,4 NEXT
;Inicializa el puntero de RAM. ; " ;Borra posición de RAM. ;Incrementa el puntero. ;Si se ha completado el borrado se salta la próxima instrucción. ;Si no se han borrado todas las posiciones se repite el bucle.
: : FIGURA FIGURA 2-6: DIRECCIONA DIRECCIONAMIENT MIENTO O DIRECTO DIRECTO E INDIREC INDIRECTO TO
3.0
PUERTOS DE ENTRADA SALIDA
Microcontrolador PIC16F876
Algunas de las patillas destinadas a puertos de entrada salida se multiplexan para obtener otras funciones de periféricos del dispositivo. Como regl reglaa gene genera rall pode podemo moss deci decirr que que cuan cuando do un periférico 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 dirección 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 desconexión. Si ponemos a 0 el regist registro ro TRISA TRISA conseg conseguir uiremo emoss progra programar mar el pue puert rtoo A como como sali salida da,, y, con con ello ello,, que 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 demás patillas del PORTA poseen niveles TTL de entrada y salidas CMOS amplificadas. Las demás patillas del PORTA se multiplexan con con entra entrada dass anal analóg ógic icas as y con con la tens tensión ión de referencia analógica VREF. La operación de cada patilla se selecciona activando o borrando los bits de control en el registro ADCON1 (registro 1 de control del CAD). Después de Reset, estas patillas se configuran como entradas analógicas, y se leen como 0. El registro TRISA controla la dirección de las patill patillas as del PORTA, PORTA, inclus inclusoo cuando cuando se usan usan como entradas analógicas. Por este motivo, el usuario debe asegurarse que los bits del registro TRISA están a 1 cuando se usen las patillas del puerto como entradas analógicas.
Página 20
Microcontrolador PIC16F876
Página 21
EJEMPLO 3.1: INICIALIZACIÓN DEL PORTA BCF BCF CLRF BSF MOVLW MO V W F MOVLW MO V W F
TABLA 3-1:
STATUS, RP0 STATUS, RP1 PORTA STATUS, RP0 0 x 06 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 dirección. ; Programa RA0-RA3 como entradas, y ; RA4-RA5 como salidas. ; TRISA (6-7) siempre se leerán como 0.
FUNCIONES DEL PUERTO A (PortA)
Nombre
Bit
Buffer Función
RA0/AN0
Bit0
TTL
Entrada-salida o entrada analógica 0.
RA1/AN1
Bit1
TTL
Entrada-salida o entrada analógica 1.
RA2/AN2
Bit2
TTL
Entrada-salida o entrada analógica 2.
RA3/AN3/VREF Bit3
TTL
Entrada-salida, entrada analógica 3, o V REF. Entrada-salida, o entrada externa de reloj de TIMER0. RA4/T0CKI B it 4 ST La salida es de tipo drenador abierto. Entrada-salida, selección de “servidor” para el puerto RA5/-SS/AN4 Bit5 TTL serie síncrono, o entrada analógica 4. TTL = Entrada tipo TTL; ST = Entrada tipo Schmitt Trigger.
TABLA 3-2:
RESUMEN DE REGISTROS ASOCIADOS AL PORTA
Dir.
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras Valor tras POR, BOR otros resets
0 5h
PORTA
---
---
RA5
RA4
R A3
R A2
RA1
RA0
- - 0x 0000
- - 0u 0000
8 5h
TRISA
---
---
Registro de dirección de datos del PORTA
- - 11 1111
- - 1 1 1 111
9Fh
ADCON1
ADFM
---
- - 0 - 0000
- - 0 - 000 0000
---
---
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 módulo 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
3.2
Página 22
REGISTROS PORTB Y TRISB
PORTB es un registro bidireccional de 8 bits que tiene su registro de dirección en TRISB. Programando éste a 1, las líneas del PORTB quedan como entradas; borrando el registro TRISB, las 8 líneas 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 PORTB se multiplexan multiplexan con las funciones funciones de Baja Tensión de Programaci Programación: ón: RB3/PGM, RB6/PGC y RB7/PGD. Estas funciones secundarias se describen en la sección Características Especiales. Cada patilla del PORTB posee polarización interna a V DD, que puede activarse mediante un bit de control. En el registro OPTION_REG, borrando el bit 7, llamado RBPU , se activará activará la polarización. Este bit se programa a 1, y por lo tanto se suprime la polarización, cuando el puerto se configura como salida. Tras un reset de conexión (Power-On-Reset), la polarización queda inhibida.
Cuatro Cuatro patillas patillas del PORTB, PORTB, RB7 a RB4, poseen una característica característica especial por la que pueden provocar interrupción si cambian de estado (Interrupción 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 petición de interrupción RBIF, cualquiera que sea la que cambie de valor. Esta interrupción puede sacar al dispositivo del estado SLEEP (reposo). El programador, en la rutina de servicio de la interrupción, puede borrar la interrupción de la siguiente manera: a) b)
Leye Leyend ndoo o escr escrib ibie iend ndoo sob sobre re PO PORT RTB. B. Esto Esto term termin inar aráá con con la la cond condic ició ión. n. Borrando el bi bit in indicador RB RBIF.
Microcontrolador PIC16F876
Página 23
Esta característica se recomienda en operaciones con teclados, donde el PORTB trabaja con cambios de valor. No se recomienda la técnica de “Consultas Sucesivas” (Polling) del PORTB cuando se aproveche la característica de Interrupción por Cambio. RB0/INT es una patilla de interrupción externa, y se configura utilizando el bit INTEDG del registro OPTION_REG (bit 6). Esta patilla se analizará con profundidad en la sección 12.10.1. Cuando se use Programación Serie en Baja Tensión (LVP) y las polarizaciones del puerto estén habilitadas, el bit 3 del registro TRISB debe borrarse para inhibir la polarización sobre RB3 y asegurar la correcta operación del dispositivo. TABLA 3-3: FUNCIONES DEL PORTB Nombre
Bit
Buffer
Función
RB0/INT
Bit0 TTL/ST(1)
Patil Patilla la de entr entrada ada-s -sal alid idaa o entr entrad adaa de inte interr rrup upci ción ón exter externa na.. Polarización programable.
RB1
Bit1 TTL
Patilla de entrada-salida. Polarización programable.
RB2
Bit2 TTL
Patilla de entrada-salida. Polarización programable.
RB3/PGM Bit3 TTL
Patilla de entrada-salida o modo de programación LVP. Polarización programable.
RB4
Bit4 TTL
Patilla de entrada-salida (con Interrupción por Cambio). Polarización programable.
RB5
Bit5 TTL
Patilla de entrada-salida (con Interrupción por Cambio). Polarización programable.
RB6/PGC Bit6 TTL/ST(2)
Patilla de entrada-salida (con Interrupción por Cambio) o depuración in-situ. Polarización programable. Reloj de programación en serie.
RB7/
Patilla de entrada-salida (con Interrupción por Cambio) o depuración in-situ. Polarización programable. Dato de programación en serie.
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 interrupción externa. Nota 2: Este buffer es una entrada ST cuando se usa en modo de programación serie.
TABLA 3-4: RESUMEN DE REGISTROS ASOCIADOS AL PORTB Valor Valor tras Bit0 tras POR, otros BOR Resets
Direcció n
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
06 h, 106 h
PORTB
RB7
RB6
RB5
R B4
RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
86 h, 186 h
TRISB
Bit2
Bit1
Registro de dirección de datos del puerto B
81h, 181h OPTION_REG RBPU INTEDG T0CS T0SE PSA
PS2
1111 1111 1111 1111 PS1
PS0 1111 1111 1111 1111
x = Desconocido; u = Sin cambio. Las celdas oscurecidas no se emplean en el puerto B.
Microcontrolador PIC16F876
3.3
Página 24
REGISTROS PORTC Y TRISC
El puerto C es un puerto bidireccional de 8 bits cuyo registro de sentido de circulación de datos es TRISC. Programando a 1 las líneas de TRISC, el sentido de esas líneas del puerto es de entrada. En este momento, los amplificadores de salida están desconectados (alta impedancia). Por el contrario, programando a 0 TRISC, las líneas del puerto que reciben esta programación 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 periféricos (como se aprecia en la tabla 3-5), y posee buffers de entrada tipo Schmitt Trigger. Cuando se habilita el módulo I 2C, 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 periféricos hay que tener cuidado en definir la dirección de cada bit del PORTC. Algunos periféricos anulan el bit de dirección 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 periférico, hay que evitar el uso de instrucciones, tanto de lectura como de escritura, sobre el registro TRISC.
Microcontrolador PIC16F876
Página 25
TABLA 3-5: FUNCIONES DEL PORTC Nombre
Bit
Buffer
Función
RC0/T1OSO/T1CKI Bit0
ST
Entrada-sal Entrada-salida. ida. Salida de oscilación oscilación de Timer1. Timer1. Entrada Entrada de reloj del Timer1.
RC1/T1OSI/CCP2
Bit1
ST
RC2/CCP1
Bit2
ST
RC3/SCK/SCL
Bit3
ST
Entrada-salida. Reloj serie síncrono para los modos SPI y I2C.
RC4/SDI/SDA
Bit4
ST
Entrada-salida. Dato de entrada en modo SPI. Dato entrada/salida para el modo I2C.
RC5/SDO
Bit5
ST
Entrada-salida. Dato de salida del Puerto Serie Síncrono (SSP).
RC6/TX/CK
Bit6
ST
Entrada-salida. Reloj del USART (Transmisor Receptor Síncrono Asíncrono).
RC7/RX/DT
Bit7
ST
Entrada-sal Entrada-salida. ida. Dato del USART (Transmisor (Transmisor Receptor Receptor Síncrono Síncrono Asíncrono).
Entrada-salida. Entrada de oscilación externa para Timer1. Entrada del módulo módulo Capture Capture2. 2. Salida Salida del módulo módulo Compar Compare2. e2. Salida Salida del módulo PWM2. Entrada-salida. Entrada de Capture1. Salida de Compare1. Salida de PWM1.
ST = Entrada tipo Schmitt Trigger.
TABLA 3-6: RESUMEN DE REGISTROS ASOCIADOS AL PORTC Dirección Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Valor tras Valor tras POR, BOR otros Resets
07h
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx
uuuu uuuu
87h
TRISC Registro de dirección de datos del puerto C
1111 1111
1111 1111
x = Desconocido; u = Sin cambio.
4.0
MEMORI ORIA FL FLASH DE DE PR PROGRAMA Y EE EEPROM DE DE DA DATOS
Tanto la memoria de programa como la de datos son de lectura y escritura en operaciones normales, en todo el rango de alimentación. No puede realizarse un borrado de una gran zona de memoria por el programa de usuario (que incluye la supresión del código de protección). 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
Página 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 leído, y el registro EEADR EEADR mantie mantiene ne la direcc dirección ión a la que estamos estamos accedi accediend endo. o. Los registro registross EEDATH 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, tensión de alimentación y tolerancias entre dispositivos. Habrá que leer el apartado de especificaciones técnicas para asegurar los proyectos. La memoria de programa permite leer y grabar palabras de hasta 14 bits. Su acceso se controla mediante cálculo y comprobación en una tabla almacenada. Al escribir un byte o una palabra (14 bits), automáticamente se borra la palabra anterior y después se escribe la nueva. La operación 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 código alguno. Durante la operación de escritura, el oscilador sigue dando reloj a los periféricos, continuando, por lo tanto, su operación. Posibles interrupciones se detectarán y se pondrán en espera hasta que la escritura termine. Cuando esto suceda, la próxima instrucción en curso se ejecutará, y se saltará a la dirección suministrada por el vector de interrupción. 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 misión es contener los 13 bits de dirección que permite la capacidad de la memoria de programa. Estos dispositivos poseen una capacidad de memoria de programa de 8Kpalabras, con un rango de dirección desde 0000h hasta 3FFFh. Los 2 bits de más peso del conjunto EEDATH:EEDATA, que sobran, se leerán como 0. El valor escrito en la memoria de programa no tiene que ser necesariamente una instrucción válida. Números mayores de 14 bits pueden guardarse en la memoria, como parámetros de calibración, números de serie, encapsulados de 7 bits ASCII, etc. Si se ejecuta un programa con datos de códigos inválidos de instrucciones, el resultado es instrucciones NOP. 4.1
El registro EEADR
Este registro de dirección puede direccionar un máximo de 256 bytes de la memoria EEPROM de datos, o un máximo de 8Kpalabras de la memoria FLASH de programa. Cuan Cuando do sele selecc ccion ionam amos os un valo valorr de dire direcc cció iónn en la memo memori riaa de prog progra rama ma,, el bit bit más más sign signif ific icat ativo ivo (MSB) (MSB) de la dire direcc cción ión se grab grabaa en el regi regist stro ro EEAD EEADRH RH,, y el bit bit meno menoss significativo (LSB) se escribe en el registro EEADR. Al seleccionar un valor de dirección en la memoria de datos, solamente se escribe en EEADR el bit LSB. 4.2
Los re regist istros EE EECON1 y EECON2
EECON1 es el registro de control para el acceso a la memoria. EECON2 no es físicamente un registro. Si leemos EECON2 obtenemos todos 0. Este registro se usa exclusivamente en la secuencia de escritura de la memoria.
Microcontrolador PIC16F876
Página 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 operación subsiguiente se realizará en la memoria de datos; activándolo, las operaciones que sigan lo harán 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 operación de lectura o escritura. La inhabilitación del borrado por software del bit WR evita una accidental prematura finalización de la operación de escritura. El bit WREN, cuando se pone a 1, permite la operación de escritura. Al conectar el dispositivo, este bit está a 0. El bit WRERR se activa cuando se interrumpe una operación de escritura debido a un reset MCLR o WDT , durante una operación normal. En este caso, a continuación del reset, el programador debe chequear el bit WRERR y volver a escribir la posición. El valor del dato, del registro de dirección y del bit EEPGD permanecen sin cambio. El bit indicador de interrupción EEIF, en el registro PIR2, se activa cuando se completa la escritura. Debe borrarse por software. REGISTRO 4-1: REGISTRO EECON1 (DIRECCIÓN 18Ch) R/W-x
U- 0
U- 0
U-0
EEPGD
---
---
---
R/W-x
R/W-0
R/S-0
R/S-0
WRERR WREN
WR
RD
bit7
bit0
R = De lectura W = De escritura U = Sin implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
EEPGD: Bit de selección EEPROM Programa-Datos. 1 = Acceso a la memoria de Programa. 0 = Acceso a la memoria de Datos. (Este bit no debe modificarse cuando está realizándose una operación de lectura o escritura).
bit 6-4:
Sin implementar: Da cero al leer.
bit 3:
WRERR : Bit indicador de error en EEPROM. 1 = Se ha finalizado prematuramente una operación de escritura. (Si se produce un reset MCLR o WDT , durante una operación normal). 0 = Se ha completado con éxito la operación de escritura..
bit 2:
WREN: Bit de habilitación de escritura en EEPROM. 1 = Permite ciclo de escritura. 0 = Inhibe el ciclo de escritura.
bit 1:
WR : Bit de control de escritura. 1 = Inicia Inicia un ciclo de escritura. (Este bit se borra por hardware cuando se completa la escritura. Por software, solamente puede activarse. 0 = Ciclo de escritura se ha completado correctamente.
bit 0:
RD: Bit de control de lectura. 1 = Se inicia una lectura de EEPROM. Este bit se borra por hardware y se activa por software. 0 = No se inicia la lectura de la EEPROM.
Microcontrolador PIC16F876
4.3
Página 28
Lectu ectura ra de la me mem moria oria EEPROM PROM de dato datoss
Para leer una posición de la memoria de datos, el usuario debe escribir en el registro EEADR la dirección 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 próximo ciclo de instrucción, en el regist registro ro EEDATA EEDATA,, por consig consiguie uiente nte podrá podrá leerse leerse en la próxim próximaa instru instrucci cción. ón. EEDATA EEDATA manten mantendrá drá este valor, valor, hasta que se efectú efectúee otra otra operac operación ión de lectur lectura, a, o sea modifi modificad cadoo expresamente por el programador. 4.4
Escri scritu tura ra de la me mem moria ria EEP EEPRO ROM M de de da datos tos
Para escribir en una posición de la memoria EEPROM de datos, primero hay que colocar la dirección en el registro EEADR, y después el dato a escribir, en el registro EEDATA. Entonces se iniciará la secuencia del ejemplo 4-2, que completará el ciclo de escritura. Ejemplo Ejemplo 4-2: 4-2: Escrit Escritura ura en la EEPRO EEPROM M de dato datoss 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
BSF BCF MOVLW MO V W F MOVLW MO V W F BSF BCF BSF BCF MOVLW MO V W F MOVLW MO V W F BSF BSF SLEEP BCF
STATUS, RP1 STATUS, RP0 DATA_EE_ADDR EEADR DATA_EE_DATA EEDATA STATUS, RP0 EECON1, EEPGD EECON1, WREN INTCON, GIE 5 5h EECON2 AA h EECON2 EECON1, WR INTCON, GIE EECON1, WREN
; Selección de banco 2. ; “ ; ; Dirección de escritura. ; ; Dato a escribir en memoria. ; Selección de banco 3. ; Memoria de datos. ; Habilitación 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 operación. Asimismo, el bit WREN debe activarse al inicio de la secuencia y borrarse al final. De esta manera evitaremos escrituras accidentales durante la ejecución de programas. Después de iniciada la secuencia de escritura, un borrado del bit WREN no afectará a la correcta conclusión de la operación. El bit WR estará inhibido hasta después de que se active el bit WREN. Ambos bits no deben activarse en la misma instrucción. Al final del ciclo de escritura, el bit WR se borrará por hardware, y el bit indicador de interrupción por finalización de ciclo de escritura (EEIF) se activará. Este bit debe borrarse por software.
Microcontrolador PIC16F876
4.5
Página 29
Lectu ectura ra de la me mem moria oria FLASH LASH de Prog Progra rama ma
Para leer una posición de la memoria de programa escribiremos los dos bytes de la dirección 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 instrucción para leer el dato. Este dato queda disponible en los registros EEDATA y EEDATH después de la segunda instrucción NOP. Durante estas instrucciones es cuando se efectúa 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 mantendrán el valor leído 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 NO P NO P BCF MOVF MOVF 4.6 4.6
STATUS, RP1 STATUS, RP0 ADDRH EEADRH ADDRL EEADR STATUS, RP0 EECON1, EEPGD EECON1, RD STATUS, RP0 EEDATA, W EEDATH, W
; Selección de banco 2 ; “ ; Carga byte de dirección alta en el ; registro EEADRH. ; Carga byte de dirección baja en el ; registro EEADR. ; Selecciona banco 3. ; Selecciona memoria de programa. ; Lectura de la EEPROM. ; Durante esta instrucción 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.
Escr Escrit itur uraa de de la me memo mori riaa FLA FLASH SH de Prog Progra rama ma
Solamente podrá escribirse una palabra en la memoria de programa si la palabra no es un código de protección de área de memoria, y el bit de configuración WRT está activado. Para escribir en una posición de esta memoria, primero deben estar grabados los dos bytes de la dirección en los registros EEADR y EEADRH, posteriormente se grabarán los dos bytes del dato en los registros EEDATA EEDATA y EEDATH EEDATH,, despué despuéss se activar activaráá el bit de control control EEPGD (EECON1< (EECON1<7>) 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 próximas dos instrucciones, para tener el tiempo necesario de la escritura. Este estado no es como el modo SLEEP, en el que el oscilador de periféricos seguía funcionando. Por este motivo, las dos siguientes instrucciones después del “BSF EECON1, WR” serán NOP. Después del ciclo de escritura, el microcontrolador continuará con la tercera instrucción después de “BSF EECON1, WR”. Ejemplo Ejemplo 4-4: 4-4: Escrit Escritura ura en en la memoria memoria FLAS FLASH H de Program Programaa BSF BCF MOVLW MOVWF MOVLW MOVWF
STATUS, RP1 STATUS, RP0 ADDRH EEADRH ADDRL EEADR
; Selecciona banco 2. ; “ ; Carga dirección alta. ; “ ; Carga dirección baja. ; Carga dirección baja.
Microcontrolador PIC16F876
MOVLW MOVWF MOVLW MOVWF BSF BSF BSF BCF MOVLW MOVWF MOVLW MOVWF BSF NO P NO P
BSF BCF 4.7
D AT A H EEDATH D AT AL EEDATA STATUS, RP0 EECON1, EEPGD EECON1, WREN INTCON, GIE 55h EECON2 AA h EECON2 EECON1, WR
INTCON, GIE EECON1, WREN
Página 30
; Carga byte alto a escribir. ; “ ; Carga byte bajo a escribir. ; “ ; Selecciona banco 3. ; Selecciona memoria de programa. ; Habilita escritura. ; Inhibe interrupciones. ; Carga código 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 instrucción desde la ; BSF EECON1, WR. ; Habilita interrupciones. ; Se inhibe la escritura.
Verificación de de es escritura
Dependiendo de la aplicación, puede necesitarse la seguridad de que la grabación corresponde con el original. Esto se usa en aplicaciones en que excesivas escrituras pueden llevar a los datos al límite de las especificaciones. Generalmente, el fallo de un bit corresponde a la lectura 0 cuando se escribió un 1 (debido al diseño interno del dispositivo). 4.8 4.8 4.8. .8.1
Prot Protec ecció ciónn cont contra ra pico picoss tran transi sito torio rioss en escr escrit itura ura Mem Memoria EEPROM de Dato atos
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 conexión, el bit WREN queda borrado, y además, durante un tiempo de 72 milisegundos después de la conexión, la escritura de la EEPROM está bloqueada. La forma de iniciar la secuencia de escritura y los métodos de prevención, evitan escrituras accidentales en casos de bajadas de tensión, picos de alimentación o errores en programas. 4.8. 4.8.22
MEMO MEMORI RIA A FLA FLASH SH DE PROG PROGRA RAMA MA
Para proteger la memoria de programa contra escrituras accidentales, el bit de configuración WRT debe programarse a 0. La secuencia de escritura debe respetarse escrupulosamente. El bit WRT y la palabra de configuración no pueden programarse con los códigos del usuario; solamente a través de un programador externo.
Microcontrolador PIC16F876
4.9 4.9
Página 31
Códi Código go de prot protec ecci ción ón du dura rant ntee la oper operac ació iónn
Cada Cada bloq bloque ue de memo memori riaa repr reprog ogra rama mabl blee pose poseee un códi código go prop propio io como como meca mecani nism smoo de protección. Lecturas y escrituras externas se impiden si cada uno de estos mecanismos están habilitados. 4.9. 4.9.11
MEMO MEMORI RIA A EEPR EEPROM OM DE DATO DATOSS
El microcontrolador, puede, por sí mismo, leer y escribir en la EEPROM interna de datos, indiferentemente del estado del bit de configuración del código de protección. 4.9. 4.9.22
MEMO MEMORI RIA A FLA FLASH SH DE PROG PROGRA RAMA MA
El microcontrolador puede leer y ejecutar instrucciones, fuera de la memoria interna de programa, indiferentemente del estado de los bits de configuración del código de protección. Sin embargo, el bit de configuración WRT y los bits del código de protección, 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 código de protección, se requiere que el dispositivo esté totalmente borrado. TABLA 4-1: ESTADO DE LECTURA-ESCRITURA DE LA MEMORIA FLASH DE PROGRAMA Bits de configuración configuración Lectura Escritura Lectura Escritura Posiciones de memoria interna interna ICSP ICSP CP1 CP0 WRT 0 0 0 0 0 1 1 1 1 1 1
0 1 1 1 1 0 0 0 0 1 1
X 0 0 1 1 0 0 1 1 0 1
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
Sí Sí Sí Sí Sí Sí Sí Sí
No No No Sí No No No Sí No No Sí
Sí Sí Sí
No Sí No Sí No Sí No Sí No Sí Sí
No No No No No No No No No 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
PEI E
T0IE INTE
RBIE
T0IF
INTF
RBIF
0000 000x 0000 000u
1 0D h EEADR Registro de dirección de la EEPROM xxxx xxxx uuuu uuuu 10Fh EEADRH ------- Dirección 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 más peso xxxx xxxx uuuu uuuu 18Ch EECON1 EEPGD ------- WRERR WREN WR RD x--- x000 x--- u000 18Dh 18Dh EECO EECON2 N2 Regi Regist stro ro22 de de con contr trol ol de la EEPR EEPROM OM (no (no es es un un reg regis istr troo fís físic ico) o) 8D h PIE2 --(1) --- EEIE BCLIE ----- CCP2IE -r-0 0--0 -r-0 0—0 0D h PIR2 --(1) --- EEIE BCLIE ----- CCP2IE -r-0 0--0 -r-0 0—0 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 están reservados; se deben mantener siempre a cero.
Microcontrolador PIC16F876
5.0
Página 32
MÓDU MÓDUL LO TIMER IMER 0 (TEM (TEMPO PORI RIZ ZADOR ADOR 0)
El módulo Timer0 es un bloque que puede trabajar como temporizador o contador, con las siguientes características:
•
Temporizador o contador de 8 bits.
•
Se puede leer y programar.
•
Predivisor de 8 bits programable por software.
•
Selección de reloj interno o externo.
•
Provoca interrupción cuando desborda (cuando pasa de FFh a 00h).
•
Selección 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 instrucción. Si se escribe sobre TMR0, el incremento de éste se inhibirá durante los dos próximos ciclos de instrucción. 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 sección 5.2 se analizan las restricciones de la entrada externa de reloj. El módulo Predivisor está compartido entre el Timer0 y el WDT, y no se puede leer ni escribir. En la sección 5.3 se ofrecen los detalles.
Microcontrolador PIC16F876
5.1
Página 33
Interrupción del Timer0
La interrupció interrupciónn de TMR0 se genera cuando cuando el registro registro TMR0 desborda. desborda. Este desbordami desbordamiento ento activa el bit T0IF (INTCON<2>). La interrupción 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 interrupción. La interrupción TMR0 no puede sacar a la CPU del estado SLEEP ya que el temporizador está bloqueado durante este estado. 5.2
Usa Usand ndoo el Timer imer00 con con rel relooj exte extern rnoo
Cuando no se usa el Predivisor, la entrada de reloj externo es la misma que la salida del Predivisor Predivisor.. La sincronizac sincronización ión de T0CKI con la fase de reloj interno se consigue capturando 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 período de oscilador TOSC (y una pequeña red RC de retraso de 20 ns), permanecer en bajo el mismo tiempo, tiempo, y con la misma red RC. En el apartado de especificaciones especificaciones eléctricas eléctricas se ofrecen todos los datos necesarios. 5.3
Predivisor
Solamente hay disponible un módulo Predivisor, que está compartido por Timer0 y WDT. Si se asigna a uno de los módulos, no puede ser utilizado por el otro. Los bits PSA y PS2 PS2:PS0 :PS0 (OPTION_REG<3: (OPTION_REG<3:0>) 0>) determinan determinan la asignación asignación del Prediviso Predivisor, r, y la división que se efectuará. Cuando se asigna al módulo Timer0, todas las instrucciones que escriben sobre el registro TMR0 (por ejemplo CLRF 1, MOVWF 1, BSF 1, x... etc.) borrarán el Predivisor. Cuando se asigna al módulo WDT, una instrucción 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 asignación de éste.
REGISTRO 5-1:
REGISTRO OPTION_REG
Microcontrolador PIC16F876 R/W-1
R/W-1
Página 34
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
bit7
bit0
bit 7:
-RBPU:
bit 6:
INTEDG
bit 5:
T0CS: Bit de selección de origen de reloj 1 = Transición en la patilla T0CKI. 0 = Reloj interno cada ciclo de instrucción (CLKOUT)
bit 4:
T0SE: Bit de selección de flanco de reloj para TMR0. 1 = Incrementa con la transición de alto a bajo en la patilla T0CKI. 0 = Incrementa con la transición de bajo a alto en la patilla T0CKI.
bit 3:
PSA: Bit de asignación de Predivisor. 1 = Predivisor asignado al WDT. 0 = Predivisor asignado al módulo Timer0.
R = De lectura W = De escritura U = Sin implementar. Da 0 en lectura -n = Valor del reset POR
bit 2-0: PS2:PS0: Bits de selección de división. Valor de los bits
División TMR0
000 001 010 011 100 101 110 111
TABLA 5-1:
Nombre
01h, 101h,
TMR0
81h, 181h
1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256
1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128
REGISTROS ASOCIADOS AL TIMER0
Dir.
0Bh, 0Bh, 8Bh, 8Bh, 10Bh, 18Bh
División WDT
Bit7
Bit6
Bit5 Bit4
Bit3
Bit2
Bit1
Bit0
Registro del módulo Timer0
INTCON
Valor tras Valor tras POR, otros BOR resets xxxx xxxx uuuu uuuu
T0IE INTE
RBIE
T0IF
IN T F
RBIF
0000 0000 000x 000x 0000 0000 000u 000u
OPTION_REG -RBPU INTEDG T0CS T0SE
PSA
PS2
PS1
PS0
1111 1111 1111 1111 1111 1111 1111 1111
GIE
PEIE
x = Desconocido; u = Sin cambio; r = Reservado. Las celdas sombreadas no se utilizan en el Timer0.
6.0
Módulo Timer1
Microcontrolador PIC16F876
Página 35
Este módulo 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 están habilitadas se producirá una que advertirá a la CPU que el Timer1 ha llegado al final. El bit indicador de esta interrupción es TMR1IF (PIR1<0>). La interrupción 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 operación lo determina el bit de selección de reloj TMR1CS (T1CON<1>). En modo temporizador, el Timer1 se incrementa cada ciclo de instrucción, i nstrucción, 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, también, una entrada de reset interna, que puede activarla cada uno de los dos módulos CCP. El registro 6.1 muestra el control del Timer1. REGISTRO 6-1: U-0
U- 0
---
---
T1CON: REGISTRO DE CONTROL DEL TIMER1 (DIRECCIÓN 10h) R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
T1C T1CKPS1 KPS1 T1CK T1CKPPS0 T1OS T1OSC CEN -T1S -T1SYN YNC C TMR TMR1CS 1CS TMR TMR1ON 1ON
bit7
bit0
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:
T1CKPS1:T1CKPS0: Bits de selección de predivisión de reloj de entrada a Timer1. 11 = 1:8 Valor de predivisión 10 = 1:4 Valor de predivisión 01 = 1:2 Valor de predivisión 00 = 1:1 Valor de predivisión
bit 3:
T1OSCEN: T1OSCEN: Bit de control de habilitación de oscilador para TMR1. 1 = Oscilador habilitado. 0 = Oscilador anulado.
bit 2:
-T1SYNC: -T1SYNC: Bit de control de sincronización de la entrada de reloj externo de Timer1. TMR1CS = 1 1 = Entrada de relo externo externo no sincronizada. sincronizada. 0 = Entrada de relo externo externo sincronizada. sincronizada. TMR1CS = 0 En esta circunstancia, Timer1 usa el reloj interno.
bit 1:
TMR1CS: TMR1CS: Bit de selección de origen de reloj para Timer1. 1 = Flanco de subida en la patilla RC0/T1OSO/T1CKI, o en la patilla RC1/T1OSI/CCP2. 0 = Reloj interno (Fosc/4).
bit 0:
TMR1ON: TMR1ON: Bit de conexión de Timer1. 1 = Timer1 habilitado. 0 = Timer1 detenido.
Cuando se habilita el oscilador del Timer1 (T1OSCEN = 1), las patillas RC1/T1OSI/CCP2 y RC0/T1OSO/T1CKI quedan como entradas; o sea, que se ignora el valor de TRISC<1:0>. 6.1 Opeeración Op ión de del Ti Timer1 en en mo modo temporiza izador dor
Microcontrolador PIC16F876
Página 36
El modo temporizador se selecciona borrando el bit TMRCS (T1CON<1>). En este modo, la entrada de reloj es Fosc/4; el bit de sincronización T 1SYNC (T1CON<2>) no tiene efecto en este modo porque el reloj interno siempre está sincronizado. 6.2
Oper Op eraación ción del del Tim Timer er11 com comoo con conta tado dorr
El Timer1 puede trabajar como contador asíncrono o síncrono, dependiendo de la programación del bit TMR1CS. Cuando el contador Timer1 va a incrementarse vía externa, los incrementos suceden en el flanco de subida. Después de que el Timer1 se programe en modo contador, el módulo esperará un flanco de bajada antes de comenzar los incrementos con los flancos de subida.
6.3
El Ti Time mer1 r1 como como cont contad ador or sincr incron oniz izaado
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 sincronización se produce después de la etapa del Predivisor. Este bloque es un contador cíclico asíncrono.
6.4
El Ti Time mer1 r1 como como cont contad ador or asínc síncro rono no
Microcontrolador PIC16F876
Página 37
Si el bit de control T 1SYNC (T1CON<2>) se activa, la entrada de reloj externa no queda sincronizada. El temporizador continúa su incremento, totalmente asíncrono con la fase de reloj interna. El temporizador continuará funcionando durante el estado de “alerta” (SLEEP), y puede provocar una interrupción 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 (Sección 6.4.1). 6.4.1 6.4.1
LEYEND LEYENDO O Y ESCRI ESCRIBIE BIENDO NDO EL EL TIMER TIMER11 COMO COMO CONTA CONTADOR DOR ASÍN ASÍNCRO CRONO NO
Al leer TMR1H o TMR1L cuando el Timer1 está funcionando como contador asíncrono, 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 amplif amplifica icador dor oscilad oscilador) or).. El oscilad oscilador or se habili habilita ta con el bit T1OSCE T1OSCEN N (T1CON (T1CON<3> <3>), ), y funcionará en bajo consumo a partir de 200 KHz. Este oscilador continúa funcionando aunque la CPU entre en modo SLEEP (alerta), y está diseñado especialmente para trabajar a 32 KHz. La tabla 6-1 la selección del condensador dependiendo de la frecuencia de trabajo; en la figura 6-3 se aprecia una aplicación del Timer1 como reloj de tiempo real. Tabla 6-1: SELECCIÓN DE CONDENSADORES PARA EL OSCILADOR DEL TIMER1 Tipo Oscilador
LP
FrecuenC1 cia
C2
32 KHz
33 pF
33 pF
100 KHz
15 pF
15 pF
200 KHz
15 pF
15 pF
Estos valores son para guía de diseño Cristales comprobados: 32,768 KHz
Epson 001R32.768K-A
C-
100 KH KHz
Epso pson C-2 C-2 100. 00.00K 00KC-P +/- 20 20 PP PPM
200 KH KHz
STD XTL 200 200.000 000KHz +/- 20 PPM
+/- 20 PPM
Nota 1: Una mayor capacidad aumenta la estabilidad del oscilador pero también aumenta el tiempo de arranque. Nota 2: Ya que cada oscilador o resonador posee sus propias características, el usuario debe consultar las especificaciones del dispositivo a utilizar.
6.6 6.6
Rese Resett del del Tim Timer er11 usan usando do la la sal salid idaa de disp dispar aroo del del CCP CCP
Microcontrolador PIC16F876
Página 38
Si los módulos CCP1 o CCP2 se configuran en modo comparación para generar un “disparo por suceso especial” (CCP1M3:CCP1M0 = 1011), esta señal provocará el reset del Timer1. Nota: El “disparo por suceso especial” de los módulos CCP1 y CCP2 no activará el bit indicador de interrupción TMR1IF (PIR<0>). El Timer1 debe configurarse como temporizador o contador síncrono para disponer de esta característica. Si Timer1 está funcionando en modo contador asíncrono, 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 operación, la pareja de registros CCPRxH:CCPRxL produce el período para Timer1. 6.7 6.7
Rese Resett de de la la par parej ejaa de de regi regisstros tros TMR1 TMR1H: H:TM TMR1 R1L, L, del del Tim Timer er11
Los registros TMR1H y TMR1L no se ponen a 00h con la conexión 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 detención del Timer1, y pone el Predivisor a 1:1. Los demás resets no afectan a este registro. 6.7
Predivisor de del Ti Timer1
El contador Predivisor se borra al escribir sobre los registros TMR1H o TMR1L. TABLA 6-2: Dir.
REGISTROS ASOCIADOS AL TIMER1
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras POR, BOR
Valor tras otros resets
0Bh, 8Bh, 0000 0000 000x 000x 0000 000 000u 00u 10Bh, INTCON GIE PEIE T0IE INTE RBIE T0IF INT F RBIF 18Bh 0000 0000 0000 0000 000 0000 000 0Ch PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000 0000 000 0000 000 8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 xxxx xxxx xxxx xxxx uuuu uuu uuuu uuu 0Eh TMR1L Byte de menor nor peso eso del reg registro de 16 bits TMR1 xxxx xxxx xxxx xxxx uuuu uuu uuuu uuu 0Fh TMR1H Byte de mayor pes pesoo de del reg registro de 16 bi bits TMR1 ----T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu 10 h 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
7.0
Página 39
Módulo Timer2
El Timer2 es un temporizador t emporizador de 8 bits con Predivisor y postdivisor. Puede utilizarse como base de tiempos en modo PWM de los módulos CCP. El registro TMR2 es de lectura y escritura, y puede borrarse con cualquier reset. La entrada de reloj (Fosc/4) tiene la opción de predivisión por 1:1, 1:4 o 1:16, seleccionada por los bits de control T2CKPS1:T2CKPS0 T2CKPS1:T2CKPS0 (T2CON<1:0>). El módulo Timer2 posee el registro de período 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 través de un postdivisor de 4 bits (ofreciendo una división de frecuencia desde 1:1 hasta 1:16). Después de esto, se activará la interrupción 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 (DIRECCIÓN 12h) R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
TOU TOUTPS3 TPS3 TOU TOUTPS2 TPS2 TOUT OUTPS1 PS1 TOUTP OUTPS0 S0 TMR TMR2ON 2ON T2CK T2CKPPS1 T2C T2CKPS0 PS0
bit7
bit 7:
bit0
Sin implementar: implementar: Se lee como 0.
bit 6-3: TOUTPS3:TOUTPS0: Bits de selección de postdivisión de Timer2. 0000 = 1:1 valor de ostdivisión 0001 = 1:2 valor de postdivisión 0010 = 1:3 valor de postdivisión “ “ 1111 = 1:16 Valor de postdivisión bit 2:
TMR2ON: Bit de activación de TMR2. 1 = Timer2 está activado. 0 = Timer2 está desactivado.
bit 1-0: T2CKPS1:T2CKPS0 : Bit de selección de predivisión para Timer2. 00 = 1:1 valor de predivisión. 01 = 1:4 valor de predivisión. 1X = 1:16 valor de redivisión.
7.1
Prediv divisió isiónn y postdivis ivisiión del del Tim imeer2
R = De lectura W = De escritura U = Sin implementar. Da 0 en lectura -n = Valor del reset POR
Microcontrolador PIC16F876
Página 40
Los contadores pre y postdivisores se borran con cualquiera c ualquiera 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 señal para crear su desplazamiento de datos serie. En la figura 7-1 se aprecia esto con detalle.
TABLA 7-1: Dir. Nombre
REGISTROS ASOCIADOS AL TIMER2 Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras Valor tras otros POR,BOR resets
INTF
RBIF
0000 000x
0Bh, 8Bh, INTCON GIE 10Bh, 18Bh 0Ch PIR1 PSPIF(1)
PEIE
T0IE
INTE
RBIE
T0IF
ADIF
RCIF
TXIF
SSPIF
CCP1IF
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
11 h
TMR2
Registro del módulo Timer2
12 h
T2CON
92 h
PR2
---
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0
Registro de período del Timer2
0000 000u
0000 0000 TMR2IE TMR1IE 0000 0000 0000 0000 TMR2IF TMR1IF 0000 0000
0000 0000 0000 0000 TMR2ON
T2CKPS1 T2CKPS0
-000 000 0000
-000 000
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
8.0
Página 41
Módu Módulo loss CAPT CAPTUR URA/ A/CO COMP MPAR ARAC ACIIÓN/P ÓN/PWM WM
Cada módulo Captura/Comparación/PWM (CCP) contiene un registro de 16 bits que puede trabajar como: • Registro de captura de 16 bits. • Registro de comparación de 16 bits. • Registro de relación de ciclo PWM. El conjunto CCP1 y CCP2 son idénticos en el modo de operar, con la excepción de la oper operac ació iónn de “dis “dispa paro ro por por suce suceso so espe especi cial al”. ”. La tabl tablaa 8-1 8-1 y 8-2 8-2 mu mues estr traa los los recu recurs rsos os e interacciones del módulo CCP. En las secciones siguientes, la actividad de CCP se describe con respecto a CCP1. Módulo CCP1: El registro CCPR1 está compuesto de dos registros de 8 bits: CCPR1L (byte bajo) y CCPR1H (byte alto). El registro CCP1CON controla la operación de CCP1. El disparo por suceso especial se genera cuando existe una coincidencia en la comparación, y se borrará el Timer1. Módulo 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 operación de CCP2. Un disparo por suceso especial se genera por coincidencia en la comparación, se borrará el Timer1 y se arranca el convertidor A/D, si está habilitado. Tabla 8-1: Modo CCP – Timer Recursos Modo odo CCP CCP Tem Temp. afec fectado tado Captura Timer1 Comparación Timer1 PWM Timer2
Tabla 8-2:
Interacción de los dos módulos CCP
Modo Modo CCPx CCPx Modo Modo CCPy CCPy Inte Intera racc cció iónn Captura
Captura
Misma base de tiempos que TMR1 El compara comparador dor se config configura urará rá para para “dispa “dispara ra por Captura Comparación suceso especial”, que borrará a TMR1. El compara comparador dor se config configura urará rá para para “dispar “disparoo por Compa Compara raci ción ón Compa Compara raci ción ón suceso especial, que borrará a TMR1. El PWM PWM ti tien enee la mism mismaa frecu frecuen enci ciaa y cicl cicloo de PWM PWM actualización (la interrupción de TMR2). PWM Captura Ninguna PWM
Comparación Ninguna
Microcontrolador PIC16F876
REGISTRO 8-1:
Página 42
REGISTRO CCP1CON/CCP2CON (DIRECCIÓN 17h/1Dh)
U-0
U- 0
R/W-0
R/W-0
R/W-0
---
---
CCPxX
CCPxY
CCPxM3
bit7
R/W-0
R/W-0
R/W-0
CCPxM2 CCPxM1 CCPcM0 bit0
R = De lectura W = De escritura U = Sin implementar. Da 0 en lectura -n = Valor del reset POR
bit 7-6: Sin implementar: implementar: Se lee como 0. bit 5-4: CCPxX:CCPxY: Bits menos significativos de PWM. Modo Modo Ca tura: tura: No usado. usado. Modo Comparación: No usado. Modo PWM: Estos bits son los dos menos significativos de la relación de ciclo de PWM. Los ocho más significativos se encuentran en el registro CCPRxL. bit 3-0: CCPxM3:CCPxM0: Bits de selección de modo CCPx. 0000 = Captura/Comparación/PWM desconectados (reset del módulo CCPx). 0100 = Modo Captura, todos los flancos de bajada. 0101 = Modo Ca tura todos los los flancos flancos de de subida. subida. 0110 = Modo Modo Ca tura tura cada 4 flanco flancoss de subida subida.. 0111 = Modo Modo Ca tura tura cada 16 flanc flancos os de subid subida. a. 1000 = Modo Com Com aración activa la salida salida con la coincidencia coincidencia se activa activa el el bit CCPxIF . 1001 = Modo Com aración, aración, borra borra la salida salida con con la coincide coincidencia ncia se activa activa el bit CCPxIF CCPxIF . 1010 = Modo Comparación, genera una interrupción cuando hay coincidencia (activa bit CCPxIF, sin efecto en la patilla CCPx) 1011 = Modo Comparación, 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 módulo 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 dieciséis 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 petición de interrupción 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 CONFIGURACIÓN DE LA PATILLA CCP En modo Captura, la patilla RC2/CCP1 se configurará como entrada activando el bit TRISC<2>. Nota: Si la patilla RC2/CCP1 se configura como como salid salida, a, una una escr escritu itura ra en el puer puerto to puede provocar una condición de captura.
Microcontrolador PIC16F876
8.1. 8.1.22
Página 43
SELE SELECC CCIÓ IÓN N DE MODO MODO DE DE TIM TIMER ER11
El Timer1 debe funcionar en modo temporizador o contador sincronizado para que el módulo CCP pueda utilizar la característica de captura. En modo contador asíncrono, la captura no puede producirse. 8.1. 8.1.33
INTE INTERR RRUP UPCI CIÓN ÓN POR POR SOF SOFTW TWAR ARE E
Cuando se cambia el modo de captura, puede generarse una falsa interrupción de captura. El usuario mantendrá borrado el bit CCP1IE (PIE1<2>) para evitar falsas interrupciones, y borrará el bit indicador CCP1IF inmediatamente después de cualquier cambio en el modo de operación. 8.1.4 .1.4
PRED REDIVIS IVISO OR DE CCP
Exis Existen ten cuat cuatro ro posi posibl bles es prog progra ramac macio ione ness para para el Pred Prediv ivis isor or,, espe especi cific ficad adas as por por los los bits bits CCP1M3:CCP1M0. Siempre que el módulo CCP se desconecta, o que el módulo CCP no está en modo captura, el contador Predivisor está borrado. Cualquier reset borrará el contador Predivisor. El cambio de la predivisión de captura generará una interrupción. 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 método recomendado para conmutar entre predivisores de captura. Este ejemplo también borra el contador Predivisor y no generará una falsa interrupción. EJEMPLO 8-1: CONMUTANDO PREDIVISIONES DE CAPTURA
8.2
CLRF MOVLW
CCP1CON NEW_CAPT_PS
MO V W F
CCP1CON
; Desconecta el módulo CCP. ; Ca Carga registro W con nueva pr predivisión ; y activa CCP. ; Carga CCP1CON con el nuevo valor.
Modo Comparación
En modo comparación, 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 acción sobre esta patilla la selecciona el valor de los bits de control CCP1M3:CCP1M0 (CCP1CON<3:0>). Al mismo tiempo, se activa acti va el indicador de interrupción CCP1IF.
Microcontrolador PIC16F876
Página 44
8.2.1 .2.1
CONF ONFIGUR IGURAC ACIÓ IÓN N DE CCP
El usua usuari rioo debe debe conf config igur urar ar la pati patill llaa RC2/CC RC2/CCP1 P1 como como salida salida,, borran borrando do el bit TRISC<2>. Nota: Borrando el registro CCP1CON se fuerza al latch de salida de comparación RC2/CCP1 al nivel bajo por defecto. 8.2. 8.2.22
SELE SELECC CCIÓ IÓN N EN EN MOD MODO O TIM TIMER ER11
Si dese deseam amos os que que el mó módu dulo lo CCP CCP pued puedaa utilizar su característica de comparación, el Timer1 sólo puede funcionar en modo Temporizador o en modo Contador Sincronizado; no se debe operar en modo Contador Asíncrono. 8.2. 8.2.33
MODO MODO DE INTE INTERR RRUP UPCI CIÓN ÓN POR POR SOF SOFTW TWAR ARE E
Cuando se elige el modo de generar una interrupción por programa, la patilla CCP1 no queda afectada. El bit CCPIF se activa provocando una interrupción en CCP (si está habilitado). 8.2. 8.2.44
DISP DISPAR ARO O POR POR SUCE SUCESO SO ESP ESPEC ECIA IAL L
En este modo, se genera un disparo interno por hardware, que puede utilizarse para iniciar una acción. 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 período 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 módulo estuviese habilitado). Nota: El disparo por suceso especial de los módulos CCP1 y CCP2 no activa el bit indicador de interrupción TMR1IF (PIR<0>). 8.3
Modo PWM (PWM)
En modo Modulación por Ancho de Pulso (PWM), la patilla CCPx produce una salida PWM con 10 bits de resolución. Como quiera que la patilla CCP1 está multiplexada con el latch de datos del puerto C, el bit TRISC<2> se borr borrar aráá para para prog progra rama marr como como sali salida da la patilla CCP1. Nota: Borran Borrando do el regist registro ro CCP1CO CCP1CON N 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 módulo CCP en modo PWM.
Microcontrolador PIC16F876
Página 45
Una salida PWM (figura 8-4) posee un período y un tiempo de alto (Duty Cycle). La frecuencia de la onda PWM será la inversa del período. 8.3.1
PERÍODO PWM
El período PWM se especifica escribiendo el registro PR2. El período PWM puede calcularse usando la siguiente relación: Período(PWM) = [(PR2)+1]•4Tosc•(valor Predivisor TMR2); siendo Tosc=250 ns para 4 Mhz.
La frecuencia PWM será la inversa del período: f (PWM) (PWM) = 1/Período (PWM) Cuando TMR2 se iguala a PR2, suceden los siguientes tres sucesos en el próximo 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 determinación de la frecuencia PWM. El postdivisor podría usarse para tener un rango rango auto-a auto-actu ctualiz alizabl ablee de frecue frecuenci ncias as de salida PWM. 8.3.2
TIEMPO EN ALTO CYCLE) DE PWM
( D UT Y
El duty cycle de PWM se esp especific ificaa escribiendo en el registro CCPR1L y en los bits de CCP1CON<5:4>. Se dispone de 10 bits de resolución. El registro CCPR1L contiene los ocho bits más significativos, y el registro CCP1CON<5:4> los dos de menos peso. Este valor de 10 bits se representa por la notación CCPR1L:CCP1CON<5:4>. La siguiente ecuación se utiliza para calcular el duty cycle, en tiempo, de PWM: PWM(duty cycle) = (CCPR1L:CCP1CON<5:4>)•Tosc•(TMR2 (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 después de que ocurra la coincidencia entre PR2 y TMR2 (un período completo). En modo PWM, CCPR1H es un registro de sólo lectura. lect ura. 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 conmutación 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, i nternos, se borra la patilla CCP1. A título de ejemplo: Cargamos CCPR1L con 2 10 (102) y ponemos “10” en los bits 5 y 4 de CCP1CON, el número binario total será 1010. Como TMR2 ahora recibe los impulsos de una fase Q interna (cuyo período será de 250 ns con un oscilador de 4 Mhz), la duración del impulso alto (duty cucle), con predivisor a 1, será de 1010b x 250ns = 10d x 250 ns = 2,5 µ s.
Microcontrolador PIC16F876
Página 46
Nota: Si el valor del duty cycle es mayor que el período PWM, la patilla CCP1 no se pondrá a cero. 8.3. 8.3.33
PROG PROGRA RAMAC MACIÓ IÓN N PAR PARA A OPE OPERA RACI CIÓN ÓN PWM PWM
Los siguientes pasos deben respetarse para configurar el módulo CCP como PWM: 1. Programar el período PWM, escribiendo en el registro PR2.
2. Programar Programar el el duty cycle, cycle, escribien escribiendo do en el registr registroo CCPR1L CCPR1L y CCP1CO CCP1CON<5:4> N<5:4>.. 3. Poner Poner la patilla patilla CCP1 CCP1 como salida, salida, borrand borrandoo el bit 2 de TRISC TRISC (TRIS (TRISC<2>) C<2>).. 4. Programar Programar el el valor Prediv Predivisor isor de TMR2 TMR2 y habilitar habilitar Timer2, Timer2, escribi escribiendo endo T2CON. T2CON. 5. Configurar Configurar el módulo módulo CCP1 para operación operación como PWM. TABLA 8-3:
REGISTROS ASOCIADOS AL TIMER1, CAPTURA Y COMPARACIÓN
Dir. Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras POR,BOR
Valor tras otros resets
0Bh, 8Bh, INTCON 10Bh,
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 0000 000x 000x
0000 0000 000u 000u
0000 0000 0000 0000
0000 0000 0000 0000
---- ---0
---- ---0
0Ch
PIR1
PSPIF(1)
ADIF
RCIF
TX I F
SSPIF
CCP1IF
0Dh
PIR2
---
---
---
---
---
---
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
8Dh
PIE2
---
---
---
---
---
---
87h
TRISC TRISC
0Eh
TMR2IF TMR1IF ---
CCP2IF
0000 0000 0000 TMR2IE TMR1IE 0000
---
CCP2IE
0000 0000 0000 0000
---- ---0
---- ---0
1111 1111 1111 1111
1111 1111 1111 1111
TMR1L Byte menos menos signific significativo ativo del del registro registro TMR1 TMR1 de 16 bits. bits.
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
0Fh
TMR1H Byte más más significat significativo ivo del registro registro TMR1 de 16 16 bits.
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
10h
T1CON
--00 0000
--uu uuuu
15h
CCPR1L CCPR1L Byte menos significa significativo tivo del registro1 de Captura-Comp Captura-Comparació aración-PWM n-PWM
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
16h
CCPR1H CCPR1H Byte más significat significativo ivo del registro1 de Captura-Compar Captura-Comparación-P ación-PWM WM
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
--00 00 0000
--00 00 0000
17h
CCP1CON
Regist Registro ro de de direcc dirección ión del puerto puerto C.
---
---
---
---
T1CKPS1 T1CKPS0 T1OSCEN
CCP1X
CCP1Y
-T1SYNC
TMR1CS
TMR1ON
CCP1M3 CCP1M2 CCP1M1 CCP1M0
1Bh
CCPR2L CCPR2L Byte menos significa significativo tivo del registro2 de Captura-Comp Captura-Comparació aración-PWM n-PWM
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
1Ch
CCPR2H CCPR2H Byte más significat significativo ivo del registro2 de Captura-Compar Captura-Comparación-P ación-PWM WM
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
--00 00 0000
--00 00 0000
1Dh 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
TABLA 8-4: Dir.
Nombre
Página 47
REGISTROS ASOCIADOS AL TIMER2 Y PWM Bit7
0Bh, 8Bh, INTCON GI E 10Bh, 18Bh 0Ch PIR1 PSPIF(1)
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor Valor tras tras otros POR,BOR resets
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 0000 000x 000x
0000 0000 000u 000u
ADIF
RCIF
TXIF
SSPIF
CCP1IF
0000 0000 0000 0000
0000 0000 0000 0000
---- -----0
---- ----0
0D h
PIR2
---
---
---
---
---
---
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
8D h
PIE2
---
---
---
---
---
---
87h
TRISC
11 h
TMR2
92 h
PR2
12 h
T2CON
15h 16h 17 h
TMR2IF TMR1IF ---
CCP2IF
0000 0000 0000 0000 0000 0000 0000 TMR2IE TMR1IE 0000
---
CCP2IE
---- -----0
---- ----0
Regi egistro de de di direcc ección del del pue puerto rto C. C.
1111 1111 1111 1111
1111 1111 1111 1111
Registro de de lo los módulos de de TMR2.
0000 0000 0000 0000
0000 0000 0000 0000
Registro de período de los módulos TMR2.
1111 1111 1111 1111
1111 1111 1111 1111
-000 00 0000
-000 00 0000
CCPR1 CCPR1L L Byte Byte menos menos signif significat icativo ivo del registr registro1 o1 de Captur Captura-C a-Comp ompara aració ción-PW n-PWM M
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
CCPR1 CCPR1H H Byte Byte más más signifi significati cativo vo del regist registro1 ro1 de Captur Captura-C a-Comp ompara aración ción-PW -PWM M
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
--00 --00 0000 0000
--00 --00 0000 000
CCP1CON
---
---
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0
---
CCP1X
CCP1Y
TMR2ON
T2CKPS1
T2CKPS0
CCP1M3 CCP1M2 CCP1M1 CCP1M0
1Bh
CCPR2 CCPR2L L Byte Byte menos menos signif significat icativo ivo del registr registro2 o2 de de Capt Captura ura-Co -Compa mparac raciónión-PWM PWM
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
1Ch
CCPR2 CCPR2H H Byte Byte más más signifi significati cativo vo del del regist registro2 ro2 de Captur Captura-C a-Comp ompara aración ción-PW -PWM M
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
--00 --00 0000 0000
--00 --00 0000 000
1D h
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 PWM y Timer2. Nota 1: Los bits PSPIE y PSPIF están reservados en el PIC 16F873/876; se deben mantener siempre a 0.
9.0 9.0
MÓDU MÓDULO LO PUER PUERTO TO SERI SERIE E SÍN SÍNCR CRON ONO O MAE MAEST STRO RO (MSS (MSSP) P)
El módulo MSSP es un acoplamiento (interface) serie usada en comunicaciones con otros perif periféri éricos cos o dispos dispositi itivos vos microc microcont ontrol rolado adores res.. Estos Estos dispos dispositiv itivos os perifé periféric ricos os pueden pueden ser EEPROMs, registros de desplazamiento, controladores de displays, convertidores A/D, etc. El módulo MSSP puede trabajar en uno de estos dos modos:
• •
Interface de Periférico Serie (SPI). Circuitos Inter-Integrados (I 2C).
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 I 2C.
Microcontrolador PIC16F876
Página 48
REGI REGIST STRO RO 9-1: 9-1: SSPS SSPSTA TAT: T: REGI REGIST STRO RO DE ESTA ESTADO DO PUER PUERTO TO SERI SERIE E SÍNC SÍNCRO RONO NO (DIRECCIÓN 94h) R/W-0 R/W-0 SMP bit7
CKE
R -0
R-0
R-0
R-0
R-0
R-0
D/-A
P
S
R/-W
UA
BF bit0
R = De lectura W = De escritura U = Sin implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
tura.. SMP: Bit de ca tura SPI Modo Maestro 1 = Ca tura del del dato de entrada entrada al final del tiem tiem o del dato dato de salida. salida. 0 = Ca tura del del dato de entrada entrada en el centro centro del tiem o del dato dato de salida. salida. SPI Modo Servidor SMP de borrarse cuando se use2 SPI en modo servidor. En modo servidor servidor o maestro I C: 1 = Inhibe control de velocidad ara modo de velocidad estándar 100 KHz a 1 MHz . 0 = Habilita Habilita control control de velocidad velocidad ara modo modo de alta velocidad velocidad 400 KHz KHz .
bit 6:
Selecci ción ón de flan flanco co de relo relo ara ara SP SPII fi ura ura 9-4 9-4 fi ura ura 9-5 9-5 fi ura ura 9-6 9-6 . CKE: Selec Modo SPI: CKP = 0 1 = La transmisión sucede en la la transición del estado de relo activo al estado de relo aislado. 0 = La transmisión transmisión sucede en la transición transición del estado de relo aislado aislado al estado de relo activo. activo. CKP = 1 1 = El dato se transmite transmite en el flanco de ba ada de SCK. 0 = El dato se transmite en el flanco de subida de SCK. En modo Servidor o Maestro I 2C: 1 = Niveles de entrada entrada conforme conforme a las es ecificaciones ecificaciones SMBUS. SMBUS. 0 = Niveles de entrada conforme conforme a las es ecificaciones ecificaciones I2C.
bit 5:
selecciónn de dato o dirección dirección Data/-Address Data/-Address solamente solamente en modo modo I2C. D/A: Bit de selecció 1 = Indica Indica ue el último último b te recibido recibido o transmitido transmitido fue un dato. 0 = Indica Indica ue el último último b te recibido recibido o transmitido transmitido fue una dirección dirección
bit 4:
P: Bit de arada sto 2 Solamente en modo I C. Este bit se borra cuando se se inhibe el módulo MSSP. SSPEN está a cero . 1 = Indica ue un bit de sto se ha detectado detectado en último lu ar. este bit se one a cero cero con RESET . 0 = Indi Indica ca ue no se ha detectad detectadoo en último último lu ar un bit de sto sto .
bit 3:
arrann ue St Star artt . S: Bit de arra Solamente en modo I2C. Este bit se borra cuando se se inhibe el módulo MSSP. SSPEN está a cero . 1 = Indica ue un bit de de start start se ha detectad detectadoo en último lu ar. este bit se one a cero cero con con RESET RESET . 0 = Indica Indica ue no se se ha detectado detectado en último último lu ar un bit bit de start. start.
bit 2:
R/W: Bit de información de lectura-escritura (solamente en modo I 2C). Este bit contiene la información de lectura-escritura de la última dirección tratada. Este bit solamente es válido desde la última dirección tratada hasta el próximo bit de Start, Stop o no –ACK En modo servidor I2C: 1 = Lectura. 0 = Escritura. En modo maestro I2C: 1 = Transmisión en progreso. 0 = Transmisión detenida. La función OR de este bit con SEN, RSEN, PEN, RCEN o ACKEN indicará si el MSSP está en modo aislado.
bit 1:
UA: Actualización de dirección 10 bits, solamente en modo I2C . 1= Indica Indica ue el usuario usuario necesit necesitaa actualizar actualizar la direcció direcciónn en el re re istro SSPADD. 0 = Indica ue la dirección no necesita ser actualizada.
bit 0:
buffer lleno lleno buffer full . BF: Bit de estado de buffer Rece ción ción modos modos SPI e I2C . 1 = Rece ción ción com com leta. leta. SSPBUF SSPBUF está está lleno lleno.. 0 = Rece Rece ción ción incom incom leta. leta. SSPBUF SSPBUF está está vacío. vacío. Transmisión modos SPI e I2C . 1 = Dato transmitido transmitido está en ro reso no inclu e –ACK bits de STOP . SSPBUF está lleno. 0 = Dato transmitido transmitido no está en ro reso no inclu e –ACK bits de STOP . SSPBUF está vacío.
Microcontrolador PIC16F876
Página 49
REGI REGIST STRO RO 9-2: 9-2: SSPC SSPCON ON:: REGI REGIST STRO RO DE CONT CONTRO ROL L PUER PUERTO TO SERI SERIE E SÍNC SÍNCRO RONO NO (DIRECCIÓN 14h) R/W-0 R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
WCOL
SSPEN
CKP
SSPM3
SSPM2
SSPM1
SSPM0
bit7
SSPOV
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 válidas las condiciones I 2C. 0 = No existe conflicto. Modo Servidor 1 = Se escribió en SSPBUF cuando estaba transmitiendo la alabra anterior se borra or software . 0 = No existe conflicto.
bit 6:
indicador de desbordami desbordamiento ento en rece rece ción. SSPOV: Bit indicador Modo entrada SPI: 1 = Se ha recibido un nuevo byte cuando SSPBUF aún mantenía 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, a ue cada o eración se inicia escribiendo escribiendo en el re istro SSPBUF. SSPBUF. Debe Debe borrar borrarse se or software. software. 0 = No ha ha 2 conflict conflicto. o. En modo I C: 1 = Se recibe un b te mientras SSPBUF mantiene el dato revio. SSPOV es indiferente en trasmisión. Debe borrarse or software. 0 = No existe conflicto.
bit 5:
SSPEN: Bit de habilitación de Puerto Serie Síncrono. En modo modo SPI SPI cuando se habilite habilite estas atillas deberán deberán ser convenientemen convenientemente te confi confi uradas como entradas o salidas. 1 = Habilita Habilita uerto serie confi ura las atillas atillas SCK SDO SDI –SS como atillas atillas del uerto serie. 0 = Inhibe uerto serie confi ura estas atillas como líneas de uerto entrada-salida. En modo I2C cuando se habilit habilitee estas atillas atillas deberán deberán ser convenientemen convenientemente te confi confi uradas como entradas o salidas. 1 = Habilita Habilita uerto serie confi ura las atillas atillas SDA SCL como atillas atillas del uerto serie. 0 = Inhibe uerto serie confi ura estas atillas como líneas de uerto entrada-salida.
bit 4:
selección de olaridad olaridad de de relo relo . CKP: Bit de selección En modo SPI: 1 = Relo desconectado desconectado ueda en nivel nivel alto. 0 = Relo desconectado desconectado ueda en nivel ba o. En modo servidor I2C, control cont rol de SCK. 1 = Habilita Habilita relo relo . 0 = Mantie Mantiene ne ba o el relo relo rolon rolon ación ación del relo relo . El usuari usuarioo ase ura el tiem o de antelac antelación ión de datos. datos. En modo maestro I2C: No utilizado en este modo.
bit 3-0: SSPM3:SSPM0: Bits de selección de modo ara Puerto Serie Síncrono 0000 = Modo Modo Maestro Maestro SPI SPI relo = Fosc/4. Fosc/4. 0001 = Modo Modo Maestro Maestro SPI SPI relo = Fosc/16. Fosc/16. 0010 = Modo Maestro Maestro SPI, relo relo = Fosc/64. Fosc/64. 0011 = Modo Maestro Maestro SPI, relo = salida/2 de TMR2. 0100 = Modo Servidor SPI, relo = atilla SCK. Patilla de control –SS habilitada. 0101 = Modo Servidor SPI relo = atilla SCK. Patilla de control –SS inhibida. Ésta Ésta uede usarse usarse como entrada o salida. 0110 = Modo Servidor I2C con 7 bits de de dirección. dirección. 0111 = Modo Servidor I22C con 10 bits bits de dirección. dirección. 1000 = Modo Maestro I C relo relo = Fos Foscc / 4• SSPA SSPADD DD+ +1 . 1011 = Modo Modo Maestr Maestroo contr controlad oladoo or el micro micro ro rama rama I2C servidor servidor desconectado desconectado . 1110 = Modo Modo Maestr Maestroo contr controlad oladoo or el micro micro ro rama rama I2C, dirección dirección de 7 bits con bit de start sto e interru interru ciones habilitadas habilitadas.. 1111 = Modo Modo Maestr Maestroo contr controlad oladoo or el micro micro ro rama rama I2C dirección dirección de de 10 bits con bit de start sto e interru interru ciones habilitadas habilitadas.. 1001 1010 1100 1101 están reservadas. reservadas.
Microcontrolador PIC16F876
Página 50
REGI REGISTR STRO O 9-3: 9-3: SSPC SSPCON ON2: 2: REGI REGIST STRO RO22 DE CONT CONTRO ROL L PUER PUERTO TO SERI SERIE E SÍNC SÍNCRO RONO NO (DIRECCIÓN 91h) R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
GCEN
ACKSTAT
ACKDT
ACKEN
RCEN
PEN
RSEN
SEN
bit7
bit0
R = De lectura W = De escritura U = Sin Sin impl implem emen entar tar.. Da 0 en lectura -n = Valor del reset POR
bit 7:
servidor I2C . GCEN: Bit de habilitación de llamada eneral solamente en modo servidor 1 = Habilitació Habilitaciónn de interru interru ción cuando cuando se recibe recibe en SSPSR SSPSR una dirección dirección de llamada llamada eneral. eneral. 0 = Inhibida la dirección de llamada eneral.
bit 6:
ACKSTAT: Bit de estado de reconocimiento solamente en modo maestro I2C . Modo maestro transmisión: 1 = No se recibió el reconocimiento desde el servidor. 0 = Se recibió el reconocimiento desde el servidor.
bit 5:
ACKDT: Bit de reconocimiento de dato solamente en modo maestro I2C . Rece ción en en modo modo maestro maestro:: Valor ue fue transmitido cuando el usuario inicia una secuencia de reconocimiento al final de una rece rece ción ción.. 1 = No ha ha reconoc reconocimi imiento ento 0 = Reconocimiento.
bit 4:
secuencia de reconocimiento solamente en modo maestro I2C . ACKEN: Bit de habilitación de secuencia En modo modo maestr maestroo rece rece ción: ción: 1 = Inicia una secuencia de reconocimiento en las atillas SDA SCL transmite un bit de datos ACKDT. Automáticamente se borra or hardware. 0 = Detenida la secuencia de reconocimiento.
bit 3:
habilitación de rece2 ción solamente solamente en modo maestro maestro I2C . RCEN: Bits de habilitación 1 = Habilita Habilita la rece rece ción en modo I C. 0 = Rece Rece ción ción detenid detenida. a.
bit 2:
PEN: Bit de habilitación de condición de arada solamente en modo maestro I2C . Control de SCK liberado 1 = Inicia la condición de arada STOP en las atillas SDA SCL. Se borra automáticamente or hardware. 0 = Detenida la condición de arada.
bit 1:
habilitación de la condició condiciónn de re etición etición de arran arran ue solamente solamente en modo maestro maestro I2C . RSEN: Bit de habilitación 1 = Inicia la condición condición de re etición de arran ue en las atillas atillas SDA SCL. Se borra automáticamen automáticamente te or hardware. 0 = Deteni Detenida da la condi condició ciónn de re etición etición de arran arran ue.
bit 0:
habilitación ión de la condición condición de arran arran ue solamente solamente en modo modo maestro maestro I2C . SEN: Bit de habilitac 1 = Inicia la condición de arran ue en las atillas SDA SCL. Se borra automáticamente or hardware. 0 = Detenida Detenida la condición condición de de arran ue.
Nota:
Para los bits ACKEN RCEN PEN RSEN SEN: Si el módulo I2C no está en modo modo detención detención estos bits no ueden ro ramarse ramarse el SSPBUF no uede escribirse. escribirse.
Microcontrolador PIC16F876
9.1
Página 51
Modo SPI
El modo SPI permite que 8 bits de datos sean, simultáneamente, transmitidos y recibidos. Están desarrollados los cuatro modos de SPI. Para llevar a cabo la comunicación, 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: •
Selección 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 permitirán lo l o 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 selección de servidor (solamente en modo servidor). La figura 9-1 muestra el diagrama a bloques del módulos 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 bi bit SSP SPEN EN,, rein reinic icia iali liza zarr el regis egistr troo SSPCON, y, entonces, activar el bit SSPEN. Esto configura las patillas SDI, SDO, SCK y SS como patillas de puerto serie. Para que que las las patil atilla lass se comp compor ortten como como funciones de puerto serie, hay que tener debi debida dame ment ntee prog progra rama mado doss los los bits bits de dirección de puerto (registro TRIS). O sea:
• • • • •
datos (TRIS) con el valor opuesto.
SDI se contro controla la automát automática icamen mente te por el módulo SPI. SDO debe tener borrado TRISC<5>. SCK SCK (mod (modoo maes maestro tro)) debe debe tene tener r borrado TRISC<3>. SCK (modo servidor) debe tener en 1 el bit TRISC<3>. tener activado SS debe TRISA<5>.
Cualquier función de puerto serie no deseada debe anularse programando el correspondiente registro de dirección de
Microcontrolador PIC16F876 9.1.1
Página 52
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, cuándo 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 módulo SPI está preparado solamente para recibir, la salida SDO estará inhibida (programada como entrada). El registro SSPSR continuará el desplazamiento con la señal presente en la patilla SDI a la velocidad de reloj programada. Cuando el byte se recibe, se cargará en el registro SSPBUF como una recepción normal de byte (se activará la interrupción 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 4T CY).
•
Fosc/64 (o 16T CY).
•
(SalidaTimer2) : 2.
Esto permitirá una frecuencia máxima 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 válido antes del flanco de reloj en SCK. El cambio en la captura de entrada se muestra basándose en el estado del bit SMP. Se aprecia el instante en que se carga el registro SSPBUF con el dato recibido.
9.1.2
MODO SE SERVIDOR
Microcontrolador PIC16F876
Página 53
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 interrupción 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 mínimo de tiempo en alto y bajo, tal y como indican las características eléctricas. En modo SLEEP, el servidor puede transmitir y recibir datos. Cuando se recibe un byte, el dispositivo abandonará el estado SLEEP. Nota: Cuan Cuando do el mó módu dulo lo SPI SPI está está en mo modo do serv servid idor or con con la pati patill llaa SS habilitada (SSPCON<3:0> = 0100), el módulo SPI inicializará si la patilla SS se coloca a V DD. Nota: Si el módulo SPI se usa en modo servidor con CKE = 1, la patilla de control SS debe habilitarse.
TABLA 9-1:
REGISTROS ASOCIADOS A LA OPERACIÓN SPI
Microcontrolador PIC16F876
Página 54
Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
Valor tras Valor tras POR,BOR otros resets
0Bh, 0Bh, 8Bh, 8Bh, INTCON 10Bh, 18Bh
GIE
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0 00 0 0 0 0x
0000 000u
Dir.
0Ch
PIR1
PSPIF(1) ADIF
RCIF
TXIF
SSPIF
CCP1IF TMR2IF TMR1IF
000 0 00 00
0000 0000
8Ch
PIE1
PSPIE(1) ADIE
RCIE
TXIE
SSPIE
CCP1IE TMR2IE TMR1IE 0000 00 0000
0000 00 0000
13 h
SSPBUF Registro de recepción y transmisión del Puerto Serie Síncrono
14 h
SSPCON
94 h
SSPSTAT
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SMP
CKE
D/-A
P
S
R/-W
xxx x xx xx
uuuu uuuu
SSPM1
SSPM0
000 0 00 00
0000 0000
UA
BF
000 0 00 0 0
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
Operación del módulo MSSP en modo I2C
El módulo MSSP en modo I 2C 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 stop para para determ determina inarr la dispon disponibi ibilid lidad ad del bus bus (funci (función ón mul multiti-mas master ter). ). El módulo módulo MSSP MSSP implementa implementa las especificacio especificaciones nes de modo estándar, estándar, así como direccionam direccionamiento iento 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 están 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 actúa como reloj, y la patilla SDA, que es el dato. Estas patillas se configuran automáticamente cuando se habilita el modo I2C. Las funciones del módulo SSP se habilitan activando SSPEN (SSPCON<5>). El módulo MSSP tiene seis registros para la operación I2C, que son:
• • • • • •
Registro de Control SSP (SSPCON). Registro2 de Control SSP (SSPCON2). Registro de Estado (SSPSTAT). Buffer de transmisión-recepción serie (SSPBUF). Registro de Desplaz lazamie miento (SSPSR). No es accesible directamente. Registro de dirección SSP (SSPADD).
El registro SSPCON permite el control de la operación I2C. Cuatro bits de selección de modo (SSPCON<3:0>) permiten seleccionar uno de los siguientes modos I 2C:
Microcontrolador PIC16F876
Página 55
• Modo servidor I 2C (dirección de 7 bits). • Modo servidor I 2C (dirección de 10 bits). • Modo maestro I 2C, reloj = OSC/4 (SSPADD + 1).
Antes de seleccionar cualquier modo I 2C, las patillas SCL y SDA deben programarse como entrad entradas, as, activando activando los bits bits apropi apropiado adoss del regist registro ro TRIS. TRIS. Al selecc seleccion ionar ar un modo modo I 2C, programando el bit SSPEN, se habilitan las patillas SCL y SDA para ser usadas como líneas de reloj y datos, respectivamente, en modo I 2C. 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 responderán a las especificaciones de I 2C. El registro SSPSTAT contiene el estado de la transferencia. Esta información incluye: la detección detección de los bits de Start (S) o Stop (P), la especificación especificación de si el byte recibido fue dato o dirección, y si es esta última, si el próximo byte es el resto de la dirección 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 recepción, SSPBUF y SSPSR crean un doble buffer receptor. Esto permitirá la recepción del próximo 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 algún 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 leído. El registro SSPADD mantiene la dirección del servidor. En modo de 10 bits de dirección, el usuario usuario necesita escribir escribir el byte alto de la dirección dirección (1111 0-A9-A8-0) 0-A9-A8-0).. A continuación continuación,, es necesario cargar el byte bajo de la dirección (A7:A0). 9.2.1
MODO SE SERVIDOR
En este modo, las patillas SCL y SDA deben configurarse como entradas. El módulo MSSP sustituirá el estado de la entrada con el dato de salida cuando se necesite (servidor-transmisor). (servidor-transmisor). Cuando una dirección es reconocida, o se recibe un dato después de reconocer una dirección, la circuitería 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 módulo MSSP no producirá el pulso
AC K
, y son:
a) El bit de buffer buffer lleno lleno BF (SSPSAT< (SSPSAT<0>) 0>) se activó activó antes antes de que la transf transfere erenci nciaa fuese recibida. b) El bit de desbord desbordamien amiento to SSPOV SSPOV (SSPCON<6 (SSPCON<6>) >) se activó activó antes de que que fuese fuese recibida 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 condición de desbordamiento. El bit indicador BF se borra leyendo el registro SSPBUF, mientras que el borrado de SSPOV será por software.
Microcontrolador PIC16F876
Página 56
La entrada de reloj SCL debe tener un mínimo de duración, tanto en alto como en bajo, para una correcta operación. Los tiempos de alto y bajo de las especificaciones de I 2C, así como los requisitos del módulo MSSP, se muestran en las especificaciones eléctricas. 9.2.1. 9.2.1.11 DIRECC DIRECCION IONAMI AMIENT ENTO O Cada vez que el módulo MSSP ha sido habilitado, espera a que ocurra una condición 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 línea de reloj SCL. El valor del registro SSPSR<7:1> se compara con el valor del registro SSPADD. La dirección se compara en el flanco de bajada del octavo pulso de reloj en SCL. Si la dirección se reconoce y los bits BF y SSPOV están borrados, se suceden las siguientes operaciones: a) El valor valor del registro registro SSPSR SSPSR se se carga en en SSPBUF SSPBUF en el flanco flanco de bajada bajada del del octavo octavo pulso pulso de SCL. b) El bit BF (buffer (buffer lleno) lleno) se activa activa en la bajada bajada de reloj reloj del octavo octavo pulso pulso en SCL. SCL. c) Se genera un pulso de reconocimiento
AC K
.
d) El bit indicado indicadorr de interr interrupc upción ión SSPIF SSPIF (PIR1<3 (PIR1<3>) >) se activa en el flanco flanco de bajada bajada del noveno pulso en SCL. Se producirá interrupción, si estuviese est uviese habilitada. En modo de dirección a 10 bits, se necesitan dos bytes para recibir la dirección por el servidor. Los cinco bits de mayor peso del primer byte de dirección, especifican si es una dirección a 10 bits. El bit R / W (SPSAT<2>) indicará una escritura sobre el dispositivo servidor que recibirá el segundo byte de dirección. Para una dirección de 10 bits, el primer byte debe ser igual a “1111 0-A9-A8-0”, donde A9 y A8 son son los dos bits de mayor peso de la dirección de 10 bits. La secuencia de operaciones para una dirección a 10 bits es la siguiente, con los pasos 7 a 9 para servidor transmisor: 1. Rece Recepc pció iónn del del prim primer er byte byte (más (más peso peso)) de la direc irecci ción ón (bits (bits SSPI SSPIF, F, BF y UA (SSPSTAT<1>) están activados). 2. Actuali Actualizac zación ión del regist registro ro SSPADD SSPADD con el segundo segundo byte (menos (menos peso) peso) de la direcc dirección ión (borra bit UA y libera la línea SCL). 3. Lectura Lectura del registro registro SSPBU SSPBUF F (borra (borra bit BF) BF) y borrado borrado del bit bit indicador indicador SSPIF SSPIF.. 4. Recepción Recepción el segund segundoo byte (bajo) (bajo) de la dirección dirección (se activan activan los los bits SSPIF, SSPIF, BF y UA). UA). 5. Actualiza Actualiza del registro registro SSPA SSPADD DD con el primer primer byte byte (alto) de de la dirección. dirección. Esto Esto borrará borrará el bit UA y liberará la línea SCL. 6. Lectura Lectura del regist registro ro SSPBUF SSPBUF (borra (borra bit BF) BF) y borrado borrado del del bit SSPIF SSPIF.. 7. Recepc Recepción ión de la condi condición ción de de Repetic Repetición ión de Arran Arranque que.. 8. Recepción Recepción del del primer byte (alto) (alto) de la dirección dirección (se (se activan los bits bits SSPIF SSPIF y BF). BF). 9. Lectura Lectura del registro registro SSPBU SSPBUF F (se borra borra el bit bit BF) y borrado borrado del del bit indicador indicador SSPIF. SSPIF. Nota: A continuación de la condición de Repetición de Arranque (paso 7) en modo 10 bits, el usuario sólo necesita encontrar los primeros 7 bits de la dirección, y no actualizará SSPADD para la segunda mitad de la dirección.
9.2. 9.2.1. 1.22 RECE RECEPC PCIÓ IÓN N SERV SERVID IDOR OR
Microcontrolador PIC16F876
Página 57
Cuando el bit R / W del byte de direcc dirección ión está borrad borradoo y sucede sucede el recono reconocim cimien iento to de dirección, el bit R / W del registro SSPSTAT se borra. La dirección recibida se carga en el registro SSPBUF. Cuan Cuando do exis existe te la cond condic ició iónn de byte byte de dire direcc cció iónn con con desb desbor orda dami mien ento to,, el puls pulsoo de reconocimiento ACK no se produce. Entonces se define una condición de desbordamiento, dada por el 1 del bit BF (SSPSTAT<0>) y el 1 del bit SSPOV (SSPCON<6>). Se generará una interrupción 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 próxima recepción, ACK no se envía y el SSPBUF se cambia. Tabla 9-2 ACCIONES DE BYTE RECIBIDO EN LA TRANSFERENCIA DE DATO Bits de estado tal y como se SSPSR Activación del bit SSPIF (Sucede la recibe la transferencia transferencia S Generación de interrupción SSP si está habilitada) S pulso ACK BF SSPOV P 0 0 Sí Sí Sí 1 0 No No Sí 1 1 No No Sí 0 1 Sí No Sí Nota 1: Las celdas sombreadas muestran las condiciones donde el software del usuario no realizó adecuadamente el borrado de la condición de desbordamiento.
9.2.1.3
TRANSMISIÓN SERVIDOR
Cuando el bit R / W del byte de la dirección entrante está activado y sucede un reconocimiento de dirección, el bit R / W del registro SSPSTAT se activa. La dirección 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, alargándose el reloj. Los ocho bits de datos se desplazarán hacia fuera en el flanco de bajada de la entrada en SCL. Esto asegura que la señal SDA es válida durante el tiempo en alto de SCL (Figura 9-7). Se generará una interrupción 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
Página 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 línea SDA está en alto ( no se memoriza por el AC K ), la transferencia del dato es completa. Cuando el no AC K servidor, la lógica de éste se inicializa y el servidor espera otra aparición del bit de arranque (start). Si la línea 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. 9.2.22
SOPO SO PORT RTE E DE LA LA DIRE DIRECC CCIÓ IÓN N DE LLAM LLAMAD ADA A GENE GENERA RAL L
El procedimiento de direccionamiento por el bus I 2C es de tal manera que el primer byte después de la condición de START determina qué dispositivo será el servidor seleccionado por el maestro. La excepción es la dirección de llamada general, que puede seleccionar todos los dispositivos. Cuando se usa esta dirección, todos los dispositivos deben, en teoría, responder con un reconocimiento. La direcc dirección ión de llamada llamada genera generall es una de ocho ocho direcc direccion iones es reserv reservada adass para para propue propuesta stass 2 específicas por el protocolo I C. Consiste en todo ceros, con R / W también a 0. La dirección de llamada general se reconoce cuando el bit de habilitación de llamada general (GCE (GCEN) N) se habi habili lita ta (SSP (SSPCO CON2 N2<7 <7> > = 1). 1). Si Sigu guie iend ndoo a la detec detecció ciónn del del bit de star start, t, se desplazarán 8 bits en SSPSR, y la dirección se compara con la de SSPADD. También se compara con la dirección de llamada general fijada por hardware.
Microcontrolador PIC16F876
Página 59
Si la dirección 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 interrupción, la procedencia de la interrupción puede chequearse leyendo el contenido de SSPBUF para determinar si la dirección fue específica del dispositivo o fue una dirección de llamada general. En modo 10-bit, el SSPADD se necesita para ser actualizado por la segunda mitad de la dirección a reconocer, y el bit UA debe activarse (SSPSTAT<1>). Si se captura una dirección de llamada general cuando GCEN está activo y el servidor está configurado en modo dirección 10-bit, la segunda mitad de la dirección no es necesaria, el bit UA no se activará, y el servidor empezará recibiendo un dato después del reconocimiento (Figura 9-8).
9.2. 9.2.33
OPER OP ERAC ACIÓ IÓN N SLE SLEEP EP (ALE (ALERT RTA) A)
Aunque el dispositivo esté en modo SLEEP, el módulo I 2C puede recibir datos o direcciones direcciones.. Cuando ocurra la transferencia de un byte completo, o dirección reconocida, se saca al procesador del estado sleep (si está habilitada la interrupción SSP). 9.2.4 .2.4
EFEC EFECTO TO DE UN RESET ESET
Un reset inhibe al módulo SSP y determina la transferencia actual.
Microcontrolador PIC16F876 TABLA 9-3: Dir.
Nombre
Página 60
REGISTROS ASOCIADOS A LA OPERACIÓN I2C Bit7
Bit6
0Bh, 8Bh, INTCON GIE PEIE 10Bh, 18Bh 0Ch PIR1 PSPIF(1) ADIF
Bit5
T0IE
Bit4
INTE
Bit3
RBIE
Bit2
Bit1
T0IF
INTF
Bit0
RBIF
Valor tras POR, BOR
Valor tras otros resets
0000 0000 000x 000x
0000 0000 000u 000u
RCIF
TXIF
SSPIF
CCP1IF
0000 0000 0000 0000 0000 0000 0000 TMR2IF TMR1IF 0000 0000 0000 0000 0000 0000 0000 0000 TMR2IE TMR1IE 0000
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
0D h
PIR2
---
(2)
---
EEIF
BCLIF
---
---
CCP2IF
-r-0 0--0
-r-0 0—0
8D h
PIE2
---
(2)
---
EEIE
BCLIE
---
---
CCP2IE
-r-0 0--0
-r-0 0—0
xxxx xxxx xxxx xxxx
uuuu uuuu uuuu uuuu
13h
SS SSPB PBUF UF Regi Regist stro ro de rec recepc epció iónn y tran transm smis isió iónn del Pue Puert rtoo Seri Seriee Síncr Síncrono ono
14 h
SSPCON WCOL
91 h
SSPCON2 GCEN ACKSTAT ACKDT ACKEN
94 h
SSPSTAT
SMP
SSPOV
CKE
SSPEN
D/-A
CKP
P
SSPM3
SSPM2
SSPM1
SSPM0
0000 0000 0000 0000
0000 0000 0000 0000
RCEN
PEN
RSEN
SEN
0000 0000 0000 0000
0000 0000 0000 0000
S
R/-W
UA
BF
0000 0000 0000 0000
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 I 2C. Nota 1: Estos bits se reservan en los dispositivos de 28 patillas; se deben mantener siempre a 0.
9.2.5
MODO MAESTRO
La operación del modo maestro está dirigida por la generación de interrupción en la detección de las condiciones de START y STOP. Los bits de STOP (P) y START (S) se borran con un reset o cuando el módulo MSSP está inhibido. El control del bus I 2C 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 líneas SCL y SDA son manipuladas por el hardware de MSSP. Los siguientes acontecimientos provocarán la activación del bit SSPIF, indicador de interrupción de SSP, si la interrupción SSP está habilitada:
• • • • • 9.2.6 .2.6
Condición de START. Condición de STOP. Byte de transferencia de datos transmitido-recibido. t ransmitido-recibido. Transmisión de reconocimiento. Repetición de arranque. MODO MODO MULT MULTII-MA MAES ESTR TRO O
En modo multi-maestro, la generación de la interrupción en la detección de las condiciones de START y STOP permite la detección de la disponibilidad del bus. Los bits de STOP (P) y START (S) se borran con un reset, o cuando se inhibe el módulo MSSP. El control del bus I 2C 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 interrupción SSP se generará una interrupción cuando llegue una condición de STOP.
Microcontrolador PIC16F876
Página 61
En operaciones multi-maestro, la línea SDA será chequeada para decidir si el nivel en la señal 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 decisión, serán:
• • • • • 9.2.7
Transferencia de dirección. Transferencia de dato. Condición de Start. Condición de repetición de Start. Condición de reconocimiento. SOPORTE EN MODO I2C
El modo maestro se habilita, activando y borrando los bits apropiados SSPM, en el registro SSPCON, y activando el bit SSPEN. Una vez que se habilita el modo maestro, el usuario tiene seis opciones: -
-
Conf Confir irma marr una una cond condic ició iónn sta start rt en en SSDA DA y SCL. SCL. Confir Confirmar mar una una cond condici ición ón de repetic repetición ión de de start start en SDA y SCL. SCL. Escribir Escribir en el registro registro SSPBU SSPBUF, F, iniciand iniciandoo así así una una transmisi transmisión ón de de dato dato o dirección. dirección. Gene Genera rarr una una cond condic ició iónn de stop stop en SD SDA A y SCL SCL.. 2 Configurar el puerto I C para recibir dato. Generar Generar una una condición condición de recono reconocimien cimiento to al final de la la recepción recepción del byte byte de de datos. datos.
Nota: El módulo MSSP, cuando se configura en modo maestro I 2C, no permite colas de espera de sucesos. Por ejemplo, el usuario no puede iniciar una condición de start e, inmediatamente, escribir el registro SSPBUF para iniciar una transmisión antes de completar la condición 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. 9.2.7.1 OPERACIÓN EN MODO MAESTRO I 2C
El dispositivo maestro genera toda una serie de impulsos de reloj y las condiciones de START y STOP. Se finaliza una transferencia, con la condición de STOP o con la condición de repetición de Start. Como quiera que la condición de Repetición de Start es también el comienzo de la próxima serie transferida, el bus I 2C 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 dirección 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. Después de transmitir cada byte, se recibe un bit de reconocimiento. Se envían 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 dirección del servidor del dispositivo transmisor (7 bits) y el bit R / W . En este caso, este bit deberá tener valor lógico 1. Por esto, el primer byte transmitido es una dirección de servidor de 7 bits, seguido de un “1” que indica bit de recepción. El dato serie se recibe vía SDA, y el reloj serie, por SCL. El dato serie de 8 bits se recibe simultáneamente al reloj. Tras la recepción de cada byte, se transmite un bit de reconocimiento. Las condiciones START y STOP indican el inicio y el final de la transmisión.
Microcontrolador PIC16F876
Página 62
El generador de velocidad de transmisión (generador de baudios) utilizado para operación en modo SPI, es ahora usado para programar la frecuencia de reloj de SCL, para 100 Khz., 400 Khz. o 1 Mhz , en operación I 2C. El generador de baudios recarga el valor contenido en los 7 bit bitss de meno menoss peso peso del regi regist stro ro SSPA SSPADD DD.. El gene genera rado dorr de baud baudio ioss come comenz nzar ará, á, automá automátic ticamen amente, te, contand contandoo con una escrit escritura ura en SSP SSPBUF BUF.. Una vez que la operac operación ión se completa (p.e. transmisión del último bit de datos seguido por ACK), el reloj interno detiene automáticamente la cuenta, y la patilla SCL permanece en su último estado. Una secuencia secuencia así:
típica de transmisió transmisiónn será
a) El
(SEN)
b) b) Se
c) d) e) f) g) h) i) j) k) l) 9.2.8 .2.8
usuario genera la Condición de Start activando el bit de habili habilitaci tación ón de START START en SSPCON2. acti activa va SSPI SSPIF. F. El mó módu dulo lo esperará el tiempo necesa necesario rio de start start antes antes
de que se produzca otra operación cualquiera. El usuario usuario carga SSPBUF SSPBUF con con la dirección dirección a transmi transmitir. tir. La dirección dirección se desplaza desplaza fuera fuera de la patilla patilla SDA hasta hasta que son transmi transmitidos tidos los 8 bits. bits. El módulo módulo MSSP da entrada entrada al al bit ACK provenie proveniente nte del disposit dispositivo ivo servidor servidor y escribe escribe este valor en el registro SSPCON2 (SSPCON2<6>). El módulo módulo genera genera una interrup interrupción, ción, al al final del del noveno noveno ciclo de reloj, reloj, activando activando SSPIF SSPIF.. El usuario usuario carga carga el el registro registro SSPBUF SSPBUF con con los 8 bits de datos. datos. El dato se se desplaza desplaza fuera fuera de la patilla patilla SDA SDA hasta la la transmisión transmisión completa completa de los 8 bits. El módulo módulo MSSP MSSP da entrada entrada al al bit ACK, ACK, provenien proveniente te del dispos dispositivo itivo servido servidor, r, y escribe escribe este valor en el registro SSPCON2 (SSPCON2<6>). El módulo módulo genera genera una una interrupc interrupción ión al final final del del noveno noveno ciclo ciclo de reloj, reloj, activan activando do SSPIF. SSPIF. El usuario usuario genera genera una condic condición ión de STOP activan activando do el bit de habili habilitac tación ión de STOP (PEN) en el registro SSPCON2. La interrup interrupción ción se se genera genera cada cada vez vez que se completa completa la condición condición de STOP. STOP. GENE GENERA RADO DOR R DE DE BAU BAUDI DIOS OS
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 atrás de BRG 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 instrucción (T CY), en los relojes Q2 y Q4. En modo I 2C, el contador BRG se recarga automáticamente. Si se produce arbitraje de reloj, por ejemplo, el BRG se recargará cuando la patilla SCL se vea en alto (Figura 9-11).
Microcontrolador PIC16F876
9.2.9
Página 63
OSCILOGRAMAS DE LA CONDICIÓN DE START EN MODO MAESTRO I 2C
Para iniciar una condición START, se activará el bit SEN, que habilita la condición de start, registro SSPCON2<0>. Si las patillas SDA y SCL están 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 están en 1 cuando el generador de baudios termina (T BRG), la patilla SDA se pone a 0. La acción de SDA, siendo puesta a 0 cuando SCL está a 1, es la condición de START, y hace que el bit S se active (SSPSTAT<3> = 1). Después de esto, el generador de baudios se recarga con el contenido del registro SSPADD<6:0> y continúa su contaje decremental. Cuando el generador termina la cuenta (T BRG), el bit SEN (SSPCON2 (SSPCON2<0> <0>)) se borrar borraráá automá automática ticamen mente te por el hardware. El generador de baudios se detiene, dejando la línea SDA a nivel bajo y completando la condición de START.
Nota: Si al comienzo de la condición de START, las patillas SDA y SCL estaban ya en 0, o si durante la condición de START la línea SCL se ve baja antes que la línea SDA, ocurre un conflicto de bus. En este caso, se activa el indicador de conflicto de bus BCLIF, se suspende la condición de START, y el módulo I 2C se inicializa en su estado IDLE. 9.2.9. 9.2.9.11 INDICA INDICADOR DOR DE ESTADO ESTADO WCOL WCOL Si el usuario escribe el registro SSPBUF cuando está desarrollándose 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 condición de START se complete.
Microcontrolador PIC16F876
9.2.10
Página 64
OSCILOGRAMAS DE LA CONDICIÓN DE REPETICIÓN DE START, EN MODO MAESTRO I2C
Estamos ante una condición de Repetición de Start cuando el bit RSEN (SSPCON2<1>) se pone en 1 y el módulo I 2C 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 contenido de SSPA SSPADD<6:0 DD<6:0> > y comienza la cuenta. SDA y SCL deben verse en alto en un tiempo T BRG. Esta acción se sigue con la afirmación de la patilla SDA (SDA en bajo) por un tiempo TBRG, mientras SCL está alta. A continuación de esto, el bit RSEN del registro SSPCON2 se borrará automáticamente y el generador de baudios no se recargará, dejando la patilla SDA en bajo. Tan pronto como se detecta la condición 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á desarrollándose, no se actualizará. Nota 2: Sucede un conflicto de bus, durante la condición de Repetición 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 continuación de la puesta a 1 de SSPIF, el usuario puede escribir el SSPBUF con los 7 bits de la dirección, en modo 7 bits, o la primera dirección prefijada en modo 10-bit. Después de que se transmitan los primeros 8 bits, y se ha recibido ACK, el usuario puede, entonces, transmitir ocho bits adicionales de dirección (en modo 10-bit), u ocho bits de datos (en modo 7-bit). 9.2.10.1INDICADOR DE ESTADO WCOL Si el usuario escribe el SSPBUF cuando una secuencia de Repetición 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 condición de Repetición de Start.
Microcontrolador PIC16F876
Página 65
9.2.11 TRANSMISIÓN EN MODO MAESTRO I 2C
La transmisión transmisión de un byte de datos, datos, una dirección dirección de 7 bits o cualquiera cualquiera de las dos mitades de una dirección de 10 bits, se consigue con una simple escritura del valor en el registro SSPBUF. Esta acción activará el bit BF y llevará al generador de baudios a comenzar la cuenta y arrancar la próxima transmisión. Cada bit de dirección-dato será desplazado fuera de la patilla SDA después de la estabilización del flanco de bajada del reloj de SCL. Esta señal se mantendrá baja durante una vuelta de contaje (T BRG) del generador de baudios. El dato será válido 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 añadir el T HOLD (que marcan las especificaciones eléctricas) después del próximo flanco de bajada bajada de SCL. Después Después 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 dirección 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. Después del noveno reloj, SSPIF se activa y el reloj maestro (generador de baudios) se suspende hasta que se cargue el próximo byte de datos en SSPBUF, dejando SCL baja y SDA sin cambio (Figura 914). Después de la escritura de SSPBUF, cada bit de la dirección será desplazado fuera en el flanco de bajada de SCL hasta completar los siete bits de dirección y el bit R / W . En el octavo flanco de bajada bajada,, el maestr maestroo libera liberará rá la patilla patilla SDA permiti permitiend endoo al servid servidor or respon responder der con un reconocimiento. En el noveno flanco de bajada, el maestro chequeará la patilla SDA para ver si la dirección fue reconocida por el servidor. El estado del bit ACK se carga en el bit de estado ACKSTAT (SSPCON2<6>). Después de que en el noveno reloj se transmita la dirección, SSPIF se activa, el indicador BF se borra, y el generador de baudios se desconecta hasta que otra escritura sobre SSPBUF tenga lugar, manteniendo SCL baja y llevando SDA a alta impedancia (desconexión). 9.2.11.1INDICADOR DE ESTADO BF En modo transmisión, 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.2INDICADOR DE ESTADO WCOL
Microcontrolador PIC16F876
Página 66
Si el usuario escribe el SSPBUF cuando una transmisión todavía está en desarrollo (aún 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.3INDICADOR DE ESTADO ACKSTAT En modo transmisión, 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 ( = 1). Un servidor envía un reconocimiento cuando reconoce su dirección (incluso una ACK llamada general), o cuando el servidor ha recibido correctamente su dato.
Microcontrolador PIC16F876
Página 67
Microcontrolador PIC16F876
Página 68
9.2.12 RECEPCIÓN EN MODO MAESTRO I 2C
La recepc recepción ión en modo modo maestr maestroo se habili habilita ta progra programan mando do el bit de habilit habilitaci ación ón de modo modo recepción, RCEN (SSPCON2<3>). Nota: El módulo 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. Después del octavo flanco de bajada, el indicador de habilitación de recepción se borra automáticamente, 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 próxima orden. Cuando se lee el buffer SSPBUF por la CPU, el indicador BF se borra automáticamente. El usuario puede ahora enviar un bit de reconocimiento, al final de la rece recepc pció ión, n, activ activan ando do el bit bit de habi habilit litac ació iónn de secu secuen enci ciaa de reco recono noci cimi mien ento to ACKE ACKEN N (SSPCON2<4>). 9.2.12.1INDICADOR BF DE ESTADO En operaciones de recepción, BF se activa cuando un byte de dirección o dato se carga en SSPBUF desde SSPSR. Se borra cuando se lee SSPBUF. 9.2.12.2INDICADOR SSPOV DE ESTADO En operaciones de recepción, SSPOV se activa cuando se han recibido los 8 bits en SSPSR y el indicador BF está activado por una recepción previa. 9.2.12.3INDICADOR WCOL DE ESTADO Si el usuario escribe SSPBUF cuando una recepción está desarrollándose, WCOL se activa y el contenido del buffer no cambia (no se realiza la escritura).
Microcontrolador PIC16F876
Página 69
Microcontrolador PIC16F876
Página 70
9.2.13 9.2.13 OSCILOGRAMA OSCILOGRAMA DE LA SECUENCIA SECUENCIA DE RECONOC RECONOCIMIENT IMIENTO O Para habilitar una secuencia de reconocimiento hay que activar el bit ACKEN (SSPCON2<4>), de habilitación 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 continuación, el bit ACKEN se borra automáticamente, el generador de baudios se desconecta y el módulo SSP va al modo desconectado (Figura 9-16).
9.21 9.213. 3.11 INDI INDICA CADOR DOR WCO WCOL L DE ESTA ESTADO DO 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 9.2.14 OSCILO OSCILOGRA GRAMA MA DE LA COND CONDICI ICIÓN ÓN DE STOP STOP Un bit de stop se asegura en la patilla SDA, al final de la recepción-transmisión, programando el bit PEN (SSPCON2<2>) de habilitación de la secuencia de Stop. Al final de la recepcióntransmisión, la línea SCL se mantiene baja después del noveno flanco de bajada. Cuando el bit PEN se programa a 1, el maestro asegurará el nivel bajo de la línea SDA. Al verse en bajo la línea 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 después (T BRG) 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 después, el bit PEN se borra y el bit SSPIF se activa (Figura 9-17). Siempre Siempre que el microprograma microprograma decide tomar el control control del bus, él primero 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
Página 71
9.2.14.1INDICADOR DE ESTADO WCOL Si el usuario escribe SSPBUF cuando está desarrollándose una secuencia de STOP, el bit WCOL se activa, y el contenido del buffer no cambia (se pierde la escritura).
9.2. 9.2.15 15 ARBI ARBITR TRAJ AJE E DEL REL RELOJ OJ El arbitraje del reloj sucede cuando el maestro, durante una recepción, transmite, o repite condición 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 real realme ment ntee a nive nivell alto alto.. Cuan Cuando do esto esto suce suceda da,, el BRG BRG se reca recarg rgaa con con el cont conten enido ido 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
Página 72
9.2.16 9.2.16 OPERAC OPERACIÓN IÓN SLEEP SLEEP (ALERT (ALERTA) A) Mientras se está en modo sleep, el módulo I 2C puede recibir direcciones o datos, y cuando coincida la dirección o se complete una transferencia de byte, se saca al procesador del estado sleep (si la interrupción SSP está habilitada). 9.2. 9.2.17 17 EFEC EFECTO TOS S DE UN UN RESE RESET T Un reset inhibe al módulo SSP y determina la transferencia actual. 9.2.18 9.2.18 COMUNI COMUNICAC CACIONE IONES S MULTIMULTI-MAE MAESTR STRO, O, CONFLI CONFLICTO CTO DE BUS Y ARBITR ARBITRAJE AJE DE BUS El funcionamiento del modo Multi-Maestro se consigue por arbitraje de bus. Cuando el maestro saca bits de dirección o datos hacia la patilla SDA, el arbitraje se produce cuando el maestro abandona SDA, dejándola flotante (alto). Si en este momento otro maestro coloca un 0 en esta línea, como el dato esperado sobre SDA es un 1 y, se detectará conflicto de bus. El maestro programará el indicador de interrupción por conflicto de bus, BCLIF, e inicializará el puerto I 2C llevándolo al estado desconectado (Figura 9-19).
Si está en desarrollo una transmisión cuando sucede el conflicto de bus, la transmisión se detiene, el bit BF se borra, se liberan las líneas SDA y SCL, y SSPBUF puede volver a escribirse. Cuando se utilice la rutina de servicio de interrupción de conflicto de bus, y esté libre el bus I 2C, el usuario puede continuar la comunicación confirmando una condición Start. Si una condición Start, Repetición de Start, Stop, o Reconocimiento, está en desarrollo cuando sucede el conflicto de bus, la condición se detiene, las líneas 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 interrupción del conflicto de bus, y el bus I 2C está libre, puede continuar la comunicación, asegurando una condición Start. El maestro continuará la supervisión de las patillas SDA y SCL, y si sucede una condición de Stop, se activará el bit SSPIF. Una escritura sobre SSPBUF arrancará la transmisión 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 generación de la interrupción en la detección 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
Página 73
9.2.18.1CONFLICTO DE BUS DURANTE UNA CONDICIÓN DE START Durante una condición de START, un conflicto de bus se produce, si: a) Las líneas líneas SDA SDA y SCL se ven ven en 0 al inicio inicio de la condición condición de START START (Figura (Figura 9-20). 9-20). b) SCL se detecta detecta baja baja antes antes de asegurar asegurar el nivel nivel bajo bajo de SDA (Figura (Figura 9-21). 9-21). Durante una condición 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 condición de START, se
activa el bit indicador indicador BCLIF, BCLIF, y se inicializa el módulo I 2C, quedando en estado desconectado (Figura 9-20). La condición Start comienza con la liberación 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 condición de Start. Si la patilla SDA se lee baja durante este contaje, el generador de baudios se inicializa y la línea 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 razón de que el conflicto de bus no sea un factor, durante la condición de START, es que no pueden pueden dos maestr maestros, os, simult simultáne áneame amente nte,, asegur asegurar ar una condic condición ión de START. START. Por consiguiente, un maestro asegurará siempre la patilla SDA antes que el otro. Esta condición no provoca conflicto de bus, porque los dos maestros estarán autorizados a decidir la primera dirección siguiente a la condición de START. Si la dirección es la misma, la decisión será, permitir continuar con la parte del dato, o condiciones de Repetición de START o STOP.
Microcontrolador PIC16F876
Página 74
Microcontrolador PIC16F876
Página 75
9.2.18.2CONFLICTO DE BUS DURANTE LA CONDICIÓN DE REPETICIÓN DE START. Durante una condición de Repetición de Start, un conflicto de bus sucede si: a) Se observa observa un nivel nivel bajo en SDA SDA cuando cuando SCL va va de bajo bajo a alto. alto. b) SCL se pone pone en 0 antes que se asegu asegure re el 0 en SDA. SDA. Esto indica indicaría ría que otro otro maestr maestroo 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 generador de baudios baudios se recarga recarga y comienza comienza el contaje. 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 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 condición de Repetición de Start. Si al final del tiempo de BRG, el conjunto SDA y SCL están todavía 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 condición de Repetición de Start (Figura 9-23).
Microcontrolador PIC16F876
Página 76
9.2.18.3CONFLICTO DE BUS DURANTE UNA CONDICIÓN DE STOP Durante una condición de Stop, ocurre un conflicto de bus, si: a) Despué Despuéss de que la patilla patilla SDA ha sido sido liberada liberada y puesta puesta en estado estado flotante flotante,, SDA se observa en 0 después del final de la cuenta de BRG. b) Después Después de liberar liberar la patilla patilla SCL, SCL, ésta se se lee en 0 antes antes de que que SDA esté esté en 1. La condición 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
9.3
Página 77
Consider deraciones de conexión ión del bus I2C
Para dispositivos de modo estándar del bus I 2C, los valores de resistores Rp y Rs, Rs, en la Figura 9-27, dependen de los siguientes parámetros:
• Tensión de alimentación. • Capacidad del bus. • Número de dispositivos conectados (corriente de entrada + corriente de fuga). La tensión de alimentación limita el mínimo valor del resistor Rp, debido al mínimo valor especificado de corriente de carga de 3 mA, para una tensión de salida especificada de V OL máx = 0,4V. Por ejemplo, con una tensión de alimentación de V DD = 5V +/- 10%, y una V OL máx = 0,4V para 3 mA, Rpmín
=
(5,5 − 0,4) 0,003
= 1,7 K Ω
VDD en función de Rp se muestra en la Figura 9-27. El margen de ruido deseado de 0,1•V DD para el nivel bajo, limita el máximo valor de Rs. Rs. Opcionalmente se pueden agrupar en e n serie resistores para mejorar la susceptibilidad a las descargas electrostáticas (ESD). La capacidad del bus es la capacidad total del cableado, conectores y patillas. Esta capacidad limita el valor máximo de Rp 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
10.0 10.0
Página 78
TRANSMI TRANSMISOR SOR RECEPT RECEPTOR OR ASÍN ASÍNCRO CRONO NO SÍNC SÍNCRON RONO O UNIV UNIVERSA ERSAL L (USAR (USART) T)
El módulo USART es uno de los dos módulos de E-S serie. (La USART es también conocida como Interface de Comunicaciones Serie (SCI).) La USART puede configurarse como sistema asíncrono “full duplex”, que puede comunicarse con dispositivos periféricos como terminales CRT y ordenadores personales, o puede configurarse como sistema síncrono “half duplex”, que puede comunicarse con periféricos tales como circuitos integrados convertidores A/D y D/A, EEPROMs serie, etc. La USART puede configurarse en los siguientes modos:
• • •
Asíncrono (full duplex). Síncrono-maestro (half duplex). Síncrono-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 módulo USART tiene, también, un multiprocesador de comunicación capaz de usar y detectar 9 bits de dirección. REGI REGISTR STRO O 10-1 10-1:: TXST TXSTA: A: REGI REGIST STRO RO DE CONT CONTRO ROL L Y ESTA ESTADO DO DE TRAN TRANSM SMIS ISIÓ IÓN N (DIRECCIÓN 98h) R/W-0
R/W-0
R/W-0
R/W-0 U-0 R/W-0
CSRC
TX 9
TXEN
SYNC
---
BRGH
R -1
R/W-0
TRMT
T X 9D
bit7
bit0
R = De lectura W = De escritura U = Sin Sin imple impleme ment ntar ar.. Da Da lectura -n = Valor del reset POR
bit 7:
de selec selección ción de ori ori en de de relo relo . CSRC: Bit de Modo Asíncrono Indiferente. Modo Síncrono 1 = Modo Maestro Maestro relo interno interno rocedente rocedente de BRG . 0 = Modo Modo Serv Servidor idor relo relo externo externo .
bit 6:
TX9: Bit de habilitación de transmisión con 9 bits. 1 = Selección de transmisión con 9 bits. 0 = Selección de transmisión con 8 bits.
bit 5:
TXEN: Bit de habilitación de transmisión. 1 = Transmisión habilitada. 0 = Transmisión inhibida. SREN/CREN sustitu sustitu en a TXEN, en modo modo Síncrono. Síncrono. Nota: SREN/CREN
bit 4:
SYNC: Bit de selección de modo USART. 1 = Modo Síncrono. 0 = Modo Asíncrono.
bit 3:
Sin im lement lementar ar:: Se lee como 0.
bit 2:
BRGH: Bit de selección de velocidad de baudios. Modo Asíncrono 1 = Alta velocidad. 0 = Ba a velocidad. velocidad. Modo Síncrono No usado en este modo.
bit 1:
re istro de des lazamiento lazamiento de de transmis transmisión. ión. TRMT: Bit de estado del re 1 = TSR vacío. 0 = TSR lleno.
bit 0:
TX9D: Noveno bit del dato transmitido. Puede ser el bit de aridad.
0 en en
Microcontrolador PIC16F876
Página 79
REGI REGISTR STRO O 10-2 10-2:: RCST RCSTA: A: REGI REGIST STRO RO DE CONT CONTRO ROL L Y ESTA ESTADO DO DE RECE RECEPC PCIÓ IÓN N (DIRECCIÓN 18h) R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R-0
R-0
SPEN
RX9
SREN
CREN
ADDEN FERR OERR RX9D
bit7
R-x bit0
R = De lectura W = De escritura U = Sin implementar. implementar. Da 0 en lectura -n = Valor del reset POR
bit 7:
SPEN: Bit de habilitación de uerto serie. 1 = Puerto Serie habilitado habilitado confi urar RC7/RX/DT RC7/RX/DT RC6/TX/CK RC6/TX/CK como atillas de uerto serie . 0 = Puerto Serie inhibido.
bit 6:
habilitación ión de rece rece ción con con 9 bits. bits. RX9: Bit de habilitac 1 = Selección Selección de rece rece ción con con 9 bits. bits. 0 = Selección Selección de rece rece ción con con 8 bits. bits.
bit 5:
habilit litaci ación ón de de rece rece ción ción sim sim le. SREN: Bit de habi Modo Asíncrono Irrelevante. Modo Maestro Síncrono 1 = Rece Rece ción ción sim sim le hab habil ilit itad ada. a. 0 = Rece Rece ción ción sim sim le inhib inhibid ida. a. Este Este bit se se borra borra cuando cuando se com com leta leta la rece rece ción. ción. Modo Servidor Síncrono No se usa en este modo.
bit 4:
habilitación ión de rece rece ción continua. continua. CREN: Bit de habilitac Modo Asíncrono 1 = Habilita Habilita la rece rece ción continua continua.. 0 = Inhibe Inhibe la rece ción continua continua.. Modo Síncrono 1 = Habil Habilita ita rece rece ción continu continuaa hasta hasta borra borrado do de CREN éste éste sustit sustituu e a SREN SREN . 0 = Inhibe Inhibe la rece ción continua continua..
bit 3:
ADDEN: Bit de habilitación de detección de dirección. Modo Asíncrono de 9 bits RX9 = 1 1 = Habili Habilita ta la la detecc detección ión de la la direcc dirección ión habilit habilitaa la interr interruu ción car a el buffer buffer rece rece tor cuando cuando RSR<8> = 1 0 = Inhibe Inhibe la detección detección de de la dirección dirección todos los b tes se reciben el noveno noveno bit uede usarse como aridad
bit 2:
error or inconco inconcorda rdanci nciaa framin framin . FERR: Bit de error 1 = Error de concordancia concordancia bit STOP=0 . Puede Puede cambiarse cambiarse le endo el re istro RCREG recibiendo recibiendo un róximo b te válido 0 = No existe error.
bit 1:
OERR: Bit de error or desbordamiento. 1 = Error de desbordamiento. Puede borrarse escribiendo 0 en el bit CREN. 0 = No existe error de desbordamiento.
bit 0:
RX9D: Noveno bit del dato recibido. Puede ser el bit de aridad.
Microcontrolador PIC16F876
10.1 10.1
Página 80
Gene Genera rado dorr de baud baudio ioss (B (BRG) RG) de de la la USA USART RT
El BRG sirve a los modos síncrono y asíncrono de la USART. Es un contador de 8 bits, especializado en generar la velocidad de circulación de los bits salientes o entrantes. El registro SPBRG controla el período del temporizador independiente de 8 bits. En modo asíncrono, el bit BRGH (TXSTA<2>) es el encargado de controlar la velocidad; en modo síncrono, este bit se ignora. La tabla 10-1 muestra la fórmula para el cálculo 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 más próximo para SPBRG puede calcularse usando la fórmula en la tabla 10-1, pudiendo, además, 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 ecuación 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 mayoría, que determina el valor alto o bajo del dato presente en la patilla RX. TABLA 10-1: FÓRMULA PARA CALCULAR LA VELOCIDAD SYNC BRGH = 0 (Baja velocidad) BRGH = 1 (Alta velocidad) 0 Velo Veloci cida dadd (Así (Asínc ncro rono no)) = Fos Foscc / [64 [64 • (X + 1)] 1)] Velo Veloci cida dadd = Fos Foscc / [16 [16 • (X + 1)] 1)] 1 Velocidad (Síncrono) = Fosc / [4 • (X + 1)] No utilizado X = valor en SPBRG (0 a 255) TABLA 10-2:
REGISTROS ASOCIADOS AL GENERADOR DE BAUDIOS
Dir. Nombre Bit7
Bit6
Bit5
Bit4
98h TXSTA CSRC TX9 TXEN SYNC
Bit3
Bit1
Bit0
BRGH TRMT TX9D
Valor tras Valor tras POR, BOR otros resets 0000 -010
0000 -010
18h RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x
0000 000x
99h
0000 0000
SPBRG Registro Generador de Baudios
---
Bit2
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en el módulo BRG.
Microcontrolador PIC16F876
Página 81
TABLA 10-3: BAUDIOS EN MODO ASÍNCRONO (BRG = 0) Fosc = 20 Mhz Fosc = 16 Mhz Fosc = 10 Mhz BAUD Valor Valor Valor % % % (K) KBAUD decimal KBAUD decimal KBAUD decimal ERROR ERROR ERROR SPBRG SPBRG SPBRG 0,3 --1,2 1,221 2,4 2,404 9,6 9,766 19,2 19,531 28,8 31,250 33,6 34,722 57,6 62,500 ALTA 1,221 BAJA 312,500
--1,75 0,17 1,73 1,72 8,51 3,34 8,51 -----
--2 55 1 29 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 25 5 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 -----
--1 29 64 15 7 4 4 2 2 55 0
BAUD Fosc = 4 Mhz Fosc = 3,6864 Mhz (K) KBAUD % Valor KBAUD % Valor ERROR decimal ERROR decimal SPBRG SPBRG 0,3 0,300 0 20 7 0,301 0,33 185 1,2 1,202 0,17 51 1,216 1,33 46 2,4 2,404 0,17 25 2,432 1,33 22 9,6 8,929 6,99 6 9,322 2,90 5 19,2 20,833 8,51 2 18,643 2,90 2 28,8 31,250 8,51 1 ------33,6 ------------57,6 62,500 8,51 0 55,930 2,90 0 ALTA 0,244 --255 0,218 --255 TABLA = 1) 0 BAJA 10-4: 62,50BAUDIOS 0 --- EN MODO 0 ASÍNCRONO 55,930 -(BRG -BAUD Fosc = 20 Mhz Fosc = 16 Mhz Fosc = 10 Mhz (K) KBAUD % Valor KBAUD % Valor Valor % ERROR decimal ERROR decimal KBAUD decimal ERROR SPBRG SPBRG SPBRG 0,3 1,2 2,4 9,6 19,2 28,8 33,6 57,6 ALTA BAJA
------9,615 19,231 29,070 33,784 59,524 4,883 1250,00
------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,00
------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
----1,71 0,16 1,72 1,36 2,10 1,36 ---
----255 64 31 21 18 10 255
625 000
---
0
Microcontrolador PIC16F876
Página 82
Fosc = 4 Mhz Fosc = 3,6864 Mhz BAUD Valor Valor % % (K) KBAUD decimal KBAUD decimal ERROR ERROR SPBRG SPBRG 0,3 --1,2 1,202 2,4 2,404 9,6 9,615 19,2 19,231 28,8 27,798 33,6 35,714 57,6 62,500 ALTA 0,977 BAJA 250,000
10.2 10.2
--0,17 0,17 0,16 0,16 3,55 6,29 8,51 -----
--2 07 1 03 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 -----
--18 5 92 22 11 7 6 3 255 0
USAR US ART T en mo modo do Asín Asíncr cron onoo
En este modo, la USART emplea el formato estándar “no retorno a cero” (NRZ) (un bit de start, ocho o nueve bits de datos y un bit de stop). El formato más común 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 pro produ duce ce una una seña señall de relo relojj cada cada x16 x16 o x64 x64 de la velo velocid cidad ad de desp despla laza zami mien ento to de bit, 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 Asíncrono se para durante el estado SLEEP, y se selecciona borrando el bit llamado SYNC (TXSTA<4>). El módulo Asíncrono USART consta de los siguientes elementos importantes:
• • • •
Generador de velocidad de baudios (generador de baudios o BRG). Circuito de captura. Transmisor asíncrono. Receptor asíncrono.
10.2.1 10.2.1 TRANSM TRANSMISO ISOR R ASÍNC ASÍNCRON RONO O USART USART El diagrama a bloques del transmisor USART se muestra en la Figura 10-1. El corazón del transm transmiso isorr es el regist registro ro de despla desplazam zamien iento to de transm transmisió isiónn serie serie (TSR). (TSR). El regist registro ro de desplazamiento obtiene su dato del buffer de transmisión 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
Microcontrolador PIC16F876
Página 83
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 vacío, y el bit indicador TXIF (PIR1<4>) se activa. Esta interrupción puede habilitarse o inhibirse activando o borrando, respectivamente, el bit de habilitación TXIE (PIE1<4>). El bit indicador se activará, independientemente del estado del bit de habilitación 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 señala 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á vacío. Ninguna interrupción está unida a este bit, de manera que el usuario debe consultar este bit para determinar si el registro TSR está vacío. 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 habilitación TXEN. TXIF se borra cargando el registro TXREG. La transmisión se habilita activando el bit de habilitación TXEN (TXSTA<5>). La transmisión 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 transmisión puede detenerse, primero cargando el registro TXREG, y activando después el bit de habilitación TXEN. Normalmente, cuando la transmisión se ha iniciado primero, el registro TSR está vacío. En este punto, transferir al registro TXREG dará como resultado una transferencia inmediata de aquél a TSR, quedando un registro TXREG vacío. Por esto, es posible una transferencia en oposición (back-to-back) (Figura 10-3). El borrado de TXEN durante una transmisión provocará el abandono de ésta y la inicialización del transmisor. Como resultado, la patilla RC6/TX/CK quedará en alta impedancia. Para seleccionar una transmisión 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á vacío). En este caso, se habrá cargado un dato incorrecto de nueve bits en el registro TSR.
Los pasos a seguir para activar una transmisión Asíncrona, son: 1. Inicia Inicializ lizar ar el registro registro SPBRG SPBRG para para la adecua adecuada da cadenci cadenciaa de bits. bits. Si se desea un valor valor alto, activar el bit BRGH. (Sección 10.1) 2. Habilitar Habilitar el puerto puerto serie serie asíncrono asíncrono borran borrando do el bit SYNC SYNC y activand activandoo el bit SPEN. SPEN.
Microcontrolador PIC16F876
Página 84
3. Si se desea interrupció interrupción, n, activar activar el bit bit de habilita habilitación ción TXIE. TABLA 10-5: Dir. Nombre
REGISTROS ASOCIADOS A LA TRANSMISIÓN ASÍNCRONA Bit7
Bit6
Bit5
PSPIF(1) ADIF RCIF
Bit4
OC h
PIR1
18h
RCSTA
19h
TXREG Registro Transmisor USART
SPEN
Bit1
Bit0
Valor tras Valor tras POR, otros BOR resets
0000 -00x
0000 0000
0000 0000
TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000
0000 0000
PIE1
98h
TXSTA
99h
SPBRG Registro Generador de Baudios
TX9 TXEN SYNC
---
---
FERR
BRGH
OERR
TRMT
R X 9D
0000 00 0000
000 0 - 0 0x
8Ch
CSRC
Bit2
TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 00 0 000
RX9 SREN CREN
PSPIE(1) ADIE RCIE
Bit3
TX9D
0 00 0 - 01 0
0000 -010
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en transmisión asíncrona. Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de mantenerse a cero.
4. Si se desea una transmisión transmisión en 9 bits, activar activar el bit bit TX9. TX9. 5. Habilitar Habilitar la transmis transmisión ión activando activando el bit TXEN, TXEN, que también también activará activará el bit TXIF. TXIF. 6. Si se seleccio selecciona na transmis transmisión ión a 9 bits, el el noveno noveno bit se se cargará cargará en TX9D. 7. Cargar Cargar el dato dato en el registro registro TXREG (se inicia inicia la transmis transmisión). ión).
Microcontrolador PIC16F876
Página 85
10.2.2 10.2.2 RECEPT RECEPTOR OR ASÍNCR ASÍNCRONO ONO USART 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 (Recuperación 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 asíncrono, la recepción se habilita activando el bit CREN (RCSTA<4>). El corazón del receptor es el registro de desplazamiento serie de recepción (RSR). Después de la captura del bit de STOP, el dato recibido en el registro RSR se transfiere al registro RCREG (si está vacío). vacío). Si la transfere transferencia ncia se completa, completa, se activa el bit indicador RCIF (PIR1<5>). (PIR1<5>). La interrupción actual puede habilitarse-inhibirse, activando-borrando el bit de habilitación RCIE (PIE1<5>). El bit RCIF es de lectura, y se borrará por hardware. Esto se producirá cuando el registro RCREG se ha leído y queda vacío. El RCREG es un registro de doble buffer (una FIFO de dos posiciones). Por esto es posible, simultáneamente, 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á todavía 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 (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 cargarán 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 Recepción Asíncrona, hay que seguir los pasos siguientes: 1. Inicia Inicializ lizar ar el regist registro ro SPBRG SPBRG con la aprop apropiad iadaa cadencia cadencia.. Si se desea desea alta velocida velocidad, d, poner a 1 el bit BRGH. (Sección 10.1). 2. Habilitar Habilitar el puerto puerto serie serie asíncrono asíncrono,, borrando borrando el bit bit SYNC y activan activando do el bit SPEN. SPEN. 3. Si se dese deseaa interr interrupc upción ión,, activa activarr el bit bit RCIE. RCIE. 4. Si se se desea desea rece recepci pción ón de de 9 bits, bits, acti activar var RX9. RX9. 5. Habili Habilitar tar la la recepc recepción ión,, activan activando do el bit bit CREN. CREN. 6. El indi indica cado dorr RCIF RCIF se activa activará rá cuando cuando se comp comple lete te la rece recepc pció ión. n. Esto genera generará rá una una interrupción, si está activado el bit RCIE. 7. Leer el regist registro ro RCSTA RCSTA para obtener obtener el el valor del del noveno noveno bit (si (si está habili habilitado tado el modo) modo) y determinar si ha existido error durante la recepción. 8. Leer los los 8 bits del del dato dato recibido, recibido, leyendo leyendo el registro registro RCREG. RCREG.
Microcontrolador PIC16F876
Página 86
9. Si ha ocurrido ocurrido algún algún error, error, cancelar cancelar éste borrand borrandoo el bit de habilita habilitación ción CREN. CREN. TABLA 10-6: Dir. Nombre OC h
PIR1
18h
RCSTA
REGISTROS ASOCIADOS A LA RECEPCIÓN ASÍNCRONA Bit7
Bit6
Bit5
PSPIF(1) ADIF RCIF SPEN
Bit4
Bit3
Bit2
Bit1
Bit0
TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 00 0000
RX9 SREN CREN
---
FERR
OERR
RX9D
0000 -00x
0000 0000
0000 0000
TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000
0000 0000
8Ch
PIE1
98h
TXSTA
99h
SPBRG Registro Generador de Baudios
CSRC
0000 00 0000
000 0 - 00x
1Ah RCREG Registro Receptor USART PSPIE(1) ADIE RCIE
Valor tras Valor tras POR, otros BOR resets
TX9 TXEN SYNC
---
BRGH
TRMT
TX9D
0 00 0 - 01 0
0000 -010
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepción asíncrona. Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de mantenerse a cero.
Microcontrolador PIC16F876
Página 87
10.2.3 10.2.3 PROGRAMACIÓ PROGRAMACIÓN N DE MODO 9 BITS CON DETECCI DETECCIÓN ÓN DE DIRECCI DIRECCIÓN ÓN El µ C puede trabajar con varios servidores conectados a la misma línea serie. La forma de seleccionar a uno cualquiera es por el envío de un byte, que será interpretado por el servidor como una dirección identificativa debido a que en el envío de esta dirección el noveno bit estará a 1. Así pues, los receptores deberán programarse inicialmente con recepción de 9 bits y detección de dirección. 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 acción de la puerta AND-3, el byte recibido en RSR se transferirá al registro RCREG. Esto provocará la interrupció interrupciónn de recepción (si estuviese estuviese habilitada) habilitada) y el software software del receptor receptor mirará el registro 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 código de una dirección, y se comparará con el código intrínseco de ese receptor. Si hay coincidencia, se borrará ADDEN para que los próximos 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 interrupción para el receptor, que se limitará a tomar los datos enviados. Como a cada recepción el software receptor comprobará el nivel de RSR<8>, cuando éste sea 1 (porque el transmisor desea enviar dirección), el receptor comprobará que el byte recibido corresponde o no a su dirección intrínseca. Si la dirección recibida es la suya, todo seguirá igual y el receptor tomará los bytes enviados. Si al comprobar el byte de dirección ésta no coincidiese con la suya, el receptor sabe que los próximos envíos 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. (Obsérvese que si ponemos a 1 el bit ADDEN la puerta puerta OR de ceros dará 0 de salida pero la NAND-3 puede puede dar 1, y con ello permitir la entrada del byte a RCREG cuando se reciba un byte de dirección, que tendrá RSR<8> a 1.) Con todo lo explicado se comprende que ahora, el receptor, solamente cargará un byte en RCREG cuando aquél lleve el noveno bit a 1. Cuando esto ocurra, de nuevo se comprobará el byte identificativo de dirección para ver si vuelve a ser seleccionado. Cuando Cuando se progra programe me Recepc Recepción ión Asíncr Asíncrona ona con Habili Habilitac tación ión de Detecci Detección ón de Direcc Dirección ión,, respétense los siguientes pasos: 1. Inicia Inicializ lizar ar el regist registro ro SPBRG SPBRG con la aprop apropiad iadaa cadencia cadencia.. Si se desea desea alta velocida velocidad, d, poner a 1 el bit BRGH. (Sección 10.1). 2. Habilitar Habilitar el puerto puerto serie serie asíncrono asíncrono,, borrando borrando el bit bit SYNC y activan activando do el bit SPEN. SPEN. 3. Si se dese deseaa interr interrupc upción ión,, activa activarr el bit bit RCIE. RCIE. 4. Si se dese deseaa recepc recepción ión de de 9 bits, bits, activa activarr RX9. RX9. 5. Activar Activar ADDEN ADDEN para para habilit habilitar ar la detección detección de la dirección. dirección. 6. Habili Habilitar tar la rece recepci pción ón,, activan activando do el bit bit CREN. CREN. 7. El indicado indicadorr RCIF se activará activará cuando cuando se complet completee la recepc recepción ión.. Esto generar generaráá una interrupción, si está activado el bit RCIE. 8. Leer el registr registroo RCSTA RCSTA para obtener obtener el valor valor del noveno noveno bit bit y determinar determinar si si ha existido existido error durante la recepción. 9. Leer los 8 bits bits del dato dato recibido, recibido, leyendo leyendo el registro registro RCREG. RCREG. Esto Esto permitirá permitirá saber saber si el dispositivo está siendo direccionado. 10. Si ha ocurrido algún algún error, cancelarlo, borrando el bit de de habilitación CREN. 11. 11. Si el dispos dispositiv itivoo ha sido sido direcc direccion ionado ado,, borrar borrar el bit ADDEN para permitir permitir que sean sean leídos los bytes de dato y dirección en el buffer receptor, e interrumpir a la CPU.
Microcontrolador PIC16F876
Página 88
Microcontrolador PIC16F876
Página 89
TABLA 10-7:
REGISTROS ASOCIADOS A LA RECEPCIÓN ASÍNCRONA
Dir. Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
PSPIF(1) ADIF
RCIF
TXIF
SSPIF
OCh
PIR1
18 h
RCSTA
1A h
RCREG Registro Receptor USART
SPEN
RX9
SREN CREN ADDEN
PSPIE(1) ADIE RCIE
8Ch
PIE1
98 h
TXSTA
99 h
SPBRG Registro Generador de Baudios
CSRC
TX 9
TXIE
TXEN SYNC
SSPIE ---
Bit2
Bit1
Bit0
CCP1IF TMR2IF TMR1IF
Valor tras Valor tras POR, BOR otros resets 0000 00 0 00 0
0000 00 0 000
0000 000x
0000 000x
0000 0000
0000 0000
CCP1IE TMR2IE TMR1IE
0000 0000
0000 0000
BRGH
0 00 0 - 0 10
0000 -010
0000 0000
0000 0000
FERR
OERR
TRMT
RX9D
T X 9D
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepción asíncrona. Nota 1: Los bits PSPIE y PSPIF se reservan en los PIC16F873/876; siempre han de mantenerse a cero.
10.3 10.3
USAR US ART T en en mod modoo Mae Maest stro ro Sínc Síncro rono no
En el mo modo do Maest Maestro ro Sí Sínc ncro rono no,, el dato dato se tran transm smit itee en half half-d -dup uple lexx (no (no pued pueden en dars darse, e, simultáneamente, la transmisión y la recepción). Cuando se transmite un dato, la recepción qued quedaa inhib inhibid ida, a, y vice viceve vers rsa. a. El mo modo do Sí Sínc ncro rono no se prog progra rama ma activ activan ando do el bit bit SY SYNC NC (TXSTA<4>). Además, hay que activar el bit de habilitación SPEN (RCSTA<7>) y, por este orden, configurar las patillas RC6/TX/CK y RC7/RX/DT, la línea de reloj CK y la de dato DT. El modo Maestro indica que el procesador transmite el reloj maestro en la línea CK. El modo Maestro se programa activando el bit CSRC (TXSTA<7>).
Microcontrolador PIC16F876
Página 90
10.3.1 10.3.1 TRANSMISIÓN TRANSMISIÓN DE USART USART EN MODO MODO MAESTRO MAESTRO SÍNCRONO SÍNCRONO El diagrama de bloques del transmisor transmisor de la USART se muestra muestra en la Figura 10-6. El corazón corazón del transmisor es el registro de desplazamiento de transmisión 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 vacía, activándose el bit de petición de interrupción TXIF TXIF (PIR1< (PIR1<4>) 4>).. La interru interrupci pción ón puede puede habilit habilitars arsee o inh inhibi ibirse rse,, activa activando ndo o borran borrando, do, 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 lectura, que se activa cuando TSR queda vacío. Ninguna interrupción lógica va unida a este bit; el usuario deberá consultarlo para determinar si TSR está vacío. TSR no pertenece al bloque memoria de registros, por lo que no es utilizable por el usuario. La transmisión se habilita activando el bit TXEN (TXSTA<5>. La transmisión 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 próxima subida de reloj disponible en la línea CK. El dato saliente será estable con el flanco de bajada del reloj síncrono (Figura 10-9). La transmisión 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 están a cero. Activando el bit TXEN arrancará BRG, produ producien ciendo do un reloj reloj de despla desplazam zamien iento to inm inmedi ediata atamen mente. te. Normal Normalmen mente, te, con la primera primera transmisión, el registro TSR está vacío, así que una transferencia sobre TXREG dará como resultado una inmediata transferencia a TSR, quedando vacío el TXREG. Será posible la transferencia en oposición. Borrando el bit TXEN durante la transferencia, se producirá que se cancel la transmisión y se inicialice el transmisor. Las patillas DT y CK volverán al estado de alta impedancia. Si cualquiera de los dos bits CREN o SREN se activan durante la transmisión, ésta se cancela y la patilla DT vuelve al estado de alta impedancia (queda lista para recepción). La patilla CK permanece como salida si el bit CSRC está activo (reloj interno). La lógica de transmisión, 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, después de recibir una única palabra, el bit SREN se borrará y el puerto serie retorna a transmisor, ya que el bit TXEN está todavía activado. La línea DT conmuta inmediatamente desde alta impedancia en modo receptor, a modo transmisor, y arranca la conducción. Para evitar esto, se borrará el bit TXEN. Para seleccionar transmisión con 9 bits, TX9 (TXSTA<6>) se activará y el noveno bit se escribirá escribirá en TX9D (TXSTA<0>). (TXSTA<0>). El noveno noveno bit debe escribirse escribirse antes de escribir 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 vacío), 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 Transmisión Síncrona, son: 1. Inicializar Inicializar el registr registroo SPBRG SPBRG con con la la apropiad apropiadaa cadencia. cadencia. 2. Habilitar Habilitar el puerto puerto serie serie como maestro maestro síncron síncrono, o, programan programando do los bits bits SYNC, SYNC, SPEN y CSRC. 3. Si se desea deseann interru interrupcio pciones nes,, program programar ar el bit TXIE. TXIE. 4. Si se desea transmisió transmisiónn en 9 bits, bits, programar programar el bit TX9.
Microcontrolador PIC16F876
Página 91
5. Habili Habilitar tar la tran transmi smisió siónn activa activando ndo el el bit TXEN. TXEN. 6. Si se ha ha seleccionad seleccionadoo transmisió transmisiónn con 9 bits, cargar cargar el noveno noveno bit en TX9D. TX9D. 7. Arrancar Arrancar la transmisión transmisión cargando cargando el el dato en el registro registro TXREG. TXREG. TABLA 10-8:
REGISTROS ASOCIADOS AL MAESTRO EN TRANSMISIÓN SÍNCRONA
Dir. Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
PSPIF(1) ADIF RCIF
T XI F
SSPIF
OCh
PIR1
18 h
RCSTA
19 h
TXREG Registro Transmisor USART
SPEN
RX9
SREN CREN ADDEN
8Ch
PIE1
PSPIE(1) ADIE RCIE
98 h
TXSTA
99 h
SPBRG Registro Generador de Baudios
CSRC
TX9
TXIE
TXEN SYNC
SSPIE ---
Bit2
Bit1
Bit0
CCP1IF TMR2IF TMR1IF
Valor tras Valor tras POR, BOR otros resets 0000 00 0000
00 0 0 0 000
0000 -00x
0000 -00x
0000 0000
000 0 0 000
CCP1IE TMR2IE TMR1IE 0000 0000
0 00 0 0 00 0
BRGH
0000 -010
0000 -010
0000 0000
0 00 0 0 00 0
FERR
OERR
TRMT
RX9D
T X 9D
x = Desconocido; - = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepción asíncrona. Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; siempre han de mantenerse a cero.
Microcontrolador PIC16F876
10.3 10.3.2 .2
Página 92
USAR US ART T MAES MAESTR TRO O EN RECE RECEPC PCIÓN IÓN SÍNC SÍNCRO RONA NA
Una vez seleccionado el modo síncrono, la recepción 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 recepción será continua hasta el borrado de CREN. Si se han de activar ambos bits, el primero en hacerlo será CREN. Después de la entrada del último bit, el dato recibido en el registro receptor RSR se transferirá al registro RCREG (si está vacío). Cuando se complete la transferencia, se activará el indicador de interrupción RCIF (PIR1<5>). La interrupción actual puede habilitarse o inhibirse, activando o borrando, respectivamente, el bit RCIE (PIE1<5>). El indicador RCIF es sólo de lectura, y se borrará por hardware cuando se lea el registro RCREG y éste quede vacío. El registro RCREG es de doble buffer (una FIFO de dos posiciones). Por esto es posible, simultáneamente, 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á todavía 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
Microcontrolador PIC16F876
Página 93
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 información en RX9D. Los pasos a seguir cuando se programe Maestro M aestro en Recepción Síncrona, son: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Inicia Inicializ lizar ar el regist registro ro SPB SPBRG RG con con la apro apropia piada da cade cadenci ncia. a. (Secc (Sección ión 10.1). 10.1). Habili Habilitar tar el el puerto puerto seri seriee maestr maestroo síncro síncrono no progr programa amando ndo los bits bits SYNC SYNC,, SPEN SPEN y CSRC. CSRC. Aseg Asegur urar ar el borr borrad adoo de los los bits bits CREN CREN y SREN SREN.. Si se dese deseaa int inter erru rupc pción ión,, acti activa varr el el bit bit RCIE RCIE.. Si se dese deseaa rec recep epci ción ón de 9 bit bits, s, activ activar ar RX9. RX9. Si se dese deseaa una recepci recepción, ón, acti activar var el el bit SREN SREN;; para recepc recepción ión cont continu inua, a, activ activar ar CREN. CREN. El indic indicad ador or RCIF RCIF se activ activar aráá cuando cuando se comp comple lete te la recep recepció ción. n. Esto Esto gene genera rará rá una interrupción, si está activado el bit RCIE. Leer Leer el regis registro tro RCST RCSTA A para para tener tener el valor valor del del noveno noveno bit bit (si (si está está habili habilitad tadoo el modo modo)) y determinar si ha existido error durante la recepción. Leer Leer los los 8 bits bits del dato dato reci recibid bido, o, leyend leyendoo el el regi registr stroo RCRE RCREG. G. Si ha ha ocurr ocurrido ido algú algúnn error error,, cancel cancelarl arloo borran borrando do el el bit de habi habilita litación ción CREN. CREN.
TABLA 10-9:
REGISTROS ASOCIADOS AL MAESTRO EN RECEPCIÓN SÍNCRONA Valor tras Valor tras Dir. Nombre Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 POR, otros BOR resets
OC h
PIR1
18h
RCSTA
PSPIF(1) ADIF RCIF SPEN
TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 00 0000
RX9 SREN CREN
---
FERR
OERR
RX9D
000 0 - 00x
0000 -00x
0000 0000
0000 0000
TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000
0000 0000
1Ah RCREG Registro Receptor USART PSPIE(1) ADIE RCIE
8Ch
PIE1
98h
TXSTA
99h
SPBRG Registro Generador de Baudios
CSRC
0000 00 0000
TX9 TXEN SYNC
---
BRGH
TRMT
TX9D
0 00 0 - 01 0
0000 -010
0000 0000
0000 0000
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepción asíncrona. Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; siempre han de mantenerse a cero.
Microcontrolador PIC16F876
10.4
Página 94
USA SART RT SER SERVIDOR EN EN MO MODO SÍ SÍNCRONO
El modo Servidor Síncrono 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 10.4.1 USART EN TRANS TRANSMISIÓN MISIÓN SÍNCRONA SÍNCRONA COMO SERVIDOR SERVIDOR La operativa en modo síncrono maestro y servidor es idéntica, excepto en el caso del estado SLEEP. Si se escriben dos palabras en TXREG, y se ejecuta entonces una instrucción SLEEP, ocurrirá lo siguiente: a) b) c) d)
La primera primera palabra palabra será será inmediatamen inmediatamente te transferida transferida al al registro registro TSR y transmitida. transmitida. La segunda segunda palabra palabra permanece permanecerá rá en el registro registro TXREG. TXREG. El bit bit indi indicad cador or TXIF TXIF no se se activ activará ará.. Cuan Cuando do la prim primer eraa pala palabr braa haya haya sali salida da de TSR, TSR, el regi regist stro ro TXRE TXREG G tran transf sfer erir iráá la segunda palabra al TSR, y el bit TXIF se activará por primera vez. e) Si el bit de habilitac habilitación ión TXIE TXIE está activad activado, o, la interrup interrupció ciónn saca el chip del estado estado SLEEP, y si las interrupciones globales están habilitadas, el programa saltará al vector de interrupción 0004h.
Los pasos a seguir para programar una Transmisión Síncrona como Servidor, son: 1. Habi Habili lita tarr el puerto puerto seri seriee síncro síncrono no servido servidor, r, activa activand ndoo los los bits bits SY SYNC NC y SP SPEN EN,, y borrando CSRC. 2. Borr Borrar ar los los bit bitss CRE CREN N y SRE SREN. N. 3. Si se desea interrupció interrupción, n, activar activar el bit bit de habilita habilitación ción TXIE. 4. Si se desea transmisió transmisiónn con 9 bits, bits, activar activar el el bit TX9. 5. Habili Habilitar tar la tran transmi smisió sión, n, activ activand andoo el bit TXEN. TXEN. 6. Si se ha seleccio seleccionado nado 9 bits, bits, el noveno noveno bit se se cargará cargará en TX9D. 7. La transmis transmisión ión comienza comienza cargando cargando el el dato en el registro registro TXREG. TXREG.
10.4.2 10.4.2 USART EN RECEP RECEPCIÓN CIÓN SÍNCRONA SÍNCRONA COMO SERVIDOR SERVIDOR La operación como maestro y servidor síncronos es idéntica, excepto en el caso del modo SLEEP. En modo servidor, el bit SREN es indiferente. Si está habilitada la recepción, porque se activó el bit CREN antes de la instrucción SLEEP, podrá recibirse una palabra aunque esté en estado SLEEP. A la completa recepción de esta palabra, el registro RSR transferirá el dato en su poder al registro RCREG, y, si el bit de habilitación de interrupción RCIE está activado, la interrupción generada sacará al dispositivo del estado SLEEP. Si las interrupciones globales están habilitadas, el programa saltará al vector de interrupción 0004h. Los pasos a seguir para programar una Recepción Síncrona como Servidor, son: 1. Habi Habili lita tarr el puerto puerto seri seriee síncro síncrono no servido servidor, r, activa activand ndoo los los bits bits SY SYNC NC y SP SPEN EN,, y borrando CSRC. 2. Si se desea interrupció interrupción, n, activar activar el bit bit de habilita habilitación ción RCIE. 3. Si se dese deseaa recepc recepción ión con con 9 bits, bits, activa activarr el bit RX9. RX9. 4. Habili Habilitar tar la rece recepci pción ón,, activan activando do el bit bit CREN. CREN.
Microcontrolador PIC16F876
Página 95
5. El indi indica cado dorr RCIF RCIF se activa activará rá cuan cuando do se comp complet letee una una recep recepci ción ón.. Se genera generará rá una una interrupción, si el bit RCIE se activó en su momento. 6. Leer el registro registro RCSTA RCSTA para obtener obtener el el noveno bit bit (si se program programóó 9 bits) y determin determinar ar si ha habido error durante la recepción. 7. Leer los los 8 bits bits de datos, datos, efectuando efectuando la lectura lectura del regist registro ro RCREG. RCREG. 8. Si hubiese hubiese algún error, error, borrar borrar éste éste escribie escribiendo ndo 0 en CREN. CREN. TABLA 10-10:
REGISTROS ASOCIADOS AL SERVIDOR EN TRANSMISIÓN SÍNCRONA
Dir. Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
PSPIF(1) ADIF RCIF
T XI F
SSPIF
OCh
PIR1
18 h
RCSTA
19 h
TXREG Registro Transmisor USART
SPEN
RX9
SREN CREN ADDEN
PSPIE(1) ADIE RCIE
8Ch
PIE1
98 h
TXSTA
99 h
SPBRG Registro Generador de Baudios
CSRC
TX9
TXIE
TXEN SYNC
SSPIE ---
Bit2
Bit1
Bit0
CCP1IF TMR2IF TMR1IF
Valor tras Valor tras POR, BOR otros resets 0000 00 0000
00 0 0 0 000
0000 000x
000 0 0 00 x
0000 0000
000 0 0 000
CCP1IE TMR2IE TMR1IE 0000 0000
0 00 0 0 00 0
BRGH
0000 -010
0000 -010
0000 0000
0 00 0 0 00 0
FERR
OERR
TRMT
RX9D
T X 9D
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepción asíncrona. Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; siempre han de mantenerse a cero.
TABLA 10-11: Dir. Nombre OCh
PIR1
18 h
RCSTA
REGISTROS ASOCIADOS AL SERVIDOR EN RECEPCIÓN SÍNCRONA Bit7
Bit5
Bit4
Bit3
PSPIF(1) ADIF RCIF
T XI F
SSPIF
SPEN
Bit6
RX9
SREN CREN ADDEN
Bit2
Bit1
Bit0
CCP1IF TMR2IF TMR1IF
0000 00 0000
00 0 0 0 000
0000 000x
000 0 0 00 x
0000 0000
0 00 0 0 0 00
CCP1IE TMR2IE TMR1IE 0000 0000
0 00 0 0 00 0
BRGH
0000 -010
0000 -010
0000 0000
0 00 0 0 00 0
FERR
OERR
RX9D
1Ah RCREG Registro Receptor USART 8Ch
PIE1
PSPIE(1) ADIE RCIE
98 h
TXSTA
99 h
SPBRG Registro Generador de Baudios
CSRC
TX9
TXIE
TXEN SYNC
SSPIE ---
Valor tras Valor tras POR, BOR otros resets
TRMT
T X 9D
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en recepción asíncrona. Nota 1: Los bits PSPIE y PSPIF se reservan en los dispositivos de 28 patillas; siempre han de mantenerse a cero.
Microcontrolador PIC16F876
Página 96
11.0 11.0 MÓDULO MÓDULO CONVER CONVERTID TIDOR OR ANALÓGIC ANALÓGICO-D O-DIGI IGITAL TAL (CAD) (CAD) El módulo CAD posee cinco entradas para dispositivos de 28 patillas, y ocho para el resto de dispositivos. La entrada analógica carga un condensador de muestreo y retención. La salida de este circuito de muestreo y retención es la entrada al convertidor. Éste, genera un resultado binario, función del nivel analógico presente en la entrada, por medio de un CAD tipo aproximaciones sucesivas. La conversión digital es un número de 10 bits. El módulo CAD posee entrada de referencia de tensión baja y alta, que el software seleccionará en combinación con V DD, VSS, RA2 o RA3. El CAD posee una característica única: está hábil para operar, incluso en el modo SLEEP. Para trabajar en sleep, el reloj del CAD debe derivarse hacia el oscilador RC interno, expresamente diseñado para él. El módulo 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 operación del módulo A/D. El registro ADCON1, mostrado en REGISTER 11-2, configura la función de las patillas de los puertos. Éstas, pueden configurarse como entradas analógicas (RA3 también puede ser la tensión de referencia) o como entradas-salidas digitales.
Microcontrolador PIC16F876
Página 97
REGISTRO 11-2: REGISTRO ADCON1 (DIRECCIÓN 9Fh) U-
U-
U-
ADFM --bit7
---
--- PCFG3 PCFG2 PCFG1 PCFG0 bit0
R/W-0
bit 7:
R/W-0 R/W-0 R/W-0 R/W-0 R = De lectura W = De escritura U = Sin Sin imp imple leme ment ntar ar.. Da Da lectura -n = Valor del reset POR
0 en en
ADFM: Bit de selección de formato de resultado A/D. 1 = Justificación Justificación derecha. derecha. Los 6 bits más si nificativos nificativos de ADRESH se leen como 0. 0 = Justificaci Justificación ón iz uierda. uierda. Los 6 bits menos si nificativos nificativos de ADRESL ADRESL se leen leen como 0.
bit bit 6- Sin im lement lementar: ar: Se lee como 0. bit bit 3- PCFG3:PCFG0: Bits de control de confi uración uración de de uerto A/D. Esta en la tabla inferior
PCFG3: PCFG0
AN7(1) AN6(1) AN5(1) AN4 AN3 RE2 RE1 RE0 RA5 RA3
AN2 AN1 AN0 CHAN / VREF+ VREFRA2 RA1 RA0 Rets(2)
00 0 0 A A A A A A A 00 0 1 A A A A VREF+ A A 00 1 0 D D D A A A A 00 1 1 D D D A VREF+ A A 01 0 0 D D D D A D A 0101 11-1: D REGISTRO D D D (DIRECCIÓN VREF+ D 1Fh)A REGISTRO ADCON0 01 1 x D D D D D D D 10 0 0 A A A A VREF+ VREF- A U-A R/W-0 R/W 0 R / W 0 R / W 0 R / W 0 R / W 0 -0 10 0 1 D D A A R/WA A 1 0 1 0 D D A A V + A A ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/-DREF ONE --- ADON 1 0 1 1 D D A A V + VREF- bit0A REF bit7 11 0 0 D D D A VREF+ VREF- A 11 0 1 D D D D VREF+ VREF- A 11 1 0 D D D D D D D bit bit 7- ADCS1:ADCS0: Bit de selección selección de relo ara CAD. 1111 00 = Fosc D / 2. D D D VREF+ VREF- D
A VDD VSS A RA3 VSS A VDD VSS A RA3 VSS A VDD VSS A RA3 VSS D VDD VSS A RA3 RA2 A VDD VSS RA = De lectura RA3 VSS W = De escritura 3leme R A.2 Da UA= Si SinnRimp iA mple ment ntar ar. Da A RA3 RA2 lectura -nA= ValorRdel POR A3reset R A2 A VDD VSS D RA3 RA2
8/0 7/1 5/0 4/1 3/0 2/1 0/0 6/2 6/0 5/1 40/2en en 3/2 2/2 1/0 1/2
A = Entrada 01 = Fosc analógica. / 8. 10 = Fosc / 32. D = Entrada-salida digital. = FRC relonoderivado deriv ado de de un oscilador oscila interno interno . de 28 patillas. Estos canales están disponibles endor losRC dispositivos Nota 1:11 Esta columna Bit indica el número decanal canales analógicos bit bNota it 5-2:CHS2:CHS0: de selección selecc ión de analó analó ico. disponibles como entradas A/D, y el número de canales analógicos utilizados 000 = Canal 0 RA0/AN0 . como entradas de referencia de tensión. 001 = Canal 1 RA1/AN1 . 010 = Canal 2 RA2/AN2 . 011 = Canal 3 RA3/AN3 . 100 = Canal 4 RA4/AN4 . 101 … No existen existen más canales en dis ositivos ositivos de 28 atillas. atillas. 111
bit 2:
GO/-DONE: Bit de estado de conversión A/D. Si ADON = 1 1 = Conversión Conversión A/D en desarrollo desarrollo ro ramando este bit se inicia la conversión conversión . 0 = Conversión detenida o finalizada se borra or el hardware cuando finaliza la conversión A/D .
bit 1:
No está está im im lement lementado ado:: Se lee como 0.
bit 0:
ADON: Bit de inicio de conversión A/D. 1 = Módulo Módulo CA/D CA/D o erativ erativo. o. 0 = Modúlo CA/D desconectado desconectado se reduce el consumo consumo del chi .
Microcontrolador PIC16F876
Página 98
Los registros ADRESH:ADRESL contienen los 10 bits del resultado de la conversión 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 interrupción ADIF se activa. El diagrama de bloques del módulo A/D se muestra en la Figura 11-1. Después de configurar el módulo A/D como se desea, el canal seleccionado será leído antes de iniciar la conversión. El canal analógico de entrada debe tener su correspondiente bit del registro registro TRIS programado programado como entrada. entrada. Pasado Pasado el tiempo de adquisición adquisición,, la conversión conversión A/D puede iniciarse. Los pasos siguientes deberán respetarse para realizar una conversión A/D: 1. Config Configura uració ciónn del módulo módulo A/D: A/D: Conf Config igur urar ar las las pati patilla llass anal analóg ógica icas, s, tens tensió iónn de refe refere renc ncia ia y E/S E/S digi digita tall (ADCON1). Seleccionar el canal de entrada analógico (ADCON0). Seleccionar el reloj de conversión A/D (ADCON0). Conectar el módulo A/D (ADCON0). 2. Config Configura urarr la inter interrup rupción ción A/D, A/D, si se dese desea: a: Borrar el bit ADIF. Activar el bit ADIE. Activar el bit GIE. 3. Espera Espera del tiempo tiempo necesario necesario para para la adquisic adquisición ión del del valor analógic analógicoo en la entrada. entrada. 4. Arra Arranc ncaa la la conv conver ersi sión ón:: Activar el bit GO
/ DO NE
(ADCON0).
5. Espera Esperarr a la final finaliza izació ciónn de la conv convers ersión ión A/D: A/D:
O bien leyendo el bit GO / DONE O bien esperando la interrupción A/D.
6. Leer la pareja pareja de regist registros ros del resulta resultado do (ADRESH:AD (ADRESH:ADRESL) RESL),, y borrar borrar el bit ADIF. ADIF. 7. Para la próxima conversión, id al paso 1 o 2, según necesidades. El tiempo de
conversión A/D por bit está definido como T AD. Se necesita un mínimo de 2 • T AD antes de iniciar la próxima adquisición.
Microcontrolador PIC16F876
11.1 11.1
Página 99
Requ Requis isit itoos para para la adqu adquis isic ició iónn A/D A/D
Para que el convertidor A/D posea una precisión determinada, la carga del condensador de adquisición (C HOLD) debe completarse para el nivel analógico presente en el canal de entrada seleccionado. El modelo de la entrada analógica se muestra en la Figura 11-2. La impedancia de la fuente (R S) y la impedancia del conmutador de captura interno (R SSSS) afectan directamente al tiempo necesitado para cargar el condensador C HOLD. La impedancia del conmutador de captura varía según la tensión del dispositivo (V DD) (ver Figura 11-2). La impedancia impedancia máxima recomendada para la fuente analógica es de 10K . Cuando la impedancia decrece, el tiempo de adquisición también decrece. Después de la selección del canal analógico de entrada, este tiempo de adquisición debe tenerse en cuenta antes de arrancar la conversión. Para calcular el tiempo mínimo de adquisición, puede utilizarse la ecuación 11-1. Ésta, asume que existe un error de ½ LSB (1024 combinaciones para el A/D). El error de ½ LSB es el máximo error permitido por el módulo A/D, según las especificaciones técnicas.
Microcontrolador PIC16F876
Página 100
TACQ = Tiempo activación amplificador + Tiempo carga C HOLD + Coeficiente de temperatura = = TAMP + TC + TCOFF = = 2µ s + TC + [(Temperatura – 25ºC) • (0,05 µ s/ºC)] TC
= CHOLD • (R IC IC + R SSS S + R S) • ln (1 /2047) = = 120pF • (1K Ω + 7 K Ω + 10 K Ω ) • ln 0,0004885) = = 16,47µ s.
TACQ = 2µ s + 16,47 µ s + [(50ºC – 25•C) • 0,005 µ s/ºC] = = 19,72µ s. Nota 1: La tensión de referencia no afecta a la ecuación. Nota 2: El condensador C HOLD no se descarga después de cada conversión. Nota 3: La impedancia máxima recomendada para la fuentes analógicas es de 10K Ω . Esto es necesario para cumplir las especificaciones. Nota 4: Después de completar la conversión, se debe esperar un tiempo de 2•T AD antes de
iniciar otra. Durante este tiempo, el condensador C HOLD no se conecta al canal de entrada analógico seleccionado. 11.2 11.2
Sele Selecc cció ión n de del rel reloj oj de Conv Conver erssión ión A/D A/D
El tiempo por bit de la conversión A/D se define como T AD. La conversión A/D necesita un mínimo de 12T AD por 10 bits de conversión. La fuente del reloj de conversión A/D se selecciona por software. Cuatro opciones son posibles para T AD:
• • • •
2Tosc 8Tosc 32Tosc Oscilador RC interno
Para una correcta conversión A/D, el reloj debe seleccionarse para asegurar un tiempo mínimo 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.
Microcontrolador PIC16F876
Página 101
Tabla 11-1: TAD para máximas frecuencias de trabajo del dispositivo [dispositivos estándar (c)] Frecuencia máxima del dispositivo Operación ADCS1:ADCS0 Máx. 2Tosc 00 1,25 Mhz 8Tosc 01 5 M hz 32Tosc 10 20 Mhz (1,2,3) RC 11 Nota 1 Nota 1: La fuente RS tiene un tiempo típico 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 operación en modo SLEEP. Nota 3: Para dispositivos de amplio margen de tensión (LC), mirar la sección de Especificaciones Eléctricas.
11.3 11.3
Conf Config igura uració ción n de pat patil illas las del del puert puertoo anal analóg ógic icoo
Los registros ADDCON1 y TRIS controlan la operación de las patillas de puerto A/D. Las patillas que se vayan a emplear como entradas analógicas, deben activarse como entradas, en los bits correspondientes del registro TRIS. Si estos bits están a 0, las patillas actuarán como salidas, y los niveles de salida lógicos (V OH o VOL) serán convertidos a código binario. La operación 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 analógico se leerá como 0. Las patillas configuradas como entradas digitales convertirán en binario sus valores de tensión lógica. Los niveles analógicos de las patillas configuradas como entradas digitales, no afectarán a la precisión de la conversión. Nota 2: Los niveles analógicos en cualquier patilla definida como entrada digital, puede hacer que el buffer de entrada consuma más corriente de la especificada en las características del dispositivo.
11.4
Conversiones A/ A/D
Borrando el bit GO / DONE durante una conversión, se cancelará ésta. El resultado del registro del resultado no se actualizará con una conversión parcial; esto es: ADRESH:ADRESL contendrán el valor convertido de la última operación válida que se completó. Después de la cancelación de la conversión, se necesita esperar un tiempo de 2T AD antes de iniciar la siguiente conv conver ersi sión ón.. Desp Despué uéss de esta esta espe espera ra,, la conv conver ersi sión ón del del cana canall sele selecc ccion ionad adoo arra arranc ncar aráá automáticamente. En la Figura 11-3, después de activar el bit GO, el primer segmento de tiempo posee un mínimo de T CY y un máximo de T AD. Nota: el bit
GO / DONE
no se activará en la misma instrucción que la activación de A/D.
Microcontrolador PIC16F876
Página 102
11.4.1 11.4.1 REGIST REGISTRO RO DE RESULT RESULTADO ADO A/D La pareja de registros ADRESH:ADRESL es el lugar donde se carga el resultado de la conversión completa A/D de 10 bits. Este registro par tiene una capacidad de 16 bits. El módulo 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 selección de formato A/D (ADFM) controla esta alineación. La Figura 11-4 muestra la operación de alineación del resultado de la conversión A/D. Los bits sobrantes se cargan con 0. Cuando el resultado A/D no escriba en estas posiciones (inhibición del módulo A/D), estos registros pueden utilizarse como dos registros de uso general de 8 bits cada uno. 11.5 11.5
Oper Op erac ació iónn A/D A/D dura durant ntee el el es estado tado SLEE SLEEP P
El módulo 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 módulo A/D espera un ciclo de instrucción antes de iniciar la conversión. Esto permitirá la ejecución de la instrucción SLEEP, que elimina todo el ruido de conmutación digital para la conversión. Cuando ésta se complete, el bit GO / DONE se borrará, y el resultado se cargará en el registro de resultado. Si está habilitada la interrupción A/D, el dispositivo abandonará el estado SLEEP; si la interrupción A/D estuviese inhibida, el módulo A/D se desconectará, aunque el bit ADON permanece activado. Cuando la fuente de reloj A/D es otra opción (no la RC interna), la instrucción SLEEP provoca que la conversión presente se cancele y el módulo A/D se desconecte, a pesar de que el bit ADON permanezca activado. Desconectando el módulo A/D conseguimos poner al dispositivo en el estado de menor consumo. Nota: Para que el módulo A/D opere en estado SLEEP, la fuente de reloj del A/D debe ser la RC interna (ADCS1:ADC (ADCS1:ADCS0 S0 = 11). Para conseguir conseguir que la conversión conversión suceda durante SLEEP, hay que asegurar que la instrucción SLEEP siga, inmediatamente, a la instrucción 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 módulo A/D se desconecte y se cancele cualquier conversión.
Microcontrolador PIC16F876
Página 103
El valor de los registros ADRESH:ADRESL no se altera con un reset tipo –MCLR o WDT, y contendrán datos desconocidos después de un POR o BOR. TABLA 11-2:
REGISTROS/BITS REGISTROS/B ITS ASOCIADOS CON A/D
Dir. Nombre
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
POR, BOR
-MCLR, WDT
OBh INTCON
GI E
PEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
0000 000x
00 0 0 0 0 0u
0Ch
PIR1
PSPIF(1)
A DI F
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF TMR1IF
0000 0000
0 00 0 00 00
8Ch
PIE1
PSPIE(1)
ADIE
RCIE
TXIE
SSPIE
CCP1IE
TMR2IE TMR1IE
0000 00 0000
0000 00 0000
1Eh
ADRESH Registro de resultado para byte alto.
xxxx xxxx
uuu u uu u u
9Eh
ADRESL Registro de resultado para byte bajo.
-----
-----
1Fh 9Fh
ADCON0 ADCS1 ADCS0 CHS2 ADCON1 ADFM -----
0000 00-0 --0- 0000
0000 00-0 --0- 0000
CHS1 ---
CHS0 PCFG3
GO/DONE PCFG2
--PCFG1
ADON PCFG0
85 h
TRISA
---
---
Registro de dirección del puerto A
--11 1111
--11 1111
05 h
PORTA
---
---
--0x 00 0000
--0u 0000
89 h
TRISE
IBF
OBF
Latch de datos de PORTA en escritura; patillas de PORTA al leer. IBOV PSPMODE --Bits de dirección de PORTE
0000 -111
0 00 0 – 1 11
09 h
PORTE
---
---
---- -xxx
---- -uuu
---
---
---
RE2
RE1
RE0
x = Desconocido; --- = Sin implementar (se lee 0). Las celdas sombreadas no se utilizan en conversión A/D. e n los dispositivos de 28 patillas. Nota 1: Los bits PSPIE y PSPIF se reservan en
11.0 11.0
CARA CARACT CTE ERÍST RÍSTIC ICAS AS ESPE ESPECI CIAL ALE ES DE DE LA LA CP CPU
Estos dispositivos poseen un conjunto de características proyectadas, para aumentar al máximo las las posi posibi bilid lidad ades es del del sist sistem ema, a, mini minimi miza zarr costo costoss elim elimina inand ndoo comp compon onen ente tess exte extern rnos os,, y proporcionar potencia ahorrando modos de operación y ofreciendo códigos de protección. Estas características son:
• •
• • • • • • • •
Selección de oscilador. Reset: - De co conexión (P (POR). - Reta Retard rdoo a la cone conexi xión ón (PWR (PWRT) T).. - Retar Retardo do de arr arran anqu quee de osci oscilac lació iónn (OST (OST). ). - Baja Bajada da de alim alimen enta taci ción ón (BOR (BOR). ). Interrupciones. Temporizador supervisor (WDT). SLEEP. Código de protección. Posiciones ID. Circuito de entrada para programación serie. Circuito de entrada de baja tensión para programación serie. Circuito de entrada depurador.
Microcontrolador PIC16F876
Página 104
Estos circuitos poseen un supervisor, que puede anularse, solamente, a través de los bits de configuración. En desconexión, posee su propio oscilador RC para aumentar las posibilidades. Existen dos temporizadores, que ofrecen los retardos necesarios a la conexión: uno es el temporizador de inicio de oscilación (OST), diseñado para mantener el dispositivo en reset hasta la estabilización de la oscilación del cristal; el otro es el temporizador de conexión (PWRT), que proporciona un retraso fijo de 72 ms desde la conexión. Está diseñado para mantener una parte en reset mientras se estabiliza la alimentación. Con estos dos temporizadores en el chip, muchas aplicaciones no necesitan circuitería externa de reset. El modo SLEEP se ha diseñado para ofrecer una forma de operación de muy bajo consumo. El usuario, puede sacar del modo SLEEP al dispositivo, a través de un reset externo, final de temporización del supervisor, o a través de una interrupción. Varias opciones de oscilación están también disponibles para permitir aplicaciones a medida. La opción de oscilación RC ahorra costos al sistema, mientras que la opción de cristal LP ahorra consumo. Un conjunto de bits de configuración se usan para seleccionar estas opciones. 12.1 12.1
Bits its de conf config igur urac ació iónn
Los bits de configuración, pueden programarse (se leen como 0) o dejarse sin programar (leídos como 1), para seleccionar varias configuraciones de dispositivos. Estos bits se guardan en la posición 2007h de memoria de programa. El usuario notará que la dirección 2007h está fuera del espacio de la memoria de programa. En fábrica, se crea una zona especial de memoria (2000h – 3FFFh), reservada a configuración y pruebas, que solamente es accesible en el momento de la programación del dispositivo.
Microcontrolador PIC16F876
Página 105
REGISTRO 12-1: PALABRA DE CONFIGURACIÓN (DIRECCIÓN 2007h) CP1
CP0
DEBUG
---
WRT CPD LVP BODEN CP1
CP0
______ _ WDTE FOSC1 FOSC0 PWRTE
bit1 3
bit0
bits 13-12: bits 5-4: CP1:CP0: Bits de protección del código de memoria de Programa FLASH (2) 11 = Sin código de protección. 10 = 1F00h a 1FFFh zona protegida para PIC16F876 y 877 10 = 0F00h a 0FFFh zona protegida para PIC16F873 y 874 01 = 1000h a 1FFFh zona protegida para PIC16F876 y 877 01 = 0800h a 0FFFh zona protegida para PIC16F873 y 874 00 = 0000h a 1FFFh zona protegida para PIC16F876 y 877 bit 11:
DEBUG: Modo de depuración 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 depuración.
bit 10:
Sin implementar: implementar: Se lee como 0.
bit 9:
WRT: Bit de habilitación de escritura en la Memoria Flash de Programa 1 = La memoria de programa sin proteger se puede escribir mediante el control de EECON. 0 = La memoria de programa sin proteger no se puede escribir mediante el control de EECON.
bit 8:
CPD: Protección de códigos de la memoria de datos 1 = Sin protección. 0 = Los códigos de la memoria de datos están sin protección.
bit 7:
LVP: Bit de habilitación de Bajo Voltaje en circuito para Programación serie. 1 = La patilla RB3/PGM tiene la función PGM, que habilita la baja tensión de programación. 0 = La patilla RB3 es un canal digital de E/S de puerto. HV, en –MCLR, puede usarse para programación.
bit 6:
BODEN: Bit de habilitación de Reset Brown.Out (BOR = descenso de tensión)(1) 1 = Habilitado BOR 0 = Inhibido BOR.
bit 3:
-PWRTE: Bit de habilitación de retardo a la conexión (PWRT)(1) 1 = Inhibido el PWRT. 0 = Habilitado el PWRT.
bit 2:
WDTE: Bit de habilitación de Supervisor (Watchdog). 1 = Habilitado WDT (Watchdog). 0 = Inhibido el WDT.
bit 1:0:
FOSC1:FOSC0: Bits de selección del Oscilador. 11 = Oscilador RC. 10 = Oscilador HS. 01 = Oscilador XT. 00 = Oscilador LP.
Nota 1:
Habilitando BOR, automáticamente 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 código de protección.
Nota 2:
Microcontrolador PIC16F876
12.2 12.2
Página 106
Conf Config igur urac acio ione ness del del osci oscila lado dorr
12.2 12.2.1 .1 Tipo Tiposs de osci oscilad lador ores es Este Este dispos dispositi itivo vo puede puede trabaj trabajar ar en cuatro diferentes modos de oscilación. El usuario puede programar dos bits (Fosc1 y Fosc0) 455 KHz 68 – 100 pF 68 – 100 pF para seleccionar uno de estos cuatro XT 2,0 MHz 15 – 68 pF 15 – 68 pF modos: 4,0 MHz 15 – 68 pF 15 – 68 pF Cristal, c on • LP 8,0 HMS 10 – 68 pF 10 – 68 pF HS bajo consumo. 16,0 MHz 10 – 22 pF 10 – 22 pF Cristal• XT Estos valores son solamente, como guía para diseño Resonador cerámico. Resonadores utilizados Cristal• HS 455 KH KHz Panasonic EF EFQ-A455K04B +/- 0, 0,3% Resonador, en alta velocidad. 2,0 MHz Murata Erie CSA2.00MG +/- 0,5% Resistor• RC 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, 0,5% Todos los resonadores utilizados no llevan, integrados, los condensadores de oscilación
TABLA 12-1: RESONADORES CERÁMICOS Rangos Probados Modo F r e c. OS C1 OSC2
Condensador. 12.2.2 OSCILADOR DE CRISTAL O RESONADOR CERÁMICO En los modos XT, LP o HS, un cristal de cuarzo, o un resonador cerámico, se conectan a las patillas OSC1/CLKIN y OSC2/CLKOUT para establecer la necesitada oscilación (Figura 12-1). El oscilador diseñado 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).
12.2 12.2.3 .3 OS OSCI CILA LADO DOR R RC RC Para aplicaciones en las que el tiempo no requiera precisión, el oscilador RC ofrece la opción más económica. La frecuencia del oscilador RC es función, del voltaje de alimentación, de los valores valores de de resiste resistencia ncia (R EXT EXT) y capacidad (C EXT), y de la temperatura de trabajo. Además de esto, la frecuencia del oscilador ira variando conforme lo hagan los parámetros normales. Además Además,, las difere diferenci ncias as de capaci capacidad dad de las patill patillas as del condensad condensador, or, según el tipo tipo de encapsulado, afectarán a la frecuencia del oscilador, especialmente para valores pequeños de
Microcontrolador PIC16F876
Página 107
capacidad CEXT. El usuario usuario también necesita tener en cuenta la variación debido a la tolerancia de los componentes externos usados R y C. En la Figura 12-3 se muestra cómo está conectada al PIC16F87X la combinación R/C. Nota1: Capa Capaci cida dade dess mayo mayore ress incr increm emen enta tann la esta estabi bilid lidad ad del del osci oscilad lador or pero pero tamb tambié iénn incrementan el tiempo de arranque. Nota 2: Como cada cristal-resonador posee sus propias características, el usuario consultará al fabric fabricante ante del elemen elemento to oscila oscilador dor para para conseg conseguir uir los valore valoress apropi apropiado adoss de compon component entes es externos. Nota 3: R S es necesaria, en modos HS y XT, para evitar sobreoscilaciones del cristal con niveles de conducción muy bajos. Nota 4: Cuando se cambie a otros dispositivos PIC, las características de oscilación se revisarán. TABLA 12-2: SELECCIÓN DE CONDENSADORES PARA OSCILADOR DE CRISTAL Tipo de Osc. Frec. Cristal C1 C2 32 KHz 33 pF 33 pF 200 KHz 15 pF 15 pF 200 KHZ 47-68pF 47-68pF XT 1 MHz 15 pF 15 pF 4 MHz 15 pF 15 pF 4 MHz 15 pF 15 pF HS 8 MHz 15-33pF 15-33pF 2 0 MH z 15-33pF 15-33pF Estos valores son orientativos para el diseño Obsérvense las notas de arriba. Cristales usados 32 Khz Epson C-001R32.768K-A +/- 20 PPM 200 Khz STD XTL 200.000KHz +/- 20 PPM 1 M hz ECS ECS-10-13-1 +/- 50 PPM 4 M hz ECS ECS-40-20-1 +/- 50 PPM 8 M hz EPSON CA-301 8.000M-C +/- 30 PPM 20 Mhz EPSON CA-301 20.000M-C +/- 30 PPM LP
Microcontrolador PIC16F876
12-3
Página 108
Reset
Los PIC16F87X poseen varios tipos de reset:
• • •
• • •
Reset a la conexión (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 tensión (BOR).
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 situación 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 descripción de los estados de reset para todos los registros. En la figura 12-4 se muestra un esquema a bloques simplificado de la circuitería 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
.
Microcontrolador PIC16F876
12.4
Página 109
Reset de de co conexión (P (POR)
Se genera un impulso POR cada vez que se detecta la subida de V DD entre 1,2V y 1,7V. Para conceder prioridad a POR, conectar MCLR directamente, o a través de un resistor, al nivel VDD. Esto eliminará componentes externos RC, normalmente necesitados para crear un reset de conexión. El máximo tiempo de subida se detalla en el apartado de Especificaciones Eléctricas. Cuando Cuando el dispos dispositiv itivoo arranc arrancaa en operac operación ión normal normal (sale (sale de la condic condición ión de reset) reset),, los parámetros de trabajo del chip (tensión, frecuencia, temperatura,...) deben ser estables para asegurar la operación. Si estas condiciones no están 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. 12.5
Temporizador de de co conexió exiónn (P (PWRT)
EL PWRT proporciona un retardo de 72 ms para la conexión. El PWRT opera con una red RC interna de oscilación. El chip se mantiene en reset tanto tiempo como dura la activación de PWRT. Este retardo permite a V DD subir hasta el nivel aceptable de trabajo. Existe un bit de configuración 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 12.6
Temp Tempor oriz izad ador or de inic inicio io de osci oscila laci ción ón (OST (OST))
Este temporizador proporciona un retardo de 1024 ciclos de oscilación (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 Temporización de OST se aplica solamente a los modos XT, LP y HS, en reset POR o abandono de SLEEP.
Microcontrolador PIC16F876
Página 110
12.7Reset por caída de tensión (Brown-Out_Reset)(BOR) El bit BODEN, de configuración, puede habilitar o inhibir el circuito de BOR. Si V DD desciende por debajo de V BOR (alrededor de 4V), por un tiempo mayor de 100 µ s (TBOR ), ), la situación Brown-Out inicializará al dispositivo. Si V DD baja más de V BOR , pero la duración de la bajada es menor de T BOR , no sucede reset alguno. Mientras que sucede el BOR, el dispositivo permanecerá en reset BOR hasta que V DD suba por encima de V BOR . El temporizador de conexión mantendrá en reset al dispositivo, un tiempo TPWRT (72 ms, aproximadamente). Si V DD bajase de VBOR durante la Temporización T PWRT, el proceso de BOR se iniciará cuando VDD suba por encima de V BOR , con el temporizador de conexión en reset. Este temporizador siempre está habilitado cuando se habilita el circuito BOR, independientemente del estado del bit de configuración de PWRT. 12.8Secuencia de finalización de Temporización En la conexión, la secuencia de temporización 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 temporización terminará. Devolviendo el nivel alto a MCLR , iniciará la ejecución 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.9Registro PCON (Control de conexión/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 configuración 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 después del POR. TABLA 12-3: TEMPORIZACIÓN EN VARIAS SITUACIONES Conexión Configuración 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 conexión (Power-On-Reset). Código ilegal, TO se activa con POR. Código ilegal, PD se activa con POR. Reset de caída de tensión (Brown-Out-Reset). Reset de supervisor (Watch-Dog-Timer). Abandono de WDT. -MCLR durante operación normal. Reset MCLR durante SLEEP, o interrupción de abandono de SLEEP.
Microcontrolador PIC16F876
Página 111
TABLA 12-5: CONDICIÓN DE RESET PARA REGISTROS ESPECIALES Contador de Registro de Registro PCON Condición Programa Estado Reset POR 000h 0001 1xxx ---- --0x Reset –MCLR durante operación normal 000h 000u uuuu ---- --uu Reset –MCLR durante SLEEP 000h 0001 0uuu ---- --uu Reset WDT 0 00h 0000 1uuu ---- --uu Abandono WDT PC + 1 uuu0 0uuu ---- --uu Reset BOR 000 h 0001 1uuu ---- --u0 Aban bandono de de SL SLEEP por por interrupción PC + 1(1) uu u 10u uu ---- --uu u = sin cambio; x = desconocido; --- = sin implementar (se lee como 0). Nota 1: Cuando el abandono de SLEEP se debe a una interrupción, y GIE está activada, el PC se carga con el vector de interrupción 0004h.
Microcontrolador PIC16F876
Página 112
TABLA 12-6: CONDICONES DE INICIALIZACIÓN PARA TODOS LOS REGISTROS Reset POR, Reset –MCLR, Abandono SLEEP por Registros Dispositivos Reset BOR Reset WDT WDT o Interrupción W INDF TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD PORTE PCLATH INTCON
873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu 873 87 874 87 876 87 877 N/A N/A N/A 873 874 876 877 xxxx xxxx uuuu uuuu uuuu uuuu 873 8 7 4 876 87 7 00 0 0h 0000 h 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 8 73 8 7 4 8 7 6 8 7 7 --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 8 7 4 876 87 7 ---- -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 87 3 87 4 8 76 877 -r-0 0--0 -r-0 0--0 -r-u u—u(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 A DC O N 0 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 8 7 3 8 7 4 8 76 8 7 7 -r-0 0--0 -r-0 0--0 -r-u u—u PCON 87 3 87 4 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 A DC O N 1 873 8 7 4 876 877 0--- 0000 0--- 0000 u--- uuuu EEDATA 8 7 3 8 7 4 87 6 8 7 7 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 87 4 876 8 77 x--- x000 u--- u000 u--- uuuu EECON2 873 87 4 876 8 77 ---- ------- ------- ---u = Sin cambio; x = Desconocido; --- = Sin implementar (se lee como 0); q = Depende de la condición; r = Reservado (mantener a 0). Nota 1: Uno o más bits en INTCON, PIR1 y/o PIR2 serán afectados (a causa del abandono). Nota 2: Cuando el abandono se debe a una interrupción, y el bit GIE está activado, el PC se carga con el vector de interrupción 0004h. Nota 3: Ver Tabla 12-5 para valores de reset de condiciones específicas.
Microcontrolador PIC16F876
Página 113
Microcontrolador PIC16F876
12.10
Página 114
Interrupciones
La familia PIC16F87X tiene más de 14 fuentes de interrupción. El registro de control de interrupciones (INTCON) posee, los bits de petición de interrupción de forma individual, los bits de habilitación individual, y el bit de habilitación global (de todo el conjunto). Nota: Los bits de habilitación habilitación individual individual pueden pueden activarse, activarse, independientemen independientemente te del estado estado de sus correspondientes bits de máscara, o del bit GIE (habilitación global). El bit de habilitación 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 interrupción y su máscara están a 1, la interrupción se atenderá inmediatamente. Las interrupciones individuales pueden inhibirse a través de sus correspondientes bits de habilitación, contenidos en varios registros. Los bits de interrupción individual se activarán, independientemente del estado del bit GIE. Este último se borra con reset. La instrucción de retorno de interrupción, RETFIE, estará contenida en la rutina de interrupción, así como la activación del bit GIE, que habilitará una nueva interrupción. Los bits indicadores de petición de interrupción de la patilla RB0/INT, la interrupción por cambio en puerto RB y la interrupción por desbordamiento del TMR0, están contenidos en el registro INTCON.
Microcontrolador PIC16F876
Página 115
Los indicadores de interrupción de periféricos están contenidos en los registros de función especial PIR1 y PI2. Los bits correspondientes de habilitación de estas interrupciones están contenidos en los registros de función especial PIE1 y PIE2, y el bit de habilitación de interrupción de periféricos, en el registro de función especial INTCON. Cuando se responde a una interrupción, el bit GIE se borra para impedir cualquier otra interrupción, la dirección actual del PC (la de retorno) se mete en la pila, y el PC se carga con la dirección 0004h. Ésta es la dirección llamada vector de interrupción. Cada vez que se desarrolla la rutina de interrupción, la fuente de interrupción se determina consultando el bit de petición de interrupción. Este bit debe borrarse por software antes de volver a habilitar las interrupciones, para impedir atenciones recurrentes de la misma interrupción. Para Para interr interrupc upción ión por aconte acontecimi cimient entos os extern externos, os, como como la patill patillaa de interr interrupc upción ión INT o interrupció interrupciónn por cambio de estado en PORTB, PORTB, el retraso retraso en captar la interrupción interrupción es de tres o cuatro ciclos de instrucción. El retraso exacto depende de cuándo ocurra la interrupción. El retr retras asoo es el mism mismoo para para inst instru rucc ccio ione ness de uno uno o dos dos ciclos ciclos.. Los Los bits bits seña señali liza zado dore ress de interrupción individual se activan, independientemente del estado de su correspondiente bit de máscara o del bit GIE. 12.10.1 12.10.1 INTERRUPC INTERRUPCIÓN IÓN INT La interrupción 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 válido aparece en la patilla RB0/INT, el indicador INTF (INTCON<1>) se activa. Esta interrupción puede inhibirse borrando el bit INTE (INTCON<4>). El bit indicador debe borrarse por software en la rutina de servicio de interrupción antes de volver a habilitar las interrupciones. La interrupción 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 interrupción siguiente al abandono de SLEEP. En la sección 12.13 se ofrecen los detalles del modo SLEEP. 12.10.2 12.10.2 INTERRUPC INTERRUPCIÓN IÓN TMR0 Un desbordamiento (paso de FFh a 00h) en el registro TMR0 activará el bit indicador T0IF (INT (INTCO CON< N<2> 2>). ). La inte interr rrup upci ción ón pued puedee habi habilit litar arse se o inhi inhibi birs rsee acti activa vand ndoo o borr borran ando do,, respectivamente, el bit de habilitación T0IE (INTCON<5>).
12.10.3 INTERRUPCIÓN POR CAMBIO CAMBIO EN PORTB Un camb cambio io de estad estadoo lógi lógico co en la entr entrad adaa del del PO PORT RTB< B<7: 7:4> 4> activa activa el indi indica cado dorr RBIF RBIF (INT (INTCO CON< N<0> 0>). ). La inte interr rrup upci ción ón pued puedee habi habilit litar arse se o inhi inhibi birs rsee acti activa vand ndoo o borr borran ando do,, respectivamente, el bit RBIE del registro INTCON<4>. Ver Sección 3.2. 12.11 Salvando Salvando valores valores durante durante las interrupciones interrupciones Durante una interrupción, solamente se salva en pila, de forma automática, el PC. Normalmente, el usuario deseará salvar algún registro durante una interrupción (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 dirección relativa para ambos bancos (por ejemplo: si
Microcontrolador PIC16F876
Página 116
W_TEMP se define en la dirección 020h en el banco 0, en el banco 1 su dirección será 0A0h (080h + 020h). Los registros PCLATH_TEMP y STATUS_TEMP están definidos solamente en el banco 0. Puesto que los 16 bits más altos de cada banco son comunes en los dispositivos PIC16F876/877, los registros temporales W_TEMP, STATUS_TEMP y PCLATH_TEMP estarán situados aquí. Estas 16 posiciones no necesitan dividirse en bancos y, por consiguiente, se hace más fácil para el programa la guarda y restauración. En el Ejemplo 12-1 tenemos unos códigos básicos. EJEMPLO 12-1: GUARDANDO EN RAM LOS REGISTROS STATUS, W Y PCLATH MO V W F SWAPF CLRF MO V W F
W_TEMP STATUS,W STATUS STATUS_TEMP
MO V F
PCLATH,W
MO V W F CLRF
PCLATH_TEMP PCLATH
: : (ISR) : MO V F MO V W F SWAP WAPF MO V W F SWAPF SWAPF
;Copiar W en el registro temporal TEMP. ;Conmuta STATUS con W. ;Selecciona banco 0. Borra IRP, RP1, RP0. ;S ;Saalva lva STATUS de de ba banco 0 en el el re registro ;STATUS_TEMP. ;Solamente requerido si se usa páginas 1,2 ;y/0 3. ;Salva PC PCLATH en en PC PCLATH_TEMP. ;Página 0, 0, in independientemente de de la la pá página ;actual.
PCLATH_TEMP,W ;Re ;Restau taura PC PCLATH a travé avés de de W. W. PCLATH ; “ STA STATUS TUS_TEM _TEMPP,W ;Con ;Conmu muta ta STA STATU TUS_ S_TE TEMP MP co con W (co (colo loca ca ;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 12.12 Tempor Temporizad izador or superv superviso isorr (WDT) (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 ejecución de una instrucción SLEEP. Dura Durant ntee la oper operac ación ión norm normal al,, la fina finali liza zaci ción ón del del ti tiem empo po de WDT WDT gene genera ra un RESE RESET T al dispositivo (Watchdog Timer Reset). Si el micro estuviese en modo SLEEP, el desbordamiento de WDT provoca el abandono de SLEEP y la continuación con la operación normal de funcionamiento. El bit TO , en el registro STATUS, STATUS, quedará quedará en 0 cuando el WDT finalice finalice su cuenta. El WDT puede inhibirse permanentemente borrando el bit de configuración WDTE (Sección 12.1). El período del WDT, que puede encontrarse en las Especificaciones Eléctricas, tiene un valor típico de 18 ms. y un mínimo 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 asignarán 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 condición de reset cuando se cumpla el tiempo de supervisión.
Microcontrolador PIC16F876
Página 117
Nota: Cuando se ejecuta una instrucción CLRWDT, y el divisor está asignado al WDT (postvisor), la cuenta de éste se borra pero la asignación del divisor no varía.
FIGURA 12-11: RESUMEN DE REGISTROS DEL WATCHDOG Dirección Nombre Bit7 Bit6 Bit5 Bit4 Bit3 2007h
Bits de Config.
(1)
BODEN(1)
CP1
Bit2
Bit1
Bit0
CP0 -PWRTE(1) WDTE FOSC1 FOSC0
81h, 181h OPTION_REG -RBPU INTEDG T0CS T0SE
PSA
PS2
PS1
PS0
Las celdas sombreadas no se utilizan en el WDT. Nota 1: Ver Registro 12-1 para operación de estos bits.
12.1 12.133
Modo Modo de bajo bajo consu onsumo mo (SL (SLEEP) EEP)
Se entra en modo de bajo consumo ejecutando la instrucción 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 desconecta. Las patillas de puertos E/S mantienen el estado que poseían antes de que la instrucción SLEEP se ejecutase (alto, bajo o alta impedancia). Para el menor consumo en este modo, situar las patillas E/S en V DD o VSS, asegurándose de que ningún 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 conmutación por entradas en estado flotante. La entrada T0CKI también debe conectarse a V DD o V SS, para obtener un consumo mínimo. La contribución de las polarizaciones internas en el PORTB serán tenidas en cuenta. La patilla
MCLR
se deberá poner a nivel lógico alto (V IHMC).
12.13.1 12.13.1 ABANDONO ABANDONO DEL ESTADO SLEEP SLEEP
Microcontrolador PIC16F876
Página 118
El dispositivo puede salir del estado SLEEP por una de las siguientes acciones: 1. Entrada de reset externo por la patilla
. 2. Por final final de temporiz temporización ación en WDT (si éste éste estuvie estuviese se habilitado habilitado). ). 3. Interr Interrupc upción ión en la patilla patilla INT, interrup interrupció ciónn por cambio cambio en PORTB PORTB o interr interrupc upción ión de algún periférico. MCLR
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 conexión (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 interrupción de los siguientes periféricos pueden ser la causa del abandono del estado SLEEP: 1. 2. 3. 4. 5. 6.
7. 8. 9.
Escr Escrit itur uraa o lec lectu tura ra de de PSP PSP.. Interrupció Interrupciónn de TMR1. TMR1. Timer1 Timer1 debe debe trabajar trabajar como contado contadorr asíncrono asíncrono.. Interr Interrupc upción ión en modo modo capt captura ura CCP. CCP. Disparo Disparo por suceso suceso especial especial (Timer1 (Timer1 en modo asíncr asíncrono ono usando usando reloj reloj externo). externo). Interrupció Interrupciónn por por detección detección de bit bit SSP SSP (Start/Stop (Start/Stop). ). Recepción o transmisión de SSP en modo servidor (SPI/I 2C). RX o TX de de la USART USART (mod (modoo servid servidor or sínc síncron rono). o). Conversión Conversión A/D (cuando (cuando la fuente fuente de reloj de A/D A/D es RC). Operac Operación ión comp completa leta de escri escritur turaa en EEPR EEPROM. OM.
Otros periféricos no podrán generar interrupción porque durante el estado SLEEP no es efectivo el oscilador interno. Cuando ha sido ejecutada la instrucción SLEEP, la próxima instrucción (PC + 1) se captura. Para que el dispositivo abandone SLEEP por una interrupción, el correspondiente bit de habilitación de interrupción debe estar activo. La salida se produce, independientemente del estado del bit GIE. Si éste estuviese borrado, el dispositivo continuará la ejecución de la instrucción siguiente al SLEEP. Si el bit GIE está activado, el dispositivo ejecuta la instrucción siguiente al SLEEP y, después, salta al vector de interrupción 0004h. En casos en los que no se desee la ejecución siguiente al SLEEP, el usuario pondrá una instrucción NOP (no operar) después del SLEEP.
12.13.2 12.13.2 SALIDA SALIDA USANDO USANDO INTERRUPCI INTERRUPCIONES ONES Cuando Cuando las interr interrup upcion ciones es glo global bales es estén estén inh inhibid ibidas as (GIE (GIE borrad borrado), o), y cualqu cualquier ier fuente fuente de interrupción tenga activados los bits de habilitación individual y señalización de interrupción, sucede algo de los siguiente: • Si la interrupción ocurre antes de la ejecución del SLEEP, ésta se completa como una instrucción NOP. Por consiguiente, el WDT y su postdivisor no se borrarán, el bit TO no se activará, y el bit PD no se borrará. •
Si la interr interrupc upción ión sucede sucede antes antes o durant durantee la ejecuci ejecución ón de SLEEP, SLEEP, el dispos dispositiv itivoo abando abandonar naráá inm inmedi ediata atamen mente te el estado estado SLEEP. SLEEP. La instruc instrucció ciónn SLEEP SLEEP se ejecut ejecutará ará comp comple letam tamen ente te ante antess de prod produc ucir irse se el aban abando dono no.. De este este mo modo do,, el WDT WDT y su postdivisor se borrarán, 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 instrucción SLEEP, puede que éstos se activen antes de que se complete la instrucción SLEEP.
Microcontrolador PIC16F876
Página 119
Para determinar determinar si se ejecutó la instrucción instrucción SLEEP, SLEEP, hay que mirar el bit PD . Si éste es 1, la instrucción se ejecutó como una NOP. Para asegurar que el WDT está borrado, hay que ejecutar una instrucción CLRWDT antes de la instrucción SLEEP.
12.1 12.144 Circu Circuit itoo inter interno no de depur depurac ació iónn Cuando se programa a 0 el bit DEBUG, en la palabra de configuración, se habilita el circuito interno de Depuración. Esta función permite acciones sencillas de depuración cuando se usa el MPLAB. Cuando el microcontrolador tiene esta función habilitada, algunos de los recursos no quedan disponibles para uso general. La Tabla 12-7 muestra las características consumidas por el Depurador. TABLA 12-7: RECURSOS DEL DEPURADOR Patillas de E/S RB6 y RB7 Dirección 0000h contendrá NOP Memoria de Programa Últimas 100h palabras 0x070(0x0F0, 0x170, 0x1F0) Memoria de Datos 0x1EB – 0x1EF
Para usar la función función interna de Depuración Depuración del microcontro microcontrolador lador,, el diseño diseño debe implementar implementar las conexiones del circuito de Programación Serie a –MCLR/V PP, V DD, GND, RB7 y RB6. Esto hace de interconexión para el módulo del Depurador interno. 12.15 12.15 Verifi Verificac cación ión del Prog Program rama/C a/Códi ódigo go de Protec Protecció ciónn Si los bits del código de protección no han sido programados, la Memoria de Programa interna puede extraerse (leerse) para verificaciones. 12.1 12.166 Pos Posicio icione ness ID ID Cuatro posiciones de memoria (2000h – 2003h) se han previsto como posiciones ID, donde el usuari usuarioo puede puede almace almacenar nar código códigoss de compro comprobac bación ión o número númeross de identi identifica ficació ción. n. Estas Estas posiciones no son accesibles durante la ejecución normal, pero pueden leerse y escribirse en el proceso de programación y verificación. Se recomienda que solamente se usen los 4 bits menos significativos de la posición ID. 12.17 12.17 Circuit Circuitoo de Progra Programac mación ión Serie Serie inter interno no (ICSP (ICSP))
Microcontrolador PIC16F876
Página 120
Los microcontroladores PIC16F87X pueden programarse en serie. Es tan sencillo como dejar dos líneas para datos y reloj, y otras tres para alimentación, masa y tensión de programación. Cuando se utilice el ICSP, hay que suministrar 4,5V a 5,5V, si se ejecutaran una gran cantidad de borrados, incluyendo reprogramación de los códigos de protección desde el estado de conexión al de desconexión. En todos los demás casos de ICSP, se programará a la tensión normal de trabajo. 12.18 12.18 Progra Programac mación ión ICSP ICSP en baja baja tens tensión ión El bit LVP, de la palabra de configuración, habilita la programación ICSP en baja tensión. Este modo permite al microcontrolador ser programado vía ICSP, usando la tensión V DD como tensión base de programación. Para esto se necesita que V PP no se ponga a V IHH, pero puede, en cambio, quedarse a la tensión normal de trabajo. En este modo, la patilla RB3/PGM se dedica a la función de programación, y deja de ser una patilla general de puerto E/S. Durante la programación, VDD se aplica a la patilla MCLR . Para entrar en modo programación, V DD se aplica a la patilla RB3/PGM, y se pondrá a uno el bit LVP. Por defecto (de fábrica), el bit LVP está a 1. Nota 1: La programación con alta tensión siempre está disponible, independientemente del estado del bit LVP, aplicando V IHH a la patilla MCLR . Nota 2: Mientras se está en modo ICSP de baja tensión, la patilla RB3 no puede utilizarse como puerto de E/S. Nota 3: Cuando se use programación ICSP en baja tensión y las resistencias de polarización del PORTB estén habilitadas, el bit 3 del registro TRISB debe borrarse para inhibir la polarización de RB3 y asegurar la debida operación del dispositivo. Si no se utiliza la programación en baja tensión, 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 programación con V IHH en la patilla MCLR . El bit LVP se cargará solamente cuando se use alta tensión sobre MCLR . Cada vez que se programa a 0 el bit LVP, solamente se dispone de programación en alta tensión, y solamente este modo podrá usarse para programar el dispositivo. 13.0RESUMEN DEL CONJUNTO DE INSTRUCCIONES Cada instrucción en los PIC16F87X se compone de una palabra de 14 bits, dividida en un Código de Operación (OPCODE), que especifica el tipo de instrucción, y uno o más operandos que especifican la operación de la instrucción. 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 Código de Operación. Para instrucciones orientadas a byte, “f” representa la designación de un registro del fichero, y “d” representa la designación del destino. La designación del registro fichero especifica qué registro fichero está usando la instrucción. La designación del destino, especifica dónde se situará el resultado de la operación: si “d” es 0, el resultado se sitúa en el registro W, si “d” es 1, el resultado se coloca en el registro fichero especificado en la propia instrucción. Para instrucciones orientadas a byte, “b” representa un bit, cuyo número indica la posición del bit afectado por la operación, en la que “f” es el registro en que se localiza el bit designado.
Microcontrolador PIC16F876
Página 121
Para operaciones literales, “k” representa un valor constante de 8 bits; en operaciones de control, “k” es un número de 11 bits. TABLA 13-1: DESCRIPCIÓN DE INDICADORES DEL CÓDIGO DE OPERACIÓN Indicador Descripción f W b k
x
d PC TO PD
Registro fichero. Dirección 0x00 a 0x7Fh. Regi Regisstro tro de trab trabaj ajoo (acum acumul ulad ador or)). Número de bit en un registro de 8 bits Dato constante o etiqueta. Cualquier valor (0 o 1). El ensamblador ensamblador generará códigos con x = 0. Es la forma de uso recomendada para la comp compat atib ibil ilid idad ad con con toda todass las las herr herram amie ient ntas as de desa desarr rrol ollo lo de Microchip. Sele Selecc cció iónn de dest destiino; no; 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 tempor porización. ón. Bit de ba bajo consumo.
El conjunto de instrucciones está en orden alfabético y agrupadas en tres categorías básicas:
• • •
Operaciones orientadas a byte. Operaciones orientadas a bit. Operaciones literales y de control.
Todas las instrucciones se ejecutan en un único ciclo de ins instru trucción ión, menos las de comparación ióncoin coinci cide denc ncia ia,, o las las de camb cambio io del del Cont Contad ador or de Programa como resultado de una instrucción. En estos casos, la ejecución supone dos ciclos de instrucción. Un ciclo de instrucción consiste en cuatro períodos del oscila ilador. Por esto, para una frecuencia del oscilador de 4 Mhz, la ejecu ejecuci ción ón de una una inst instru rucc cción ión norm normal al supone un tiempo de 1 µ s. Si se trata de instrucciones de comparacióncoincidencia, o de cambio del valor del Contador Contador de Programa Programa como resultado de una instrucción, el tiempo necesario será el doble. En la Tabla 13-2 se detallan las ins instruc trucci cioones nes reco recono noci ciddas por por el ensamblador MPASM. En la Figura 13-1 se muestra el formato general que puede tener una instrucción. 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.
Microcontrolador PIC16F876
Página 122 Descripción:
TABLA 13:2 CONJUNTO DE ISTRUCCIONES DEL PIC16F87X Mnemotécnicos, Operandos ADDWF f, d ANDWF f, d CLRF f CLRW COMF f, d DECF f, d DECFSZ f, d INCF f, d INCFSZ f, d IORWF f, d MOVF f, d MOVWF f NOP RLF f, d RRF f, d SUBWF f, d SWAPF f, d XORWF f, d BCF BSF BTFSC BTFSS ADDLW ANDLW CALL CLRWDT GOTO IORLW MOVLW RETFIE RETLW RETURN SLEEP SUBLW XORLW
f, b f, b f, b f, b k k k k k k k k k
Descripción
Código de operación 14 bits Ciclos MSb LSb
OPERACIONES ORIENTADAS A BYTE Suma W y f 1 00 0111 Función 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 Función 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 Rotación a izda. de f a través de Carry 1 00 1101 Rotación a dcha. de f a través de Carry 1 00 1100 Resta W de f 1 00 0010 Conmuta cuartetos en f 1 00 1110 Función 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 Función AND de W y k 1 11 1001 Llamada a subrutina 2 10 0kkk Borra el WDT 1 00 0000 Salto a la dirección k 2 10 1kkk Función OR de W y k 1 11 1000 Mover k a W 1 11 00xx Retorno de interrupción 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 Función OREX de W y k 1 11 1010
dfff dfff 1fff 0 xxx dfff dfff dfff dfff dfff dfff dfff 1fff 0xx0 dfff dfff dfff dfff dfff
f f f f f f f f f f f f xxxx f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f 0000 f f f f f f f f f f f f f f f f f f f f
bfff bfff bfff bfff
f f f f f f f f f f f f f f f f
kkkk kkkk kkkk 0110 kkkk kkkk kkkk 0000 kkkk 0000 0110 kkkk kkkk
kkkk kkkk kkkk 0100 kkkk kkkk kkkk 1001 kkkk 1000 0011 kkkk kkkk
Status afectado C, DC,Z Z Z Z Z Z Z Z Z C C C, DC, Z Z
Notas 1, 2 1, 2 2 1, 2 1, 2 1, 2, 3 1, 2 1, 2, 3 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 3 3
C, DC, Z Z -TO, -PD Z
-TO, -PD C, DC, Z Z
MOVF PORTB,1), el valor Nota 1: Cuando se modifica un registro de E/S en función de él mismo (por ejemplo MOVF 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 señal externa, el dato que se escribirá será un 0. Nota 2: Si esta instrucción se ejecuta en el registro TMR0 (y cuando se aplique d = 1), el Predivisor se borrará si está asignado al módulo Timer0. Nota 3: Si se modifica el Contador de Programa (PC), o es verdadero el resultado de una comparación, la instrucción requiere dos ciclos. EL segundo ciclo se ejecuta como un NOP (no se realiza trabajo aparente alguno).
13.1
El conten contenido ido del regist registro ro 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”.
Descripción de instrucciones
ADDLW
Suma W y Literal
Sintaxis: Operandos: Operación: Estado afdo.: Descripción:
A D DLW 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.
ADDWF
Suma W y f
Sintaxis: Operandos:
A D D WF f, d 0 ≤ f ≤ 127 d ∈ [0,1] (W) + (f) → (destino) C, DC, Z
Operación: Estado afdo.:
ANDLW
AND de W con Literal
Sintaxis: Operandos: Operación: Estado afdo.: Descripción:
A N DL W k 0 ≤ k ≤ 255 (W) AND (k) → (W) Z Se rea realiza la fu función AND AND del del contenido de W con la palabra literal “k”. El resultado queda en W.
Microcontrolador PIC16F876
ANDWF
AND de W con f
Sintaxis: Operandos:
A N D WF f, d 0 ≤ f ≤ 127 d ∈ [0,1] (W) AND (f) → (destino) Z And de de W co con el el re registro ”f ”f”. Si Si “d” es 0, el resultado se almacena en W; si “d” es 1, el resultado se guarda en el registro “f”.
Operación: Estado afdo.: Des Descri cripció ción:
BCF
Borra un bit del registro f
Sintaxis: Operandos:
BCF f, b 0 ≤ f ≤ 127 0≤ b≤ 7 0 → (f) Ninguno Se bo borra el bit bit nnuumera erado “b “b” del del registro “f”.
Operación: Estado afdo.: Des Descri cripció ción:
BSF
Activa un bit del registro f
Sintaxis: Operandos:
B SF f, b 0 ≤ f ≤ 127 0≤ b≤ 7 1 → (f) Ninguno Se act activa el bi bit num numeerado “b” “b” del del registro “f”.
Operación: Estado afdo.: Des Descri cripció ción:
BTFSS
Chequea el bit “b” del registro f, y salta si es “1”.
Sintaxis: Operandos:
BTFSS f, b 0 ≤ f ≤ 127 0≤ b≤ 7 Salta si (f) = 1 Ninguno Si el bi bit “b” “b” del del reg registro “f” “f” es uno, se salta la próxima instrucción. Se invierten en total 2 ciclos de instrucción (2TCY).
Operación: Estado afdo.: Descripción:
BTFSC
Chequea el bi bit “b” del registro f, y salta si es “0”.
Sintaxis: Operandos:
BTFSC f, b 0 ≤ f ≤ 127 0≤ b≤ 7 Salta si (f) = 0 Ninguno Si el bi bit “b” “b” del del reg registro “f” “f” es cero, se salta la próxima
Operación: Estado afdo.: Descripción:
Página 123 instrucción. Se invierten en total 2 ciclos de instrucción.
CALL
Llamada a Subrutina.
Sintaxis: Operandos: Operación:
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 dirección 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 dirección, guarda en pila el PC actual, para poder regresar cuando se lo mande el programa. EL PC actual será la dirección donde se ubica el CALL más uno.
Estado afdo.: Descripción:
CLRF
Borrado de f
Sintaxis: Operandos: Operación:
CLRF f 0 ≤ f ≤ 127 00 → (f) 1→ Z Z Se bor borra el cont conten enid idoo del del regi regist stro ro “f”, activándose el indicador Z.
Estado afdo.: Des Descrip cripci ción ón::
CLRW
Borrado de W
Sintaxis: Operandos: Operación:
CLRW Ninguno 00 → (W) 1→ Z Z Se bor borra el cont conten enid idoo del del regi regist stro ro “W”. Se activa el indicador Z.
Estado afdo.: Des Descrip cripci ción ón::
CLRWDT
Borrado del Watchdog Timer
Sintaxis: Operandos: Operación:
CLRWDT Ninguno 00 → WDT 0 → Predivisor WDT 1 → -TO 1 → -PD -TO, -PD Se bor borra el cont conten enid idoo del del regi regist stro ro WDT WDT y de su Pred Prediv ivis isor or.. Se activan los bits indicadores de estado –TO y –PD.
Estado afdo.: Des Descrip cripci ción ón::
COMF
Complementa el registro f
Sintaxis: Operandos:
COMF 0 ≤ f ≤ 127
f, d
Microcontrolador PIC16F876
Operación: Estado afdo.: Des Descrip cripci ción ón::
d ∈ [0,1] (f) → (destino) Z Se comp comple leme ment ntaa el el con conte teni nido do del del registro “f”. Si “d” es cero, el resultado se almacena en W; si es uno, en el propio registro “f”.
Página 124 Descripción:
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”.
INCFSZ
Incrementa f, y salto si = 0
Sintaxis: Operandos:
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 próxima inst instru rucci cción ón se ejecu ejecutar tará; á; si el resultado es 0, se ejecutará una instru instrucció cciónn NOP, NOP, invirt invirtiend iendoo 2 ciclos de instrucción en ese caso.
DECF
Decrementa el registro f
Sintaxis: Operandos: Operación: Estado afdo.: Des Descri cripció ción:
DE C F f, d 0 ≤ f ≤ 127 d ∈ [0,1] (f) - 1 → (destino) Z Se dec decrementa el co conteni enido del del registro “f”. Si “d” es cero, el resultado se almacena en W; si es uno, en el propio registro “f”.
DECFSZ
Decrementa f, y salto si = 0
IORLW
Función OR de Literal con W
Sintaxis: Operandos:
DECFSZ f, d 0 ≤ f ≤ 127 d ∈ [0,1] (f) - 1 → (destino); salto si resultado = 0. ninguno Se dec decrementa el co conteni enido del 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 próxima inst instru rucci cción ón se ejecu ejecuta tará rá;; si el resultado es 0, se ejecutará una instru instrucció cciónn NOP, invirt invirtien iendo do 2 ciclos de instrucción en ese caso.
Sintaxis: Operandos: Operación: Estado afdo.: Descr escriipció ción:
IORLW k 0 ≤ k ≤ 255 (W) OR k → (W) Z Se rea realliza la fun funcción OR en entre el cont conten enido ido del del regi regist stro ro W y la palab palabra ra litera literall “k”. “k”. El result resultado ado queda en W.
IORWF
Función OR entre W y f
Sintaxis: Operandos:
GOTO
Salto incondicional
Sintaxis: Operandos: Operación:
G OT O k 0 ≤ k ≤ 2047 k→ PC<10:0> PCLATH<4:3> → PC<12:11> ninguno Salt Saltoo inc incon ondi dici cion onal al a la la dir direc ecci ción ón así conseguida: Se carga PC, en sus 11 bits de menor peso (PC<10:0>), con el contenido de “k”. Los 2 bits de más más peso peso de PC se toma tomann de PCLA PCLATH TH.. Esta Esta inst instru rucci cción ón se ejecuta en 2 ciclos de instrucción.
Operación: Estado afdo.: Descr escriipció ción:
IORWF f, d 0 ≤ f ≤ 127 d ∈ [0,1] (W) OR f → (destino) Z Se re reali aliza la la fu funció ción OR OR co con lo los contenidos de los registros W y “f”. El resultado quedará en W si “d” “d” = 0; en caso caso cont contra rari rio, o, el resultado se almacena en “f”.
MOVF
Mueve f
Sintaxis: Operandos:
MOVF f, d 0 ≤ f ≤ 127 d ∈ [0,1] (f) → (destino) Z Se lle lleva el co contenido de “f “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
Operación: Estado afdo.: Des Descri cripció ción:
Estado afdo.: Des Descrip cripci ción ón::
INCF
Incrementa el registro f
Sintaxis: Operandos:
INCF f, d 0 ≤ f ≤ 127 d ∈ [0,1] (f) + 1 → (destino) Z
Operación: Estado afdo.:
Operación: Estado afdo.: Descripción:
Operación: Estado afdo.: Descripción:
Microcontrolador PIC16F876 operación, operación, aparentemente aparentemente inútil inútil,, puede puede servir servir para para comprob comprobar ar el valor cero de “f”.
MOVLW
Mueve Literal a W
Sintaxis: Operandos: Operación: Estado afdo.: Des Descrip cripci ción ón::
MOVLW k 0 ≤ k ≤ 255 (k) → (W) Ninguno Los ocho ocho bits bits de la pala palabr braa “k” “k” se cargan en el registro W.
MOVWF
Mueve W a f
Sintaxis: Operandos: Operación: Estado afdo.: Descripción:
NOP
MOVWF f 0 ≤ f ≤ 127 (W) → (f) Ninguno Mueve el da dato de W al al reg registro “f”. No Operar
Sintaxis: Operandos: Operación: Estado afdo.: Des Descrip cripci ción ón::
NO P Ninguno N o o pe r a Ninguno No se rea reali liza za oper operac ació iónn alg algun unaa.
Página 125 Estado afdo.: Descr escriipció ción:
Ninguno Retorno des desde una una sub 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ó par paraa salt saltar ar a subr subrut utin ina. a. Esta Esta instrucción tiene 2TCY.
RLF
Rotación a izquierda a través de Carry
Sintaxis: Operandos:
RLF f, d 0 ≤ f ≤ 127 d ∈ [0,1] Ver descripción abajo C El con conteni enido del del regi regisstro “f” “f” se rota a la izquierda a través del Carry, en en quien se se cargará cargará el bit de más peso de “f”. El resto de bit bitss de “f” “f” se despl desplaza azann desd desdee menor a mayor peso.
Operación: Estado afdo.: Descr escriipció ción:
RRF
Rotación a derecha a través de Carry
Sintaxis: Operandos:
RRF f, d 0 ≤ f ≤ 127 d ∈ [0,1] Ver descripción abajo C El con conteni enido del del regi regisstro “f” “f” se rota rota a la dere derech chaa a trav través és del del Carry, en en quien se se cargará cargará el bit de menos peso de “f”. El resto de bit bitss de “f” “f” se despl desplaza azann desd desdee mayor a menor peso.
Operación: Estado afdo.: Descr escriipció ción:
RETFIE
Retorno desde interrupción
Sintaxis: Operandos: Operación: Estado afdo.: Des Descri cripció ción:
RETFIE Ninguno TOS → PC; 1 → GIE Ninguno Al ca cargar PC PC co con el el co contenido de de la últi última ma posi posici ción ón de pila pila,, se retornará retornará al programa programa principal, principal, que se abandonó para atender la interrupción.
RETLW
Retorno con Literal en W
Sintaxis: Operandos: Operación: Estado afdo.: Descripción:
RETLW k 0 ≤ k ≤ 255 k→ (W); TOS → PC Ninguno El registro W s e c ar arga con la pal palab abra ra “k”. “k”. El cont contad ador or de programa se carga con el contenido último de la pila. Esta instrucción tiene 2TCY.
RETURN
Retorno de Subrutina
Sintaxis: Operandos: Operación:
RETURN Ninguno TOS → PC
SLEEP
Estado vigilante
Sintaxis: Operandos: Operación:
Estado afdo.: Descr escriipció ción:
SLEEP Ninguno 00 → WDT 0 → Predivisor WDT 1 → -TO 0 → -PD -TO, -PD Se bor borrra el el bi bit de de es estado de de ba 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.
SUBLW
Resta W a Literal
Sintaxis: Operandos:
SUBLW 0 ≤ k ≤ 255
k
Microcontrolador PIC16F876
Página 126
Operación: Estado afdo.: Descripción:
(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
SUBWF
Resta W de f
Sintaxis: Operandos:
SUBWF f, d 0 ≤ f ≤ 127 d ∈ [0,1] (f) - (W) → (destino) C, DC, Z El contenido del registro W se resta resta del conten contenido ido del regist registro ro ”f”, por el método 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. Conmuta cuartetos de f
Operación: Estado afdo.: Descripción:
SWAPF Sintaxis: Operandos:
Operandos: Operación: Estado afdo.: Descripción:
0 ≤ k ≤ 255 (W) XOR k → (W) Z Se realiza la función OR EXCLUSIVA entre el contenido del registro W y la palabra literal “k”. El resultado queda en W.
XORWF
XOR entre W y f
Sintaxis: Operandos:
XORWF f, d 0 ≤ f ≤ 127 d ∈ [0,1] (W) XOR f → (destino) Z Se realiza la función OR EXCLUSIVA con los contenidos de los los regis egistr tros os W y “f”. “f”. El resultado quedará en W si “d” = 0; en caso contrario, el resultado se almacena en “f”.
Operación: Estado afdo.: Descripción:
Estado afdo.: Descripción:
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 sitúa en el registro W; si “d” = 1, el resultado se coloca en “f”.
XORLW
XOR de Literal con W
Sintaxis:
XORLW
15.0
CARACTERÍSTICAS ELÉCTRICAS
Operación:
k
Rango Máximo Absoluto Temperatura ambiente en polarización......................................................................................-55 a +125 ºC Temperatura de almacenamiento.................................................................................................-65 a 150 ºC Tensión en cualquier patilla respecto a VSS (excepto VDD, -MCLR y RA4)..................-0,3V a (VDD + 0,3V) Tensión en VDD con respecto a VSS..............................................................................................-0,3 a +7,5V Tensión en –MCLR con respecto a V SS ...........................................................................................0 a +14V Tensión en RA4 con respecto a VSS...................................................................................................0 a 8,5V Disipación total de potencia (Nota 1)................................................................................................. 1)......................................................................................................1,0W .....1,0W Máxima corriente de salida de la patilla VSS.......................................................................................300 mA Máxima corriente en la patilla VDD.....................................................................................................250 mA Corriente de entrada de protección, IIK (VI < 0 o VI > VDD)............................................................+/- 20 mA Corriente de salida de protección, IOK (VO < 0 o VO > VDD)............................................................+/- 20 mA Máxima corriente de salida de cualquier patilla E/S a VSS...................................................................25 mA Máxima corriente de salida de cualquier patilla E/S a VDD..................................................................25 mA
Microcontrolador PIC16F876
Página 127
Máxima corriente a VSS por PORTA, PORTB y PORTE (combinada) (Nota 3)...............................200 mA Máxima corriente a VDD por PORTA, PORTB y PORTE (combinada) (Nota 3)..............................200 mA Máxima corriente a VSS por PORTC y PORTD (combinada) (Nota 3)..............................................200 mA Máxima corriente a VDD por PORTC y PORTD (combinada) (Nota 3).............................................200 mA Nota 1: La potencia disipada se calcula así: Pdis = VDD • (IDD - Σ IOH) + Σ [(VDD – VOH) • IOH] + Σ (VOL • IOL). Nota 2: Los picos de tensión por debajo de V SS en la patilla –MCLR, que induzcan corrientes mayores de 80 mA, pueden bloquear al dispositivo. Por esto se conecta un resistor en serie, de valor óhmico ente 50 y 100Ω , cuando se aplique un nivel bajo a la patilla –MCLR, y algo mayor cuando se conecte directamente a VSS. Nota 3: PORTD y PORTE no están implementados en los dispositivos de 28 patillas. IMPORTANTE: Valores por encima de los listados en “Rango Máximo Absoluto” pueden causar daños en el dispositivo. Asimismo, exposiciones prolongadas de las condiciones arriba indicadas, pueden afectar a la fiabilidad del dispositivo.
Microcontrolador PIC16F876
Página 128
Microcontrolador PIC16F876
Página 129
Microcontrolador PIC16F876
Página 130
Tabla 15-1:
PIC16F873/874/876/877-04 PIC16F873/874/876/ 877-04 (Comercial, Industrial) Industri al) PIC16F873/874/876/877-20 (Comercial, Industrial) Condiciones de trabajo Estándar (salvo indicación en contra) Temperatura de trabajo –40ºC ≤ TA ≤ +85ºC para industrial y CARACTERÍSTICAS DC 0ºC ≤ TA ≤ +70ºC para comercial Parám. Características Símbolo Mín. Típ.† Máx. Unid. Condiciones Nº
D001 D001A
D002* D003 D004* D 005
Tensión de alimentación Tensión de retención datos RAM (Nota 1) VDD arranque para asegurar la señal de Reset interno (POR) Velocidad de subida de VDD para asegurar el reset interno (POR) Tensión de reset BOR
---
5,5
4,5
---
5,5
VBOR *
---
5,5
VDR
---
1,5
---
V
VPOR
---
VSS
---
V
Ver sección “Reset de conexión” para los detalles.
SVDD
0,05
---
---
V/ms
Ver sección “Reset de conexión” para los detalles.
VBOR
3,7
4,0
4,35
V
---
1,6
4
VDD
D010 Corriente alimentación (Nota 2, 5)
IDD
D013 D015*
Corriente BOR (Nota 6)
∆ IBOR
D020 D021 D021A
Corriente bajo consumo (Nota 3, 5)
Configuración de oscilación XT, RC y LP. Configuración de oscilación HS. BOR habilitado, Fmáx = 14 Mhz (Nota 7)
4,0
IPD
V
mA ---
7
15
---
85
20 0
---
10,5
42
---
1,5
16
---
1,5
19
µA
µA
Habilitado bit BODEN en configuración. Oscilación XT, y RC Fosc = 4 Mhz, VDD = 5,5 V (Nota 4) Oscilación 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
Corriente BOR --85 20 0 ∆ IBOR µ A BOR habilitado, VDD = 5,0V (Nota 6) Símbolo: * Parámetros característicos, pero no probados. † Dato en columna “Típ” es a 5V, 25ºC, salvo otra especificación. Estos parámetros son para guía de diseño, pero no están probados. Nota 1: Este es el límite al que puede bajar VDD sin perder los datos de la RAM. 2: La corriente de alimentación es, principalmente, función de la tensión de trabajo y de la frecuencia. Otros factores, como la carga de las patillas E/S, la velocidad de conmutación, tipo de oscilador, modelo del código interno de ejecución y temperatura, también tienen efecto sobre la corriente consumida. Las condiciones de prueba para todas las medidas de IDD, en modo activo de operación, son: OSC1 = Onda cuadrada externa; todas las patillas triestado, conectadas a VDD. -MCLR = VDD; WDT habilitado o inhibido, según 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 VDD y VSS. 4: Para configuración de oscilador RC, no se incluye la corriente a través de la R externa. Ésta puede estimarse con la fórmula Ir = VDD/2Rext (mA), con Rext en K Ω . El oscilador del Timer1, cuando se habilita, añade 20 µ A a la corriente especificada. especificada. Este valor sirve 5: como guía de diseño, pero no está probado. 6: La corriente ∆ es la corriente adicional consumida cuando este periférico está habilitado. Esta corriente se añadirá a la base IDD o IPD medida. 7: Cuando se habilita BOR, el dispositivo operará correctamente hasta alcanzar el punto de caída de tensión marcado como VBOR . D023*
Microcontrolador PIC16F876
Tabla 15-2:
Página 131
Características Característica s DC:
PIC16F873/874/876/877-04 PIC16F873/874/876/ 877-04 (Comercial, Industrial) Industri al) Condiciones de trabajo Estándar (salvo indicación en contra) Temperatura de trabajo –40 ºC ≤ TA ≤ +85 ºC para industrial y 0 ºC ≤ TA ≤ +70 ºC para comercial
CARACTERÍSTICAS DC Parám. Nº D001 D002* D003 D004* D 005
Características Tensión de alimentación Tensión de retención datos RAM (Nota 1) VDD arranque para asegurar la señal de Reset interno (POR) Velocidad de subida de VDD para asegurar el reset interno (POR) Tensión de reset BOR
Símbolo
Mín.
Típ.†
Máx.
Unid.
VDD
2,0
---
5,5
V
VDR
---
1,5
---
V
VPOR
---
VSS
---
V
Ver sección “Reset de conexión” para los detalles.
SVDD
0,05
---
---
V/ms
Ver sección “Reset de conexión” para los detalles.
VBOR
3,7
4,0
4,35
V
---
0,6
2,0
mA
D010 Corriente alimentación (Nota 2, 5)
Corriente BOR (Nota 6)
∆ IBOR
D020 D021 D021A
Corriente bajo consumo (Nota 3, 5)
Configuración de oscilación XT, RC y LP (DC – 4 Mhz).
Habilitado bit BODEN en configuración. Oscilación XT, y RC Fosc = 4 Mhz, VDD = 3,0V (Nota 4)
IDD
D010A D015*
Condiciones
IPD
---
20
35
µA
Oscilación LP Fosc = 32 Khz, VDD = 3,0V, WDT inhibido.
---
85
200
µA
Habilitación BOR, VDD = 5,0V
---
7,5
30
---
0,9
5
µA
---
0,9
5
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
Corriente BOR --85 200 ∆ IBOR µ A Habilitación BOR, VDD = 5,0V (Nota (Nota 6) Símbolo: * Parámetros característicos, pero no probados. † Dato en columna “Típ” es a 5V, 25ºC, salvo otra especificación. Estos parámetros son para guía de diseño, pero no están probados. Nota 1: Este es el límite al que puede bajar VDD sin perder los datos de la RAM. 2: La corriente de alimentación es, principalmente, función de la tensión de trabajo y de la frecuencia. Otros factores como la carga de las patillas E/S, la velocidad de conmutación, tipo de oscilador, modelo del código interno de ejecución y temperatura, también tienen efecto sobre la corriente consumida. Las condiciones de prueba para todas las medidas de IDD, en modo activo de operación, son: OSC1 = Onda cuadrada externa; todas las patillas triestado, conectadas a VDD. -MCLR = VDD; WDT habilitado o inhibido, según 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 VDD y VSS. 4: Para configuración de oscilador RC, no se incluye la corriente a través de la R externa. Ésta puede estimarse con la fórmula Ir = VDD/2Rext (mA), con Rext en K Ω . El oscilador del Timer1, cuando se habilita, añade 20 µ A a la corriente especificada. especificada. Este valor sirve 5: como guía de diseño, pero no está probado. 6: La corriente ∆ es la corriente adicional consumida cuando este periférico está habilitado. Esta corriente se añadirá a la base IDD o IPD medida. D023*
Microcontrolador PIC16F876
Tabla 15-3:
Características Característica s DC:
Página 132
PIC16F873/874/876/877-04 PIC16F873/874/876/ 877-04 (Comercial, Industrial) Industri al) PIC16F873/874/876/877-20 (Comercial, Industrial) PIC16L873/874/876/877-04 (Comercial, Industrial) Condiciones de trabajo Estándar (salvo indicación en contra) Temperatura de trabajo –40 ºC ≤ TA ≤ +85 ºC para industrial y 0 ºC ≤ TA ≤ +70 ºC para comercial
CARACTERÍSTICAS DC Parám. Nº
D030 D030A D031 D032 D033 D034 D034A D040 D040A D041 D042 D042A D043 D044 D044A D070
D060
Características
Símbolo
Tensión 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 Tensión entrada alta Puertos E/S con buffer TTL
con buffer ST -MCLR OSC1 (XT, HS y LP) OSC1 (en modo RC) Puertos RC3 y RC4 con buffer ST con SMBus PORTB con pequeña corriente de polarización
VIL
VSS VSS VSS VSS VSS
Típ.†
---
VSS -0,5
VIH
0,8VDD 0,8VDD 0,7VDD 0,9VDD
---
0,7VDD 1,4 IPURB
50
2 50
I de fuga en entrada (Notas 2 y 3) Puertos E/S
D061 D063
-MCLR, RA4/T0CKI OSC1
D080
Voltaje salida baja Puertos E/S
Máx.
0,15VDD 0,8V 0,2VDD 0,2VDD 0,3VDD
Unid.
V Nota 1 En todo el rango V DD para VDD = 4,5 a 5,5 V En todo el rango V DD 4,5 V ≤ VDD ≤ 5,5 V
VDD VDD VDD VDD VDD VDD VDD VDD 5,5
V
400
µA
---
En todo el rango V DD para VDD = 4,5 a 5,5 V
µA
---
---
0,6
VDD = 5 V, VPIN = VSS
VSS ≤ VPIN ≤ VDD, patilla en alta imped. VSS ≤ VPIN ≤ VDD VSS ≤ VPIN ≤ VDD, config. XT, HS y LP.
+/- 5 +/- 5
VOL
En el rango de VDD Nota 1
+/- 1 ---
Condiciones
En todo el rango V DD 4,5 V ≤ VDD ≤ 5,5 V
0,3VDD 0,6
2,0 0,25VDD +0,8
IIL
D083
Mín.
V
IOL=8,5mA, VDD=4,5V de -40º C a 85 ºC IOL=1,6mA, VDD=4,5V de -40º C a 85 ºC
OSC2/CLKOUT (config. en modo RC) Símbolo: * Parámetros característicos, pero no probados. † Dato en columna “Típ” es a 5V, 25ºC, salvo otra especificación. Estos parámetros son para guía de diseño, pero no están probados. Nota 1: En configuración 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 tensión aplicado. Los niveles expresados expresados representan representan condiciones condiciones normales de trabajo. trabajo. Corrientes Corrientes mayores de fuga se obtendrán obtendrán con diferentes tensiones de entrada. 3: Una corriente negativa quiere expresar la corriente saliente de la patilla.
Microcontrolador PIC16F876
Página 133
Condiciones de trabajo Estándar (salvo indicación en contra) Temperatura de trabajo –40 ºC ≤ TA ≤ +85 ºC para industrial y 0 ºC ≤ TA ≤ +70 ºC para comercial
CARACTERÍSTICAS DC Parám. Nº D090
Características
Símb.
D150
D100 D101 D102 D120 D121 D122
Típ.† Máx. Unid.
Tensión salida alta Puertos E/S (Nota 3) VOH
D092
Mín.
OSC2/CLKOUT (config. modo RC) Tensión 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 Duración VDD para lectura-escritura
Ciclo de borrado-escritura Memoria de Programa FLASH D130 Duración D131 VDD para lectura D132a VDD para borrado-escritura
VOD
COSC2
VDD - 0,7
---
---
V
---
---
8,5
V
---
---
15
CIO CB
pF 50 400
ED VDRW
100K Vmín
-----
--5,5
TDEW
---
4
8
EP VPR
1000 Vmín Vmín
-------
--5,5 5,5
Condiciones 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
En modos XT, HS y LP, cuando se usa reloj externo en OSC1.
E/W 25 ºC a 5V V Usando EECON para leer/escribir ms
Vmín= mínima tensión de trabajo
E/W 25 ºC a 5 V V Vmím = Mín. tensión de trabajo V usando EECON para leer-escribir
D133 Ciclo de borrado-escritura TPEW --4 8 ms Vmím = Mín. tensión de trabajo Símbolo: * Parámetros característicos, pero no probados. † Dato en columna “Típ” es a 5V, 25ºC, salvo otra especificación. Estos parámetros son para guía de diseño, pero no están probados. Nota 1: En configuración 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 tensión aplicado. Los niveles expresados representan condiciones normales de trabajo. Corrientes mayores de fuga se obtendrán con diferentes tensiones de entrada. 3: Una corriente negativa quiere expresar la corriente saliente de la patilla.
Microcontrolador PIC16F876
Tabla 15-1: Parám. Símb. Nº
Página 134
REQUISITOS DE TEMPORIZACIÓN DE RELOJ EXTERNO Características Frecuencia CLKIN externo (Nota 1)
FOSC
Frecuencia del oscilador (Nota 1) Período externo CLKIN (Nota 1) 1
TOSC
Período del oscilador (Nota 1) 2
TCY
Duración ciclo instrucción (Nota 1)
Mín.
Típ.†
Máx.
Unid.
DC DC DC DC DC 0,1 4 5 250 250 50 5 250 250 250 50 5
-----------------------------------
4 4 20 200 4 4 20 200 ----------10,0 250 250 ---
MHz MHz MHz MHz MHz MHz MHz KHz ns ns ns µs ns ns ns ns µs
2 00
TCY
DC
ns
Condiciones 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
ns 100 ----Oscilador XT 2,5 ----µ s Oscilador LP 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 Símbolo: † Dato en columna “Típ” es a 5V, 25ºC, salvo otra especificación. Estos parámetros son para guía de diseño, pero no están probados. Nota 1: Período del ciclo de instrucción (TCY) igual a cuatro períodos de la entrada de oscilación. Todos los valores especificados se basan en la caracterización de los datos para un tipo de oscilador particular, bajo condiciones de trabajo estándar, con el dispositivo en ejecución de códigos. Exceder estos límites especificados puede generar oscilaciones inestables y consumos de corriente mayores que los ofrecidos. Todos los dispositivos se han probado trabajando con los valores “Mín.”, y con un reloj externo aplicado a la patilla OSC1/CLKIN. Cuando se usa una entrada de reloj externo, el límite de período “Máx.” es DC (sin reloj) para todos los dispositivos. 3
TOSL, TOSH
Duración entrada reloj externo (OSC1) alta o baja
Microcontrolador PIC16F876
Página 135
TABLA 15-2: NECESIDADES DE TEMPORIZACIÓN DE CLKOUT Y E/S Parám . Símbolo Características Nº 10* 11* 12* 13* 14* 15* 16* 17* 18* 19* 20* 21* 22†† 23†† *
TosH2ckL TosH2ckH Tc k R Tc k F TckL2ioV TioV2ckH TckH2ioI TosH2ioV
OSC1↑ a CLKOUT↓ OSC1↑ a CLKOUT↑ Tiempo subida CLKOUT Tiempo bajada CLKOUT CLKOUT↓ a salida válida Puerto Entrada Puerto válida antes de CLKOUT↑ Mantenimiento entrada puerto después CLKOUT↑ OSC1↑ (ciclo Q1) a salida puerto válida OSC1↑ (ciclo Q2) a entrada puerto Estándar (F) TosH2ioI válida (tiempo manten. entrada Extendida(LF ) puerto) TioV2osH Entrada válida puerto a OSC1↑ Estándar (F) Tiempo de subida de salida de TioR Extendida(LF puerto ) Estándar (F) Tiempo de bajada de salida de TioF Extendida(LF Puerto ) Tinp Tiempo en bajo o alto en patilla INT Tiempo en bajo o alto para INT por cambio en Trbp patilla RB7 – RB4
Mín.
Típ.†
Máx.
----------Tosc+200 0 --10 0
75 75 35 35 ------10 0 ---
20 0 20 0 100 1 00 0,5TCY+20 ----255 ns
20 0
---
ns
0 ---
--10
--40
ns ns
---
---
14 5
ns
---
10
40
ns
---
---
14 5
ns
TCY
---
---
ns
TCY
---
---
ns
Unid. Condicio. ns ns ns ns ns ns ns ns
Nota 1 Nota 1 Nota 1 Nota 1 Nota 1 Nota 1 Nota 1
Estos parámetros son característicos pero no están probados. Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de diseño pero no están verificados. †† Estos parámetros son sucesos asíncronos no relacionados con ningún flanco de reloj interno. Nota 1: Las medidas se han realizado en modo RC, donde la salida CLKOUT es 4Tosc. †
Microcontrolador PIC16F876
Página 136
TABLA 15-2: NECESIDADES DE TEMPORIZACIÓN DE CLKOUT Y E/S Parám. Símb. Características Mín. Típ.† Máx. Unid. Nº 3 0*
TmcL Ancho pulso -MCLR
2
---
---
µs
3 1*
Tw d t
Período temporiz. WDT
7
18
33
ms
3 2*
Tost
Período arranque oscilación
---
1024Tosc
---
---
3 3*
Tpwrt Período conexión
28
72
1 32
ms
Condicio. VDD = 5V, -40 ºC a + 85 ºC VDD = 5V, -40 ºC a + 85 ºC Tosc = perío. OSC1 VDD = 5V, -40 ºC a + 85 ºC
Tiempo de alta impedancia desde ----2,1 µs bajada –MCLR o reset WDT 3 5* TBOR Ancho pulso de reset BOR 1 00 ----VDD ≤ VBOR (D005) µs * Estos parámetros son característicos pero no están probados. Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de † diseño pero no están verificados. 3 4*
TIOZ
Microcontrolador PIC16F876
Página 137
TABLA 15-4: NECESIDADES DE RELOJ EXTERNO PARA TIMER1 Y TIMER2 Parám. Típ† Símb. Características M ín Nº 40 *
Tt0H
Ancho pulso alto T0CKI
41 *
Tt0L
Ancho pulso bajo T0CKI
42 *
Tt0P
Período T0CKI
45 *
Tt1H
Tiempo alto T1CKI
46 *
Tt1L
Tiempo bajo T1CKI
Sin Prediv. Con Prediv. Sin Prediv. Con Prediv. Sin Prediv. Con Prediv.
Síncrono, Predivisor = 1 Síncr., Prediv. = Estándar(F) 2, 4 y 8 Extendida(LF) Estándar(F) Asíncrono Extendida(LF) Síncrono, Predivisor = 1 Síncr., Prediv. = Estándar(F) 2, 4 y 8 Extendida(LF) Estándar(F) Asíncrono Extendida(LF) Estándar(F)
47 *
Tt1P
Período de entrada T1CKI
Síncrono Extendida(LF)
Estándar(F) Extendida(LF) Margen de frecuencia de entrada oscilador Ft1 Timer1 (Oscilador habilitado activando el bit T1OSCEN) Retardo de increm. de Timer con respecto al TCKEZtmr1 flanco de reloj externo Asíncrono
48
* †
Máx
Unid .
-----------
-----------
ns ns ns ns ns
---
---
ns
---------------------
---------------------
ns ns ns ns ns ns ns ns ns ns
---
---
ns
N=valor Prediv. (1, 2, 4, 8)
---
---
ns
N=valor Prediv. (1, 2, 4, 8)
-----
-----
ns ns
DC
---
20 0
KHz
2Tosc
---
7Tosc
---
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 1 00
Condiciones Debe coincidir param. 42 Debe coincidir param. 42 N=valor Prediv. (2, 4,... 256) Debe coincidir también el parámetro 47 Debe coincidir también el parámetro 47
Estos parámetros son característicos pero no están probados. Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de diseño pero no están verificados.
Microcontrolador PIC16F876
Página 138
TABLA 15-5: NECESIDADES DE CAPTURA/COMPARACIÓN/PWM (CCP1 Y CCP2) Parám Típ† Máx Unid. Condiciones . Símb. Ca C aracterísticas Mín Nº 50* 51* 52*
Tiempo bajo TLC entrada CCP1 y CCP2 Tiempo alto TccH entrada CCP1 y CCP2
Sin Predivisor Estándar(F) Con Predivisor Extendida(LF) Sin Predivisor 10 Con Predivisor 20
TccP Período de entrada CCP CCP1 y CCP CCP2
0,5TCY+20 10 20 0,5TCY+20 10 20 3Tcy + 40 N ---------
-----------
-------------
ns ns ns ns ns ns
---
---
ns
N=Valor del Predivisor (1, 4 o 16)
10 25 ns Tiempo de subida de la salida Estándar(F) de CCP1 y CCP2 Extendida(LF) 25 50 ns 10 25 ns Tiempo de bajada de la salida Estándar(F) 54* Tc c F de CCP1 y CCP2 Extendida(LF) 25 45 ns * Estos parámetros son característicos pero no están probados. Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de † diseño pero no están verificados. 53*
Tc c R
Microcontrolador PIC16F876
Página 139
TABLA 15-6: NECESIDADES PUERTO SERVIDOR PARALELO (DISPOSITIVOS DE 40 PATILLAS) Parám . Símb. Características Mín Típ† Máx Unid. Condiciones Nº 62
TdtV2wr Dato válido en la entrada antes de –WR ↑ o –CS↑ 20 25 H (tset-up)
63*
TwrH2dtI
64
TrdL2dtV
Mantenimiento dato entrada Estándar(F) a(LF) después de –WR ↑ o –CS↑ (thold) Extendida(L
20 35 -----
-----
-----
ns ns
-----
80 90
ns ns
Sólo rango extendido
Sólo rango extendido
65 TrdH2dtI 10 --30 ns * Estos parámetros son característicos pero no están probados. Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de † diseño pero no están verificados.
Microcontrolador PIC16F876
Página 140
Microcontrolador PIC16F876
Página 141
Microcontrolador PIC16F876
Página 142
TABLA 15-7: NECESIDADES MODO SPI Parám . Símb. Características Nº 70* 71* 72* 73* 74*
TssL2scH TscH TscL TdiV2scH, TdiV2scL TscH2diL, TscL2diL
Típ† Máx Unid. Cond.
Mín
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 anticipación de SDI respecto flanco SCK Tiempo estable de SDI respecto a flanco de SCK
TCY TCY+20 TCY+20
-------
-------
ns ns ns
10 0
---
---
ns
10 0
---
---
ns
Estándar (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 Estándar (F) 78* TscR en modo maestro Extendida (LF) --25 50 ns 79* TscF Tiempo de bajada salida SCK modo maestro --10 25 ns Estándar (F) ----50 ns TscH2doV, Dato de salida SDO válido 80* TscL2doV después 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 TscL2ssH -SS↑ después de flanco SCK * Estos parámetros son característicos pero no están probados. Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de † diseño pero no están verificados. 75*
T doR
TABLA 15-8: NECESIDADES NECESIDADES DE LOS BITS DE START Y STOP DEL BUS I2C Parám . Símb. Características Mín Típ Máx Unid. Nº 90 91
TSU:STA THD:STA
470 0 Modo 400KHz 600 400 Modo 100KHz 0 Tiempo estable bit START Modo 400KHz 600 Antelación bit START
Modo 100KHz
---
---
---
---
---
---
---
---
Cond.
ns
Solamente en condición repetición de START
ns
Después de este período se genera el primer reloj
Microcontrolador PIC16F876 92
TSU:STO
Antelación bit STOP
93
THD:STO Tiem Tiempo po esta establ blee bit bit STOP STOP
Página 143 Modo 100KHz 470 0 Modo 400KHz 600 Modo odo 100K 100KHz Hz 400 400 0 Modo 400KHz 600
---
---
ns
-----
-----
ns
---
---
Microcontrolador PIC16F876
Página 144
TABLA 15-9: NECESIDADES DE LOS DATOS DEL BUS I2C Parám. Símbolo Características Mín Máx Unid. Condiciones Nº TABLA 15-10: NECESIDADES DE TRANSMISIÓN SÍNCRONA USART Mínima operación 4 ,0 Parám. Símbolo Cara1c0t0erKísHtizcas Mín Típ† M áx Unid. Cond. 1,5MHz Nº Tiempo alto de s µ 1 00 THIGH --Mínima operación reloj 4 0 0K H z 0 ,6 120 120 TckH2 ckH2dt dtV V SYNC SYNC XMI XMIT T (Mae (Maesstro tro y Ser Servido vidorr) Estándar (F) ----- 10MHz 80 ns Móadureloj lo SSalto P Ex1t,e5nTdCY Dato salida válido respecto ida (LF) 100 121 Tckrf Tiempos de subida y baja1d0a0K deHrzeloj Está4n,d7ar (F) ----- Mínima 45 noperación s 1,5MHz (modo Maestro) E x t e n d i d a ( L F ) 5 0 Tiempo bajo de µ s Mínima operación 112021 Tdtrf TLOW Tiereloj mpos de subida y baja4d0a0K deHl zdato Está1n,d3ar (F) --- ----45 ns 10MHz de salida Extendida (LF) 50 Módespecificación ulo SSP 1en ,5Tcontra. CY Dato en columna “Típ.” es a 5V, 25 ºC, salvo Estos parámetros sirven como guía de † de subida 100KHz --1 000 diseño pero no estánTiempo verificados. 1 02 TR de ns 4 0 0K H z 20+0,1Cb 300 Cb entre 10 y 400 pF SDA y SCL Tiempo de bajada 100KHz --1 03 TF de 30 0 ns 4 0 0K H z 20+0,1Cb Cb entre 10 y 400 pF SDA y SCL 1 0 0K H z 4 ,7 Solamente en Antelación bit 90 TSU:STA --µ s condición START 4 0 0K H z 0 ,6 repetición de START 1 0 0K H z 4 ,0 Después de este Tiempo estable del período 91 THD:STA --µ s se genera el primer bit START 4 0 0K H z 0 ,6 reloj Tiempo estable 1 0 0K H z 0 --ns 1 06 THD:DAT dato de 4 0 0K H z 0 0,9 µs entrada Antelación del dato 100KHz 250 1 07 TSU:DAT de --ns Nota 2 4 0 0K H z 100 entrada 1 0 0K H z 4 ,7 Antelación bit 92 TSU:STO --µs STOP 4 0 0K H z 0 ,6 --3 500 Nota 1 Salida válida desde 100KHz 1 09 TAA ns reloj 4 0 0K H z ----1 0 0K H z 4 ,7 Tiempo bus libre antes de 1 10 TBUF Tiempo de bus libre --s µ inicio nueva 4 0 0K H z 1 ,3 transmisión Cb Capacidad de carga del bus --400 pF Nota 1: Como transmisor, el dispositivo proporciona un retardo mínimo para saltar la región indefinida del flanco de bajada de SCL para evitar generaciones indeseadas de condición de START y STOP. 2: Un dispositivo de modo rápido (400KHz) de bus I 2C puede usarse en modo estándar de 100KHz, pero debe respetarse el requisito de TSU:DAT ≥ 250 ns. Esto se producirá automáticamente en caso de que el dispositivo no alargue el período bajo de la señal SCL. Si el dispositivo alarga el período de la señal SCL, sacará el bit de datos próximo en la línea SDA TRmáx + TSU:DAT = 1000 + 250 = 1250 ns, antes de abandonar la línea SCL.
Microcontrolador PIC16F876
Página 145
TABLA 15-11: NECESIDADES DE RECEPCIÓN SÍNCRONA USART Parám. Símbolo Características Mín Nº
Máx
Unid.
Cond.
SYNC RCV (Maestro y Servidor) 15 ----ns Antelación de dato respecto a CK ↓ Tiempo estable del dato después de 12 6 TckL2dtI 15 ----ns CK ↓ Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de diseño pero no están verificados. 12 5
†
Típ†
TdtV2ckL
TABLA 15-12: PIC16F873/874/876/877-04 (COMERCIAL, INDUSTRIAL) PIC16F873/874/876/877-20 (COMERCIAL, INDUSTRIAL) PIC16LF873/874/876/877-04 (COMERCIAL, INDUSTRIAL) Parám Típ† . Símb. Características Mín Máx Nº
Unid.
A 01
NR
Resolución
---
---
10bits
bit
A 03
EIL
Error linealidad integral
---
---
< +/- 1
LSB
A 04
EDL
Error linealidad diferencial
---
---
< +/- 1
LSB
A 06
EOFF
Error desplazamiento (offset)
---
---
< +/- 2
LSB
A 07
EGN
Error de ganancia
---
---
< +/- 1
LSB
A 10
---
Monotonicidad(3)
---
garantizado
---
---
A 20
VREF
Voltaje de referencia (VREF+ - VREF-)
2,0
---
VDD+0,3
V
A 21 A 22 A 25
VREF+ Tensión alta de de referencia AVDD-2,5 VREF- Tensión baja de referencia AVSS-0,3 VAIN Tens Tensió iónn de de ent entra rada da anal analóg ógic icaa VSS – 0,3 Impedancia recomendada para ZAIN --la fuente de tensión analógica IAD Corriente de Estándar ---
---
AVDD+0,3 VREF+ - 2 VREF +0,3
V V V
---
1 0 ,0
K Ω
2 20
---
A 30 A 40
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 Mínimo para aseguarar 10 bits de precisión
µ A Corriente media
Microcontrolador PIC16F876
conversión A/D
A 50
*
IREF
Página 146
Extendida
Corriente de la entrada VREF (Nota 2)
---
90
---
10
---
10 00
---
---
10
cuando A/D es µ A efectivo (Nota 1) Durante adquisición de VAIN. Basada en la diferencia entre µA V HOLD y VAIN, que carga CHOD. Ver Sección 11.1. Durante el ciclo de µ A conversión A/D
Estos parámetros son característicos pero no están probados. Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de † diseño pero no están verificados. Nota 1: Cuando A/D está desactivado, solamente consume la pequeña corriente de fuga. Las especificaciones de bajo consumo incluyen cualquier fuga desde el módulo 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 conversión A/D nunca disminuye con el incremento de tensión en la entrada, y no pierde códigos.
Microcontrolador PIC16F876
Página 147
TABLA 15-13: NECESIDADES DE CONVERSIÓN A/D Parám. Símb. Características Mín Nº 130
TAD
131
TCNV
Estándar Extendida Período reloj A/D Estándar Extendida Tiempo de conversión (no incluido el tiempo S/H) (Nota 1)
1,6 3,0 2,0 3,0 Nota2
132
TACQ Tiempo de adquisición
134
TGO
Q4 a incio del reloj A/D
Típ†
Máx Unid.
----4,0 6,0
----6,0 9,0
µ µ µ µ
---
12
TAD
40
---
µs
1 0*
---
---
---
TOSC/2 ξ
---
s s s s
Condiciones Basado TOSC, VREF ≥ 3,0V Basado TOSC, VREF ≥ 2,0 V Modo RC A/D. Modo RC A/D.
El tiempo mínimo es el de programación del amplificador. Éste se usará si la nueva tensión de entrada no µ s ha cambiado más de 1 LSB (p. e., 20,0 mV a 5,12 V) desde la última tensión capturada (mientras está activo CHOLD . Si se selecciona reloj RC como fuente de A/D, se añade un tiempo TCY antes del --inicio del reloj A/D. Esto permite la ejecución de la instrucción SLEEP.
*
Estos parámetros son característicos pero no están probados. Dato en columna “Típ.” es a 5V, 25 ºC, salvo especificación en contra. Estos parámetros sirven como guía de diseño pero no están verificados. Garantizada, esta especificación, para el diseño. ξ Nota 1: El registro ADRES se leerá en el siguiente ciclo TCY. Nota 2: Para condiciones mínimas ver Sección 11.1 †
Leyenda:
MM...M MM...M XX...X XX...X AA BB
Información Información del número número particular particular de Microc Microchip. hip. Inform Informaci ación ón especí específic ficaa del fabric fabricant ante. e. Códi Código go de año año (úl (últi tima mass 2 cifr cifras as del del año año del del cal calen enda dari rio) o).. Códi Código go de sema semana na (la (la prim primer eraa sem seman anaa de Ener Eneroo ser seráá “01” “01”))
Microcontrolador PIC16F876 C
D E= Nota:
Página 148
Códi Código go que que fa facili cilita ta la plan planta ta de fabr fabric icaación ión de de la la ba base de sil silic icio io.. O = Vendedor extranjero. C = Línea de 5”. S = Línea de 6”. H = Línea de 8”. Número de revisión de máscara. Códi Código go de la plan planta ta de mo mont ntaj aje, e, o reg región ión de orig origen en en la que que se se mon montó tó el bloq bloque ue..
En el caso de que no esté marcado el número particular de Microchip en una línea, se habrá juntado en la siguiente, para limitar el número de caracteres disponible por la especificación del fabricante.
• La marcación estándar en dispositivos OTP consiste en un número particular de Microchip, código de año, código de semana, código de planta, revisión de máscara y código de montaje.
Microcontrolador PIC16F876
Página 149
Microcontrolador PIC16F876
Unidades Límites dimensión Distancia entre filas Número de patillas Paso entre patillas
Página 150
n p
Ancho patilla
B
Ancho parte alta de patilla
B1
Radio de taladro en placa
R
Grosor de patilla
c
Altura desde plano de placa
A
Altura desde placa a centro
A1
Separación de la placa base
A2
Largo de patilla en taladro
L
Longitud de encapsulado
D
Ancho hasta doblado de patillas
E
Ancho de cápsula plástica
E1
Distancia Distancia extrema extrema entre filas de patillas patillas eB Ángulo de biselado de cápsula
α
PULGADAS MÍN NOM MÁX 0,300 28 0,100 0,01 0,019 0,022 6 0,04 0,053 0,065 0 0,00 0,005 0,010 0 0,00 0,010 0,012 8 0,14 0,150 0,160 0 0,07 0,090 0,110 0 0,01 0,020 0,025 5 0,12 0,130 0,135 5 1,34 1,365 1,385 5 0,28 0,288 0,295 0 0,27 0,283 0,295 0 0,32 0,350 0,380 0 5 10 15
MILÍMETROS MÍN NOM MÁX 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,1 34,67 35,18 6 7,11
7,30
7,49
6,86
7,18
7,49
8,13
8,89
9,65
5
10
15
Microcontrolador PIC16F876 Ángulo de biselado inferior de cápsula
Unidades Límites dimensión Paso entre patillas Número de patillas
Página 151 5
β
10
p n
Altura desde plano de placa
A
Altura desde placa a centro
A1
Separación de la placa base
A2
Longitud de encapsulado
D
Ancho hasta doblado de patillas
E
Ancho de cápsula plástica
E1
Biselado superior indicativo
X
Radio de doblado superior
R1
15
5
PULGADAS MÍN NOM MÁX 0,050 28 0,09 0,099 0,104 3 0,04 0,058 0,068 8 0,00 0,008 0,011 4 0,70 0,706 0,712 0 0,29 0,296 0,299 2 0,39 0,407 0,419 4 0,01 0,020 0,029 0 0,00 0,005 0,010
10
15
MILÍMETROS MÍN NOM MÁX 1,27 28 2,36
2,50
2,64
1,22
1,47
1,73
0,10
0,19
0,28
17,7 17,93 18,08 8 7,42
7,51
7,59
10,0 10,33 10,64 1 0,25
0,50
0,74
0,13
0,13
0,25
Microcontrolador PIC16F876
Página 152
5 Radio de doblado inferior R2 0,00 5 0,01 Largo de apoyo en placa, de patilla L 1 Ángulo de apoyo en placa 0 φ 0,01 Distancia Distancia desde desde cápsula cápsula hasta inicio de de doblado doblado superior superior L1 0 0,00 Grosor de patilla c 9 0,01 Ancho patilla B 4 Ángulo de biselado de cápsula 0 α Ángulo de biselado inferior de cápsula 0 β
Unidades Límites dimensión Distancia entre filas Número de patillas
n
0,005 0,010 0,13
0,13
0,25
0,016 0,021 0,28
0,41
0,53
4
8
0,015 0,020 0,25
0,38
0,51
0,011 0,012 0,23
0,27
0,30
0,017 0,019 0,36
0,42
0,48
12 12
15 15
4
12 12
8
15 15
0
0 0
PULGADAS MILÍMETROS MÍN NOM MÁX MÍN NOM MÁX 0,600 15,24 40 40
Microcontrolador PIC16F876
Página 153
Paso entre patillas
p
Ancho patilla
B
Ancho parte alta de patilla
B1
Radio de taladro en placa
R
Grosor de patilla
c
Altura desde plano de placa
A
Altura desde placa a centro
A1
Separación de la placa base
A2
Largo de patilla en taladro
L
Longitud de encapsulado
D
Ancho hasta doblado de patillas
E
Ancho de cápsula plástica
E1
Distancia Distancia extrema extrema entre filas de patillas patillas eB Ángulo de biselado de cápsula Ángulo de biselado inferior de cápsula
α β
0,01 6 0,04 5 0,00 0 0,00 9 0,11 0 0,07 3 0,02 0 0,12 5 2,01 3 0,53 0 0,54 5 0,63 0 5 5
0,100
2,54
0,018 0,020 0,41
0,46
0,51
0,050 0,055 1,14
1,27
1,40
0,005 0,010 0,00
0,13
0,25
0,010 0,011 0,23
0,25
0,28
0,160 0,160 2,79
4,06
4,06
0,093 0,113 1,85
2,36
2,87
0,020 0,040 0,51
0,51
1,02
0,130 0,135 3,18
3,30
3,43
51,1 3 13,4 0,535 0,540 6 13,8 0,565 0,585 4 16,0 0,610 0,670 0 10 15 5 10 15 5 2,018 2,023
51,26 51,38 13,59 13,72 14,35 14,86 15,49 17,02 10 10
15 15
Microcontrolador PIC16F876
Unidades Límites dimensión Paso entre patillas Número de patillas Ancho hasta centro de patillas extremas
Página 154
p n n1
Altura desde plano de placa
A
Altura desde placa a centro
A1
Separación de la placa base
A2
Radio de doblado superior
R1
Radio de doblado inferior
R2
Largo de apoyo en placa, de patilla
L
Ángulo de apoyo en placa
φ
Distancia Distancia desde desde cápsula cápsula hasta inicio de de doblado doblado superior superior L1 Grosor de patilla
c
Ancho patilla
B
Long Longit itud ud entr entree ext extre remo moss de de pat patil illa lass ext extre rema mass lad ladoo 1
D1
Long Longit itud ud entr entree ext extre remo moss de de pat patil illa lass ext extre rema mass lad ladoo 2
E1
Longitud de encapsulado lado 1
D
Longitud de encapsulado lado 2
E
Biselado esquina indicativo de patilla 1
X
Ángulo de biselado de cápsula Ángulo de biselado inferior de cápsula
α β
PULGADAS MÍN NOM MÁX 0,031 44 11 0,03 0,043 0,047 9 0,01 0,025 0,035 5 0,00 0,004 0,006 2 0,00 0,003 0,010 3 0,00 0,006 0,008 3 0,00 0,010 0,015 5 0 3,5 7 0,00 0,008 0,013 3 0,00 0,006 0,008 4 0,01 0,015 0,018 2 0,46 0,472 0,482 3 0,46 0,472 0,482 3 0,39 0,394 0,398 0 0,39 0,394 0,398 0 0,02 0,035 0,045 5 5 10 15 5 12 15
MILÍMETROS MÍN NOM MÁX 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,7 12,00 12,25 5 11,7 12,00 12,25 5 9,90 10,00 10,10 9,90 10,00 10,10 0,64
0,89
1,14
5 5
10 12
15 15
Microcontrolador PIC16F876
Unidades Límites dimensión Paso entre patillas Número de patillas Ancho hasta centro de patillas extremas
Página 155
p n n1
Altura desde plano de placa
A
Altura desde placa a centro
A1
Separación de la placa base
A2
Radio de doblado superior
R1
Radio de doblado inferior
R2
Largo de apoyo en placa, de patilla
L
Ángulo de apoyo en placa
φ
Distancia Distancia desde desde cápsula cápsula hasta inicio de de doblado doblado superior superior L1 Grosor de patilla
c
Ancho patilla
B
Long Longit itud ud entr entree ext extre remo moss de de pat patil illa lass ext extre rema mass lad ladoo 1
D1
Long Longit itud ud entr entree ext extre remo moss de de pat patil illa lass ext extre rema mass lad ladoo 2
E1
Longitud de encapsulado lado 1
D
Longitud de encapsulado lado 2
E
Biselado esquina indicativo de patilla 1
X
Ángulo de biselado de cápsula Ángulo de biselado inferior de cápsula
α β
PULGADAS MÍN NOM MÁX 0,031 44 11 0,07 0,086 0,093 9 0,03 0,044 0,056 2 0,00 0,006 0,010 2 0,00 0,005 0,010 5 0,00 0,012 0,015 5 0,01 0,020 0,025 5 0 3,5 7 0,01 0,016 0,021 1 0,00 0,007 0,009 5 0,01 0,015 0,018 2 0,51 0,520 0,530 0 0,51 0,520 0,530 0 0,39 0,394 0,398 0 0,39 0,394 0,398 0 0,02 0,035 0,045 5 5 10 15 5 12 15
MILÍMETROS MÍN NOM MÁX 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,9 13,20 13,45 5 12,9 13,20 13,45 5 9,90 10,00 10,10 9,90 10,00 10,10 0,64
0,89
1,14
5 5
10 12
15 15