J'ai besoin d'une fonction de temporisation précise écrite en C qui retarde l'exécution du programme pic d'un nombre donné de microsecondes. J'ai trouvé un exemple sur microchipc.com qui utilise ASM, mais le code ne permet que des vitesses d'horloge allant jusqu'à 32000000. Ma vitesse d'horloge doit être 64000000, mais comme je ne comprends pas comment le code fonctionne, je ne peux pas modifier pour faire ce dont j'ai besoin. Quelqu'un peut-il offrir une explication du code ou suggérer comment implémenter quelque chose de similaire?Retard de x microsecondes en C pour pic18f
#if PIC_CLK == 4000000
#define DelayDivisor 4
#define WaitFor1Us asm("nop")
#define Jumpback asm("goto $ - 4")
#elif PIC_CLK == 8000000
#define DelayDivisor 2
#define WaitFor1Us asm("nop")
#define Jumpback asm("goto $ - 4")
#elif PIC_CLK == 16000000
#define DelayDivisor 1
#define WaitFor1Us asm("nop")
#define Jumpback asm("goto $ - 4")
#elif PIC_CLK == 20000000
#define DelayDivisor 1
#define WaitFor1Us asm("nop"); asm("nop")
#define Jumpback asm("goto $ - 6")
#elif PIC_CLK == 32000000
#define DelayDivisor 1
#define WaitFor1Us asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop")
#define Jumpback asm("goto $ - 12")
#else
#error delay.h - please define PIC_CLK correctly
#endif
#define DelayUs(x) { \
delayus_variable=(unsigned char)(x/DelayDivisor); \
asm("movlb (_delayus_variable) >> 8"); \
WaitFor1Us; } \
asm("decfsz (_delayus_variable)&0ffh,f"); \
Jumpback;
Merci, je pense que cela va fonctionner, mais puisque j'utilise un compilateur différent, je dois maintenant changer comment tout l'assemblage est appelé ... – Huggzorx