Reading Ports AVR în Si. Studiul sistemului de comandă a microcontrolerului AVR

Introducere

Toate porturile I / O (PVW) Microcontrolere AVR lucrează pe principiul modificării citirii-scrie atunci când le folosesc ca porturi de porturi universale I / O. Aceasta înseamnă că schimbarea direcției portului I / O a unei linii de porturi de către comenzile SBI și CBI va apărea fără schimbări false în direcția porțiunii I / O a altor linii portuare. Acest lucru se extinde și la schimbarea nivelului logic (dacă linia de port este configurată la ieșire) sau pentru a activa / dezactiva rezistențele de tracțiune (dacă linia este configurată să intre). Fiecare tampon de ieșire are o caracteristică simetrică cu curenți de ieșire ridicată și curgătoare. Driverul de ieșire are o capacitate de încărcare care vă permite să controlați direct indicatoarele LED. În mod alternativ, senzația selectivă, înăsprirea la puterea puterii poate fi conectată la toate liniile portuare, a cărei rezistență nu depinde de tensiunea de alimentare. Pe toate liniile PVV, sunt instalate diode de protecție care sunt conectate la VCC și General (GND), după cum se arată în Figura 29. O listă detaliată a parametrilor PVV este dată în secțiunea "Caracteristici electrice".

Figura 29 - Diagrama echivalentă a liniei PVV

Legături cu registrele și biții de registre din aceasta sectiune În general. În același timp, simbolul "X" înlocuiește numele PVV, iar simbolul "N" înlocuiește numărul de descărcare PVV. Cu toate acestea, atunci când faceți un program, trebuie să utilizați formularul exact de înregistrare. De exemplu, Portb3, adică o categorie de 3 port B, în acest document este înregistrată ca PORTXN. Adresele de registre fizice I / O și distribuirea descărcărilor lor sunt prezentate în "descrierea registrelor portuare i / o".

Pentru fiecare port I / O în memoria I / O, trei celule sunt rezervate: unul în registrul de date - PORTX, celălalt pentru registrul directorilor de date - DDRX și al treilea sub starea intrărilor portului - PINX. O celulă care stochează statele din intrările de porturi este citită numai, iar registrele de date și registrele de date au acces bidirecțional. În plus, setarea punctului Sforning Sior Pud Pud Resists Strângerea registrului PUD dezactivează pe toate ieșirile tuturor porturilor.

Mai jos este o descriere a portului I / O pentru I / O Digital universal Majoritatea concluziilor portuare susțin funcțiile alternative ale built-in-ului dispozitiv periferic microcontroler. O descriere alternativă a caracteristicilor este prevăzută în subsecțiunea "Funcții de port alternativ" (vezi și descrierea funcțiilor modulelor periferice corespunzătoare).

Vă rugăm să rețineți că, pentru unele porturi, rezoluția funcțiilor alternative ale unor concluzii face imposibilă utilizarea altor ieșiri pentru intrarea digitală universală.

Porturi ca I / O Digital universal

Toate porturile sunt porturi I / O bidirecționale cu rezistențe opționale de tragere. Figura 30 ilustrează o diagramă de funcții a unei linii portuare de intrare, indicată ca PXN.


Figura 30 - Organizarea I / O digitală universală (1)

Aproximativ. 1: semnalele WPX, WDX, RRX, RPX și RPX sunt comune într-un singur port. CLKI / O, SLEEP și semnalele PUD sunt comune tuturor porturilor.

Concluzii Setarea

Modul și starea pentru fiecare ieșire este determinată de valoarea cifrelor corespunzătoare a trei registre: DDXN, PORTXN și PINXN. Așa cum se arată în "Descrierea registrelor porturilor I / O", este posibilă accesul la biții DDXN la adresa DDRX din spațiul I / O și, respectiv, la biții PORTXN la adresa PORTX și biții Pinxn la Pinx.

DDXN DDRX DDRX Bits determină direcția liniei I / O. Dacă DDXN \u003d 1, atunci PXN este configurat să afișeze. Dacă DDXN \u003d 0, atunci PXN este configurat să intre.

Dacă PORTXN \u003d 1 Când configurați linia de port de intrare, este permisă conexiunea rezisorului de strângere. Pentru a dezactiva acest rezistor, trebuie să scrieți în jurnalul PORTXN. 0 sau configurați linia de port la ieșire. În timpul resetării, toate liniile portuare se află în cea de-a treia stare (presată), chiar dacă sincronizarea nu funcționează.

Dacă PORTXN \u003d 1 Când configurați linia de port la ieșire, starea de ieșire va fi determinată de valoarea PORTXN.

Deoarece intrarea simultană în registrele DDRX și PORTX nu este posibilă, atunci când treceți între statul terț ((DDXN, PORTXN) \u003d 0B00) și ieșirea jurnalului. 1 (((DDXN, PORTXN) \u003d 0B11) Trebuie să apară o stare intermediară sau cu un rezistor de strângere conectat ((DDXN, PORTXN) \u003d 0B01) sau cu ieșirea jurnalului. 0 ((DDXN, PORTXN) \u003d 0B10). De regulă, tranziția printr-o stare cu conexiunea rezistorului de tragere este echivalentă cu starea de ieșire a jurnalului.1, dacă ieșirea microcontrolerului este asociată cu o intrare de înaltă impedanță. În caz contrar, este necesar să se stabilească bit Sior Pud Pud pentru a opri toate rezistoarele de strângere pe toate porturile.

Comutarea între introducerea rezistențelor de strângere și a ieșirii nivel scăzut asociate cu o problemă similară. Prin urmare, utilizatorul este forțat să utilizeze sau să fie al treilea stat ((DDXN, PORTXN) \u003d 0B00) sau jurnalul de ieșire. 1 ((DDXN, PORTXN) \u003d 0B11) ca un pas intermediar.

Tabelul 25 rezumă acțiunea semnalelor de control la starea de ieșire.

Tabelul 25 - Setarea ieșirii portului

DDXN. Portxn. PUD (în Sior) Intrare ieșire Strângerea rezistenței cometariu
0 0 X. Intrare Nu
0 1 0 Intrare da PXN va fi sursa actuală atunci când se aplică un nivel scăzut extern
0 1 1 Intrare Nu Statul al treilea (Z-State)
1 0 X. Ieșire Nu Jurnalul de ieșire. 0 (curent curge)
1 1 X. Ieșire Nu Jurnalul de ieșire. 1 (curent curge)

Citiți starea de ieșire

Indiferent de valoarea fișierului de date DDXN, starea de ieșire a portului poate fi intervievată prin bitul de înregistrare Pinxn. După cum se arată în figura 30, bitul de înregistrare Pinxn și zăvorul de declanșare precede că este un sincronizator. Această abordare Vă permite să evitați metastabilitatea dacă modificarea ieșirii a apărut în apropierea frontală a sincronizării interne. Cu toate acestea, această abordare este asociată cu apariția întârzierii. Figura 31 prezintă o diagramă temporară de sincronizare în timpul sondajului atașat în exterior la nivelul de ieșire. Durata întârzierilor minime și maxime pe distribuția semnalului este indicată ca TPD, Max și TPD, respectiv min.


Figura 31 - Sincronizarea în timpul sondajului la nivelul aplicat la ieșire

În exemplele următoare, se arată cum să instalați pe liniile 0 și 1 ale portului către jurnal. 1, și pe linii 2 și 3 - jurnal. 0, precum și modul de configurare a liniilor 4 ... 7 Pentru a introduce cu conexiunea rezistoarelor de strângere pe liniile 6 și 7. Starea rezultată a liniilor este citită înapoi, dar luând în considerare cele de mai sus, NOP Declarația este activată pentru a asigura posibilitatea citirii înapoi doar starea atribuită a unor concluzii.

Codul eșantionului la asamblare (1) ...; Permiteți-mi să trag și să instalez niveluri ridicate de ieșire; Determinați instrucțiunile acestor linii de porturi LDI R16, (1<

Aproximativ. 1: Programul de asamblare utilizează două registre de timp pentru a minimiza intervalul de timp de la reglarea rezistoarelor de pull-up pe descărcări 0, 1, 6 și 7 la instalarea corectă a direcției direcției de direcție care permite jurnalul. 0 pe liniile 2 și 3 și înlocuind un nivel ridicat la descărcările 0 și 1, formate prin conectarea rezistențelor de strângere la un nivel ridicat al unui driver curentă de înaltă calitate.

Rezoluție digitală și moduri de somn

După cum se arată în figura 30, semnalul digital de intrare poate fi găzduit la intrarea totală a declanșatorului Schmite. Semnalul marcat în figură ca somn este setat când microcontrolerul este tradus în modul de alimentare, modul economic, modul de funcționare și modul avansat de serviciu. Acest lucru evită creșterea consumului curent dacă unele semnale de intrare sunt într-o stare plutitor sau nivelul semnalului analogic de intrare va fi aproape de VCC / 2.

Semnalul de somn este ignorat de intrările întreruperilor externe. Dacă solicitările de întrerupere externă sunt dezactivate, somnul este valabil pentru aceste concluzii. Somnul este, de asemenea, ignorat la alte intrări atunci când își îndeplinește funcțiile alternative (vezi "Funcții de port alternativ").

Dacă, pe ieșirea unei întreruperi asincrone externe, configurată pentru a întrerupe crescând frontul, care se încadrează în față sau orice schimbare, există un nivel de jurnal. 1 și, în același timp, întreruperea externă nu este permisă, pavilionul corespunzător al întreruperii externe va fi setat la ieșirea din modurile de somn menționat mai sus, deoarece Funcția de șunt de intrare în modurile de somn duce la modificări logice.

Concluzii neconectate

Dacă mai multe concluzii rămân neutilizate, se recomandă să se garanteze prezența unui nivel logic specific. În ciuda faptului că majoritatea intrărilor digitale sunt dezactivate în moduri de somn profund, așa cum s-a descris mai sus, este necesar să se evite intrările plutitoare pentru a evita creșterea consumului curent în toate celelalte moduri ale microcontrolerului, unde este permisă intrarea digitală (resetare, modul activ și modul inactiv).

Cea mai simplă metodă de garantare a prezenței unui anumit nivel pe o ieșire neutilizată este rezolvarea conexiunii rezistorului interior de strângere. Cu toate acestea, în acest caz, în modul Resetare, rezistențele de tracțiune vor fi dezactivate. Dacă este necesar un consum redus și în modul Resetare, este necesar să se instaleze un rezistor de strângere extern la un plus sau o putere minus. Conectarea ieșirilor direct la VCC sau GND nu este recomandată, deoarece Este posibil să existe un curent periculos, cu o configurație aleatorie a unei astfel de rezultate pe ieșirea de date.

Operațiunile trucificate se bazează pe operațiuni logice pe care le-am considerat deja mai devreme. Acestea joacă un rol-cheie în programarea microcontrolere AVR și alte tipuri. Aproape nici un cost de program fără utilizarea operațiunilor bătute. Înainte de aceasta, le-am evitat în mod intenționat să faciliteze procesul de studiere a programării MK.

În toate articolele anterioare, am programat numai porturile I / O A și nu au folosit noduri încorporate suplimentare, de exemplu, cum ar fi cronometrele, convertoarele digitale analogice, întreruperile și alte dispozitive interne, fără care MK își pierde toată puterea.

Înainte de a continua dezvoltarea dispozitivelor MK încorporate, trebuie să învățați cum să gestionați sau să verificați biții individuali ai registrelor AVR MK. Anterior, am efectuat o verificare sau am stabilit imediat descărcările. Să ne ocupăm de ceea ce este diferența și apoi să continuăm mai departe.

Operațiuni de îmbuteliere

Cel mai adesea, atunci când programați microcontrolerele AVR, am folosit pentru că are o vizibilitate mai mare comparativ și bine clară pentru programatorii începători MK. De exemplu, trebuie să instalăm doar al treilea bit al portului D. Pentru aceasta, după cum știm deja, puteți utiliza următorul cod binar:

PORTD \u003d 0B00001000;

Cu toate acestea, am stabilit cea de-a treia categorie de această echipă și toate celelalte (0, 1, 2, 4, 5, 6 și 7) pe care le aruncăm în zero. Și acum să prezentăm situația că descărcările de 6 și 7 sunt implicate ca intrările ADC și, în acest moment, la concluziile corespunzătoare ale MK primesc un semnal de la orice dispozitiv și am aplicat la comanda de mai sus, resetați aceste semnale. Ca rezultat, microcontrolerul nu le vede și crede că semnalele nu au venit. Prin urmare, în loc de o astfel de echipă, ar trebui să aplicăm alta, care ar fi instalat doar biți 3 pe unitate, fără a afecta celelalte biți. Pentru aceasta, se aplică de obicei următoarea operațiune bătută:

Portd | \u003d (1<<3);

Sintaxa pe care o vom descrie în detaliu mai jos. Și acum încă un exemplu. Să presupunem că trebuie să verificăm starea celei de-a treia descărcări a registrului PID, verificând astfel starea butonului. Dacă această descărcare este resetată la zero, atunci știm că butonul este apăsat și apoi se efectuează codul de comandă care corespunde stării butonului presat. Am folosit anterior următoarea intrare:

dacă (Pind \u003d\u003d 0B00000000)

(orice cod)

Cu toate acestea, cu ajutorul acestuia, nu verificăm nu separat, - 3 și imediat toți biții Registrului PIND. Prin urmare, chiar dacă butonul este apăsat și descărcarea dorită este resetată, dar în acest moment semnalul va primi un semnal la orice altă ieșire a portului D, durata corespunzătoare va fi instalată într-una, iar starea în paranteze va fi fals. Ca rezultat, codul situat în paranteze curbate nu va fi efectuat chiar și atunci când este apăsat butonul. Prin urmare, pentru a verifica starea individului al treilea bit al registrului PID, ar trebui aplicată o operațiune de lot:

dacă (~ pind & (1<<3))

(orice cod)

Pentru a lucra cu biți separați ai microcontrolerului în Arsenalul de programare C, există cu care puteți schimba sau verifica starea unuia sau mai multor biți individuali.

Instalarea unui bit separat

Pentru a instala un bit separat, de exemplu portul D, se aplică o operație îndoită sau. Era ea că am folosit la începutul articolului.

PORTD \u003d 0B00011100; // sensul inițial

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

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

PORTD \u003d\u003d 0B00011101; // rezultat

Această comandă efectuează instalarea unei descărcări zero și frunzele rămase neschimbate.

De exemplu, instalați o altă categorie a 6-a D.

PORTD \u003d 0B00011100; // starea inițială a portului

Portd | \u003d (1<<6); //

PORTD \u003d\u003d 0B01011100; // rezultat

Pentru a înregistra o unitate imediat în mai multe biți separați, cum ar fi zero, al șaselea și al șaptelea port B. Se aplică următoarea intrare.

PORTB \u003d 0B00011100; // sensul inițial

PORTB | \u003d (1<<0) | (1<<6) | (1<<7); //

PORTB \u003d\u003d 0B1011101; // rezultat

Resetați (resetați) biți individuali

Pentru a reseta un bit separat, se aplică trei comenzi revizuite anterior: .

Să resetăm cea de-a treia categorie a înregistrării PORTC și să lăsăm neschimbată restul.

PORTC \u003d 0B00011100;

PORTC & ~ (1<<3);

PORTC \u003d\u003d 0B00010100;

Efectuați acțiuni similare pentru categoriile a doua și a 4-a:

PORTC \u003d 0B00111110;

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

PORTC \u003d\u003d 0B00101010;

Bitul de comutare

În plus față de instalare și resetare, se utilizează și o comandă utilă, care comută un pic separat în starea opusă: una în zero și invers. Această operație logică este utilizată pe scară largă în construirea diferitelor efecte de iluminare, de exemplu, cum ar fi ghirlanda de Anul Nou. Luați în considerare exemplul porței

PORTA \u003d 0B00011111;

Porta ^ \u003d (1<<2);

PORTA \u003d\u003d 0B00011011;

Schimbați starea zero, a doua și a șasea biți:

PORTA \u003d 0B00011111;

Porta ^ \u003d (1<<0) | (1<<2) | (1<<6);

PORTA \u003d\u003d 0B01011010;

Verificați starea unui bit separat. Permiteți-mi să vă reamintesc că inspecția (spre deosebire de înregistrarea) a portului I / O este efectuată prin citirea datelor din registrul PIN.

Cel mai adesea, verificarea este efectuată de unul dintre cei doi operatori de ciclism: dacă și în timp ce. Suntem deja familiarizați cu acești operatori.

Verificarea descărcării pentru prezența zero logică (resetare) cu dacă

dacă (0 \u003d\u003d (PIND & (1<<3)))

Dacă a treia cifră a portului D este resetată, atunci codul1 este executat. În caz contrar, codul2 se efectuează.

Acțiuni similare se efectuează cu o astfel de formă de înregistrare:

dacă (~ pind & (1<<3))

Verificați descărcarea de gestiune pentru prezența unei unități logice (instalare) cu dacă

dacă (0! \u003d (PIND & (1<<3)))

dacă (PIND & (1<<3))

Cele două cicluri de mai sus funcționează în mod similar, dar pot, datorită flexibilității limbajului de programare C, au o formă diferită de înregistrare. Operațiunea! \u003d Indică faptul că nu este egală. Dacă este setată a treia descărcare a portului PD I / O (unitate), este executată COD1, dacă nu - cod2.

Așteptând o biți cu in timp ce

În timp ce (PIND & (1<<5))

Code1 va fi executat în timp ce este stabilită a 5-a categorie de registru PIND. Când îl resetați, codul2 va fi executat.

Așteptând instalarea Battal cu in timp ce

Aici, sintaxa limbii C vă permite să scrieți cod cu două moduri cele mai comune. În practică, se aplică ambele tipuri de înregistrare.

Unul dintre cele mai importante aspecte ale programării microcontrolerului este de a lucra cu registrele și porturile. Microcontrolerele din seria AVR au mai multe registre I / O și 32 de registre generale. Programatorul nu poate scrie direct un număr la un registru de intrare / ieșire. În schimb, trebuie să scrie un număr într-un registru general, și apoi să copieze valoarea acestui registru în Registrul I / O. Registrele de lucru sunt indicate ca R1, R2, ..., R31.

Pentru a simplifica programele de scriere, este foarte convenabil să dați registrele de nume. Este recomandabil să se ofere nume corespunzătoare informațiilor stocate. De exemplu, dacă registrul R16 este utilizat pentru a stoca informații temporare, atunci se poate numi temp. Acest lucru se face după cum urmează:

Pentru a nu "suna" registrele I / O și principalele registre ale microcontrolerului, este suficient la începutul programului pentru a conecta fișierul antetului care se aplică microcontrolerului utilizat. Acestea. Nu va trebui să dea nume de porturi, cronometre / contoare etc. De exemplu, dacă programul este proiectat pentru microcontrolerul AT90S8515:

Includeți "8515def.inc"

Pentru microcontrolerul AT90S1200, primul microcontroler AVR, registrele de intrare / ieșire au numere de la 0 la $ la 3F (depinde de modelul MK). Separat, puteți selecta registrele PORTB I / O, PINB, PORTD, PIND (au notație alfabetică după conectarea 1200def.inc și adresele acestora $ 18, $ 16, $ 12, $ 10 - sunt de acord foarte dificil de a păstra constantele digitale În capul meu, nume de litere mai ușoare). Cele mai recente porturi AVR Microcontrolere sunt mult mai mari, sunt numite A, B, C, D, E ...

Luați în considerare locația concluziilor Microcontrolerului popular ATTINING2313. Picioarele 2-9, 11 cu numele PD0 - PD7 sunt portul D, în mod similar cu portul B. Vă rugăm să rețineți că portul B este unul cu opt biți, iar portul D este de șapte.

Porturile pot funcționa ca intrări și ca ieșiri. Dacă portul funcționează ca o intrare, atunci Pentru a număra valorile, trebuie să accesați registrul PINB sau PIND - în funcție de ce portul este citit. Dacă unele pini sunt niveluri ridicate corespunzătoare jurnalului. "1", atunci biții corespunzători în valorile citite vor fi instalate în "1". Concluzii sunt capabile să reziste la un curent de până la 20 de ani, dar nu merită să uităm de curentul total al tuturor porturilor portului. Există limitări. Dacă portul este de ieșire, valorile de pe liniile portuare sunt instalate prin înregistrarea valorii corespunzătoare la registrul portuar PORTB sau PORTD. Pentru a stabili un jurnal. "1" la ieșirea portului, trebuie instalat bitul corespunzător din registrul PORTB sau PORTAD.

Cel mai important punct de lucru cu portul este de a lucra cu registrul de zăvor responsabil pentru funcționarea liniilor portuare la intrare sau ieșire. Numele acestui registru DDRX, unde X este litera portului. Pentru a face ieșirile picioarelor, trebuie să scriem la biții corespunzători "1". De exemplu, vrem să facem portul PB7 al portului în intrare, iar picioarele rămase iese, atunci pentru că trebuie să scrieți la valoarea registrului DDRB 0B01111111. Prefixul 0b înseamnă că numărul este înregistrat în formă binară. Când începeți, registrele DDRX sunt resetate, adică Toate picioarele sunt intrări. Recomandate picioarele neutilizate în dispozitiv pentru a face intrări.

Luați în considerare un program simplu care lucrează cu un port de microcontroler:

Includ "8515def.inc"; Conectați fișierul cu descrierile registrului .def Temp \u003d R16 RJMP Resetare; Vector de tranziție când resetați resetarea: LDI Temp, 0B00000011; Determinați PC0 și PC1 ca out DDRC, Temp LDI Temp, 0B00000001; Luminăm LED-ul pe PC0 PORTC PORTC, Temp în Temp, Pinc; Citiți nivelurile de la portul C ... bucla :; Ciclul principal Nop RJMP Loop

Pic

Citind, scriind

Valoarea initiala

· Bit 7 - Permisiunea tuturor întreruperilor. Pentru a rezolva întreruperile, acest bit trebuie să fie setat la stat 1. Rezoluția unei întreruperi specifice se efectuează de către registrul de întrerupere EIMSK și TIMSK. Dacă acest bit este șters (\u003d 0), atunci niciuna dintre întreruperile nu sunt procesate. BIT HARDWARE este eliminat după apariția întreruperii și este instalată pentru rezolvarea ulterioară a întreruperii prin comanda RETI.
· Bit 6 - Copiați bit de conservare. BLOD și BST BITS Copy Comenzi Utilizați acest lucru ca sursă și receptor în timpul luptelor. Bitul de comandă BST din scopul general este copiat la bitul T, bitul de comandă BLD este copiat în biții de registru general.
· Bit 5 - Steagul Semi-Mannenos. Aceasta indică transferul între Tetrad atunci când efectuează o serie de operații aritmetice.
· Bit 4 - semnul semnului. Bitul S are valoarea rezultatului unei operații cu excepția sau (N (+) V) deasupra steagurilor valorii negative (n) și a adăugării la cele două pavilion de over flux (v).

· Bitul 3 - adăugarea la două pavilioane de depășire. Acesta susține aritmetica adăugării la două.
· Bit 2 - Steagul de valoare negativă. Acest steglă indică un rezultat negativ al unui număr de operații aritmetice și logice.
· Bit 1 - steagul valorii zero. Acest steglă indică un rezultat zero al unui număr de operații aritmetice și logice.
· Bit 0 - Flag de transfer. Acest steglă indică transferul operațiilor aritmetice și logice.

Microcontrolerul AT90S8535 are 4 porturi paralele I / O A, B, C și D.
Portul A este un port bidirecțional pe 8 biți. Interacțiunea cu portul A este realizată prin intermediul a trei registre în spațiul de intrare / ieșire de date: Registrul de date - Porta, $ 1B ($ 3B), Registrul Directiei de date - DDRA, $ 1A ($ 3A), Registrul datelor de intrare - Pina, $ 19 ($ 39). Registrul PINA oferă numai posibilitatea citirii, iar registrele Porta și DDRA sunt posibilitatea citirii și scrierii. Registrul Pina nu este un registru în sensul complet al cuvântului. Apel la acesta asigură citirea stării fizice a fiecărui port de ieșire. Portul A servește, de asemenea, la introducerea semnalelor analogice A / D.

Datele portului Register A -Porta.

Pic

Citind, scriind

Valoarea initiala

Registrul datelor privind datele portuare A -DDRA.

Pic

Citind, scriind

Valoarea initiala

Port A -Pina.

Pic

Citind, scriind

Valoarea initiala

Portul B este un port bidirecțional I / O de 8 biți. Precum și portul și interacțiunea cu portul se desfășoară prin intermediul a trei registre în spațiul de intrare / ieșire de date: Registrul de date - Portb, $ 18 ($ 38), Registrul Directiei de date - DDRB, $ 17 (37 USD) și Înregistrare de intrare - Pinb, $ 16 (36 USD). Înregistrarea Pinb oferă numai lectură. Pinb Registrul nu este un registru în sensul complet al cuvântului. Apel la acesta asigură citirea stării fizice a fiecărui port de ieșire. Imaginile portului în pot efectua funcții alternative indicate în tabel. 2.1.

Tabelul 2.1. Funcțiile alternative ale rezultatelor portului în

Port ieșire de port.

Caracteristică alternativă

T0 - TIMER / TIMER / COMERUL TIMPULUI 0

T1 - Introducere ceasul temporizatorului 1

AIN0 - Concluzia comparatorului pozitiv

AIN1 - Concluzia comparatorului negativ

- Login Selection SPI

Mosi - Instalare de ieșire de ieșire / intrare SPI de viteză

Miso - Instalare Login Login / Speed \u200b\u200bIeșire SPI

SCK - SEMNAL DE CLOCK SPI

Când utilizați concluzii pentru funcții alternative, registrele PORB, DDRB trebuie să fie instalate în consecință.

Registrul de date portuareB.Portb.

Pic

Citind, scriind

Valoarea initiala

Înregistrați-vă la datele portului de direcție B -DDRB.

Pic

Citind, scriind

Valoarea initiala

Registrul datelor de intrare B -Pinb.

Pic

Citind, scriind

Valoarea initiala

Portul C este un port bidirecțional I / O de 8 biți. De asemenea, modul în care porturile A și în interacțiunea cu Portul C sunt efectuate prin intermediul a trei registre din spațiul de memorie / ieșire / ieșire de date: Registrul de date - PORTC, $ 15 (35 USD), Registrul Directiei de date - DDRC, $ 14 ($ 14 ($ 14 ($ 14 ($ 14 ($ 14 ($ 14 ($ 14) 34) și înregistrarea datelor de intrare - PINC, $ 13 ($ 33). Registrul PINC oferă numai posibilitatea citirii, iar registrele PORTC și DDRC sunt posibilitatea citirii și scrierii. Registrul PINC nu este un registru în sensul complet al cuvântului. Apel la acesta asigură citirea stării fizice a fiecărui port de ieșire.
La port, cu doar două ieșiri pot efectua funcții alternative: Concluziile PC6 și PC7 Efectuați funcțiile tosc1 și tosc2 temporizator / contor 2.

Registrul de date portuareC.PORTC.

Pic

Citind, scriind

Valoarea initiala

Registrul de date de direcție a portului C -DDRC.

Pic

Citind, scriind

Valoarea initiala

Registrul datelor de intrare C -Pinc.

Pic

Citind, scriind

Valoarea initiala

Portul D este un port bidirecțional I / O de 8 biți. De asemenea, ca la porturile A, B și cu interacțiunea cu Portul D, prin intermediul a trei registre în spațiul de intrare / ieșire de date: Registrul de date - Portdd, $ 12 (32 USD), Registrul Directiei de date - DDRD, $ 11 (31 USD) și înregistrarea de intrare - PIND, $ 10 (30 USD). Registrul PIND oferă citirea, iar registrele Portd și DDRD se citesc și scriu. Registrul PID nu este un registru în sensul complet al cuvântului. Apel la acesta asigură citirea stării fizice a fiecărui port de ieșire.
Concluziile portului D pot efectua funcții alternative specificate în tabel. 2.2.

Tabelul 2.2. Funcțiile alternative ale concluziilor portului d

Port ieșire de port.

Caracteristică alternativă

RXD - Intrarea receptorului UART

TXD - ieșirea transmițătorului UART

Int0 - Intrare externă de întrerupere 0

Int1 - Intrare în aer liber Intrare 1

OC1B - compararea rezultatelor temporizatorului / contorului 1

OC1A - compararea ieșirii și cronometrul / contorul 1

ICP - TIMPER CAPTURE TRIGGER DE ÎNREGISTRARE 1

OC2 - Ieșire de comparare a timerului / contorului de ieșire 2

Când utilizați ieșiri pentru funcții alternative, registrele PORTD, DDRD trebuie să fie instalate în consecință.

Registrul de date portuareD.Portd.

Pic

Citind, scriind

Valoarea initiala

Registrul datelor portuareD.Ddrd.

Pic

Citind, scriind

Valoarea initiala

Inregistrare de intrare portD.Pind.

Pic

Citind, scriind

Valoarea initiala

De când primii examinați este primul, atunci toți studenții fac mai întâi aceeași lucrare pentru achiziționarea de abilități studențești de a lucra cu complexul de laborator. Din locurile de muncă, ele sunt introduse în PEVM aceeași problemă de subtracție din partea a 5-a 3, prezentată la punctul 1.5.3.1. După compilarea programului, este scrisă microcontrolerului la locul de muncă, iar lucrarea sa este demonstrată de către profesor.
După o astfel de cunoștință cu complexul, elevul începe să îndeplinească o sarcină individuală. În prezența timpului, profesorul poate complica sarcina individuală.