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.

Jedna linia zamiast sbi i cbi

loczi 07 Gru 2011 23:27 1230 4
  • #1 07 Gru 2011 23:27
    loczi
    Poziom 13  

    Witam,

    Powiedzmy, że mam rejestr PORTA i chce w nim ustawić bit PORTA2, PORTA3 = 0, a PORTA4, PORTA5 = 1

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Powiedzmy że mam takie coś:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wiem że cbi mogę zamienić na:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    sbi:
    Kod: c
    Zaloguj się, aby zobaczyć kod




    Jak czytelnie w jednej linii ustawić bity 2,3(na 0),4,5(na 1) w danym rejestrze, nie zmieniając innych bitów(0,1,6,7)?

    0 4
  • #2 08 Gru 2011 15:01
    szelus
    Specjalista - Mikrokontrolery

    To zależy, czy mamy pewność, że wybrane bity są aktualnie w przeciwnym stanie, niż wymagany. Jeżeli nie ma takiej pewności, to jednak lepiej

    Kod: c
    Zaloguj się, aby zobaczyć kod

    lub po prostu
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 08 Gru 2011 15:33
    dondu
    Moderator Mikrokontrolery Projektowanie

    szelus napisał:
    To zależy, czy mamy pewność, że wybrane bity są aktualnie w przeciwnym stanie, niż wymagany. Jeżeli nie ma takiej pewności, to jednak lepiej
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Od tego jest &= i to podał autor tematu.

    @loczi: Stosuj taki zapis:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    poza tym stosuj krótsze nazwy:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    a już na pewno nie stosuj liczb zamiast zdefiniowanych nazw, jak radzi kol:
    szelus napisał:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Więcej informacji tutaj: http://mikrokontrolery.blogspot.com/2011/04/problemy-c-ustawianie-i-zerowanie-bitow.html

    0
  • #4 08 Gru 2011 17:45
    szelus
    Specjalista - Mikrokontrolery

    Ups. Po drodze (przed moim postem) był post kolegi, który proponował użycie XOR. Do tego odnosiła sie moja uwaga o poprzednim stanie. Jak autor ten post usunął, to zmienił się cały kontekst i moja wypowiedź straciła nieco sens.
    Przy okazji, użycie &= i |= w tym przypadku implikuje dwie linijki, a pytanie było o jedną. :)
    Przy czym, jako stary "hackier" :wink: będę się upierał, że użycie symbolicznych numerów bitów w stylu PA1, czy PORTA1 i użycie bezpośrednio numerów bitów czy numerycznych masek jest (prawie) równoważne, jeżeli chodzi o czytelność.
    Co innego, gdy używamy symbolicznych numerów oznaczających jakąś fukcjonalność, w stylu LED_A_BIT, czy CS0 itp.

    0
  • #5 08 Gru 2011 18:05
    dondu
    Moderator Mikrokontrolery Projektowanie

    :)
    Każdy ma swoje przyzwyczajenia, dodam tylko że w mikrokontrolerach warto stosować zdefiniowane, bo łatwiej kod lub jego przenosić pomiędzy mikrokontrolerami. Wtedy także warto pójśc o krok dalej i zdefiniować te LED_A_BIT, o którym piszesz. To takie krótkie info, by autor tematu wybrał dla siebie najlepsze rozwiązanie.

    0