//Delay (retardos)
//delay.h
//Código:
#ifndef DELAY_H
#define DELAY_H
void delay_us ( char a );
void delay_ms(int ms);
#endif
//--------------------------
//delay.c
//Código:
#include "delay.h"
// tiempo = (5a+1)µs a>=2 basado en micro a 20mhz
void delay_us ( char a )
{ a; //<-------esta linea no se que es ????
_asm // a ya está cargado en el registro w
sublw 1 //(1-a)
bucle:
ADDLW 1
btfss 0x03,0 //test si w=0 carry=1
goto bucle
_endasm;
}
Hola.
Seguramente debe ser para que no aparezca una advertencia al compilarla (unreferenced function argument).
En cuanto a adaptarla a 4MHz, ahora lo que se me ocurre es dividir el valor por 5 (20/4). Pero no creo que sea una buena solución.
Si encuentro algo mejor te aviso.
Saludos.
Tiene que ser en SDCC, creo que hitech en re-lite es más eficiente que ese compilador y además tiene librerías :undecided:
Cuantos microsegundos mas o menos necesitas?.
Porque en caso de que necesites pocos us. Teniendo en cuenta que con el pic a 4MHz, las instrucciones se ejecutan a 1MHz, por lo tanto el tiempo de cada instrucción es de 1us. Entonces podrías poner tantas instrucciones nop como us de retardo necesites.
Ej: Retardo de 5usCódigo: C
_asm nop nop nop nop nop _endasm;
No es lo ideal, pero puede servir hasta encontrar una solución y no quedarte trabado con esto, mientras le podes dedicar mas tiempo a terminar el resto del código.
Si tengo algo de tiempo veo si puedo hacer alguna librería para retardos.
Saludos.
void delay_ms(long ms)
{
long i;
while (ms--)
for (i=0; i < 330; i++)
;
}
void delay_ms(long ms)
{
long i;
while (ms--)
for (i=0; i < 330; i++)
;
}
Hitech lite no es trial. Yo estoy usando la versión 9.80 (creo que está disponible la 9.83) y funciona verdaderamente muy bien. La diferencia con la versión de pago es la optimización del código. Creo que en el sitio de microchip detalla bien las diferencias.
__delay_ms(500);
delayMs()
Quizá en dicha librería estén definidas las funciones de retardos de SDCC. En HiTech no se necesita incluir nada, sólo tienes que tener definido a que velocidad trabaja el PIC con la sentenciaCódigo: C
#define _XTAL_FREQ 10000000
en ese caso estoy indicando que el PIC trabaja a 10MHz