Bonjour,
Je suis en école d'ingénieur et j'ai un exercice à faire sur un MSP430FR4133, mais je n'ai pas de connaissances en langage C. J'ai essayé de m'aider d'internet, de chatgpt et de l'exercice d'un étudiant de l'année précédente, mais lui avait un MSP430FR2433, son code ne fonctionne donc pas avec le mien.
J'ai essayé de changer les informations mais le code ne fonctionne pas.
Voici l'énoncé de mon exercice :
A l'aide du launchpad, on souhaite réaliser une fonction monostable avec le
fonctionnement suivant.
- L’appui sur un Bouton Poussoir S1 (PUSH1) ou S2 (PUSH2) déclenche une
temporisation de 5 secondes.
- La LED verte est allumée le temps de cette temporisation.
- Chaque nouvel appui sur S1 pendant la temporisation allume la LED rouge
pendant l’appui, et stoppe la temporisation en éteignant la LED verte.
- L’appui sur le Bouton Poussoir S2 redémarre la temporisation de 5 secondes,
la LED rouge s’allume pendant l’appui
Voici mon code, pouvez-vous me dire s'il y a des erreurs ? Actuellement le code ne fonctionne pas, mais je ne sais pas où se trouvent les erreurs et ce qu'il faut modifier.
Merci d'avanceCode:#define RED_LED = BIT0 // LED Rouge P1.0 #define GREEN_LED = BIT4 // LED Verte P4.0 #define BP1 = BIT2 // Bouton-poussoir P1.2 #define BP2 = BIT6 // Bouton-poussoir P2.6 volatile unsigned int timerCount = 0; void setupLEDs() { P1DIR |= RED_LED; // Configuration de la LED Rouge en sortie P4DIR |= GREEN_LED; // Configuration de la LED Verte en sortie P1OUT &= ~RED_LED; // Désactive la LED Rouge P4OUT &= ~GREEN_LED; // Désactive la LED Verte } void setupButtons() { P1DIR &= ~BP1; // Configuration du bouton-poussoir P1.2 en entrée P2DIR &= ~BP2; // Configuration du bouton-poussoir P2.6 en entrée P1REN |= BP1; // Activation de la résistance de pull-up pour P1.2 P2REN |= BP2; // Activation de la résistance de pull-up pour P2.6 P1OUT |= BP1; // Configure P1.2 en pull-up P2OUT |= BP2; // Configure P2.6 en pull-up P1IES |= BP1; // Interruption sur front descendant pour P1.2 P2IES |= BP2; // Interruption sur front descendant pour P2.6 P1IFG &= ~BP1; // Efface le flag d'interruption pour P1.2 P2IFG &= ~BP2; // Efface le flag d'interruption pour P2.6 P1IE |= BP1; // Active l'interruption pour P1.2 P2IE |= BP2; // Active l'interruption pour P2.6 __enable_interrupt(); // Active les interruptions } void delay(unsigned int milliseconds) { while (milliseconds--) { __delay_cycles(1000); // Attente d'une milliseconde } } void startTimer() { CCTL0 = CCIE; // Active l'interruption du Timer TACTL = TASSEL_2 + MC_1 + ID_3; // Source d'horloge SMCLK, mode Up, division d'horloge 8 TACCR0 = 4096 * 5; // Compteur du Timer pour 5 secondes } void stopTimer() { TACTL = 0; // Désactive le Timer } void turnOnGreenLED() { P4OUT |= GREEN_LED; } void turnOffGreenLED() { P4OUT &= ~GREEN_LED; } void turnOnRedLED() { P1OUT |= RED_LED; } void turnOffRedLED() { P1OUT &= ~RED_LED; } void main() { WDTCTL = WDTPW + WDTHOLD; // Arrêt du watchdog timer setupLEDs(); setupButtons(); while (1) { // Attente infinie } } #pragma vector=PORT1_VECTOR __interrupt void Port1_ISR(void) { if (P1IFG & BP1) // Interruption causée par le bouton { P1IFG &= ~BP1; // Efface le flag d'interruption pour P1.2 if (timerCount == 0) // Si la temporisation n'est pas déjà en cours { turnOnGreenLED(); // Allume la LED Verte startTimer(); // Démarre la temporisation de 5 secondes } else // Si la temporisation est déjà en cours { turnOnRedLED(); // Allume la LED Rouge stopTimer(); // Arrête la temporisation turnOffGreenLED(); // Éteint la LED Verte } } } #pragma vector=PORT2_VECTOR __interrupt void Port2_ISR(void) { if (P2IFG & BP2) // Interruption causée par le bouton-poussoir P2.6 { P2IFG &= ~BP2; // Efface le flag d'interruption pour P2.6 if (timerCount > 0) // Si la temporisation est en cours { startTimer(); // Redémarre la temporisation de 5 secondes turnOnGreenLED(); // Allume la LED Verte } } } #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer0_A0_ISR(void) { timerCount++; // Incrémente le compteur de temporisation if (timerCount >= 5) // Si la temporisation est terminée { stopTimer(); // Arrête la temporisation turnOffGreenLED(); // Éteint la LED Verte timerCount = 0; // Réinitialise le compteur de temporisation } }
-----