# Tiempo, timer 8086 ensamblador



## avioncitos (May 4, 2009)

Hola buenas tardes, estoy haciendo un programa en ensamblador para el 8086, y necesito usar el timer. He visto en varios sitios cosas pero no funcionan o no es lo que busco exactamente.
Necesito que se encienda un led durante X tiempo. Se que es algo de la frecuencia, pero, ¿Como poner el tiempo que quiero? ¿y que instrucciones poner?
Si me podeis ayudar lo agradezco y si podeis poner el trozo de programa, mucho mejor
GRACIAS


----------



## tecnogirl (Jun 9, 2009)

En assembler x86 tambien  puedes implementar rutinas de temporizacion. No te sirven ?. Saludos.


----------



## avioncitos (Jun 9, 2009)

si que me sirven, pero es que estoy atascado. He intentado varias pero no funcionan, si pudiese hacer una rutina de un segundo de duracion podria llamarla con LOOP las veces que la necesite. Ya que necesito de 3, 20, 50 y 70 segundos, pero siempre mirando unos sensores. Pero cuando intento hacer un segundo, no funciona nada.
Te agradezco tu ayuda, a ver si lo consigo


----------



## tecnogirl (Jun 11, 2009)

avioncitos: Recurre a las utilidades de depuracion como el Debug del DOS para hacer un seguimiento de tus rutinas en assembler y detectar donde esta el fallo. Saludos.


----------



## tecnogirl (Jun 17, 2009)

avioncitos: Otra idea mas: El sistema operativo DOS/Windows tiene una variable en memoria que es el contador de "ticks". Es un valor de 16 bits que se incrementa "exactamente" cada 55 ms. No hay que programarlo y el tiempo es muy preciso y se puede acceder desde cualquier programa. Haz un programa que lea y guarde el valor del contador al iniciar una temporizacion y luego lo vuelves a leer para saber si ya se cumplio el tiempo. Puedes atender la lectura de los sensores sin perder de vista el temporizador y puedes llevar varios temporizadores simultaneamente. Saludos.


----------



## masterk (Mar 24, 2010)

aver si esto te sirve es un macro que se llama retardo, bueno copias todo lo que esta en esa imagen; y desde tu programa lo llamas de esta manera retardo xxxx, xxxx representa un valor en hexa por ej retardo 2f3aH mientras mayor sea mayor sera tu retardo y viceversa, recuerda copiar todo en tu programa, a y estan otros macros que te sirven para imprimir un numero por pantalla y introducir datos le vez la aplicacion.


----------



## antiworldx (Mar 24, 2010)

Mooooooooooooooooooomento!!!

Sobre que OS estas queriendo usar el timer?

Que sistema estas usando? (motherboard y procesador)

Que servicio o rutina estas trabajando?

Creo saber cual es tu problemin.


----------



## Astharoth (May 1, 2010)

Bueno esto de los retardos es algo muy interesante, cual es el mínimo retardo con el cual puedo trabajar en assembler? es decir cual es el mínimo período con el cual puedo trabajar?, esta pregunta me surge porque trate de realizar una matriz de leds de 8x8 pero tuvé un problema con el período de encendido de cada columna bueno en una matriz de leds tienes que trabajar con aproximadamente 3 ms en cada columna para que no se note el parpadeo en los leds.


----------



## Chico3001 (May 2, 2010)

depende de la frecuencia de oscilador que estes usando y del numero de ciclos que el micro se tarde en ejecutar una instruccion

Como no puedes hacer todo con una sola instruccion entonces tienes que sumar todos los ciclos de todas las instrucciones que hagan una accion dada y despues multiplicarlos por el tiempo de cada ciclo de instruccion...


----------



## tecnogirl (May 3, 2010)

Chico3001 dijo:


> depende de la frecuencia de oscilador que estes usando y del numero de ciclos que el micro se tarde en ejecutar una instruccion ...


Esto es para hacerlo por software. Desde las PC AT viene un integrado, el 8253 o
Programmable Interval Timers (PITs) que, con algunas limitaciones, permiten hacer tareas de conteo y generacion de pulsos por hardware. Solo se necesita programar el chip. Mas informacion en: http://atc.ugr.es/docencia/udigital/1203.html

Saludos


----------



## antiworldx (May 3, 2010)

Exactamente... incluso hay servicios en DOS que permiten programarlo. Pero en windows, o con windows de por medio, no se va a poder.


----------

