Programar rutina de retardo variable en C para PIC según el valor de una variable.

La entrada de hoy, es la primera que hago íntegra en cuanto programación de microcontroladores y aunque explico un concepto sencillo espero que se entienda, yo me basaré en funciones de retardos predefinidas en los PIC para lograr el objetivo, que es crear una función que según el valor de una variable numérica se auto controle el retardo de la función a programar. Todos los conceptos son aplicables a todo tipo de microcontrolador y familia.

Lo primero, será importante conocer las funciones de retardos que hay en las librerías de los PIC para este caso, donde tenemos las siguientes funciones:
Delay_ns();
Delay_ms();
Por ejemplo si queremos un retardo de 1 segundo, usaremos la función de la siguiente forma:
Delay_ms(1000);

 Estas dos funciones, sirven para definir retardos pero por ejemplo si en nuestro programa, interesa que el retardo varíe según un parámetro variable, comúnmente se suele empezar a declarar líneas de delays para cambiar los tiempos de forma manual, ya que estas funciones solo admiten un valor fijo y es algo erróneo porque si luego queremos cambiar los tiempos, se debe buscar cada una de las líneas donde se declara un delay perdiendo muchísimo tiempo.

Una vez explicadas las dos funciones anteriores, crearemos la rutina que nos generará una base de retardo fija según el valor de una variable, la llamaremos “control” y se declarará siempre como global.

La función a diseñar, como es con objeto de ejemplo y luego cada uno puede adaptarla a su programa, para darle un sentido a ésta, pondré un enunciado con el objetivo a conseguir:

Enunciado: Crear una función de retardo personalizada, donde según el valor de una variable declarada como integer (1, 2,3 o 4) active una temporización de 1ms, 20ms, 50ms y 100ms respectivamente.

Esa será la función a añadir a mi aplicación según el enunciado, ahóra para llamarla simplemente donde haya retardo se pondrá:
delay_personalizado();
Otra opción, sería crear la función, pero pasándole el valor de la variable "control" por referencia, pero puesto que en mi ejemplo y enunciado la tomo como global, es correcto hacerlo así.

Les dejo una pregunta como reflexión: Imaginen que el programa tiene 4000 líneas de código, y hay 4 tipos de delays utilizados de forma directa sin una función como éste ejemplo que los englobe y aparecen de forma repetitiva a lo largo de todo el código. Si quisieran cambiar los tiempos, no sería más óptimo utilizar una función personalizada de retardo para mayor comodidad en todos los sentidos ?.

1 comentarios:

jon arnold dijo...

y este codigo, lo guardo en una libreria o siempre lo tengo que copiar y pegar en el inicio del programa?
y eso de:

delay_personalizado();

entre los parentesis va el numero que corresponde a cada retardo?

Publicar un comentario

Copyright © Microtronic