¿Por qué, a la hora de diseñar un código, si yo necesito un retardo de 750us, no puedo estar seguro de que la instrucción delay_us(750) o la instrucción delay_us(Val_Retardo) con Val_Retardo=750 me de el valor correcto?
Porque eso significa hacer un código de demora especifica para cada uno de esos demoras. Y eso ocupa espacio, y eso influye luego en que tan bueno es el compilador.
Por eso mismo XC8 no acepta variables en su delays, simplemente acepta constantes.
Esas constantes, luego son procesadas junto a la frecuencia del oscilador, y les da la cantidad de ciclos a esperar, nuevamente CONSTANTES, esto no va a una funcion de c, sino que esta construido en el compilador y crea la demora según el tiempo. Algo así como hacemos las demoras en ASM. Esta "función" que crea las demoras, según la cantidad de ciclos a esperar, en fin.. Nada variable. Y todo en tiempo de compilación.
Pero si pensas hacerlo variable, no podes hacerlo durante la compilación, sino que lo tenes que realizar únicamente durante el runtime, y eso muy pocas veces te va a dar justo. O podes hacer todos los calculos que si te pones a pensar la frecuencia es del orden de los millones, el periodo es de us asi que seguramente tenga que usar coma flotante, y eso termina en mas tiempo que la demora en si.
Tenes la funcion
delay_cycles (count)
En CSS pero por lo que veo es una funcion que acepta hasta 255 ciclos. no se que tan precisa será. Obviamente no podes crear una funcion delay con una llamada, sino que para que sea valido el delay, deberias ponerlo uno seguido de otro.