Bonjour!
Oui c'est vrai les 2 idées que j'avais avancé été irréfléchies.
C'est normal que le programme reste sur l'analyse de fréquence mais ce n'est que visuellement car il doit toujours y avoir une sorte de reset, mais on ne le voit plus car plus de test!
Et la remarque sur la longueur c vrai je suis encore loin de saturer la mémoire!
Pour le "hello world j'avais déja étudié les interruptions mais pas avec un compteur comme ceci...
Pour ta question, C0 est une LED, C1 à C7 pour un 7 segments (note), D0 une autre LED, D1 à D7 pour une 2eme 7 segments (utilisé plus tard pour Dièse / Bémol).
Je joints le prog en entier, attention les yeux!
Voila pour mon prog, je n'ai pas mis afficheAp() etc car c'est juste des fonctions avec PORTB=0b11000110 par exempleCode:#include<16F877.h> #include<defines.h> #USE delay(clock=20000000) float freq; int compteur_t1; int fronts; void init(); void test(); void interrupt(); void afficheAm(); void afficheAj(); void afficheAp(); void traitement(float freq); void main() { init(); //test(); //Parametres Compteur ADCON0 = 0b00000000; // ADC OFF ADCON1 = 0b00000111; // ADC OFF T1CON = 0b00110001; // activation du TMR1, avec PreScaler=8 INTCON = 0b11010000; // activation INT RB0 + Périphs PIE1 = 0b00000001; // activation INT TMR1 while(1) { traitement(freq); } } void init() { TRISA=0xFF; TRISB=0b00000001; // port RB0 en entrée TRISC=0x00; TRISD=0x00; //TRISE=0x00; //PORTB=0; PORTC=0xFF; PORTD=0xFF; } void test() { //TEST DES 2 AFFICHEURS PORTC=0; delay_ms(1000); PORTD=0; delay_ms(1000); } void interrupt() { if(INTF=1) // si INT RB0 { fronts ++; INTF = 0; // re-active INT RB0 } if(TMR1IF = 1) // si INT TMR1 { compteur_t1 ++; if(compteur_t1>9) { freq = fronts; fronts = 0; compteur_t1 = 0; } TMR1L = 220; // période de 100ms @ 20Mhz TMR1H = 11; // période de 100ms @ 20Mhz TMR1IF = 0; // re-active INT TMR1 } } void traitement(float freq) { if(freq<440) { afficheAm();//Affiche A - } if(freq==440) { afficheAj();//Affiche A - et + } if(freq>440) { afficheAp();//Affiche A + } freq=0; // il faut remettre à 0 la fréquence calculée }
Mais je pars de ce pas m'instruire de INT et TMR!
Bonne journée
-----