Está en la página 1de 2

Supongamos que tenemos la siguiente rutina:

A la derecha de cada instrucción aparece el número de ciclos que tomará


cada una. Las primeras dos toman solamente 1 ciclo, la tecera decfsz
toma (N-1)+2, porque decrementará N-1 veces la variable N y en el
último decremento hará un salto, es por eso el +2. La instrucción goto se
ejecuta en 2 ciclos y se ejecutará N-1 veces, es por eso que se toma
como 2*(N-1). De esta forma tenemos que el número de ciclos, y por lo
tanto el tiempo que tendremos de retardo está dado por la siguiente
expresión: 1+1+(1)(N-1)+2+(2)(N-1) , ó 4+N-1+2N-2, o lo que es lo
mismo 3N+1. Si queremos un retardo de 100uS entonces tenemos
que 3N+1=100, despejando tenemos N=(100-1)/3=33, asi que para tener
un retardo de 100uS el valor de la variable N debe ser 33. Ahora veamos
esta rutina:

Podemos darnos cuenta que ahora nuestra rutina original


(desde CICLO2 hasta goto CICLO) está afectada por la variable M, así
que es como si M multiplicara a nuestro retardo. Para saber el nuevo valor
del retardo de nuevo sumamos todos los ciclos, tomando en cuenta que M
multiplica al retardo original de modo que la expresión ahora queda de la
siguiente manera: [3N+1]M+1+1+(1)(M-1)+2+(2)(M-1), o lo que es lo
mismo [3N+1]M+3M+1, de manera que tenemos dos retardos anidados.
Para saber cuanto sería el retardo total primero calculamos el retardo
básico, si queremos que ese retardo sea de 100uS entonces N=33, si ahora
queremos que el retardo total sea de 10mS entonces ocupamos
completar 10000 ciclos, así que igualamos nuestra expresión a ese
número: [(3*33)+1]M+3M+1=10000, despejando
tenemos M=(9999)/103, esto es aproximadamente igual a 97, así que para
un retardo de 10mS nuestra variable N debe valer 33 y la variable M debe
tener un valor de 97.

Así podemos seguir anidando retardos. Para obtener un retardo de 3


segundo utilizaremos la siguiente rutina:

Aqui vemos que la variable P afecta a los dos retardos que ya habíamos


definido de modo que la expresión para calcular el nuevo retardo total
seria [(3N+1)M+3M+1 ]P+1+1+(1)(P-1)+2+(2)(P-1), y reduciendo
terminos la expresion seria [(3N+1)M+3M+1]P+3P+1. Queremos un
retardo de 3 segundo, esto son 3000000 ciclos, por lo que nuestra
expresión del retardo debe ser igual a tres
millónes: [(3N+1)M+3M+1 ]P+3P+1=3000000. Sustituyendo N y M con
255 tenemos 196099P+1=3000000, entonces tenemos
que P=(2999999)/196099 y P entonces es igual a 15.29 que se redondea
a 15.

También podría gustarte