Sa marche pour la valeur la plus grande ; mais comment fait-on pour récupérer, par exemple la plus petite valeur, la 2ème plus grande,...?
-----
16/04/2010, 09h26
#92
invitead51e543
Date d'inscription
janvier 1970
Messages
687
Re : Interruptions PIC
Code:
unsigned int16 time = 0, compte = 0;
#int_EXT // correspond à une interruption sur RB0
void EXT_isr(void)
{
disable_interrupts(GLOBAL);
time = get_timer0(); // on récupère la valeur de Timer0
compte++; // on incrémente la variable compte
set_timer0(0); // initialiser timer0 à 0
enable_interrupts(GLOBAL);
}
void main(void)
{
unsigned int16 tableau[6] = {0, 0, 0, 0, 0, 0}; // on initialise les valeurs du tableau à 0
unsigned int16 greatest = 0;
int i ;
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT); // autorise les interruptions sur RB0
ext_int_edge(0, L_TO_H); // déclencher interruption0 sur front montant
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64); // configuration du Timer0
usb_init_cs();
do
{
usb_task();
usb_debug_task();
switch(compte)
{
case 1:
tableau[0]=time ;
break;
case 2:
tableau[1]=time ;
break;
case 3:
tableau[2]=time ;
break;
case 4:
tableau[3]=time ;
break;
case 5:
tableau[4]=time ;
break;
case 6:
tableau[5]=time ;
for (i = 0 ; i < 6 ; i ++)
{
printf(usb_cdc_putc, "%lu \n\r", tableau[i]);
if (greatest < tableau[i])
{
greatest = tableau[i];
}
}
printf(usb_cdc_putc, "periode la plus grande est : %lu\n\r", greatest);
compte = 0;
break;
}
}
while (TRUE);
}
16/04/2010, 13h10
#93
sdec25
Date d'inscription
mai 2008
Localisation
Doubs
Âge
37
Messages
914
Re : Interruptions PIC
Envoyé par flolarajasse
Sa marche pour la valeur la plus grande ; mais comment fait-on pour récupérer, par exemple la plus petite valeur, la 2ème plus grande,...?
Tu tries ton tableau.
Cf google > algorithmes de tri.
16/04/2010, 13h35
#94
invitead51e543
Date d'inscription
janvier 1970
Messages
687
Re : Interruptions PIC
C'est ce que j'ai fait.Si tu veux sur mon signal(qui a 6 périodes différents), les 2 premières périodes sont fixes ; ce sont les plus petites.Ensuite j'ai une période assez grande que j'aurais besoin de reconnaitre (pour mes calculs), ensuite une période qui peut-être soit plus grande, soit plus petite que la 3ème(je peux la faire varier) que j'aurais aussi besoin de reconnaitre.Puis deux autres petites périodes.
Je ne sais pas si j'ai été clair, c'est pas facile à comprendre.
Donc le principe du tableau ne fonctionne pas car si je trie les valeurs dans l'ordre croissant, je ne saurais pas quelle est la période qui suit les 2 premières étant doné que la période d'une des plus grande peut changer, tu vois le truc?
16/04/2010, 18h55
#95
sdec25
Date d'inscription
mai 2008
Localisation
Doubs
Âge
37
Messages
914
Re : Interruptions PIC
ok je comprends un peu mieux.
Les 2 dernières périodes sont les mêmes que les 2 premières ?
Si c'est le cas ça donne : A, A, B, X, A, A avec :
A = fixe, connu
B = fixe, connu, B > A
X = variable, pas connu
Tu veux récupérer la position de la période la + grande, celle de la 2ème + grande, ... ?
Que se passe t-il si X > B ? Et si X < A ?
19/04/2010, 08h38
#96
invitead51e543
Date d'inscription
janvier 1970
Messages
687
Re : Interruptions PIC
Envoyé par sdec25
Tu veux récupérer la position de la période la + grande, celle de la 2ème + grande, ... ?
Oui c'est cela.
Les 2 dernières périodes sont les mêmes que les 2 premières ?
Non les 2 dernières sont plus grandes que les 2 premières.
Le seul cas qu'il peut y avoir, c'est d'avoir X<B ou X>B.
Dans tous les cas, il faut que je récupère la valeur de X.