26.12.2014 Views

microcontrolador mc68hc11

microcontrolador mc68hc11

microcontrolador mc68hc11

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!