Bonjour a tous,
je suis en train de programmer un pic pour faire un compte tour qui s'actualise toutes les secondes :
j'ai un quartz de 20Mhz et un 18F4420 et j'ai paramétré le TIMER0 en 16bits et prescaler de 128 ==> 1/(1/5*10^6)*128) = 39063 donc je dois commencer a compter à 26572 soit 01100111 11001100 en binaire.
Voici mon code :
J'ai simulé sous ISIS et lorsque je mets des impulsions sur RA4, par exemple 14Hz, le LCD devrait m'afficher 14*60 soit 0840 or il affiche n'importe quoi ...Code:int RPM; int donne; int Mil; int Cent; int Diz; int Uni; void interrupt() { donne = RPM*60; RPM=0; TMR0L = 11001100; TMR0H = 01100111; INTCON = 0x20; // autorisation T0IE, mise a zero T0IF }//~ ////////////////////////////////////////////////////////////// // // // Programme principal // // // ////////////////////////////////////////////////////////////// void main() { ADCON1 = 0x3F; // Set AN pins to Digital I/O T0CON = 0X86; // Timer en 16 bits et prédiviseur en 1/128 TMR0L = 11001100; TMR0H = 01100111; INTCON = 0xA0; // Autorisation des interruptions du TMR0 TRISA = 0b00010000; // PORTA en sortie sauf RA4 Lcd_Init(&PORTD); // LCD connecté au PORTD Lcd_Cmd(Lcd_CLEAR); // Efface ecran Lcd_Cmd(Lcd_CURSOR_OFF); // Curseur OFF RPM=0; do { if (PORTA.F4 == 1) // si front montant sur RA4 { RPM = RPM+1; // on incremente la variable RPM } Mil = donne/1000; Cent = (donne-(Mil*1000))/100; Diz = (donne-(Mil*1000)-(Cent*100))/10; Uni = donne-(Mil*1000)-(Cent*100)-(Diz*10); LCD_Chr(2, 2,48 + Mil); LCD_Chr(2, 3,48 + Cent); LCD_Chr(2, 4,48 + Diz); LCD_Chr(2, 5,48 + Uni); } while(1); // Boucle sans fin }//
Est ce que vous voyez d'ou vient mon problème ??
Merci par avance![]()
-----