Autor Tema: Consulta sobre Retardo con Bucle FOR  (Leído 1431 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jhoser

  • PIC10
  • *
  • Mensajes: 14
Consulta sobre Retardo con Bucle FOR
« en: 28 de Octubre de 2014, 00:52:54 »
Saludos a Todos!! :-/

Estoy comenzando con en programacion de PICs en lenguage C y estuve analizando algunos programas y vi que para realizar un retardo (incluso en los programas mas basicos) no solo se puede usar la funcion DELAY, sino tambien el Bucle FOR, como se muestra:

for(n = 1;n < 500;n++ );

Mi consulta es, en este caso particular a cuanto tiempo equivale este retardo?
De antemano muchas gracias por su ayuda.

Saludos!!



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Consulta sobre Retardo con Bucle FOR
« Respuesta #1 en: 28 de Octubre de 2014, 02:06:19 »
Creo que todo depende del compilador. Y como pase eso a ASM, y tambien las intrucciones en ASM que posea el PIC.
Por ejemplo supongamos el caso mas basico donde supongo que no supera los 255 y trabajo con un PIC16f887

El programa en ASM que haría seria algo asi:

Código: [Seleccionar]
CLRF   registroX    ( 1 ciclo )
Loop:
DECFSZ registroX,0  ( 1 ciclo si no llega a 0, y 2 ciclos cuando llega )
Goto Loop ( 2 ciclos )

No recuerdo mucho del ASM pero sino me equivoco el DECFSZ solo se puede usar para registros y no W.
Cuanto tarda esto ?

4 ciclos la primer pasada
3 ciclos las demas excepto la ultima
2 ciclos la ultima

1 ciclo es 4/fXTAL, es sacar cuentas.

Ahora si el compilador lo hace de la misma forma no lo se. Y si fuera mas de 256 es poner otro DECFSZ afuera con otra variable.

Con todo esto dicho, como dije depende del valor que pongas en tu condición, de como el compilador crea ese for (como lo pasa a ASM ), y los delays genelramente estan hechos con for() + algunos asm("NOP"); pero alguien se tomo el tiempo de calcularlos xD.

Igual si queres saber cuanto tiempo equivale el mismo podes crear el for(), poner un par de breakpoints y simularlo con el Stop Watch ver los ciclos y si tenes configurado el XTAL el tiempo tambien te va a dar correctamente.
« Última modificación: 28 de Octubre de 2014, 02:19:26 por KILLERJC »