Čtení avr portů v c. Naučit se příkazový systém mikrokontroléru AVR

Úvod

Všechny I/O porty (I/O) na mikrokontrolérech AVR fungují na bázi čtení-úpravy-zápisu, když se používají jako univerzální I/O porty. To znamená, že ke změně I/O směru jedné linky portu pomocí příkazů SBI a CBI dojde bez falešné změny I/O směru ostatních linek portu. To platí také pro změnu logické úrovně (pokud je linka portu nastavena na výstup) nebo zapnutí/vypnutí pull-up rezistorů (pokud je linka nastavena na vstup). Každá výstupní vyrovnávací paměť má symetrickou charakteristiku pohonu s vysokými klesajícími a klesajícími výstupními proudy. Výstupní měnič má nosnost, která umožňuje přímo řídit LED diody. Všechny portové linky lze připojit k samostatnému selektivnímu pull-up rezistoru, jehož odpor nezávisí na napájecím napětí. Všechna vedení IVR mají ochranné diody připojené k VCC a GND, jak je znázorněno na obrázku 29. Podrobný seznam parametrů IVR je uveden v části Elektrické specifikace.

Obrázek 29 - Ekvivalentní obvod vedení PVV

Odkazy na registry a bity registrů tato sekce uvedeno v obecné formě. V tomto případě symbol „x“ nahrazuje název PVV a symbol „n“ nahrazuje číslo číslice PVV. Při sestavování programu je však nutné použít přesnou formu zápisu. Například PORTB3, což znamená bit 3 portu B, je v tomto dokumentu zapsán jako PORTxn. Adresy fyzických I/O registrů a rozložení jejich bitů jsou uvedeny v části „Popis registrů I/O portů“.

Pro každý I/O port jsou v I/O paměti vyhrazena tři místa: jedno pro datový registr, PORTx, další pro registr směru dat, DDRx, a třetí pro stav vstupů portu, PINx. Buňka stavu portu je pouze pro čtení a datové registry a datové směry jsou obousměrné. Navíc nastavením bitu vypnutí PUD v registru SFIOR zakážete funkci pull-up na všech pinech na všech portech.

Následuje popis I/O portu pro Universal Digital I/O. Většina pinů portů podporuje alternativní vestavěné funkce. periferie mikrokontrolér. Popis alternativních funkcí je uveden v podsekci „Funkce alternativních portů“ níže (viz také popis funkcí příslušných periferních modulů).

Všimněte si, že u některých portů povolení alternativních funkcí některých pinů znemožňuje použití jiných pinů pro univerzální digitální I/O.

Porty jako univerzální digitální I/O

Všechny porty jsou obousměrné I/O porty s volitelnými pull-up odpory. Obrázek 30 znázorňuje blokové schéma jednoho řádku I/O portu, označeného Pxn.


Obrázek 30 - Organizace univerzálního digitálního vstupu-výstupu (1)

Poznámka. 1: Signály WPx, WDx, RRx, RPx a RDx jsou společné na stejném portu. Signály clkI/O, SLEEP a PUD jsou společné pro všechny porty.

Nastavení pinu

Režim a stav pro každý výstup je určen hodnotou odpovídajících bitů tří registrů: DDxn, PORTxn a PINxn. Jak je znázorněno v popisu registrů I/O portů, k bitům DDxn lze přistupovat na adrese DDRx v prostoru I/O a v souladu s tím k bitům PORTxn na adrese PORTx a bitům PINxn na adrese PINx.

Bity DDxn registru DDRx určují směr I/O linky. Pokud DDxn = 1, pak je pro výstup nakonfigurován Pxn. Pokud DDxn=0, pak je pro vstup nakonfigurován Pxn.

Pokud je PORTxn = 1, když je linka portu nakonfigurována jako vstup, lze připojit pull-up rezistor. Chcete-li tento odpor vypnout, musíte zapsat protokol do PORTxn. 0 nebo nastavte linku portu na výstup. Během resetování jsou všechny porty ve třetím (vysokoimpedančním) stavu, i když hodiny nefungují.

Pokud PORTxn = 1 při konfiguraci linky portu na výstup, pak stav výstupu bude určen hodnotou PORTxn.

Protože současný zápis do registrů DDRx a PORTx není možný, při přepínání mezi třetím stavem ((DDxn, PORTxn) = 0b00) a výstupem log. 1 ((DDxn, PORTxn) = 0b11) mezistav by měl nastat buď s připojeným pull-up rezistorem ((DDxn, PORTxn) = 0b01) nebo s log výstupem. 0 ((DDxn, PORTxn) = 0b10). Zpravidla je stavový přechod s připojeným pull-up rezistorem ekvivalentní stavu výstupu log.1, pokud je výstup mikrokontroléru připojen k vysokoimpedančnímu vstupu. V opačném případě musí být bit PUD v registru SFIOR nastaven tak, aby se vypnuly ​​všechny pull-up rezistory na všech portech.

Přepínání mezi vstupem s pull-up rezistory a výstupem nízká úroveň spojené s podobným problémem. Uživatel je tedy nucen použít buď třetí stav ((DDxn, PORTxn) = 0b00) nebo výstup logu. 1 ((DDxn, PORTxn) = 0b11) jako mezikrok.

Tabulka 25 shrnuje vliv řídicích signálů na stav výstupu.

Tabulka 25 - Nastavení pinu portu

DDxn PORTxn PUD (ve SFIOR) Vstup výstup Pull-up rezistor Komentář
0 0 X Vstup Ne
0 1 0 Vstup Ano Pxn bude zdrojem proudu, když je aplikován externí nízký signál
0 1 1 Vstup Ne Třetí stav (stav Z)
1 0 X Závěr Ne log výstup. 0 (klesající proud)
1 1 X Závěr Ne log výstup. 1 (výstupní proud)

Přečtěte si stav výstupu

Bez ohledu na hodnotu datového směrového bitu DDxn lze zjistit stav pinu portu prostřednictvím bitu registru PINxn. Jak je znázorněno na obrázku 30, registrový bit PINxn a spouštěcí západka, která mu předchází, tvoří synchronizátor. Tento přístup zabraňuje metastabilitě, pokud ke změně stavu na výstupu došlo blízko okraje vnitřních hodin. Tento přístup však přichází se zpožděním. Obrázek 31 ukazuje časový diagram časování během dotazování úrovně externě aplikované na výstup. Doba trvání minimálního a maximálního zpoždění šíření je označena jako tpd,max a tpd,min.


Obrázek 31 - Synchronizace během dotazování vrstvy aplikované na výstup portu

Následující příklady ukazují, jak nastavit port B na řádcích 0 a 1 pro protokolování. 1, a na řádcích 2 a 3 - log. 0 a jak nakonfigurovat piny 4…7 tak, aby byly zadány pomocí pull-up na pinech 6 a 7. Výsledný stav pinů je přečten zpět, ale s tím je zahrnuta instrukce nop, která umožňuje nově přiřazený stav některé piny ke zpětnému přečtení.

Příklad kódu sestavy (1) ... ; Povolit pull-up a nastavit vysoké výstupní úrovně; Určíme směry těchto linek portů ldi r16, (1<

Poznámka. 1: Program assembler používá dva dočasné registry k minimalizaci časového intervalu od nastavení pull-up rezistorů na bitech 0, 1, 6 a 7 ke správnému nastavení směrových bitů pro umožnění výstupu logu. 0 na pinech 2 a 3 a nahrazení vysoké úrovně na bitech 0 a 1, vytvořené připojením pull-up rezistorů, na vysokou úroveň vysokoproudého budiče.

Digitální vstupní rozlišení a režimy spánku

Jak je znázorněno na obrázku 30, vstupní digitální signál může být přiveden k zemi na vstupu Schmittovy spouště. Signál označený na obrázku SLEEP je nastaven, když mikrokontrolér přejde do režimů vypnutí, vypnutí, spánku a prodlouženého spánku. Tím se zabrání zvýšení odběru proudu, pokud jsou některé vstupní signály plovoucí nebo je úroveň analogového vstupu blízká VCC/2.

Signál SLEEP je ignorován externími vstupy přerušení. Pokud jsou zakázány požadavky na externí přerušení, pak SLEEP ovlivňuje i tyto piny. SLEEP je také ignorován na některých dalších vstupech při provádění jejich alternativních funkcí (viz „Funkce alternativního portu“).

Pokud je externí pin asynchronního přerušení konfigurován tak, aby přerušoval na vzestupné hraně, sestupné hraně nebo jakékoli změně, je log. 1 a externí přerušení není povoleno, pak bude při opuštění výše uvedených režimů spánku nastaven odpovídající příznak externího přerušení, protože funkce bočníku na vstupu v režimech spánku způsobuje logické změny.

Nezapojené kolíky

Pokud několik pinů zůstane nevyužito, pak se doporučuje zaručit na nich přítomnost určité logické úrovně. Ačkoli je většina digitálních vstupů v režimech hlubokého spánku deaktivována, jak je popsáno výše, je třeba se vyhnout plovoucím vstupům, aby se zabránilo nadměrné spotřebě proudu ve všech ostatních provozních režimech mikrokontroléru, kde je digitální vstup povolen (Reset, Aktivní a Nečinný).

Nejjednodušší metodou, jak zajistit přítomnost určité úrovně na nepoužitém kolíku, je umožnit připojení interního pull-up rezistoru. V tomto případě však v režimu reset budou pull-up rezistory deaktivovány. Je-li požadována nízká spotřeba i v režimu reset, pak je nutné instalovat externí pull-up rezistor do plusu nebo mínusu zdroje. Připojování kolíků přímo k VCC nebo GND se nedoporučuje. Pokud je takový kolík neúmyslně nakonfigurován na datový výstup, může být generován nebezpečný proud.

Bitové operace jsou založeny na logických operacích, které jsme již probrali dříve. Hrají klíčovou roli při programování mikrokontrolérů AVR a dalších typů. Téměř žádný program se neobejde bez použití bitových operací. Dosud jsme se jim záměrně vyhýbali, abychom si usnadnili osvojení programování MK.

Ve všech předchozích článcích jsme pouze programovali I/O porty a nepoužívali jsme další vestavěné uzly, jako jsou časovače, analogově-digitální převodníky, přerušení a další interní zařízení, bez kterých MK ztrácí veškerou svou energii.

Než přejdete k ovládání vestavěných zařízení MK, musíte se naučit ovládat nebo kontrolovat jednotlivé bity registrů AVR MK. Dříve jsme prováděli kontrolu nebo nastavovali bity celého registru najednou. Podívejme se, jaký je rozdíl, a pak pokračujte dále.

Bitové operace

Nejčastěji jsme jej používali při programování mikrokontrolérů AVR, protože je přehlednější než začínající programátory MK a je dobře srozumitelný. Potřebujeme například nastavit pouze 3. bit portu D. K tomu, jak již víme, můžeme použít následující binární kód:

PORTD = 0b00001000;

Tímto příkazem však nastavíme 3. bit na jedničku a všechny ostatní (0, 1, 2, 4, 5, 6 a 7) vynulujeme. A nyní si představme situaci, že 6. a 7. číslice jsou použity jako vstupy ADC a v tuto chvíli přichází na odpovídající výstupy MK signál z nějakého zařízení a tyto signály resetujeme příkazem výše. V důsledku toho je mikrokontrolér nevidí a věří, že signály nepřišly. Místo takového příkazu bychom tedy měli použít jiný, který by nastavil pouze 3. bit na jedničku, přičemž zbytek bitů neovlivnil. K tomu se obvykle používá následující bitová operace:

PORT |= (1<<3);

Jeho syntaxi podrobně rozebereme níže. A teď další příklad. Řekněme, že potřebujeme zkontrolovat stav 3. bitu registru PIND, čímž zkontrolujeme stav tlačítka. Pokud je tento bit vynulován, pak víme, že je tlačítko stisknuto a následně je proveden příkazový kód, který odpovídá stavu stisknutého tlačítka. Dříve jsme používali následující zápis:

if (pind == 0b00000000)

(jakýkoli kód)

S jeho pomocí však nekontrolujeme ani jeden, - 3., ale všechny bity registru PIND najednou. Proto, i když je tlačítko stisknuto a požadovaný bit je resetován, ale v tu chvíli je přijat signál na jakémkoli jiném pinu portu D, odpovídající bit bude nastaven na jedničku a podmínka v závorkách bude nepravdivá. V důsledku toho se kód ve složených závorkách nespustí ani po stisknutí tlačítka. Pro kontrolu stavu jednotlivého 3. bitu registru PIND by se tedy měla použít bitová operace:

jestliže (~PIND & (1<<3))

(jakýkoli kód)

Pro práci s jednotlivými bity mikrokontroléru má ve svém arzenálu programovací jazyk C, pomocí kterého můžete měnit nebo kontrolovat stav jednoho nebo více jednotlivých bitů najednou.

Nastavení jednoho bitu

K nastavení jednoho bitu, jako je port D, se používá bitová operace OR. To jsme použili na začátku článku.

PORTD = 0b00011100; // počáteční hodnota

PORTD = PORTD | (jeden<<0); применяем побитовую ИЛИ

PORT |= (1<<0); // сокращенная форма записи

PORTD == 0b00011101; // výsledek

Tento příkaz nastaví bit na nulu a zbytek ponechá beze změny.

Nastavíme například 6. bit portu D.

PORTD = 0b00011100; // počáteční stav portu

PORT |= (1<<6); //

PORTD == 0b01011100; // výsledek

Chcete-li zapsat jeden až několik samostatných bitů najednou, například nula, šestý a sedmý port B platí následující označení.

PORTB = 0b00011100; // počáteční hodnota

PORTB |= (1<<0) | (1<<6) | (1<<7); //

PORTB == 0b1011101; // výsledek

Nulování (nulování) jednotlivých bitů

K resetování jednoho bitu se současně používají tři dříve popsané příkazy: .

Resetujme 3. bit registru PORTC a zbytek necháme beze změny.

PORTC = 0b00011100;

PORTC &= ~(1<<3);

PORTC == 0b00010100;

Proveďme podobné akce pro 2. a 4. číslici:

PORTC = 0b00111110;

PORTC &= ~((1<<2) | (1<<4));

PORTC == 0b00101010;

Přepínání rytmu

Kromě nastavení a nulování se používá i užitečný příkaz, který přepne jediný bit do opačného stavu: jednička na nulu a naopak. Tato logická operace je široce používána při stavbě různých světelných efektů, například jako novoroční girlanda. Vezměme si příklad PORTA

PORTA = 0b00011111;

PORTA ^= (1<<2);

PORTA == 0b00011011;

Změňte stav nulového, druhého a šestého bitu:

PORTA = 0b00011111;

PORTA ^= (1<<0) | (1<<2) | (1<<6);

PORTA == 0b01011010;

Kontrola stavu jednotlivého bitu. Připomínám, že kontrola (na rozdíl od zápisu) I/O portu se provádí čtením dat z registru PIN.

Nejběžnější test se provádí jedním ze dvou příkazů cyklu: if a while. Tyto operátory známe již dříve.

Kontrola výboje na přítomnost logické nuly (reset) s -li

if (0==(PIND & (1<<3)))

Pokud je vymazán třetí bit portu D, provede se Code1. Jinak se provede Code2.

Podobné akce se provádějí s a v této formě záznamu:

jestliže (~PIND & (1<<3))

Kontrola výboje na přítomnost logické jednotky (nastavení) s -li

if (0 != (PIND & (1<<3)))

pokud (PIND & (1<<3))

Výše uvedené dvě smyčky fungují podobně, ale díky flexibilitě programovacího jazyka C je lze zapsat odlišně. Operace != znamená nerovná se. Pokud je nastaven třetí bit I/O portu PD (jedna), provede se Code1, pokud ne, Code2.

Čeká se na trochu reset s zatímco

zatímco (PIND & (1<<5))

Kód1 se bude provádět tak dlouho, dokud je nastaven 5. bit registru PIND. Resetováním se spustí provádění Code2.

Čekání na nastavení bitu zatímco

Zde vám syntaxe jazyka C umožňuje psát kód dvěma nejběžnějšími způsoby. V praxi se používají oba typy záznamu.

Jedním z nejdůležitějších aspektů programování mikrokontrolérů je práce s registry a porty. Mikrokontroléry řady AVR mají několik I/O registrů a 32 univerzálních pracovních registrů. Programátor nemůže přímo zapsat číslo do I/O registru. Místo toho musí zapsat číslo do obecného registru a poté zkopírovat hodnotu tohoto registru do I/O registru. Pracovní registry jsou označeny jako R1, R2, ..., R31.

Pro zjednodušení psaní programů je velmi vhodné pojmenovat registry. Je vhodné uvádět názvy odpovídající uloženým informacím. Pokud se například registr R16 používá k ukládání dočasných informací, pak jej lze nazvat temp. To se provádí následujícím způsobem:

Aby nedošlo k "názvosloví" vstupních/výstupních registrů a hlavních registrů mikrokontroléru, stačí na začátku programu připojit hlavičkový soubor odpovídající použitému mikrokontroléru. Tito. nemusíte jmenovat registry portů, časovače/čítače atd. Například, pokud je program pro mikrokontrolér AT90s8515:

Zahrnout "8515def.inc"

U mikrokontroléru AT90s1200 – úplně prvního mikrokontroléru AVR, jsou I/O registry číslovány od $ 0 do $ 3F (v závislosti na modelu MK). Samostatně můžete vybrat vstupní / výstupní registry PortB, PinB, PortD, PinD (po připojení 1200def.inc mají označení písmen a jejich adresy jsou $ 18, $ 16, $ 12, $ 10 - souhlasíte s tím, že je velmi obtížné udržovat digitální konstanty v hlavu, je jednodušší používat abecední názvy) . Nejnovější mikrokontroléry AVR mají mnohem více portů, nazývají se A, B, C, D, E ...

Zvažte rozložení pinů oblíbeného mikrokontroléru ATtiny2313. Piny 2-9, 11 pojmenované PD0 - PD7 jsou port D, podobný portu B. Všimněte si, že port B je osm bitů a port D je sedm bitů.

Porty mohou fungovat jako vstupy i jako výstupy. Pokud port funguje jako vstup, tak je pro čtení hodnot potřeba odkázat na registr PinB nebo PinD - podle toho, ze kterého portu čteme. Pokud jsou na některých pinech vysoké úrovně, odpovídající log. "1", pak budou odpovídající bity v načtených hodnotách nastaveny na "1". Výstupy jsou schopny odolat proudu až 20 mA, ale nezapomeňte na celkový proud všech pinů portu. existují omezení. Pokud je port výstup, pak se hodnota na řádcích portu nastavuje zápisem příslušné hodnoty do registru portu PortB nebo PortD. K založení logu. "1" na výstupu portu nastavte příslušný bit v registru PortB nebo PortD.

Nejdůležitějším bodem práce s portem je práce s latch registrem, který je zodpovědný za provoz portů pro vstup nebo výstup. Název tohoto registru je DDRx, kde x je písmeno portu. Aby byly výstupy pinů, musíme zapsat „1“ do příslušných bitů. Například chceme, aby se pin PB7 portu B stal vstupem a zbytek nohou výstupy, pak k tomu potřebujeme zapsat hodnotu 0b01111111 do registru DDRB. Předpona 0b znamená, že číslo je zapsáno binárně. Při startu se registry DDRx vynulují, tzn. všechny nohy jsou vstupy. Do vstupů zařízení se doporučuje udělat nepoužité nohy.

Zvažte jednoduchý program, který pracuje s portem mikrokontroléru:

Zahrnout "8515def.inc" ; zahrnout soubor s popisy registrů.def temp =r16 rjmp RESET ; vektor přechodu při resetu RESET: ldi temp, 0b00000011 ; definovat PC0 a PC1 jako výstupy DDRC, temp ldi temp, 0b00000001 ; rozsvítíme LED na noze PC0 out PORTC , temp in temp, PinC ; čtení úrovní z portu C ... LOOP: ; nop rjmp LOOP hlavní smyčka

Bit

Číst psát

Počáteční hodnota

Bit 7 - Povolit všechna přerušení. Chcete-li povolit přerušení, musí být tento bit nastaven na 1. Povolení konkrétního přerušení je řízeno registry masky přerušení EIMSK a TIMSK. Pokud je tento bit vymazán (=0), pak se žádné z přerušení nezpracuje. Bit je hardwarově vymazán poté, co dojde k přerušení, a je nastaven na povolení přerušení později pomocí instrukce RETI.
· Bit 6 – Uložit bit kopírování. Instrukce pro kopírování bitů BLD a BST používají tento bit jako zdroj a cíl pro bitové operace. Příkaz BST zkopíruje bit obecného registru do bitu T, příkaz BLD zkopíruje bit T do bitu obecného registru.
· Bit 5 – Half Carry Flag. Označuje přenos mezi tetrádami při provádění řady aritmetických operací.
· Bit 4 - Bit znaménka. Bit S má hodnotu výsledku operace XOR (N(+)V) na příznaku záporné hodnoty (N) a doplňku dvojky příznaku přetečení (V).

· Bit 3 – Dvojkový doplněk příznaku přetečení. Podporuje aritmetiku dvojkového doplňku.
· Bit 2 – Negativní příznak. Tento příznak označuje negativní výsledek řady aritmetických a logických operací.
· Bit 1 – příznak nuly. Tento příznak označuje nulový výsledek řady aritmetických a logických operací.
· Bit 0 – Nosný příznak. Tento příznak označuje přenos během aritmetických a logických operací.

Mikrokontrolér AT90S8535 má 4 paralelní I/O porty A, B, C a D.
Port A je 8bitový obousměrný port. Interakce s portem A probíhá prostřednictvím tří registrů v datové paměti I/O prostoru: datový registr - PORTA, $1B ($ 3B), registr směru dat - DDRA, $ 1A ($ 3A), registr vstupních dat - PINA, 19 $ (39 $). Registr PINA je pouze pro čtení, zatímco registry PORTA a DDRA jsou pro čtení a zápis. Registr PINA není registrem v plném slova smyslu. Přístup k němu poskytuje čtení fyzického stavu každého pinu portu. Port A se také používá pro vstup analogových A/D signálů.

Registr dat portu A -PORTA

Bit

Číst psát

Počáteční hodnota

Port A Data Direct Register -DDRA

Bit

Číst psát

Počáteční hodnota

Registr vstupních dat portu A -PINA

Bit

Číst psát

Počáteční hodnota

Port B je 8bitový obousměrný I/O port. Stejně jako u portu A je komunikace s portem B prostřednictvím tří registrů v I/O prostoru datové paměti: datový registr - PORTB, $18($38), registr směru dat - DDRB, $17($37) a registr vstupních dat - PINB, $16 (36 dolarů). Registr PINB je pouze pro čtení. Registr PINB není registrem v plném slova smyslu. Přístup k němu poskytuje čtení fyzického stavu každého pinu portu. Piny portu B mohou vykonávat alternativní funkce uvedené v tabulce 1. 2.1.

Tabulka 2.1. Port B Pin Alternativní funkce

Port pin

Alternativní funkce

T0 - vstup časovače/počítadla 0

T1 - hodinový vstup časovače/počítadla 1

AIN0 - kladná svorka komparátoru

AIN1 - záporná svorka komparátoru

– Vstup pro výběr podřízené jednotky SPI

MOSI - Nastavení hlavního výstupu/podřízeného vstupu SPI

MISO - nastavení hlavního vstupu/výstupu SPI

SCK - SPI hodinový signál

Při použití pinů pro alternativní funkce je třeba odpovídajícím způsobem nastavit registry PORTB, DDRB.

Registr dat portuBPORTB

Bit

Číst psát

Počáteční hodnota

Port B Data Direct Register –DDRB

Bit

Číst psát

Počáteční hodnota

Registr vstupních dat portu B –PINB

Bit

Číst psát

Počáteční hodnota

Port C je 8bitový obousměrný I/O port. Stejně jako porty A a B je interakce s portem C prováděna prostřednictvím tří registrů v I/O prostoru datové paměti: datový registr je PORTC, 15 $ (35 $), registr směru dat je DDRC, 14 $ (34 $ ) a registr vstupních dat je PINC, 13 $ (33 $). Registr PINC je pouze pro čtení, zatímco registry PORTC a DDRC jsou pro čtení a zápis. Registr PINC není registrem v plném slova smyslu. Přístup k němu poskytuje čtení fyzického stavu každého pinu portu.
Port C má pouze dva kolíky, které mohou vykonávat alternativní funkce: kolíky PC6 a PC7 vykonávají funkce TOSC1 a TOSC2 časovače/počítadla 2.

Registr dat portuCPORTC

Bit

Číst psát

Počáteční hodnota

Port C Data Direct Register –DDRC

Bit

Číst psát

Počáteční hodnota

Registr vstupních dat portu C -PINC

Bit

Číst psát

Počáteční hodnota

Port D je 8bitový obousměrný I/O port. Stejně jako u portů A, B a C probíhá komunikace s portem D prostřednictvím tří registrů v I/O prostoru datové paměti: datový registr je PORTD, $12($32), registr směru dat je DDRD, $11($31), a registr vstupních dat – PIND, 10 $ (30 $). Registr PIND poskytuje možnost čtení, zatímco registry PORTD a DDRD umožňují čtení a zápis. Registr PIND není registrem v plném slova smyslu. Přístup k němu poskytuje čtení fyzického stavu každého pinu portu.
Kolíky portu D mohou provádět alternativní funkce uvedené v tabulce 1. 2.2.

Tabulka 2.2. Funkce alternativního portu D Pin

Port pin

Alternativní funkce

RxD - vstup přijímače UART

TxD - UART výstup vysílače

INT0 - vstup externího přerušení 0

INT1 - vstup externího přerušení 1

OC1B - Porovnávací kolík výstupu časovače/počítadla 1

OC1A - výstup porovnání výstupu A časovače/počítadla 1

ICP - Vstup spouštěcího časovače/počítadla 1

OC2 - porovnávací kolík výstupu časovače/počítadla 2

Při použití pinů pro alternativní funkce je třeba odpovídajícím způsobem nastavit registry PORTD, DDRD.

Registr dat portuDPORTD

Bit

Číst psát

Počáteční hodnota

Registr směru dat portuDDDRD

Bit

Číst psát

Počáteční hodnota

Vstupní registr portuDPIND

Bit

Číst psát

Počáteční hodnota

Vzhledem k tomu, že uvažovaná práce je první, aby studenti získali dovednosti pro práci s laboratorním komplexem, všichni studenti nejprve dělají stejnou práci. Ze svých pracovišť zadají do PC stejný úkol odečíst číslo 3 od čísla 5, uvedený v odstavci 1.5.3.1. Po sestavení programu se zapíše do mikrokontroléru pracoviště a jeho práce je předvedena učiteli.
Po takovém seznámení s komplexem student přistoupí k plnění jednotlivého úkolu. Pokud je čas, může učitel jednotlivý úkol zkomplikovat.