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.

AVR - [nie]zrozumienie kodu

rangelso 11 Mar 2014 22:25 780 2
  • #1 11 Mar 2014 22:25
    rangelso
    Poziom 9  

    Witam
    Jak rozumiem zgodnie z teorią języka C dla AVR

    Kod: c
    Zaloguj się, aby zobaczyć kod

    jest równoznaczny z
    PORTB = PORTB | (1<<5)
    czyli dla PORTB = 0xF0 (0b11110000)
    wynikiem 11110000 | 00010000 jest 11110000 czyli 0xF0. Logiczne

    Ale jak należy rozumieć
    Kod: c
    Zaloguj się, aby zobaczyć kod

    gdzie zarówno Tryb jak i wartosc są bajtami które mogą przyjąć wartości w zakresie 0x00 - 0xFF ? Chodzi o część po prawej stronie.
    Czy << jest tu znakiem przesunięcia bitowego jak w pierwszym przykładzie czy posiada inne znaczenie ?
    Czy jeśli Wartosc wykroczy poza 0x03 to po prawej stronie będzie zawsze 0x00 czy tu chodzi o coś innego ?

    0 2
  • #2 12 Mar 2014 00:53
    dondu
    Moderator Mikrokontrolery Projektowanie

    rangelso napisał:
    Jak rozumiem zgodnie z teorią języka C dla AVR
    Kod: c
    Zaloguj się, aby zobaczyć kod

    jest równoznaczny z
    PORTB = PORTB | (1<<5)
    czyli dla PORTB = 0xF0 (0b11110000)
    wynikiem 11110000 | 00010000 jest 11110000 czyli 0xF0. Logiczne


    Prawie dobrze, ale zamiast 00010000 otrzymasz 00100000, choć końcowy wynik będzie dokładnie taki jak Twój czyli 0xF0, ale to przypadek.

    A teraz drugi przypadek, gdzie zamiast przesuwać jedynkę o 5 miejsc w lewo, przesuwasz w lewo liczbę 0x10 szesnastkowo (czyli liczbę 16 dziesiętnie lub 0x00010000 dwójkowo) o ilość bitów, którą wyznacza zmienna Wartosc.

    Możesz to sprawdzić uruchamiając poniższy kod w CManiaku: http://mikrokontrolery.blogspot.com/p/cmaniak-kompilator-jezyka-c-online.html

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Resztę możesz poćwiczyć w kursie C: http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-spis-tresci.html
    znajdziesz tam także przesunięcia bitowe wraz z przykładami do kompilowania i ćwiczeń w CManiaku.

    0