Académique Documents
Professionnel Documents
Culture Documents
Clase 12
TEMA III. TEMPORIZACIN La generacin de retardos de tiempo resulta til cuando se desea detener momentneamente la ejecucin de un programa o para temporizar eventos. El objetivo es crear un subprograma o procedure que sirva como unidad de tiempo y luego contar la cantidad de veces que se ejecuta. Si el nmero de ejecuciones se conoce o ija con anticipacin! el propsito ser"a la introduccin de un par#ntesis temporal en el lujo de un programa$ pero si las repeticiones del procedure son una variable a determinar! la inalidad consistir"a en conocer la duracin de un suceso. Esto puede lograrse mediante el uso de un %ard&are especializado 'astables! monostables! divisores de recuencia( o a trav#s de recursos de programacin. ) continuacin se describen las variantes para desarrollar ambas posibilidades con microcontroladores* + + ,etardo por so t&are -so de Timers internos
Retardo por Software .ara generar retardos mediante t#cnicas de programacin es necesario conocer los detalles de arquitectura que determinan la duracin de las instrucciones. /omo se observa en la igura 0! la se1al del oscilador introducida por el terminal 2sc0 es dividida por cuatro para dar origen a otra de nombre 30. El lanco descendente de 30 se usa para iniciar la onda 34! repiti#ndose el procedimiento con esta para que empiece 35 y luego 36. .or causa de 30 suceden dos cosas! la instruccin apuntada por el ./ es cargada en el 7, ' Fetch( y su contenido 'el del ./( es incrementado para que apunte a la siguiente instruccin del programa. Luego! con 34! 35 y 36 se completa la ejecucin de la instruccin 'Execute(! ley#ndose los operandos durante 34 y escribi#ndose los resultados durante 36.
2sc0 30 34 35 36 :etc% de la inst i E;ecute de la inst i+0 :etc% de la inst i<0 E;ecute de la inst i
"i#. $. Ciclos de "etc% E&ecute "uente' (atas%eet del )icrocontrolador PIC$*"+,, La sucesin de 30! 34! 35 y 36 equivale a cuatro pulsos o ciclos de reloj que constitu en un ciclo de instrucci!n. 2bs#rvese que mientras inicia el Fetch de una instruccin 'actualizacin del ./( se est concretando el Execute de la instruccin anterior. Este procedimiento se conoce como pipeline. 8o importa si la instruccin a ejecutar carece de operandos! involucra dos de ellos o si el direccionamiento es inmediato o indirecto$ el proceso de ejecucin tarda cuatro ciclos de reloj o bien un ciclo de instruccin! de manera que todas ellas duran lo mismo. Esto acilita en gran medida el clculo del tiempo en que se ejecuta un procedure o un programa completo! lo cual resulta incmodo en aquellas arquitecturas donde cada instruccin implica una cantidad di erente de ciclos de reloj. La nica complicacin al momento de computar el tiempo de una rutina de retardo para un .7/ ocurre por causa de las instrucciones que implican saltos y rompen el lujo normal del programa. El Execute de una instruccin de salto '/all! ,eturn! 9oto! etc( consiste en un nuevo Fetch! de manera que el contenido recientemente actualizado del ./ debe ser guardado en el Stack y sustituido por el nmero de la instruccin a donde se va a saltar. Esto signi ica que tales instrucciones se ejecutan en el doble de tiempo requerido para las dems. El siguiente algoritmo es til para implementar una rutina de retardo*
Wilmer Sanz F.
7nicio
Jelay0?> Si
Jelay4?>
,etornar
8o
Jelay0KC
Jecrementar Jelay0
8o
Jelay4KC
,etardo Jelay0*?>0 /arga Jelay4*?>4 /iclo Jelay4*?Jelay4+0 Si Jelay4 KC 9oto /iclo Jelay0*?Jelay0+0 Si Jelay0 KC 9oto /arga ,etornar
$ 0 vez $ >0 veces $ >0=>4 veces $ >0=>4 veces $ >0 veces $ >0 veces $ 0 vez
Los dos saltos condicionados duran dos ciclos de instruccin si la condicin se veri ica$ y uno solo! si alla. La mayor"a de las veces dic%os saltos se concretarn! por lo que se procede a calcular el tiempo de la rutina con esta premisa! incurriendo en un peque1o error que respecto al valor real. )parte de los saltos! nicamente el retorno dilata dos ciclos de instruccin! de manera que se tiene*
;*** -ste ciclo se repite . $eces /ucle +-C*"0 1&2& R-23R4 +ela,0,1 /ucle ;0.2 us. ;0.! us. ;0.! us.
;*** -l ciclo co#prende una instruccion de 0.2 us , una de 0.! us, en total 0.5 us ;*** 100 us = 60.2 7 0.2 7 %*0.570.!8 us ;*** +e aqu9 se desprende que %=15: 6;:8
-i.lio#raf/a + Aicroc%ip Bec%nology 7nc. '4CC0(. PIC$*"+,0 (ata S%eet. &&&.micro%ip.com DEn l"neaE Fltimo acceso* C0+CG+4CCH + Sanz I. '4CC4(. (ise1o de interfaces con unidades de controlo )icropro#ra)a.les . -niversidad de /arabobo.
Wilmer Sanz F.