Programmation en C, besoin d'aide

Programmation en C, besoin d'aide - C - Programmation

Marsh Posté le 09-02-2011 à 10:15:49    

Code :
  1. #include <stdlib.h> 
  2. #include <delay.h>
  3. interrupt [1] void BP1(void)
  4. {
  5. }
  6. interrupt [2] void BP2(void)
  7. {
  8. //Arrêt chrono1 et chrono2
  9. }
  10. interrupt [3] void BP3(void)
  11. {
  12. //Arrêt chrono1 et chrono2
  13. }
  14. interrupt [4] void BP4(void)
  15. {
  16. //Arrêt chrono1 et chrono2
  17. }
  18. interrupt [5] void BP0(void)
  19. {
  20. //Déclenchement chrono2   
  21. }
  22. interrupt [6] void BP0(void)
  23. {
  24. //RAZ du programme   
  25. }
  26. int main (void)
  27. int nbr_alea=0;
  28. DDRD=0x00;   //port D en entrée (BP)
  29. DDRB=0xFF;   //port B en sortie (LED)
  30. #asm("sei" )     //Valide toutes les interruptions   
  31. GIMSK = 0b11000000; //valide les broches d'interruption INT0 et INT1
  32. MCUCR = 0b00001111; //détermination du type d'évènement sur les broches INT0 et INT1   
  33. //Déclaration de variables pour le chronomètre
  34. int _2ms=0;   //Compteur pour 50 passages à 2ms = 0.1sec
  35. int MIL_SECONDS=0;            //HTR virtuelle : diziaime de seconde
  36. char SECONDS=0;            //HTR virtuelle : Seconde
  37. char MIN=0;
  38. while(1)
  39. {                   
  40. nbr_alea = rand()%4;
  41. if(nbr_alea==0)
  42.         {
  43.         PORTB=~0b00000001;   // "~" pour passer de logique négative a logique positive ( "0"=led allumée enn théorie)
  44.         //Déclenchement chrono1
  45.         if (TIMSK==0b10000000)  TIMSK=0b00000000;        //Interruption comparaison réussie timer2 validée
  46.         else TIMSK=0b10000000;
  47.         delay_ms(500);
  48.         PORTB=~0b00000000;
  49.         }
  50. else if(nbr_alea==1)
  51.         {
  52.         PORTB=~0b00000010;
  53.         //Déclenchement chrono1
  54.         if (TIMSK==0b10000000)  TIMSK=0b00000000;        //Interruption comparaison réussie timer2 validée
  55.         else TIMSK=0b10000000;
  56.         delay_ms(500);
  57.         PORTB=~0b00000000;
  58.         }
  59. else if(nbr_alea==2)
  60.         {
  61.         PORTB=~0b00000100;
  62.         //Déclenchement chrono1
  63.         if (TIMSK==0b10000000)  TIMSK=0b00000000;        //Interruption comparaison réussie timer2 validée
  64.         else TIMSK=0b10000000;
  65.         delay_ms(500);   
  66.         PORTB=~0b00000000;
  67.         }
  68. else if(nbr_alea==3)
  69.         {
  70.         PORTB=~0b00001000;
  71.         //Déclenchement chrono1
  72.         if (TIMSK==0b10000000)  TIMSK=0b00000000;        //Interruption comparaison réussie timer2 validée
  73.         else TIMSK=0b10000000;
  74.         delay_ms(500);
  75.         PORTB=~0b00000000;
  76.         } 
  77. }


 
Bonjour,
J'ai besoin d'aide pour programmer deux chronometre d'un processeur via les timer...
L'un ce déclencherai lors de l'allumage d'une des 4 led allumer aléatoirement, et l'autre lors d'un relachement d'un bouton poussoir (a définir).
 
Je vous ai mis la première partie qui consiste a allumer aléatoirement les 4 led que l'on utilisera.
 
Merci d'avance

Reply

Marsh Posté le 09-02-2011 à 10:15:49   

Reply

Marsh Posté le 09-02-2011 à 10:21:52    

Et le problème étant (mis à part que tes 4 blocks " nbr_alea" sont identiques) ?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 09-02-2011 à 10:44:18    

esox_ch a écrit :

Et le problème étant (mis à part que tes 4 blocks " nbr_alea" sont identiques) ?


 
Je vais expliquer tout mon problème plus précisement...
Donc je dois créer un programme qui doit enregistrer la réactivité de quelqu'un par l'allumage de led. C'est à dire que l'allumage des led doit être aléatoire, qui déclenche un chronometre, un deuxième chronometre sera déclencher lorsque la personne levera sa main d'un bouton poussoir1 et les deux chrono seront arrété lorsque la personne tape sur un bouton poussoir2 a proximiter de la bonne led...
Pour qu'une nouvelle led soit allumer (aléatoirement) la personne remet sa main sur le bouton poussoir1.
 
Mon problème est donc de déclencher les deux chronometre... Je ne vois pas par ou partir. Mettre tous dans chaque bloc et en ressortir a la fin? mais je ne vois pas comment? Ou faire l'aléatoire d'un coter et les chrono apart?
 
En fait je suis perdu...

Reply

Marsh Posté le 09-02-2011 à 12:01:54    

Tu peux utiliser un timer qui tourne en permanence et incrémente une variable comme base de temps pour mesurer les évènements, et un deuxième timer pour l'aléatoire.  
 
( AVR spotted [:huit] )
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed