Cómo Utilizar Los Registros SFR
Cómo Utilizar Los Registros SFR
Supongamos que usted ha comprado ya un microcontrolador y que tiene una buena idea de cmo utilizarlo... La lista de los registros SFR as como de sus bits es muy larga. Cada uno controla algn proceso en el microcontrolador. En general, parece como una gran tabla de control con un gran nmero de instrumentos e interruptores. Ahora est preocupado de cmo conseguir aprender acerca de todos ellos? Es poco probable, pero no se preocupe, Usted no tiene que hacerlo! Los microcontroladores son tan potentes que se parecen a los supermercados: ofrecen tantas cosas a bajos precios y a usted solo le toca elegir las que necesita. Por eso, seleccione el campo en que est interesado y examine slo lo que necesita. Cuando entienda completamente el funcionamiento de hardware, examine los registros SFR encargados de controlarlo (normalmente son unos pocos). Como todos los dispositivos tienen un tipo de sistema de control el microcontrolador tiene sus palancas con las que usted debe estar familiarizado para ser capaz de utilizarlos correctamente. Por supuesto, estamos hablando de los registros SFR desde los que el proceso de programacin se inicia y en los que el mismo termina.
Registro STATUS
Leyenda: R/W - Bit de lectura/escritura, R - Bit de solo lectura, (0) - Despus del reinicio, el bit se pone a cero, (1) - Despus del reinicio, el bit se pone a uno, (X) - Despus del reinicio, el estado de bit es desconocido El registro STATUS contiene:el estado aritmtico de datos en el registro W, el estado RESET, los bits para seleccionar el banco para los datos de la memoria.
0 1 1
1 0 1
o o o o o o o o
DC - Digit carry/borrow bit (bit de acarreo/prstamo de dgito) cambia al sumar o al restar si ocurre un desbordamiento o un prstamo 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/prstamo) cambia al sumar o al restar si ocurre un desbordamiento o un prstamo en el resultado, o sea si el resultado es mayor de 255 o menor de 0. o o
1 - Ocurri acarreo en el bit ms significativo (MSB) del resultado. 0 - No ocurri acarreo en el bit ms significativo (MSB) del resultado.
Registro OPTION_REG
Leyenda: R/W - Bit de lectura/escritura, (1) Despus del reinicio, el bit se pone a uno
El registro OPTION_REG contiene varios bits de control para configurar el pre - escalador del Timer0/WDT, el temporizador Timer0, la interrupcin externa y las resistencias pull-up en el puerto PORTB.
o o
INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la interrupcin externa)
o o
1 - Interrupcin por flanco ascendente en el RB0/INT 0 - Interrupcin por flanco descendente en el RB0/INT
T0CS - TMR0 Clock Source Select bit (bit selector de tipo de reloj para el Timer0)
o o
1 - Pulsos introducidos a travs del TOCKI (contador) 0 - Pulsos de reloj internos Fosc/4 (temporizador)
T0SE - TMR0 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/T0CKI.
o o
1 - Incrementa en flanco descendente en el pin TOCKI. 0 - Incrementa en flanco ascendente en el pin TOCKI.
PSA - Prescaler Assignment bit asigna el pre-escalador (hay slo uno) al temporizador o al WDT.
o
1 - Pre - escalador se le asigna al WDT
o 0 - Pre - escalador se le asigna al temporizador Timer0. PS2, PS1, PS0 Prescaler Rate Select bits (bit selector del valor del divisor de frecuencia)
El valor del divisor de frecuencia se selecciona al combinar estos tres bits. Como se muestra en la siguiente tabla, el valor del divisor de frecuencia se le asigna al temporizador Timer0 o al temporizador perro guardin (WDT).
PS2 0 0 0 0 1 1 1 PS1 0 0 1 1 0 1 1 PS0 0 1 0 1 1 0 1 TMR0 1:2 1:4 1:8 1:16 1:64 1:128 1:256 WDT 1:1 1:2 1:4 1:8 1:32 1:64 1:128
Para conseguir el valor del divisor de frecuencia 1:1 cuando el temporizador Timer0 cuenta pulsos, el preescalador debe ser asignado al WDT. En consecuencia, el temporizador Timer0 no utiliza el pre-escalador, sino que cuenta directamente los pulsos generados por el oscilador, lo que era el objetivo.
' Si el comando CLRWDT no se ejecuta, el WDT va a reiniciar al microcontrolador cada 32.768 ' uS (f=4 MHz) OPTION_REG = %00001111 ' Pre-escalador est asignado al WDT (1:128) asm CLRWDT ' Comando en ensamblador para reiniciar al WDT end asm ... ' El tiempo entre estos dos comandos CLRWDT no debe exceder 32.768 microsegundos (128x256) CLRWDT ' Comando en ensamblador para reiniciar al WDT
... ... ' El tiempo entre estos dos comandos CLRWDT no debe exceder 32.768 microsegundos (128x256) CLRWDT ' Comando en ensamblador para reiniciar al WDT ...
Como hemos visto, toda la idea es muy simple y eficiente. Al llegar la peticin de interrupcin, primero el bit de bandera se pone a uno. Si el bit IE apropiado est a cero (0), esta condicin ser ignorada completamente. De lo contrario, ocurre una interrupcin. Si varias fuentes de interrupcin estn habilitadas, es necesario detectar la activa antes de que la rutina de interrupcin se ponga a ejecutar. La deteccin 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 automticamente, sino por el software, mientras que la ejecucin de la rutina de interrupcin contina ejecutndose. Si no hacemos caso a este detalle, ocurrir otra interrupcin inmediatamente despus de volver al programa principal, aunque no hay ms peticiones de ejecucin. Simplemente, la bandera, as como el bit IE, se quedan en uno.
Todas las fuentes de interrupcin tpicas para el microcontrolador PIC16F887 se muestran en la siguiente pgina. Fjese en lo siguiente:
El bit GIE habilita/deshabilita simultneamente las interrupciones no enmascaradas. El PEIE habilita/deshabilita las interrupciones no enmascaradas de perifricos. Esto no se refiere al temporizador Timer0 y a las fuentes de interrupcin del puerto PORTB. Para habilitar una interrupcin causada por el cambio del estado lgico 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.