You are on page 1of 13
Bo HExiweAR CD oot yours cary. PRODUCTS SHOP LEARN BOOKS ~—LIBSTOCK FORUM = HELPDESK «QQ fi 3.2 PRINCIPALES REGISTROS SFR MIKROELEKTRONIKA El siguiente texto describe los principales registros SFR del microcontrolador PIC16F887. Los bits de cada registro controlan los circuitos diferentes dentro del chip, asi que no es posible clasificarlos en grupos especiales. Por esta razén, se describen junto con los procesos que controlan, Registro STATUS RM Bled ectlocertre El registro STATUS contiene: el estado aritmético de datos en el registro W, el estado RESET, los bits para seleccionar el banco para los datos de la memoria. + IRP — Ragistro de seleccién de Banco (usado para direeclonamiento indirecto) — 1 ~Bancos 0 y 1 son activos (localidades de memoria OOh-FFh) = 0 —Bancos 2 y 3 son activos (localidades de memoria 100h-1FFh) ‘+ RP1,RPO — Registro de seleccién de banco (usado para direccionamiento directo), Ret RRO BANCOACTWO ° ° Banco 0 ° Banco 1 1 ° Banco 2 1 Banco 3 + TO -Time-out bit (bit de salida del temporizador perro guardidn) 1 Después de encender el microcontrolador, después de ejecutarse la instrucciénesor que reinicia al WOT (temporizador perro guardidn) o después de ejecutarse la instruccién SLEEP que pone al rmicrocontrotador en el modo de bajo consumo. ~ 0 — Después de acabarse el tiempo de! WOT. + PD - Power-down bit (bit de apagado) = 1— Después de encender el microcontrolador, después de ejecutar la instrucciénemor que reinicia al wor. = 0 — Después de ejecutarse la instruccién steer que pone al microcontrolador en el modo de bajo consumo. + 2~Zero bit bit cero) — 1El resultado de una operacién égica o aritmética es 0 — 0—El resultado de una operacién ldgica 0 aritmética es distinto de 0. + DC - Digit carry/borrow bit (bit de acarreoipréstamo de digito) cambia al sumar o al restar si ocurre un “desbordamiento” o un "préstamo” en el resultado. = 1—Hubo acarreo del cuarto bit de orden bajo (nibble bajo) en el resultado. — 0—No hubo acarreo del cuarto bit de orden bajo (nibble bajo) en el resultado, + C ~Carry/Borrow bit (bit de acarreo/préstamo) cambia al sumar o al restar si ocurre un “desbordamiento” 0 un *préstamo” en el resultado, o sea si el resultado es mayor de 255 0 menor de 0. = 1 Ocurrié acarreo en el bit mas significative (MSB) del resultado. — 0 No ocurrié acarreo en el bit mas significativo (MSB) del resultado. Registro OPTION_REG [Repu [intepo | Tocs | rose | psa | psz_| psi | Pso_| Leyenda RM Bide mctralsertre (9) Deopute deren bt se pone uno El registro OPTION_REG contiene varios bits de control para configurar el pre - escalador del Temporizador O/WDT, el temporizador Timer0, la interrupcién externa y las resistencias pull-up en el puerto PORTS. + RBPU - Port B Pull up Enable bit (resistencia Pull Up Puerto B) ~ 1 ~Desactivadas. ~ 0 Activadas. ons + INTEDG Interrupt Edge Select bit (bit selector de flanco activo de la interrupcién externa) ~ 1 = Interrupcién por flanco ascendente en el RBO/INT. — 0 ~ Interrupcién por flanco descendente en el RBOJINT. Po + TOCS -TMRO Clock Source Select bit (bit selector de tipo de reloj para el Timer) = 1 —Pulsos introducidos a través del TOCKI (contador). — 0 ~Pulsos de reloj internos Fosc/4 (temporizador) + TOSE — TMRO Source Edge Select bit (bit selector de tipo de flanco en TOCKI) selecciona el flanco (ascendente o descendente) contado por el temporizador Timer0 por el pin RA4/TOCKI ~ 1 ~Incrementa en flanco descendente en el pin TOCKI, = 0—Incrementa en flanco ascendente en el pinTOCKI fos + PSA - Prescaler Assignment bit asigna el pre-escalador (hay s6lo uno) al temporizador o al WDT. — 1Pre — escalador se le asigna al WOT. = 0 —Pre — escalador se le asigna al temporizador Timer0, PS2, PS1, PSO Prescaler Rate Select bits (bit selector del valor del divisor de frecuencia) El valor del divisor de frecuencia se selecciona al combinar estos tres bis. Como se muestra en la siguiente tabla, el valor del divisor de frecuencia se le asigna al temporizador (Timer0) o al temporizador perro guardian (wor), ° ° ° 42 14 ° ° 1 14 12 ° 1 ° 18 14 ° 1 1 11618 1 ° 1 164 1:32 1 1 ° 4128 1:64 1 1 1 4286 1:128 Para conseguir el valor del divisor de frecuencia 1:1 cuando el temporizador Timer0 cuenta pulsos, preescalador debe ser asignado al WOT. En consecuencia, ol temporizador Timer0 no utiliza el pre-escalador, sino que cuenta directamente los pulsos generados por el oscilador, lo que era el objetivo. Vamos a hacerlo en mikroC... 7 $0 covande CIRO no v0 ejeaa, 1 Wor've'e reiniciar ot microcantratador cade 32.768 us (F-t se) */ 5 “oerfonA@e\= 2aap01111;// Prenoscoloor est osignade ot NOT C1128) & Gan elit; /7 Cononso on enn iodor para reinicior at #0" 35/7 1 keno entre estos dos conados CLMDT ro tbe exceder 2.768 wicrosepundos (128256) 18 Gea CLOT; // Conan en ensonbLador para reinicir al WOT 125/71 tenoo entre estos dot comands CLIDT no abe exceder 32.768 wicrosepunds (128256) 14 aim CLOWT; // Conando en enserlader para reinictar al WOT REGISTROS DEL SISTEMA DE INTERRUPCION Allllegar la pelicién de interrupcién, no significa que una interrupcién ocurriré autométicamente, puesto que debe ser habilitada por el usuario (por el programa) también. Por esta razén, hay bits especiales utlizados para habilitar 0 deshabiltar interrupciones. Es facil de reconocerlos por las letras IE contenidas en sus nombres (interrupt Enable — Interrupcién habilitada), Ademas, cada interrupcién se asocia con otro bit denominado bandera que indica que una peticién de interrupcién ha llegado sin verificar si esta habilitada. Asimismo, se reconocen con facilidad por las dos titimas letras contenidas en sus nombres — IF (Interrupt Flag - Bandera do interrupcién) cor bit IE bit IF| | “Interrupcién T | | | | IL T | Habiltada | Habit | | I T | | J Como hemos visto, toda la idea es muy simple y eficiente, Al llegar la peticién de interrupcién, primero el bit de bandera se pone a uno. Si el bit IE apropiado esta a cero (0), esta condicién serd ignorada completamente, De lo contrario, ocurre una interrupcién. Si varias fuentes de interrupcién estan habilitadas, es necesario detectar la activa antes de que la rutina de interrupcién se ponga a ejecutar. La deteccién de la fuente se realiza al comprobar los bits de las banderas. Cabe destacar que los bits de cada bandera no se ponen a cero automaticamente, sino por el software, mientras que la ejecucién de la rutina de interrupcién contintia ejecuténdose. Sino hacemos caso a este detalle, ocurrira otra interrupcién inmediatamente después de volver al programa principal, aunque no hay més peticiones de ejecucién. Simplemente, la bandera, asi como el bit IE, se quedan en uno. ‘Todas las fuentes de interrupcién tipicas para el microcontrolador PIC16F887 se muestran en la siguiente pagina, Fijese en lo siguiente: El bit GIE habilita/deshabilta simulténeamente las interrupciones no enmascaradas. El PEIE bit habilita/deshabilita las interrupciones no enmascaradas de periféricos. Esto no se refiere al temporizador Timer0 y a las fuentes de interrupcién del puerto PORTE. Para habilitar una interrupcién causada por el cambio del estado légico en el puerto PORTB, es necesario habilitarla para cada bit por separado. En este caso, los bits del registro IOCB se comportan como los bits IE de control. Salida del modo de rey Sisteme de hierspdién del iczcconeabdorPIC 18687 Registro INTCON El registro INTCON contiene varios bits de habilitacién y de bandera para el desbordamiento en el registro TMRO, ¢ interrupciones por el cambio del estado en el puerto PORTB y las interrupciones externas en el pin INT. + GIE - Global Interrupt Enable bit - (bit de habilitacién de interrupciones globales) controla simulténeamente todas las fuentes de interrupciones posibles. = 1 —Habilta las interrupciones no enmascaradas. — 0 —Deshabilita las interrupciones no enmascaradas. + PEIE — Peripheral Interrupt Enable bit (bit de habilitacién de interrupciones periféricas) es similar al bit GIE, ‘sin embargo controla interrupciones habilitadas por los periféricos. Eso significa que no influye en interrupciones causadas por el temporizador Timer0 0 por el cambio del estado en el puerto PORTB 0 por el ‘cambio en el pin RBO/INT. = 1—Habilta las interrupciones periféricas no enmascaradas, ~ 0 — Deshabilita las interrupciones periféricas no enmascaradas. ‘+ TOIE — TMR0 Overflow Interrupt Enable bit (bit de habilitacién de interrupciones por el desbordat temporizador Timer0) contrala interrupciones causadas por el desbordamiento del Timer0. 1 —Habilta interrupciones por Timer0. = 0 —Deshabilita interrupciones por Timer0. + INTE — RBO/INT External interrupt Enable bit (bit de habilitacién de la interrupcién externa en RBO) controla interrupciones causadas por el cambio del estado légico en el pin de entrada RBO/INT (interrupcién externa). — 1 —Habilta interrupciones externas INT. ~ 0 —Deshabilita interrupciones externas INT. + RBIE- RB Port Change Interrupt Enable bit (bit de habilitacién de interrupciones por cambios en el puerto PORTB). Cuando se configuran como entradas, los pines on el puerto PORTB pueden causar una interrupcién al cambiar el estado légico (no importa si se produce bajada o subida de tensién, lo que importa es que se produce un cambio). Este bit determina si una interrupcién va a ocurtir. — 1—Habilta interrupciones por cambio en el puerto PORTB. = 0 —Deshabilita interrupciones por cambio en el puerto PORTE. + TOIF — TMRO Overflow Interrupt Flag bit (bit de bandera de interrupcién por el desbor damiento del Timer0) detecta el desbordamiento en el registro del temporizador Timer0, o sea el contador se pone a cero. — 1 Enel registro del Timer ha ocurrido desbordamiento (esta bandera debe volverse a 0 por software). = 0 En el registro del Timer0 no ha ocurrido desbordamiento. + INTF — RBO/INT External Interrupt Flag bit (bit de bandera de interrupcién externa en INT) detecta el cambio en el estado légico en el pin INT. — 1 —Ha ocurrido una interrupcién externa por INT (esta bandera debe volverse a 0 por software) = 0 —No ha ocurrido una interrupcién externa por INT. + RBIF — RB Port Change Interrupt Flag bit (bit de bandera de interrupcién por cambio en el puerto RB) detecta cualquier cambio del estado légica de alguno de los pines de entrada en el puerto PORTB. — 1 Al menos uno de los pines de E/S de propésito general en el puerto PORTB ha cambido de valor. Después de leer el puerto PORTB, el bit RBIF debe volverse a 0 por software). — 0 —Ninguno de los pines de E/S de propésito general en el puerto PORTB ha cambiado de valor. Vamos a hacerlo en mikroC... F void iniaing 4 Mist. S'ANSELH~'0; 77 Todos 10s pines ae £/5 se configuran como digizaies 5 poate 71 Todos 0 pine "PORTE se ponen a cero 5 terse > 7 Todos Los pines del puerte PORTS menos PORTB: 4 se : 11 configuran coro sat 5 3 nore = 4; 1 So rabsliten os interrupciones por el cio en el puerto PORTE to Tock =i; 17 Se habs ike" to intarrapetin por el cambioven el pin # en el a Bae ay 182 La interrupeion global a 1) Oeste este punto, se produce una interrupesén con cualquier cambio a gies en el pin PORTE. Registro PIE1 El registro PIE1 contiene los bits de habilitacin de interrupciones periféricas. [- | apie | rcie | Txie_| sspie | CCPUE | TMR2IE [TRIE | ()_Despute del rani, bite pone a care + ADIE- A/D Converter Interrupt Enable bit (bit de habilitacién de interrupciones del convertidor A/D). — 1 —Habilta la interrupeién ADC, = 0 —Deshabilita la interrupcién ADC. + RCIE - EUSART Receive Interrupt Enable bit (bit de habilitacién de interrupciones de recepcién del EUSART). — 1 —Habilta la interrupcién de recepcién del EUSART. = 0 —Deshabilita la interrupcién de recepcién del EUSART. + TXIE— EUSART Transmit Interrupt Enable bit (bit de habilitacién de interrupciones de transmisién del EUSART). ~ 1 —Habilta fa interrupcién de transmisién del EUSART ~ 0 —Deshabilta fa interrupcién de transmisién del EUSART. + SSPIE ~ Master Synchronous Serial Port (MSSP) Interrupt Enable bit — (bit de habilitacién de la interrupcién del puerto serie sincrono maestro (MSSP) habilta generar una peticién de interrupcién después de cada transmisién de datos por el médulo de comunicacién serie sincrona (modo SPI 0 12C). ~ 1 -Habilita la interrupcién del MSSP. = 0 — Deshabilita la interrupeién del MSP. + CCP1IE - CCP1 Interrupt Enable bit (bit de habilitacién de la interrupcién del médulo 1 de ‘Comparacién/Captura/PWM — CCP1) permite generar una pelicién de interrupcién en el médulo CCP1 utilizado para procesamiento de la serial PWM. = 1 —Habilta la interrupeién CCP1 ~ 0 Deshabilta la interrupcién CCP 1, + TMR2IE- TMR2 to PR2 Match Interrupt Enable bit (bit de habilitacién de la interrupcién de igualdad ‘entre TMR2 y PR2) — 1 —Habilta la interrupcién de igualdad entre TMR2 y PR2 ~ 0 — Deshabilita la interrupcién de igualdad entre TMR2 y PR2. + TMRIIE— TMR1 Overflow Interrupt Enable bit (bit de habilitacién de la interrupcién de desbordamiento det temporizador Timert) habilta generar una peticién de interrupcién después de cada desbordamiento en el registro del temporizador Timer1, 0 sea el contador se pone a cero. = 1 —Habilita la interrupcién de desbordamiento del temporizador Timert. — 0 ~Deshabilta la interrupcién de desbordamiento del temporizador Timer. Vamos a hecerlo en mikroC... z Seen MRI y TWRIL. En cada rutsna ee ineerrucpiones, ta variable 3 Git serd increnntade gor a #7 5 unsigned stort ent; // Devinir te variable ent & “vote tnterrupe@)) —// Inscto’ ge Lo ruting de interrupcion 7 eet 7M precacirse' una’ interrupelon, La ere se : U1 Noceenenta por 1 3 pian iwmte = @;// £2 bit Ian se reinicta © 17 A tos regtrot del eaporzagor TW y TRL se Les 2» 71 Pinal de ta rutin de tnterrupetén 1 void maine { 15 "ANSEL = ANSELH - 0; // Todos 10s pines de £/S se configuran como digitale i Theow > ay U1 teeender et enpor zodor Tier 17 pimiinitie =e; // Fr bie TMF se pone e cere 1a Twa = ona 1 tscabiecar los valores iniciales pare el terzorizodor Tine 13 Twa Oe ze PleL.ntie 1, Webiizar Ya interrupctén at producirse un a 1 esnorconsento en el Taner 1 Reintcter ta vartople ent Rene 2 Into exco; Registro PIEZ El registro PIE2 también contiene varios bits de habilitacin de interrupciones. Losrie | cae | cue | cer | ecuie [uiPwuie] -__ | CcP2ie | (@)" _Deeputegetrancio, bt x pone cero + OSFIE — Oscillator Fail Interrupt Enable bit (bit de habilitacién de la interrupcién de fallo en el oscilador) = 1 —Habilta la interrupcién de fallo en el oscilador. ~ 0 ~Deshabilita la interrupcién de fallo en el oscitador. + C2IE- Comparator C2 Interrupt Enable bit (bit de habilitacién de la interrupcién del comparador C2) — 1 —Habilta la interrupcién del comparador C2. = 0 —Deshabilita Ia interrupcién del comparador C2. ‘+ CAIE— Comparator C1 Interrupt Enable bit (bit de habilitacién de la interupcién del comparador C1) = 1 —Habilta la interrupcién del comparador C1 — 0 — Deshabilita la interrupcién del comparador C1. + EEIE - EEPROM Write Operation Interrupt Enable bit (bit de habilitacién de la interrupelén de escritura ‘en la memoria EEPROM) — 1 —Habilta la interrupcién de escritura en la memoria EEPROM. — 0 — Deshabilita la interrupcién de escritura en la memoria EEPROM, + BCLIE - Bus Collision Interrupt Enable bit (bit de habilitacién de la interrupcién de colisién de bus) — 1 —Habilta la interrupcién de colisién de bus, ~ 0 —Deshabilita la interrupcién de colisién de bus. + ULPWUIE - Ultra Low-Power Wake-up Interrupt Enable bit (bit de hal ‘salir del modo de ultra bajo consumo — Ia reactivacién) = 1 —Habilta la interrupcién para salir del modo de ultra bajo consumo, itacién de la interrupcién para ~ 0 ~Deshabilita la interrupcién para salir del modo de ultra bajo consumo. + CCP2IE - CCP2 Interrupt Enable Comparacién/Captura/PWM (CCP2) = 1 —Habilta la interrupcién del CCP2 = 0 — Deshabilita la interrupcién del CCP2, (bit de habilitacién de la interrupcién del médulo 2 de Vamos a hacerlo en mikroC.. AR Cae CORTTGIFE POPS TTT TOE PITRE WUD RAT CoS SETSEGE, BT PROSITE 2 tm camoio'en Ia salido gol canparesor, sl pin ee soliaa PORTBt conbia el estado Tégiea em Le 3 rutira de interrepcten.*7 5 void interrupt { _// Inicio de 1a rutina de_interrupcién 6 "poRBLeL = “Ponta. ; // Lavinterrupeson invertire el estaso Logico del ; 77 pin Pow. & pawa.cor = 77 Bt Ge bandera de interrupcién CIF se pone « cero 3 1 Final de ta rutine de ineeervockén 1 wold maine { 1a econo CREW ~ CUACONe.CZOMN = @; // Fi pin Rho" se seleecione pore ser une 3 U1 emsoce smears sek C2 te prR2.@ae = 35 1 Nabitite Yo inverrepcton dst conperodor CZINT h wudie = 3; 1 iterrupcten globe ests hati ieede 2 BN.com 7 Conperater (2'esté hobititado Registro PIR1 El registro PIR1 contiene los bits de banderas de interrupcién. [| apr | rcir | rar | sspir | ccpur | rwrair | TMF | Leyenda so Bite imptementado aw Ste nearer R Bieaeeeure (0) _Deopute ceramic abt pone acero + ADIF - A/D Converter Interrupt Flag bit (bit de bandera de la interrupcién del convertidor A/D) = 1 —Se ha completado una conversién A/D (el bit debe volverse a 0 por software) — 0 —No se ha completado una conversién A/D 0 no ha empezado + RCIF -EUSART Receive Interrupt Flag bit (bit de bandera de la interrupci6n de recepclén del EUSART) ~ 1 El bifer de recepcién del EUSART esté lleno. El bit se pone a cero al leer el registro RCREG. — 0 El bifer de recepcién del EUSART no esta lleno, + TXIF —EUSART Transmit Interrupt Flag bit (bit de la interrupcién de transmisién del EUSART) — 1 El bifer de transmisi6n det EUSART esté vacio, Elbit se pone a cero al esribir un dato en el registro TXREG. — 0 -El bifer de transmisi6n del EUSART esta lleno. + SSPIF - Master Synchronous Serial Port (MSSP) Interrupt Flag bit (bit de bandera de la interrupcién de puerto serie sincrono maestro) — 1—Se ha cumplido la condicién de ocurrir una interrupcién del MSSP al transmitir/ recibir los datos Difieren dependiendo del modo de operacién del MSSP (SPI o FC). El bit debe ponerse a cero por software antes de volver de la rutina de servicio de interrupciones) — 0—No se ha cumplido ninguna condicién de ocurrir una interrupcién del MSSP. + CCP1IF - CCP1 Interrupt Flag bit (bit de bandera de la interrupcién del modulo 1 de ‘Comparacién/CapturalPWM (CCP1). — 1—Se ha cumplido la condicién de la interrupcién del CCP1 (CCP1 es una unidad para captar, comparar y generar una sefial PWM). Dependiendo del modo de operacién (modo captura o modo comparacién), se produce una captura o la igualdad en la comparacién. En ambos casos, el bit debe volverse a cero por software. El bit no se utiliza en el modo PWM. — 0 —No se ha cumplido la condicién de la interrupcién del CCP1. + TMR2IF - Timer2 to PR2 Interrupt Flag bit (bit de bandera de la interrupcién de igual dad entre el temporizador Timer2 y el registro PR2) ~ 1 —Se ha producido igualdad con el valor del TMR2 (registro de 8 bits del temporizador)y el valor del PR2. Elbit debe ponerse a cero por software antes de volver de la rutina de servicio de interrupciones). = 0 —No se ha producido igualdad con el valor del TMR2 y el valor del PR2 + TMRIIF -Timert Overflow Interrupt Flag bit (bit de bandera de la interrupcién de desbordamiento del temporizador Timert) ~ 1 Se ha producido desbordamiento del Timer. El bit debe ponerse a cero por software. — 0 —No se ha producido desbordamiento del Timert, Registro PIRZ El registro PIR2 contione los bits de banderas da la interrupcin. Losrir | car | cir | eer | cur jurpwuir| =| ccp2ir | Leyenda tmplmantade fw bite lchriocertre (0) Dospute detract 0 pone a coro + OSFIF - Oscillator Fail Interrupt Flag bit (bit de bandera de la interrupcién de fallo en el oscilador) = 1—Se ha producido un fallo en el oscilador del sistema. La entrada de reloj ha sido conmutada al oscilador interno INTOSC, El bit debe ponerse a cero por software, = 0 ~El oscilador del sistema funciona correctamente. + C2IF — Comparator C2 Interrupt Flag bit (bit de bandera de a interrupcién del comparador C2) = 1—La salida del comparador analégico C2 ha sido cambiada (el bit C2OUT). El bit debe ponerse a cero por software. — 0 La salida del comparador analégico C2 no ha sido cambiada. + C1IF - Comparator C1 Interrupt Flag bit (bit de bandera de la interrupcién del comparador C1) ~ 1 ~La salida del comparador analégico C1 ha sido cambiada (el bit C1OUT). El bit debe ponerse a cero por software. = 0 -La salida del comparador analégico C1 no ha sido cambiada, + EEIF ~ EE Write Operation Interrupt Flag bit (bit de bandera de la interrupcién de la operacion de escritura en la memoria EEPROM) — 1—La operacién de escritura en la memoria EEPROM se ha completado. El bit debe ponerse a cero por software, = 0 —La operacién de escritura en la memoria EEPROM no se ha completado o todavia no se ha iniciado. + BCLIF - Bus Collision Interrupt Flag bit (bit de bandera de la interrupcién de colisién de bus en el MssP) — 1—Se ha producido una colisién de bus en el MSSP al ser configurado para el modo maestro |2C. El bit debe ponerse a cero por software, — 0 —No se ha producido colisién de bus en el MSSP. + ULPWUIF - Ultra Low-power Wake-up Interrupt Flag bit (bit de bandera de la interrupcién para salir del modo de ultra bajo consumo — la reactivacién) ~ 1 Se ha cumplido la condicién de salir del modo de ultra bajo consumo. El bit debe ponerse a cero por software. = 0 —No se ha cumplido la condicién de salir del modo de ultra bajo consumo. + CCP2IF — CCP2 Interrupt Flag bit (bit de la interrupcién del médulo 2 de Comparacién/Captural/PWM — ccP2) = 1—Se ha cumplido la condicién de la interrupcién del CCP2 (CCP2 es una unidad para captar, comparar y generar una sefial PWM). Dependiendo del modo de operacién (modo captura o modo comparacién), se produce una captura o la igualdad en la comparacién. En ambos casos, el bit debe volverse a cero por & books £ Wicrocontoiadores PIC ~ Programaciin en C con ejemplos Vamos a hacerlo en mikroC... TT SERS A SETTER ET PETS TOA 2 5 void waind ¢ 4 pot re = 11 Bin PORTA.® se pone a uno 5 ANSEL Cast ~ 9; 7 Todos tes pines de £/5 se configuren cono digitates 6 TRI 7 Los pines del puerto PORTA Se configuran coro selidas 3 delay asin; 7 Carger et tapaclsor PON ULPmE — 15 77 Wabi leer el Funelanententa del néduto ULAML ML PTE2.ULPMUTE’~ 45 17 Wabi Litar la interrupeién por el méduto ULPAU 12 TNICONGIE = INTCON.PELE ~ 15 // Hobitiear codon los tnverrupesones 13 aam leery 17 Pasar nego de jo consume Registro PCON -on reset El registro PCON contiene solamente dos bits de banderas utllzados para diferenciar entre un Pows (POR), un Brown-out reset (BOR), un reinicio por el temporizador perro guardién (WDT) y un reinicio externo por elpin MCLR, [_- | juipwue|ssoren] —-_ | =| por | BOR | 33" 2 ‘Bewpde dll of bts pore aur {Blut data, eae sls econo + ULPWUE - Ultra Low-Power Wake-up Enable bit (bit de habilitacion para salir del modo de ultra bajo consumo ~ la reactivacién) = 1—Se habilta salir del modo de ultra bajo consumo. — 0—No se habilita salir de! modo de ultra bajo consumo. + SBOREN - Software BOR Enable bit (bit de habilitacién del BOR por software) — 1 Se habilita Brown-out reset, = 0~Se deshabilta Brown-out reset. + POR — Power-on Reset Status bit (bit de estado Power — on reset) = 1—No se ha producido Power — on reset. — 0 — Se ha producido Power — on reset, El bit debe ponerse a uno por software después de que se haya producido un Power — on reset. + BOR - Brown-out Reset Status bit (bit de estado Brown — out reset) = 1—No se ha producido Brown — out reset — 0 —Se ha producido Brown — out reset. El bit debe ponerse a uno por software después de que se haya producido Brown — out reset. REGISTROS PCL Y PCLATH La memoria de programa del PIC16F887 es de 8K y tiene 6192 localidades para el almacenamiento de programa, Por esta razén, el contador de programa debe de ser de 13 bits de anchura (213 = 8192). Para habiltar el acceso a una localidad de memoria de programa durante el funcionamiento del microcontrolador , es necesario acceder a su direccién por medio de los registros SFR. Como todos los registros SFR son de 8 bits de anchura, este registro de direccionamiento es creado “artificialmente” al dividir los 13 bits en dos registros independientes, PCLATH y PCL. Sila ejecucién de programa no afecta al contador de programa, el valor de este registro va incrementéndose automatica y constantemente: +1, +1, +1, +1... De esta manera, el programa se ejecuta como esta escrito instruccién a instruccién, seguido por un inoremento de direccién constante, Si el contador de programa ha sido cambiado por software, debe tomar en cuenta lo siguiente para evitar problemas: ‘+ Los ocho bits inferiores (el byte inferior) del registro PCL son de lectura/escritura, mientras que los cinco bits ‘superiores del registro PCLATH son de sélo escritura, ‘+ El registro PCLATH se borra con cada reinicio. + En el lenguaje ensamblador, el valor del contador de programa esté marcado con PCL y se refiere sélo alos ‘ocho bits. Usted debe tener cuidado al utilizar la instruccién -sooxr rei. Esto es una instruccién de salto que ‘specifica la localidad destino al afiadir un niimero a la direccién actual. Se utiliza con frecuencia para saltar a la tabla de biisqueda 0 a la tabla de ramificacién de programa y leerlas. Un problema surge sila direccién actual es de tal tamafio que all sumar se produce un cambio en un bit que pertenece al byte superior del registro PCLATH. La ejecucién de una instruccién sobre el registro PCL causa simulténeamente la sustitucién de los bits del contador de programa por los contenidos en el registro PCLATH. De todos modos, el registro PCL puede acceder sélo a 8 bits inferiores del resultado de la instruccién, pues el siguiente salto seré completamente incorrecto. La solucién a este problema es poner estas instrucciones en jas direcciones que terminan en xx00h. De esta manera se habiltan los sallos de programa hasta 255 localidades. Si se ejeculan los saltos mas largos por medio de esta instruccién, el registro PCLATH debe ser incrementado por 1 cada vez que se produce desbordamiento en el registro PCL. + Alllamar una subrutina 0 al ejecutarse un salto (instrucciones eau y éor0), el microcontrolador es capaz de proporcionar solamente direccionamiento de 11 bits. Similar a la RAM que esta dividida en "bancos’, la ROM ‘esta dividida en las cuatro “paginas” de 2K cada una, Las instrucciones dentro de estas paginas se ejecutan regularmente. Dicho de manera sencilla, como el procesador esta proporcionado con una direccién de 11 bits del programa, es capaz de direccionar cualquier localidad dentro de 2KB. La siguiente figura muestra el salto a la direccién del subprograma PP1 Sin embargo, si uke Tth4 Pina dirAien de salto esta en ta mifha pagina qud b localidad de salto, se En ambos casos, cuando la subé i (vuelta al programa principal), ‘1 microcontrolador continuara cbf jerrumpi6, ya que la direccién de retomo se empuja y se guarda {mo hemos mencionado. ‘Ademés del direccionamier prde-dicdogjn te un registro para i DS roc i os registes NDF YFSR, A veces esto faci 2/entoro os}habiltado ya que ol registro INDF no es real (no slireccién esta situada en el registro FSR. Pot b it ‘significa escribir 0 especiican on olreisro FSR, y ar eanteMeo se Girecionamiento direct einirecto se petra Como hemos visto, el problema con “los bits de direccionamiento que faltan’ se soluciona con un “préstamo” del otro registro. Esta vez, es el séptimo bit, denominado bit IRP del registro STATUS, Direccionamiento irecto Direccionamiento indirecto rogsto STATUS. roowro sas fel PEL Una de las caracteristicas més importantes del micracontrolador es el numero de los pines de entrada/salida, {que permite conectarlo con los periféricos. El PIC16F887 tiene en total 35 pines de E/S de propésito general, lo ‘que es suficionte para la mayoria de las aplicaciones. em

You might also like