microcontrolador mc68hc11
microcontrolador mc68hc11
microcontrolador mc68hc11
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
MICROCONTROLADOR 68HC11: Fundamentos, recursos y programación.<br />
MICROBÓTICA.<br />
4.5. TEMPORIZADOR PRINCIPAL<br />
MODA<br />
MODB<br />
XTAL EXTAL E IRQ XIRQ RESET<br />
4.5.1. Introducción<br />
CONTROL DE<br />
LOS MODOS<br />
OSCILADOR<br />
LOGICA DEL<br />
RELOJ<br />
El temporizador está formado por un TEMPORIZADOR<br />
EEPROM 512 BYTES registro<br />
de 16 bits que se está incrementando<br />
CPU<br />
RAM 256 BYTES<br />
constantemente. Arranca con el valor 0, se va<br />
incrementando con cada pulso de reloj y cuando BUS EXPANSION<br />
llega a<br />
SPI<br />
SCI<br />
DIRECCIONES DIRECCIONES/DATOS<br />
$FFFF se produce una interrupción de overflow, pasa a<br />
valer nuevamente 0 y continúa contando.<br />
E/S PARALELA<br />
LOGICA DE<br />
INTERRUPCIONES<br />
CONVERSOR<br />
El valor del temporizador se puede leer<br />
A/D en<br />
cualquier momento pero no escribir. La cuenta<br />
CONTROL<br />
CONTROL<br />
por tanto<br />
PUERTO A PUERTO B<br />
PUERTO C<br />
PUERTO D PUERTO E<br />
no se para.<br />
La señal de reloj que incrementa el<br />
temporizador se obtiene dividiendo la frecuencia de la<br />
señal de reloj E por uno de estos valores: 1,4,8 ó 16.<br />
El registro que contiene el valor del temporizador es el TCNT y se encuentra en las direcciones $100E (Byte<br />
mayor peso) y $100F (Byte de menor peso). Para leer su valor basta con utilizar cualquiera de los registros de 16 bits,<br />
por ejemplo el Y:<br />
ROM 8K<br />
VRH<br />
VRL<br />
LDY $100E<br />
; Cargar en el registro Y el valor del temporizador<br />
Para dividir la señal de reloj que incrementa el temporizador se tienen que introducir unos determinados<br />
valores en los bits 0 y 1 (PR0 y PR1) del registro TMSK2 ($1024). Para un cristal de 8MHZ:<br />
PRI PR0 Tiempo total Resolució<br />
n<br />
0 0 32.77ms 500ns<br />
0 1 131.1ms 2us<br />
1 0 261.1ms 4us<br />
1 1 524.3ms 8us<br />
El tiempo total es el invertido por el temporizador en dar una vuelta completa; es decir, partiendo de cero, es<br />
el tiempo que tarda en volver a cero. La resolución es el tiempo que tarda en pasar de un valor al siguiente.<br />
La interrupción de overflow se utiliza para "extender" el contador. Por ejemplo, si se quiere que el<br />
temporizador cuente hasta el numero $3FFFF en vez de sólo hasta el $FFFF, cada vez que el contador llegue a<br />
$FFFF y se produzca la interrupción de overflow, se incrementa un byte en memoria que representa el byte más<br />
significativo del contador. De esta forma se consigue que el temporizador sea de 32bits (y de más bits...). Esta<br />
interrupción se habilita o deshabilita con el bit 7 del registro TMSK2 ($1024). La bandera de interrupción es el bit 7<br />
del registro TFLG2 ($1025). Este bit se activa cada vez que se produce la interrupción de overflow y debe ser puesto<br />
a cero antes de abandonar la rutina de servicio.<br />
El temporizador en sí no tiene casi utilidad de cara al programador. Pero si la tiene internamente, ya que<br />
sirve para controlar otros recursos muy importantes: Capturadores, comparadores, interrupciones en tiempo real,<br />
acumulador de pulsos....<br />
Buscando una utilidad se destaca la obtención de números aleatorios. Cada vez que se quiera obtener un<br />
número aleatorio de 8 bits basta con leer la parte baja del valor del temporizador.<br />
4.5.2. Los registros del temporizador<br />
LXI