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

Funkcja reagujaca 1 raz na stan portu - jak?

mystre 20 Wrz 2008 14:25 1116 3
REKLAMA
  • #1 5553379
    mystre
    Poziom 11  
    Witam

    Odczytuje stan portu za pomoca funkcji bit_is_clear();

    Np.:
    unsigned char zmianna;
    
    while(1)
    {
     zmienna = bit_is_clear(PINB,PINB2);
    
    if(zmienna)
    {
     wykonaj();
    }
    }


    PinB2 moze byc 0 i 1.
    W tych instrukcjach wykonaj() bedzie odpalone za kazdym przejsciem petli jezeli na PINB bedzie caly czas 0.
    Jak zmodyfikowac ta funkcje, aby dzialala nastepujaco:

    Gdy PINB jest ustawiony, to nie wykonuje sie nic.
    Gdy PINB jest zgaszony, to wykonaj() wykona sie tylko 1 raz.
    Tu mam problem:
    Po przejsciu ze stanu zgaszenia do stanu ustawienia i ponownym ze stanu ustawienia do stanu zgaszenia, funkcja wykona sie znow 1 raz - i tak w kolko.

    Pozdrawiam

    Dodano po 4 [minuty]:

    Dodam, ze na porcie PINB2 jest stale 0 lub stala 1. - nie sa to impulsy.
    Czy w takim przypadku moge uzyc przerwan?
    Przykladowo wykorzystujac przerwania opadajacym zboczem?
    Tylko, czy jak bedzie na PINB2 caly czas stan niski, to, czy te przerwanie nie bedzie mi sie wlaczac co jakis czas?
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #3 5553418
    aster11
    Poziom 19  
    unsigned char state, oldState; 
    
    while(1) 
    { 
      state = bit_is_clear(PINB,PINB2);
      if(state && !oldState)
        wykonaj(); 
      oldState = state;
    } 
  • #4 5553542
    mystre
    Poziom 11  
    1. Jezeli PINB2 jest zgaszony to state = 1 -> funkcja sie wykona.
    oldstate = state = 1.
    2. Za drugiem przejsciem !oldstate daje 0, czyli sie nie wykona.
    3. Za kolejnymi sie nie wykona.
    4.Jezeli teraz bit zostaje zapalony, to state = 0 -> funkcja nadal sie nie wykona bo 0 && 0 daje false.
    5. Jak bit zostaje zgaszony to wracamy do pkt 1.

    Wyglada OK;)
    Zaraz przetestuje...
REKLAMA