Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

MSP430G2553 launchpad - obsługa dwóch przycisków

and11 29 Gru 2014 12:06 933 4
  • #1 29 Gru 2014 12:06
    and11
    Poziom 8  

    Witam
    Jestem początkującym użytkownikiem msp430 launchpad, jak i ogólnie początkującym jeżeli chodzi o programowanie.
    Ucząc się programowania, chciałem napisać kod, który po podłączeniu dwóch przycisków do mojej płytki pozwoliłby przy wciśnięciu jednego przycisku włączyć diodę czerwoną a po naciśnięciu drugiego przycisku wyłączałby diodę czerwoną a włączał zieloną i tak w kółko. Przyciski podpiąłem pod P1.4 i P1.5.

    Udało mi się napisać coś takiego:

    #include <msp430.h>


    volatile unsigned int i;

    int main(void)
    {
    WDTCTL = WDTPW + WDTHOLD;// Stop watchdog
    P1DIR |= 0x41; //P1.0 oraz P1.6(diody) ustawione na wyjcia

    P1REN = 0x30;//podciągnięcie przyciskow pod Vss p1.4 i p1.5
    P1OUT = 0x30;//podciągnięcie przycisku pod Vss p1.4 i p1.5

    //zdefiniowanie przerwań
    P1IES = 0x30;//przerwanie od przycisku na sygnał opadający
    P1IE = 0x30;//uruchomienie przerwania od przycisku
    __enable_interrupt();//globalne uruchomienie przerwań

    //P1OUT ^=0x40;
    }


    //Obsługa przerwan
    #pragma vector=PORT1_VECTOR
    __interrupt void Port_1(void)
    {
    P1OUT |= 0x00;
    P1OUT ^= 0x01;//Włącz/wyłącz diody
    P1IFG &= ~0x10;//Wyzerowanie flagi przerwania
    }

    #pragma vector=PORT2_VECTOR
    __interrupt void Port_2(void)
    {
    P1OUT |= 0x00;
    P1OUT ^= 0x40;//Włącz/wyłącz diody
    P1IFG &= ~0x20;//Wyzerowanie flagi przerwania
    }


    Program, który napisałem działa tak, że obojętnie, który przycisk przycisnę włącza mi się jedna dioda i tyle :/
    Bardzo proszę o pomoc

    0 4
  • #2 29 Gru 2014 12:52
    BlueDraco
    Specjalista - Mikrokontrolery

    Przeczytaj uważnie ostrzeżenia kompilatora - masz dwie procedury o tej samej nazwie.

    A, i zapamiętaj, że przycisków nie obsługuje się przy użyciu przerwania od zmiany stanu wejścia - temat wraca tu co tydzień. To nie będzie działać poprawnie. Użyj przerwania timera.

    0
  • #3 29 Gru 2014 15:42
    and11
    Poziom 8  

    Przepraszam, mój błąd w kopiowaniu, nazwy są różne, program się kompilował bez żadnych błędów i ostrzeżeń.
    muszę poszukać jakieś informacje na temat tego typu przerwania od timera

    0
  • #4 29 Gru 2014 21:23
    BlueDraco
    Specjalista - Mikrokontrolery

    Jeśli drugie przerwanie jest od PORT2, to czemu kasujesz w nim znacznik z PORT1? A jeśli jest od PORT1, to oba przyciski powinieneś obsługiwać w tej samej procedurze (pomijając to, że w ogóle tego nie powinieneś robić).

    Ta linia kodu nie robi nic:
    P1OUT |= 0x00;

    0
  • #5 16 Sty 2015 13:55
    and11
    Poziom 8  

    No to wymodziłem coś takiego:

    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod


    Program działa tak jak chciałem ale z jednym małym problemem, oba przyciski działają można powiedzieć tak samo, obojętne, który nacisnę to mi włącza zgaszoną a wyłącza zaświeconą obecnie, a ja chciałem by dany przycisk zawsze wykonywał to samo zadanie

    0