Work regisztrálja avr mikrokontroller a B, bit műveletek

A működési elvei az egyéni port regisztrációhoz bit AVR mikrovezérlő. Részletek tekinthető bites műveletek és Biteltolás műveletek C nyelven. Példák az alaphelyzetbe, és a bitek nyilvántartásban kikötőkben, olvasni a status bit és inverzió.

Az olvasás és írás az egyes bitek mikrokontroller portokat meg kell tanulni, hogy készítsen bites műveleteket használja bitmap és írj a port.

bájtstruktúra

Tudjuk, hogy egy bájt 8 bitet jelent, és minden bit - 1 vagy 0 bit egy bájt tartják jobbról balra. Bit 1 a legkevésbé jelentős, és a bit 8 - Senior.

A konstansok és meghatározások fájlt AVR-libc minden típusú mikrokontroller jelzi az értékeket a állandók PD0, PD-1, PB5, PC4, és mások. Például, hogy megjelenítse az értékek minden állandók az IO-fájl ATmega8 mikrokontroller és ahol van egy kombináció „PD” (keres állandók a port D), hajtsa végre a parancsot:

Itt megkapjuk a következő eredménnyel:

Amikor az állandó PD0 tudod, hogy tartalmaz egy számot 0 és PD-1 - 1, stb

Biteltolás működés

Térjünk most részletesebben példák foglalkozni kicsit változó piaci szereplők.

Összesen több fajta bites változó műveletek, mint például:

  • logika (eltolt biteket elveszett, és a másik szabad pozíciók vannak töltve nullák);
  • aritmetikai (görbe balra tolódik -, valamint a logikai jobbra léptetés - tele vannak értékek a bal szélső bit, amely más néven pont);
  • ciklusos (bitek eltolódott az egyik oldalról kerülnek át a kiürített helyzetben a másik pedig egy zárt gyűrű).

Biteltolás szereplők „>>” és "<<" в языке программирования Си выполняют сдвиг битов в переменной вправо и влево на указанное число элементов. Биты которые были сдвинуты теряются, а с другой стороны появляются нули - выполняется логический сдвиг.

Fontos figyelmeztetés: a jobbra tolódása ( „>>”) a változó számú negatív előjellel (aláírt) végeztek aritmetikai - pozíciók üresen töltik edinichki (transzfer lemez). Fontos megjegyezni!

Például, hogy végre kicsit eltolódik a különböző számokat, először az őket képviselő bináris formában.

Az 1-es számú (december, tizedes 1) - 00000001 (Bin, a bináris rendszerben 0b00000001):

Bal Shift egy kicsit számát szaporítja a 2 és a jobbra tolódása - a körzet száma 2.

A szám 209 (december, decimális 209) - 11010001 (Bin, egy bináris rendszer 0b11010001):

Átalakítására egy számot rendszerből a másikba kényelmesen használható számológép Linuxon. ezt már írtam.

Bitműveletek C

Mi már tudjuk, hogy mozog a bit egy bájt, akkor foglalkozni bit operátorok C:

  • " „(A logikai ÉS, ÉS), illetve a szaporodás - művelet, ahol az eredmény 1, ha mindkét operandus értéke 1, különben ez lesz 0;
  • „|” (Logikai vagy, OR), vagy kívül - művelet eredmény egyenlő 1 abban az esetben, ha legalább az egyik operandus értéke 1;
  • "
„(Logikai NEM) vagy inverziót - egyváltozós művelet, amelynek eredménye 0, ha az operandus értéke 1, és fordítva - az eredmény 1, ha az operandus értéke 0;
  • „^” (Kizárólagos-OR, XOR) - művelet eredmény egyenlő 1 az esetben, ha csak az egyik a két operandus egyenlő 1.
  • Tekintsük a példát bit műveletek számát 209, 7. és a kicsit képviselet:

    Mint látható, kicsit műveletek lehetővé teszik, hogy vagy alaphelyzetbe egyes bitek számát.

    Beállítás bit a port nyilvántartásban

    És most egy kis gyakorlás, tegyük a telepítés 6. bit a nyilvántartásban PORTB port, ami viszont rendkívül magas szinten a csatorna PB5 (6. bit a nyilvántartásba). Tegyük fel most, hogy PORTB regiszter számát tartalmazza 136. amelyben bit ábrázolás külleme 10001000 (magas szint a PB7 csatornák és BP3).

    Állítsa be a 6. bit (100 01000), akkor használd a logikai OR művelet kicsit együtt bites maszk. Mert bitmask. amellyel az egy bit lesz állítva a későbbiekben fogunk végrehajtani balratolást bites szám 1 (00000001) 5 soraiban:

    Ennek eredményeként a kicsit művelet megkapjuk száma 32 (00100000), a diád 5. fokú kisülési minden műszakban szorozva eredményt 2.

    Elvégzi bit VAGY művelet az aktuális száma a nyilvántartásba, és így a szám-maszk:

    Most hasonlítsd össze az állam a regiszter előtt és a műtét után - az összes állapotbitek menti, és ezen felül telepítve 6. bit.

    A telepítéshez a 6. bit és az azt követő bejegyzés a nyilvántartás port PORTB (beállítás magas szinten PB5 csatorna) ebben a példában bármelyike ​​lehet a következő szerkezetek szereplők, mind végre azonos feladatot:

    • PORTB = PORTB | 32;
    • PORTB = PORTB | (1 <<5);
    • PORTB = PORTB | (1 <
    • PORTB | = (1 <

    Ez a legkényelmesebb, hogy a legújabb rövid feljegyzés, amely egy kombinált logikai VAGY és értékadó operátor, ebben az esetben PB5. Például állandó PB5 (csatorna port 5 B, 6. bites regiszter) van definiálva fájlba /usr/lib/avr/include/avr/iom8.h ATmega8 mikrokontroller, és ez egyenlő az 5-ös szám.

    Hogyan kell telepíteni néhány bitet a nyilvántartásban? - Akkor hívja felváltva a két konstrukció a piaci szereplők, és ez lehet, hogy végre minden egy csapat. Tegyük fel, hogy szeretné telepíteni a 2. és 6. bit regiszter PORTD portokat, amelyek megfelelnek a csatornák PD-1 és PD5:

    Reset bit port regiszter

    Visszaállításához mentesítés port terül fogjuk használni bites művelet „” (logikai „ÉS”), amely alkalmazható a két bit (művelet), és megadja az egység csak akkor, ha a két eredeti bitek egyetlen érték, és mi kell a kis művelet "

    "(Logikai" NEM”, inverzió).

    Nézzük resethez az 5. bit a nyilvántartásba PORTD port. ami viszont elvégzi az alacsony szintű beállítást PD4 csatornát. Tegyük fel most, hogy PORTD regiszter számát tartalmazza 157. amelyben bites ábrázolás külleme 10.011.101.

    Annak érdekében, hogy visszaállítsa az 5. bit (1001 1101) regisztrálni a port PORTD fogunk készíteni egy maszkot (mint amikor a beállítás bit), akkor elő inverzió "

    „Bit és hajtsa végre a műveletet” „meghaladja a jelenlegi értékét a nyilvántartás és a kapott fordított maszk.

    Ahhoz, hogy előkészítse a maszk bitek tolódnak 4 bit közé tartoznak 1 (00000001).

    A maszk kész, megvan a száma 16 (00010000), 2 a 4. fokozatot. Végezze el az inverzió bitek:

    Ready, továbbra is alkalmazni a maszkot a tartalmát a port PORTB regiszter segítségével bit művelet "„:

    Most a tartalmát regiszter PORTD értéke 5-edik bitjének értéke 0, miközben a maradék bit-pozíciókat. A C-ben, a műveletet az adatok alkalmazásával hajtható végre a következők bármelyikét parancsok azonos eredmény:

    • PORTD = PORTD
    16;
  • PORTD = PORTD 239;
  • PORTD = PORTD (1 <<4 );
  • PORTD = PORTD (1 <
  • PORTD =

    Ebben az esetben a legkényelmesebb és informatív módon a csapat tart egy rövidített változata.

    Visszaállításához több bitet regisztrációhoz használható itt ilyen szerkezetek szereplők:

    • PORTD = PORTD
    ((1 <
  • PORTD =

    Ellenőrzés regiszter bitek

    Most mi kell érteni, hogyan kell ellenőrizni regiszter bitek jelenlétére 1 vagy 0. Ez akkor lehet szükséges, ha ez szükséges, hogy megkapja a bit értéke a speciális célú regiszterek (zászlók) a mikroprocesszor és az olvasás állapotának különböző eszközök és modulok segítségével továbbítják annak állapotát használja bites struktúrát .

    Hogyan lehet ellenőrizni az érték a megadott bit nyilvántartást C? - szüksége van, hogy vegye fel egy speciális kifejezést használ bites műveleteket, melynek eredménye az az érték: true (igaz) vagy false (hamis). Az érték a logikai (bool) tudjuk használni a kifejezést feltételes utasítások a C nyelvet.

    Például van, hogy ellenőrizze, van-e egység (1), a 3. bit PORTD nyilvántartásba. így fogjuk ellenőrizni, hogy van egy magas szintű a csatornán PD2 port PORTD. Tegyük fel, hogy az aktuális érték a regiszter - 10010101 (149).

    Tesztelhető a kifejezés, amely egy kicsit maszk bit beállítva, hogy ellenőrizze és az ellenőrzött nyilvántartásból, amely alkalmazta a bit üzemeltető „” (logikai ÉS).

    Elkészített maszk, amely csak a harmadik bit értéke 0. A művelet műszak száma 1 2 bit:

    bites művelet „” Most kell alkalmazni (logikai ÉS) a tartalmát a nyilvántartás és a kapott PORTD maszk:

    Ennek eredményeként, a kifejezések a 4-es szám (0000 0100).

    A C, az összes szám, amelyek nem egyenlő a "nulla" (-100, -5, 1, 500) egy logikai igazság (True A), és 0 - logikai hamis (False).

    Ezért az eredmény a mi kifejezést - a 4-es számú logikai igazság (True), ami azt jelenti, hogy a harmadik kategóriába PORTD nyilvántartás is tartalmaz. Így a kifejezés fog kinézni a C:

    Ez a kifejezés is használható feltételes állítások (ha) nyilatkozatok és hurkok (közben), például:

    Hogy ellenőrizze a tartalmát a bit a nyilvántartásban nullára (0), ugyanazt az építőipar, csak a kifejezés alkalmazható az eredménye a logikai inverzió művelet „!” (Logikai NOT). Logikai „!” megfordítja a logikai értéket az igazság (True) fekszik a (hamis), és fordítva. Ellentétben a bit inverzió működését. amely megfordítja a biteket 1-0, és fordítva, a logikai inverzió művelet működik a logikai értékek: true (igaz) hazugság (hamis).

    Példa kifejezés teszteli a nulla (0) 3. bit (PD2 csatorna) regiszterben PORTD port:

    Itt van a „PORTD (1 <<2)" берем в круглые дужки и таким образом получаем комплексный результат выражения, к которому потом применяем оператор логической инверсии.

    Inversion állapotbit regiszterben

    Néha szükség lehet változtatni az állam egy adott bit a nyilvántartást az ellenkezője -, hogy végre egy inverzió a status bit.

    Mert egy ilyen művelet kiváló bit szereplő „^” (kizárólagos OR, XOR). Ahhoz, hogy az inverz egy meghatározott bit nyilvántartást kell létrehozni egy maszk, amelyben ez a bit be van állítva, majd alkalmazza a regiszter tartalma és a kapott maszkot bináris operátor „^”, majd kiírja az eredményt a nyilvántartásba, és kész.

    Vegyük például, meg kell, hogy kifizessék a LED, mely össze van kötve a csatorna PD5 port PORTD. Ha a LED világít, az azt jelenti, hogy PD5 csatorna van egy magas szintű, illetve az azt jelenti, hogy a regisztrációs port PORTD bites szám 6 (PD5 = 5, 6-ik bit a byte-nyilvántartás) beállítása 1. Tegyük fel, hogy a port a regiszterben PORTD most - 10111010 (szám 186, 1 bájt, 8 bit, a 6-edik bit = 1).

    Készítsünk egy maszk beállítására a 6. bit, meg kell mozgatni az összes bit a számok 1-5 számjegy:

    Alkalmazzuk a maszkot, hogy a tartalmát a port PORTD nyilvántartásban:

    Mint látható, a 6-ik bit a bájt nyilvántartásban amely korábban az 1. Úgy van beállítva, hogy 0 (100 januárjában 1010),. Most meg kell írni a számot a nyilvántartásban a port, és a probléma befejezettnek tekinthető. Példák segítségével egy ilyen szerkezet C nyelven:

    • PORTD = PORTD ^ 32;
    • PORTD = PORTD ^ (1<<5);
    • PORTD = PORTD ^ (1<
    • PORTD ^ = (1<

    Csakúgy, mint az előző példákban beállítására és alaphelyzetbe bit, az utolsó rövid kivitel a legegyszerűbb és egyszerű használni.

    következtetés

    Első pillantásra könnyű eltévedni a szolgáltatók és értékek, mint a „”, „!”, „PD-1”, „>>” és mások, de ha egyszer jól érthető, és próbált gyakorolni, akkor mindig van egy koncepció, hogy mi működik, ahol ez hozott, és hogy tartalmazza.

    Logikai és bit műveletek jelen vannak számos programozási nyelvek, nem csak a C, így ez a tapasztalat hasznos lesz, ha még működik más programozási nyelveket.