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.

Atmega8 C - Maskowanie bitów portu

DaKKi 02 Lip 2013 18:51 2418 6
  • #1 02 Lip 2013 18:51
    DaKKi
    Poziom 16  

    Witam,
    Szybki, banalny problem z którym nie mogę się uporać ani nigdzie znaleźć rozwiązania - w jaki sposób mogę zmienić stany 4 najmłodszych bitów/pinów Portu B ATMegi nie ingerując w żaden sposób w stan pozostałych ? Np chce ustawić coś
    takiego, gdzie X to bity których nie chce zmieniać :

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Probowałem rozwiązać problem przez:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    ...ale polecenie nie ustawia/zeruje tych bitów jednocześnie tylko jeden po drugim najwyraźniej.
    Z góry dzięki za pomoc.

    0 6
  • Pomocny post
    #2 02 Lip 2013 19:10
    tmf
    Moderator Mikrokontrolery Projektowanie

    Kombinujesz strasznie:)
    PORTB&=0xF0;
    PORTB|=((bity) & 0x0F);
    To drugie jest niepotrzebne jeśli masz pewność, że bity<16.

    0
  • Pomocny post
    #3 02 Lip 2013 20:27
    BlueDraco
    Specjalista - Mikrokontrolery

    Trochę szybciej:

    PORTB = PORTB & 0xf0 | nowe_bity & 0xf;

    Pamiętaj, że tak można zrobić tylko wtedy, gdy zawartość portu jest modyfikowana wyłącznie w procedurach obsługi przerwań albo wyłącznie w programie głównym. Jeśli modyfikacja zachodzi i tu, i tu - w programie głównym trzeba ją zamknąć w sekcję krytyczną - obudować wyłączeniem i włączeniem przerwań.

    0
  • #4 02 Lip 2013 20:58
    DaKKi
    Poziom 16  

    Dzięki wielkie ;)
    Korzystając z okazji - mam jeszcze problem z wyświetleniem na LCD zmiennej . Zawszę robiłem to w ten sposób i działało:

    Kod: c
    Zaloguj się, aby zobaczyć kod




    Tym razem jednak jak dojdzie do 9 (przejdzie na liczby dwucyfrowe) to program się wysypuje i wyświetla jakieś głupoty...co jest nie tak ?

    0
  • #5 02 Lip 2013 21:05
    BlueDraco
    Specjalista - Mikrokontrolery

    Czytaj ostrzeżenia kompilatora - masz tam jasno opisane, co jest źle. Widać to gołym okiem.

    0
  • #6 02 Lip 2013 21:16
    tmf
    Moderator Mikrokontrolery Projektowanie
  • #7 02 Lip 2013 23:58
    DaKKi
    Poziom 16  

    trochę zajęło mi rozszyfrowanie warningów, a właściwie zagłębienie się w funkcję itoa, ale dzięki panowie ;) zmienne buforowe trzeba deklarować jako tablice - buffer[5] ;)

    Pozdrawiam !

    0