hola necesito hacer un retraso de 2 segundos que mientras no se cumpla ese plaso haga algo distinto y no puedo usar las interrupciones como lo pocre hacer
Nacha
Para hacer un retardo tan largo y que encima estes 'haciendo otras cosas' te puedo tirar una sugerencia (que no la he visto aquí) por eso la posteo.
No has especificado que pic usas, pero cualquiera tiene un timer. Entonces, podrias configurar un retardo de por ejemplo 10mseg. Al llegar a esa cuenta (si usas un timer en realidad debes setear el valor máximo que puede tomar el timer - el delay deseado ) . Por eso te pido que especifiques para que pic es así te puedo tirar alguna sugerencia más precisa.
Volviendo al tema, al terminar la cuenta de 10mseg se activará el flag del timer. T0IF, TMR1IF, TMR2IF, TMR3IF, depende del pic que uses y del timer que hayas elegido.
En tu rutina, tienes 10mseg para hacer cosas. Al final de hacer esas cosas, verificas si está encendida la bandera del timer, si no lo está.... vuelves a hacer las cosas. Así hasta que la bandera esté encendida.
Al estar encendida, vas a la rutina de manejo del tiempo.
Borras la bandera, incrementas un contador en 1 y te fijas si es igual a 200. Si es diferente vuelves a ejecutar el bloque principal del programa, si es igual a 200 sales!. El numero 200 es porque 200 x 10mseg = 2 segundos.
En bloques quedaría algo asi
1) Inicializacion Timer y configuracion del pic. Variable TIEMPO=0
2) Bloque principal de programa
3) ¿Esta el flag encendido? Si es NO, vuelve a 2) , si es SI va a 4)
4) Borra Flag, Reconfigura Timer para retardo de 10mseg, incrementa contador de TIEMPO en 1.
5) TIEMPO = 200? NO, vuelve a 2) SI va a 6)
6) Fin de la rutina
Como ves, siempre se ejecuta el bloque principal, la precisión.... y dependerá de cuan largo sea el bloque principal de programa. Al no contar con la posibilidad de interrupciones se pierde precisión. Si el bloque principal es muy extenso y lo más importante es la temporizacion, entonces te sugiero que verifiques la bandera del timer varias veces dentro del código principal.
Espero haber sido claro, si posteas algo más de detalle del micro y el timer elejido por ahi te podamos ayudar con el código.
Saludos