13.05.2013 Views

Generación de retardos en la familia HC908 - Edudevices

Generación de retardos en la familia HC908 - Edudevices

Generación de retardos en la familia HC908 - Edudevices

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Dto. Técnico EduDevices www.edu<strong>de</strong>vices.com.ar<br />

• Tiempo <strong>de</strong> salvado <strong>de</strong> registros<br />

Cuando se logran <strong>la</strong>s condiciones anteriores, el microcontro<strong>la</strong>dor <strong>de</strong>be salvar el "contexto" actual<br />

<strong>de</strong> trabajo. Para ello, inserta <strong>en</strong> el stack los registros: PC,X,A,CC con una <strong>de</strong>mora adicional <strong>de</strong><br />

9 ciclos (suponi<strong>en</strong>do que <strong>de</strong>mora lo mismo que <strong>la</strong> instrucción SWI). Este tiempo al ser fijo,<br />

pue<strong>de</strong> ser restado <strong>de</strong>l tiempo <strong>de</strong>seado para corregirlo.<br />

La <strong>la</strong>t<strong>en</strong>cia hace que el método <strong>de</strong> trabajo por interrupciones se utilice para g<strong>en</strong>erar tiempos re<strong>la</strong>tivam<strong>en</strong>te<br />

gran<strong>de</strong>s <strong>en</strong> ciclos <strong>de</strong> bus, <strong>de</strong> modo que el error obt<strong>en</strong>ido sea <strong>de</strong>spreciable o promediado<br />

(por ejemplo: si programamos el TIMER para g<strong>en</strong>erar 10 interrupciones por segundo con el modo<br />

autorecargable, a pesar <strong>de</strong> <strong>la</strong> <strong>la</strong>t<strong>en</strong>cia, obt<strong>en</strong>dremos 10 interrupciones por segundo cada una con una pequeña<br />

<strong>de</strong>mora distinta, pero "no acumu<strong>la</strong>tiva" ).<br />

Para corregir estos efectos pue<strong>de</strong> usarse el TIMER sin interrupciones. Esto es, leyéndolo y esperando a que<br />

llegue al valor <strong>de</strong>seado. En este caso hay que t<strong>en</strong>er cuidado con <strong>la</strong> comparación, ya que si se hace<br />

"por igual" hay que estar seguro <strong>de</strong> que el tiempo que se <strong>de</strong>mora <strong>en</strong>tre lectura y lectura no haga que se pase<br />

el valor <strong>de</strong>seado "<strong>de</strong> <strong>la</strong>rgo" sin verlo y si se compara por "mayor o igual" hay que t<strong>en</strong>er cuidado con <strong>la</strong><br />

"circu<strong>la</strong>ridad" <strong>de</strong>l registro (o sea, luego <strong>de</strong> $FFFF se vuelve a $0000 y lo que era mayor ahora es m<strong>en</strong>or!).<br />

Cuando los tiempos a g<strong>en</strong>erar son muy chicos (pocos ciclos) hay que t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta <strong>la</strong> incertidumbre <strong>de</strong>l<br />

prescaler <strong>de</strong>l TIMER, ya que no sabemos <strong>en</strong> que valor se <strong>en</strong>cu<strong>en</strong>tra este divisor al iniciar el retardo.<br />

Si <strong>de</strong>seamos g<strong>en</strong>erar <strong>retardos</strong> <strong>de</strong> distintas duraciones, <strong>de</strong>beremos buscar una unidad <strong>de</strong> interrupción que sea<br />

común a todos los <strong>retardos</strong> y contar interrupciones para g<strong>en</strong>erar los ev<strong>en</strong>tos más <strong>la</strong>rgos.<br />

Por ejemplo: si necesitamos <strong>retardos</strong> <strong>de</strong> 15 mseg, 50 mseg y 100 mseg, po<strong>de</strong>mos usar 5 msegs <strong>de</strong> unidad y<br />

contar 3, 10 y 20 interrupciones respectivam<strong>en</strong>te o bi<strong>en</strong> trabajar el timer <strong>en</strong> modo libre y programar<br />

<strong>la</strong> <strong>de</strong>mora <strong>en</strong> cada caso.<br />

<strong>G<strong>en</strong>eración</strong> <strong>de</strong> <strong>retardos</strong> por <strong>de</strong>mora <strong>de</strong> <strong>la</strong>s instrucciones<br />

Dado que cada instrucción <strong>de</strong>l procesador requiere una <strong>de</strong>terminada cantidad <strong>de</strong> ciclos <strong>de</strong> bus para ser<br />

completada, surge <strong>la</strong> posibilidad <strong>de</strong> utilizar este "efecto secundario" para g<strong>en</strong>erar <strong>retardos</strong> <strong>de</strong> duración<br />

contro<strong>la</strong>da. Y dado que <strong>la</strong>s instrucciones <strong>de</strong>moran <strong>de</strong> 1 a 9 ciclos, pue<strong>de</strong>n obt<strong>en</strong>erse <strong>retardos</strong> muy cortos<br />

o <strong>la</strong>rgos y muy precisos.<br />

Es <strong>de</strong> notar que para que el retardo sea <strong>de</strong> <strong>la</strong> duración <strong>de</strong>seada: el código <strong>de</strong>be ejecutarse con <strong>la</strong>s<br />

interrupciones <strong>de</strong>shabilitadas ya que si se pres<strong>en</strong>ta una interrupción, al tiempo transcurrido se le <strong>de</strong>berá<br />

sumar todo el tiempo que tardo <strong>la</strong> interrupción <strong>en</strong> ejecutar. Si lo que se <strong>de</strong>sea es un retardo <strong>de</strong><br />

"por lo m<strong>en</strong>os" <strong>la</strong> <strong>de</strong>mora dada, por ejemplo para g<strong>en</strong>erar un pulso <strong>de</strong> "strobe", no hay problema<br />

<strong>en</strong> t<strong>en</strong>er <strong>la</strong>s interrupciones habilitadas.<br />

Este método ti<strong>en</strong>e el atractivo <strong>de</strong> po<strong>de</strong>r realizar alguna función útil mi<strong>en</strong>tras se está esperando<br />

(como borrar memoria, precargar registros, etc.).<br />

La instrucción <strong>de</strong> <strong>de</strong>mora por excel<strong>en</strong>cia es "NOP" (no operación) que no hace nada salvo<br />

<strong>de</strong>morar 1 ciclo <strong>la</strong> ejecución <strong>de</strong>l programa. Para g<strong>en</strong>erar <strong>de</strong><strong>la</strong>y más <strong>la</strong>rgos po<strong>de</strong>mos colocar varias<br />

instrucciones NOP seguidas, pero consultando <strong>la</strong>s hojas <strong>de</strong> datos <strong>de</strong>l procesador surg<strong>en</strong> variantes<br />

más interesantes:<br />

Ing. Daniel Di Lel<strong>la</strong>: - Dedicated Field Application Engineer e-mail: dilel<strong>la</strong>@arnet.com.ar

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

Saved successfully!

Ooh no, something went wrong!