logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[avr] jak wyjść z watością (zmienną) poza przerwanie

misiolowaty 03 Maj 2011 19:30 1154 4
REKLAMA
  • #1 9466257
    misiolowaty
    Poziom 13  
    Pytałem o to samo zadanie w innym temacie, ale zmieniłem koncepcję i już do tamtego tematu się to nie nadaje. Dlatego zakładam nowy temat.

    W przerwaniu wygenerowanym przez USART_RXC_vect odczytuję wartość wysłana przez port szeregowy. Chcę tą wartość wynieść do main'a. Poniższy napisany przeze mnie kod nie działa:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tylko dlaczego to co wysyłam do atmegi przez uarta nie pojawia się na porcie? jest tam wartość zero cały czas.

    Oczywiście gdy zamiast

    buf=UDR;

    jest

    PORTA=UDR;

    to wszystko chodzi fajnie, ale ja potrzebuje w main...

    Ewentualnie ratuje mnie jakaś taka opcja, żeby przy drugim (i kolejnym) wykonanoiu tego nieszczęsnego przerwania pozostawała mi wewnątrz jedna zmienna.
  • REKLAMA
  • #2 9466285
    xamrex
    Poziom 28  
    Poczytaj o volatile
  • REKLAMA
  • #3 9466294
    misiolowaty
    Poziom 13  
    no przecież 10 linijka to:

    volatile char buf;
  • REKLAMA
  • #4 9466331
    GienekS
    Poziom 32  
    Brakuje ci synchronizacji odebranej danej. Jak USART ustawi ci zmienną buf to ta wartość będzie tam aż nie zostanie nadpisana przez następną ewentualną daną, a co jak będzie ta dana taka sama ??? to skąd będziesz wiedział, który to raz zostało nadane. Robi się przez flagę ustawianą przy odbiorze danej, który jest kasowany przez program główny aby mógł rozpoznać czy jest to nowy znak czy stary jeszcze.
    Czy to jasne ?
  • #5 9466412
    misiolowaty
    Poziom 13  
    Wszystko działa, program skonstruowałem następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jeszcze go upięknie, ale to już dla siebie. mam nadzieje, że potomnym się przyda takie rozwiązanie. PORTA posłużył mi jako flaga odebrania świeżej danej - i tak go nie użyje do nivczego innego a jest dostępna w przerwaniu.
REKLAMA