Bonjour a tous,
j'utilise des fonctions de temporisation et j'ai un problème qui pour moi n'est pas logique.
J'ai crée une première fonction tempoms qui réalise une temporisation en ms et qui marche très bien. J'en est crée une autre tempous qui réalise une temporisation en µs. Celle-ci à juste le prescaler et TMR0 qui change et pourtant je n'obtient pas du tout des µs. Voici mon programme:
décidément je ne comprend pas du tout pourquoi cela ne marche d'où ma demande sur FSCode:#include "p18cxxx.h" /* * prototypes */ void init(); void tempoms(unsigned long int ms); void tempous(unsigned long int us); /* * constantes */ void main() { init(); while(1){ PORTAbits.RA0 = 1; tempous(65000); PORTAbits.RA0 = 0; tempous(65000); } } /* * fonctions */ void init(){ /**config oscillateur : 16Mhz*PLL = 64Mhz **/ OSCCON = 0b01110100; OSCCON2 = 0b10000111; OSCTUNE = 0b11000000; /*** entrée N/A ***/ ANSELC = 0b00000000; // /*** I/O ***/ TRISA = 0x00; //port A en sortie TRISB = 0x00; //port B en sortie TRISC = 0x00; } /* * T =64Mhz/(4*128*125) = 1ms * */ void tempoms(unsigned long int ms){ unsigned long int i = 0; T0CON = 0b11000110; //en ms T =64Mhz/(4*128*125) = 1ms for(i=0;i<ms;i++){ INTCONbits.TMR0IF = 0; // RAZ du flag TMR0L = 131; //256-131 = 125. while(INTCONbits.TMR0IF == 0); } } /* * T =64Mhz/(4*16) = 1us * */ void tempous(unsigned long int us){ unsigned long int i = 0; T0CON = 0b11000011; //prescaler = 16 for(i=0;i<us;i++){ INTCONbits.TMR0IF = 0; // RAZ du flag TMR0L = 255; while(INTCONbits.TMR0IF == 0); } }
-----