Avr portu lasīšana c. AVR mikrokontrolleru vadības sistēmas izpēte

Ievads

Visi AVR mikrokontrolleru I / O porti (I / O) darbojas pēc lasīšanas, modificēšanas un rakstīšanas principa, ja tos izmanto kā universālus I / O portus. Tas nozīmē, ka vienas ostas līnijas I / O virziena maiņa ar SBI un CBI komandām notiks bez nepatiesām izmaiņām citu ostas līniju I / O virzienā. Tas attiecas arī uz loģikas līmeņa maiņu (ja porta līnija ir konfigurēta izejai) vai uzvilkšanas rezistoru ieslēgšanu / izslēgšanu (ja līnija ir konfigurēta ievadīšanai). Katram izvades buferim ir simetrisks vadības raksturlielums ar augstu grimšanas un grimšanas izejas strāvu. Izejas draiveris spēj vadīt gaismas diodes tieši. Visām pieslēgvietām var pieslēgt individuālu selektīvu pievilkšanas rezistoru, kura pretestība nav atkarīga no barošanas sprieguma. Aizsargdiodes ir uzstādītas uz visām IHO līnijām, kas ir savienotas ar VCC un Common (GND), kā parādīts 29. attēlā. Sīks IHV parametru saraksts ir sniegts sadaļā Elektriskās īpašības.

29. attēls - PVV līnijas līdzvērtīga ķēde

Atsauces uz reģistriem un reģistra bitiem šo sadaļu tiek sniegti vispārīgi. Šajā gadījumā simbols "x" aizstāj PVB nosaukumu, bet simbols "n" - IVB cipara numuru. Tomēr, sastādot programmu, ir jāizmanto precīza apzīmējuma forma. Piemēram, PORTB3, kas apzīmē B porta 3. bitu, šajā dokumentā ir rakstīts kā PORTxn. Fizisko I / O reģistru adreses un to bitu sadalījums ir norādīts sadaļā “I / O ostu reģistru apraksts”.

Katram I / O portam I / O atmiņā ir rezervētas trīs šūnas: viena datu reģistram - PORTx, otra - datu virzienu reģistram - DDRx un trešā - porta ievades stāvoklim - PINx. Šūna, kas stāvokli saglabā ostas ieejās, ir tikai lasāma, un datu reģistri un datu virzieni ir divvirzienu. Turklāt, iestatot SFIOR PUD Pull Off bitu, tiek atspējota izvilkšanas funkcija visās visu portu tapās.

Tālāk ir aprakstīts universālā digitālā I / O I / O ports. Lielākā daļa ostas tapu atbalsta borta alternatīvo funkcionalitāti perifērijas ierīces mikrokontrolleris. Alternatīvo funkciju aprakstu skatiet zemāk esošajā apakšnodaļā “Alternatīvās porta funkcijas” (sk. Arī atbilstošo perifērijas moduļu funkciju aprakstu).

Ņemiet vērā, ka dažām pieslēgvietām, iespējojot dažu tapu alternatīvo funkciju, nav iespējams izmantot citas tapas universālai digitālajai I / O.

Porti kā universāls digitālais I / O

Visas pieslēgvietas ir divvirzienu I / O pieslēgvietas ar papildu pievilkšanas rezistoriem. 30. attēlā parādīta vienas I / O porta līnijas, apzīmēta Pxn, funkcionālā blokshēma.


30. attēls. Universālās digitālās ievades -izvades organizācija (1)

Aptuveni 1: WPx, WDx, RRx, RPx un RDx signāli ir izplatīti vienā portā. ClkI / O, SLEEP un PUD signāli ir kopīgi visām ostām.

Tapu konfigurēšana

Katras tapas režīmu un stāvokli nosaka trīs reģistru atbilstošo bitu vērtība: DDxn, PORTxn un PINxn. Kā parādīts sadaļā “I / O portu reģistru apraksts”, DDxn bitiem var piekļūt DDRx adresē I / O telpā un attiecīgi PORTxn bitiem PORTx adresē un PINxn bitiem PINx adresē. .

DDRx reģistra DDxn biti nosaka I / O līnijas virzienu. Ja DDxn = 1, tad Pxn ir konfigurēts izvadīšanai. Ja DDxn = 0, tad Pxn ir konfigurēts ievadīšanai.

Ja, konfigurējot porta līniju ievadīšanai, PORTxn = 1, tad ir aktivizēts izvilkšanas rezistors. Lai izslēgtu šo rezistoru, jums jāraksta PORTxn žurnālā. 0 vai iestatiet porta līniju uz izvadi. Atiestatīšanas laikā visas portu līnijas atrodas trešajā (augstas pretestības) stāvoklī, pat ja sinhronizācija nedarbojas.

Ja PORTxn = 1, konfigurējot porta līniju izvadīšanai, izvades stāvokli noteiks PORTxn vērtība.

Tā kā vienlaicīga ierakstīšana DDRx un PORTx reģistros nav iespējama, tad, pārslēdzoties starp trešo stāvokli ((DDxn, PORTxn) = 0b00) un žurnālu. 1 ((DDxn, PORTxn) = 0b11) starpposma stāvoklim vajadzētu notikt vai nu ar pievienotu uzvilkšanas rezistoru ((DDxn, PORTxn) = 0b01), vai ar žurnālu. 0 ((DDxn, PORTxn) = 0b10). Parasti pāreja caur stāvokli ar pievilkšanas rezistoru ir līdzvērtīga tapas 1 stāvoklim, ja mikrokontrollera tapa ir savienota ar augstas pretestības ieeju. Pretējā gadījumā SFIOR reģistra PUD bits ir jāiestata tā, lai visos portos izslēgtu visus pievilkšanas rezistorus.

Pārslēgšanās starp ievilkšanas ieeju un izvadi zems līmenis ir saistīta ar līdzīgu problēmu. Tāpēc lietotājs ir spiests izmantot vai nu trešo stāvokli ((DDxn, PORTxn) = 0b00), vai žurnāla izvadi. 1 ((DDxn, PORTxn) = 0b11) kā starpposms.

25. tabulā ir apkopota vadības signālu ietekme uz tapas stāvokli.

25. tabula. Porta kontaktligzdas konfigurācija

DDxn PORTxn PUD (SFIOR) Ieejas izejas Pievilkšanas rezistors Komentārs
0 0 X Ievadi
0 1 0 Ievadi Lietojot ārējo zemo vērtību, Pxn būs pašreizējais avots
0 1 1 Ievadi Trešais štats (Z štats)
1 0 X Secinājums Žurnāla izvade. 0 (grimstošā strāva)
1 1 X Secinājums Žurnāla izvade. 1 (noplūdes strāva)

Izlaides stāvokļa nolasīšana

Neatkarīgi no DDxn datu virziena bita vērtības porta tapas stāvokli var aptaujāt, izmantojot PINxn reģistra bitu. Kā parādīts 30. attēlā, reģistra bits PINxn un iepriekšējais flip-flop fiksators veido sinhronizatoru. Šī pieejaļauj izvairīties no metastabilitātes, ja stāvokļa izmaiņas pie tapas notika netālu no iekšējā pulksteņa malas. Tomēr šī pieeja ir saistīta ar latentumu. 31. attēlā parādīta sinhronizācijas laika diagramma, kas tiek veikta uz tapas ārēji uzklātā slāņa aptaujas laikā. Minimālā un maksimālā izplatīšanās kavēšanās ilgums ir attiecīgi apzīmēts kā tpd, max un tpd, min.


31. attēls - Sinhronizācija porta tapai uzklātā slāņa aptaujas laikā

Šie piemēri parāda, kā iestatīt žurnāla līmeni B porta 0 un 1 rindās. 1, un 2. un 3. rindā - žurnāls. 0 un kā iestatīt līnijas 4 ... 7 ievadīšanai ar pievilkšanas rezistoriem 6. un 7. līnijā. Rezultātā iegūtais līniju stāvoklis tiek nolasīts atpakaļ, taču, ņemot vērā iepriekš minēto, tiek iekļauta nop instrukcija, lai iespējotu tikko piešķirto stāvokli dažas tapas, kas jālasa atpakaļ.

Parauga kods Assembler (1) ...; Atļaut pievilkšanos un iestatīt augstu izvades līmeni; Mēs nosakām šo līniju virzienus ldi r16, (1<

Aptuveni 1: montāžas programma izmanto divus laika reģistrus, lai samazinātu laika intervālu no uzvilkšanas rezistoru iestatīšanas pie bitiem 0, 1, 6 un 7 līdz pareizam virziena bitu iestatījumam, ļaujot reģistrēt žurnālu. 0 2. un 3. līnijā un aizstājot 0 un 1 bitu augsto līmeni, kas izveidots, savienojot pievilkšanas rezistorus, ar lielas strāvas vadītāja līmeni.

Digitālās ievades izšķirtspēja un miega režīmi

Kā parādīts 30. attēlā, digitālo ievades signālu var novirzīt uz kopējo pie Šmita sprūda ieejas. Signāls, kas attēlā atzīmēts kā SLEEP, tiek iestatīts, kad mikrokontrolleris tiek pārslēgts uz izslēgto, ekonomisko, gaidstāves un pagarinātā gaidīšanas režīmu. Tas ļauj izvairīties no strāvas patēriņa palielināšanās gadījumā, ja daži ieejas signāli ir peldošā stāvoklī vai analogā ieejas signāla līmenis ir tuvu VCC / 2.

SLEEP signālu ignorē ārējās pārtraukuma ieejas. Ja ārējie pārtraukšanas pieprasījumi ir atspējoti, tad SLEEP ietekmē arī šīs tapas. Veicot alternatīvās funkcijas, SLEEP netiek ņemts vērā arī dažos citos ievados (sk. “Alternatīvās portu funkcijas”).

Ja ārējā asinhronā pārtraukuma tapai ir iestatīts pārtraukums uz augšupejošas malas, krītošas ​​malas vai jebkādas izmaiņas, ir redzams žurnāla līmenis. 1 un tajā pašā laikā ārējais pārtraukums nav atļauts, tad, izejot no iepriekš minētajiem miega režīmiem, tiks iestatīts atbilstošais ārējā pārtraukuma karogs, jo apvedceļa funkcija pie ieejas miega režīmos izraisa loģiskas izmaiņas.

Nesaistītas tapas

Ja vairākas tapas netiek izmantotas, ieteicams nodrošināt, lai uz tām būtu noteikts loģikas līmenis. Lai gan lielākā daļa digitālo ieeju ir atspējotas dziļā miega režīmā, kā aprakstīts iepriekš, ir jāizvairās no peldošām ieejām, lai izvairītos no pārmērīga strāvas patēriņa visos citos mikrokontrolleru darbības režīmos, kuros ir iespējota digitālā ievade (Reset, Active un Idle).

Vienkāršākais veids, kā nodrošināt, ka neizmantotā tapā ir noteikts līmenis, ir ļaut pievienot iekšējo pievilkšanas rezistoru. Tomēr šajā gadījumā atvilkšanas rezistori tiks atspējoti atiestatīšanas režīmā. Ja atiestatīšanas režīmā ir nepieciešams zems enerģijas patēriņš, tad pozitīvajam vai negatīvajam barošanas avotam ir jāuzstāda ārējs pievilkšanas rezistors. Tapu savienošana tieši ar VCC vai GND nav ieteicama, jo Bīstamas strāvas var rasties, ja šāda tapa ir nejauši konfigurēta uz datu tapas.

Bitu darbības ir balstītas uz loģiskām operācijām, par kurām mēs runājām iepriekš. Viņiem ir galvenā loma AVR mikrokontrolleru un citu veidu programmēšanā. Gandrīz neviena programma nav pabeigta, neizmantojot bitu darbības. Pirms tam mēs apzināti izvairījāmies no tiem, lai atvieglotu MK programmēšanas apguves procesu.

Visos iepriekšējos rakstos mēs ieprogrammējām tikai I / O portus un neizmantojām papildu iebūvētus mezglus, piemēram, taimerus, analog-ciparu pārveidotājus, pārtraukumus un citas iekšējās ierīces, bez kurām MK zaudē visu jaudu. .

Pirms turpināt iebūvēto MK ierīču apguvi, jums jāiemācās kontrolēt vai pārbaudīt atsevišķus AVR MK reģistru bitus. Iepriekš mēs pārbaudījām vai iestatījām visa reģistra bitus vienlaikus. Izdomāsim, kāda ir atšķirība, un tad turpināsim tālāk.

Bitu darbības

Visbiežāk, programmējot AVR mikrokontrollerus, mēs to izmantojām, jo ​​tam ir lielāka skaidrība salīdzinājumā ar iesācējiem MK programmētājiem un tas ir labi saprotams. Piemēram, mums ir jāiestata tikai ostas D 3. bits. Šim nolūkam, kā mēs jau zinām, mēs varam izmantot šādu bināro kodu:

PORTD = 0b00001000;

Tomēr, izmantojot šo komandu, mēs iestatām 3. ciparu uz vienu, un visus pārējos (0, 1, 2, 4, 5, 6 un 7) atiestatām uz nulli. Tagad iedomāsimies situāciju, ka 6. un 7. biti tiek izmantoti kā ADC ieejas, un šajā laikā signāls no ierīces tiek nosūtīts uz atbilstošajiem MC tapām, un mēs, izmantojot iepriekš izmantoto komandu, atiestatām šos signālus . Tā rezultātā mikrokontrolleris tos neredz un uzskata, ka signāli nenāca. Tāpēc šādas komandas vietā mums vajadzētu izmantot citu, kas tikai 3. bitu iestatītu uz vienu, vienlaikus neietekmējot pārējos bitus. Šim nolūkam parasti tiek izmantota šāda bitveida darbība:

OSTA | = (1<<3);

Tālāk mēs detalizēti analizēsim tās sintaksi. Un tagad vēl viens piemērs. Pieņemsim, ka mums jāpārbauda PIND reģistra 3. bita stāvoklis, tādējādi pārbaudot pogas stāvokli. Ja šis bits tiek atiestatīts uz nulli, tad mēs zinām, ka poga ir nospiesta un pēc tam tiek izpildīts komandas kods, kas atbilst nospiestajai pogai. Iepriekš mēs būtu izmantojuši šādu ierakstu:

ja (PIND == 0b00000000)

(kāds kods)

Tomēr ar tā palīdzību mēs pārbaudām nevis atsevišķu, - 3., bet visus PIND reģistra bitus vienlaikus. Tāpēc, pat ja poga tiek nospiesta un vēlamā izlāde tiek notīrīta, bet šajā laikā tiek saņemts signāls kādā citā D porta izejā, atbilstošais kalpošanas laiks tiks iestatīts uz vienu, un iekavās esošais nosacījums būs nepatiess. Rezultātā kods ar cirtainām iekavām netiks izpildīts pat tad, ja tiek nospiesta poga. Tāpēc, lai pārbaudītu atsevišķa PIND reģistra 3. bita statusu, jāizmanto bitveida darbība:

ja (~ PIND & (1<<3))

(kāds kods)

Lai strādātu ar atsevišķiem mikrokontrollera bitiem C programmēšanas valodas arsenālā, ir tādi, ar kuriem jūs varat mainīt vai pārbaudīt viena vai vairāku atsevišķu bitu stāvokli vienlaikus.

Viena bita iestatīšana

Darbība bitu virzienā VAI tiek izmantota, lai iestatītu vienu bitu, piemēram, portu D. Mēs to izmantojām raksta sākumā.

PORTD = 0b00011100; // sākotnējā vērtība

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

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

PORTD == 0b00011101; // rezultāts

Šī komanda nosaka nulles bitu un atstāj nemainīgu.

Piemēram, instalēsim vēl vienu 6. porta D bitu.

PORTD = 0b00011100; // sākotnējais ostas stāvoklis

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

PORTD == 0b01011100; // rezultāts

Lai rakstītu vienu uzreiz vairākos atsevišķos bitos, piemēram, nulle, sestā un septītā osta B attiecas šāds ieraksts.

PORTB = 0b00011100; // sākotnējā vērtība

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

PORTB == 0b1011101; // rezultāts

Atsevišķu bitu notīrīšana (nulle)

Lai notīrītu vienu bitu, vienlaikus tiek izmantotas trīs iepriekš apspriestas komandas: .

Notīrīsim PORTC reģistra 3. bitu un pārējo atstāsim nemainīgu.

PORTC = 0b00011100;

PORTC & = ~ (1<<3);

PORTC == 0b00010100;

Veiksim līdzīgas darbības ar otro un ceturto ciparu:

PORTC = 0b00111110;

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

PORTC == 0b00101010;

Bitu pārslēgšana

Papildus iestatīšanai un atiestatīšanai tiek izmantota arī noderīga komanda, kas pārslēdz vienu bitu pretējā stāvoklī: viens līdz nullei un otrādi. Šo loģisko darbību plaši izmanto dažādu apgaismojuma efektu būvniecībā, piemēram, piemēram, Jaungada vītni. Apskatīsim PORTA piemēru

PORTA = 0b00011111;

PORTA ^ = (1<<2);

PORTA == 0b00011011;

Maināsim nulles, otrā un sestā bita stāvokli:

PORTA = 0b00011111;

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

PORTA == 0b01011010;

Viena bita statusa pārbaude. Atgādināšu, ka I / O porta pārbaude (nevis rakstīšana) tiek veikta, nolasot datus no PIN reģistra.

Visbiežāk pārbaudi veic viens no diviem cilpas paziņojumiem: ja un kamēr. Ar šiem operatoriem mēs esam iepazinušies jau agrāk.

Izlādes pārbaude loģiskās nulles klātbūtnei (atiestatīšana) ar ja

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

Ja D porta trešais bits ir notīrīts, tiek izpildīts Code1. Pretējā gadījumā tiek izpildīts kods2.

Līdzīgas darbības tiek veiktas ar šo ierakstīšanas veidu:

ja (~ PIND & (1<<3))

Izlādes pārbaude, vai nav loģiskas vienības (iestatījums) ar ja

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

ja (PIND & (1<<3))

Iepriekš minētās divas cilpas darbojas līdzīgi, taču, ņemot vērā C programmēšanas valodas elastību, tām var būt atšķirīgs apzīmējums. Operācija! = Līdzekļi nav vienādi. Ja PD I / O porta trešais bits ir iestatīts (viens), tad tiek izpildīts kods1, ja nē - kods2.

Gaida, kad mazliet tiks notīrīts ar kamēr

kamēr (PIND & (1<<5))

Kods 1 tiks izpildīts, kamēr ir iestatīts PIND reģistra piektais cipars. Kad tas ir atiestatīts, Code2 sāks izpildīt.

Gaida, kad mazliet tiks iestatīts kamēr

Šeit C sintakse ļauj rakstīt kodu divos izplatītākajos veidos. Praksē tiek izmantoti abi ierakstīšanas veidi.

Viens no vissvarīgākajiem mikrokontrolleru programmēšanas aspektiem ir darbs ar reģistriem un ostām. AVR sērijas mikrokontrolleriem ir vairāki I / O reģistri un 32 vispārējas nozīmes darba reģistri. Programmētājs nevar tieši ierakstīt numuru I / O reģistrā. Tā vietā tam ir jāraksta numurs vispārējā reģistrā un pēc tam šī reģistra vērtība jāiekopē I / O reģistrā. Darba reģistri ir apzīmēti kā R1, R2, ..., R31.

Lai vienkāršotu programmu rakstīšanu, ir ļoti ērti piešķirt nosaukumus reģistriem. Ieteicams dot nosaukumus, kas atbilst uzglabātajai informācijai. Piemēram, ja reģistru R16 izmanto pagaidu informācijas glabāšanai, to var saukt par temp. Tas tiek darīts šādi:

Lai "neizsauktu" ievades / izvades reģistrus un galvenos mikrokontrollera reģistrus, pietiek ar to, lai pievienotu galvenes failu, kas atbilst programmas sākumā izmantotajam mikrokontrolleram. Tie. nav nepieciešams nosaukt ostu reģistrus, taimerus / skaitītājus utt. Piemēram, ja programma ir paredzēta mikrokontrolleram AT90s8515:

Iekļaut “8515def.inc”

Mikrokontrolleram AT90s1200 - pašam pirmajam AVR mikrokontrolleram I / O reģistri ir numurēti no USD 0 līdz USD 3F (atkarībā no MK modeļa). Atsevišķi var atšķirt I / O reģistrus PortB, PinB, PortD, PinD (tiem ir pievienoti burtu apzīmējumi pēc 1200def.inc pievienošanas, kā arī to adreses ir $ 18, $ 16, $ 12, $ 10 - jums jāpiekrīt, ka tas ir ļoti grūti paturēt galvā digitālās konstantes, vienkāršākus alfabētiskos nosaukumus) ... Jaunākajiem AVR mikrokontrolleriem ir daudz vairāk portu, tos sauc par A, B, C, D, E ...

Apsveriet populārā mikrokontrollera ATtiny2313 kontaktligzdu. Piespraudes 2-9, 11 ar nosaukumu PD0-PD7 ir D ports, līdzīgi portam B. Ņemiet vērā, ka ports B ir 8 bitu un ports D ir 7 bitu.

Porti var darboties kā ieejas un izejas. Ja ports darbojas kā ievade, tad, lai nolasītu vērtības, ir jāatsaucas uz PinB vai PinD reģistru - atkarībā no tā, no kura porta mēs lasām. Ja dažām tapām ir augsts līmenis, atbilstošais žurnāls. "1", lasāmo vērtību atbilstošie biti tiks iestatīti uz "1". Tapas spēj izturēt strāvu līdz 20 mA, taču neaizmirstiet par visu porta tapu kopējo strāvu, jo ir ierobežojumi. Ja ports ir izeja, tad portu līniju vērtības tiek iestatītas, ierakstot atbilstošo vērtību PortB vai PortD reģistrā. Lai izveidotu žurnālu. "1" porta izejā iestatiet atbilstošo bitu PortB vai PortD reģistrā.

Vissvarīgākais punkts darbā ar ostu ir darbs ar fiksatoru reģistru, kas ir atbildīgs par ostas ievades vai izvades līniju darbību. Šī reģistra nosaukums ir DDRx, kur x ir porta burts. Lai veiktu kāju izvadi, mums jāraksta "1" uz atbilstošajiem bitiem. Piemēram, mēs vēlamies padarīt porta B PB7 kāju par ieeju, bet pārējās kājas - par izejām, tad šim nolūkam mums DDRB reģistrā jāraksta vērtība 0b01111111. Prefikss 0b nozīmē, ka skaitlis ir rakstīts binārā. Palaišanas laikā DDRx reģistri tiek notīrīti, t.i. visas kājas ir ieejas. Ierīcē ieteicams izmantot neizmantotas pēdas kā ieejas.

Apsveriet vienkāršu programmu, kas darbojas ar mikrokontrollera portu:

Iekļaut "8515def.inc"; iekļaut failu ar reģistru aprakstiem def temp = r16 rjmp RESET; RESET pārejas vektors: ldi temp, 0b00000011; definēt PC0 un PC1 kā izejas DDRC, temp ldi temp, 0b00000001; iedegt LED uz PC0 izejas PORTC kājas, temperatūra temp, PinC; lasīšanas līmeņi no porta C ... LOOP :; programmas galvenā cilpa nop rjmp LOOP

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

· 7. bits - iespējojiet visus pārtraukumus. Lai iespējotu pārtraukumus, šim bitam jābūt iestatītam uz 1. Konkrēta pārtraukuma iespējošanu kontrolē pārtraukuma masku reģistri EIMSK un TIMSK. Ja šis bits ir notīrīts (= 0), tad neviens no pārtraukumiem netiek apstrādāts. Pēc pārtraukuma bitu notīra aparatūra, un tas ir iestatīts, lai vēlāk iespējotu pārtraukumu ar RETI instrukciju.
· 6. bits - saglabājiet kopēšanas bitu. Bitu kopēšanas komandas BLD un BST izmanto šo bitu kā avotu un galamērķi bitu operācijām. BST instrukcija kopē vispārējā reģistra bitu uz T bitu, un BLD instrukcija kopē T bitu uz vispārējā reģistra bitu.
· 5. bits - karodziņš uz pusēm. Tas norāda pārsūtīšanu starp tetradām, veicot vairākas aritmētiskās darbības.
· 4. bits - zīmes bits. Bitam S ir ekskluzīvās OR (N (+) V) darbības rezultāts negatīvajā (N) un divu komplementu pārplūdes karodziņos (V).

· 3. bits - divu pārpildes karoga papildinājums. Tas atbalsta divu papildinājumu aritmētiku.
· 2. bits - negatīvās vērtības karogs. Šis karogs norāda uz vairāku aritmētisko un loģisko darbību negatīvo rezultātu.
· 1. bits - nulles vērtības karogs. Šis karogs norāda uz vairāku aritmētisko un loģisko darbību nulles rezultātu.
· Bit 0 - nēsāt karodziņu. Šis karogs norāda aritmētisko un loģisko darbību pārnesi.

Mikrokontrolleram AT90S8535 ir 4 paralēli I / O porti A, B, C un D.
A ports ir 8 bitu divvirzienu ports. Mijiedarbība ar portu A tiek veikta, izmantojot trīs reģistrus datu atmiņas ievades / izvades telpā: datu reģistrs - PORTA, USD 1B (USD 3B), datu virzienu reģistrs - DDRA, USD 1A (USD 3A), ievades datu reģistrs - PINA, 19 USD (39 USD). PINA reģistrs ir tikai lasāms, un PORTA un DDRA reģistri ir lasāmi un rakstāmi. PINA reģistrs nav reģistrs šī vārda pilnā nozīmē. Piekļuve tai nodrošina katra porta tapas fiziskā stāvokļa nolasīšanu. A ports kalpo arī analogo A / D signālu ievadīšanai.

A porta datu reģistrs -PORTA

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

A porta datu virzienu reģistrs -DDRA

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

A porta ievades datu reģistrs -PINA

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Ports B ir 8 bitu divvirzienu I / O ports. Tāpat kā A ports, mijiedarbība ar portu B tiek veikta, izmantojot trīs reģistrus datu atmiņas ievades / izvades telpā: datu reģistrs - PORTB, 18 USD (38 USD), datu virzienu reģistrs - DDRB, 17 USD (37 USD) un ievades datu reģistrs - PINB, 16 ASV dolāri (36 ASV dolāri). PINB reģistrs ir tikai lasāms. PINB reģistrs nav reģistrs šī vārda pilnā nozīmē. Piekļuve tai nodrošina katra porta tapas fiziskā stāvokļa nolasīšanu. Porta B tapas var veikt alternatīvas funkcijas, kā parādīts tabulā. 2.1.

2.1. Tabula. B porta kontaktligzdas alternatīvas

Ostas tapa

Alternatīva funkcija

T0 - taimera / skaitītāja 0 pulksteņa ievade

T1 - taimera / skaitītāja 1 pulksteņa ievade

AIN0 - salīdzinājuma pozitīvais terminālis

AIN1 - salīdzinājuma negatīvā tapa

- vergu SPI izvēles ievade

MOSI - iestatiet galveno izeju / slave SPI ieeju

MISO - galvenā ieejas / palīga SPI izejas iestatīšana

SCK - SPI pulksteņa signāls

Izmantojot tapas alternatīvām funkcijām, ir pareizi jāiestata PORTB, DDRB reģistri.

Ostas datu reģistrsBPORTB

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Porta B datu virzienu reģistrs -DDRB

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Porta B ievades datu reģistrs -PINB

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Ports C ir 8 bitu divvirzienu I / O ports. Tāpat kā A un B portos, mijiedarbība ar portu C tiek veikta, izmantojot trīs reģistrus datu atmiņas ievades / izvades telpā: datu reģistrs - PORTC, 15 ASV dolāri (35 ASV dolāri), datu virzienu reģistrs - DDRC, 14 ASV dolāri (34 ASV dolāri) un ievades datu reģistrs - PINC, 13 ASV dolāri (33 ASV dolāri). PINC reģistrs ir tikai lasāms, un PORTC un DDRC reģistri tiek lasīti un rakstīti. PINC reģistrs nav reģistrs šī vārda pilnā nozīmē. Piekļuve tai nodrošina katra porta tapas fiziskā stāvokļa nolasīšanu.
Portam C ir tikai divas tapas, kas var veikt alternatīvas funkcijas: tapas PC6 un PC7 kalpo kā taimera / skaitītāja 2 TOSC1 un TOSC2.

Ostas datu reģistrsCPORTC

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Porta C datu virzienu reģistrs -DDRC

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

C porta ievades datu reģistrs -PINC

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Ports D ir 8 bitu divvirzienu I / O ports. Tāpat kā A, B un C porti, mijiedarbība ar D portu tiek veikta, izmantojot trīs reģistrus datu atmiņas ievades / izvades telpā: datu reģistrs - PORTD, 12 USD (32 USD), datu virzienu reģistrs - DDRD, 11 USD ( 31 USD) un ievades datu reģistrs - PIND, 10 USD (30 USD). PIND reģistrs ir lasāms, un PORTD un DDRD reģistri tiek lasīti un rakstīti. PIND reģistrs nav reģistrs šī vārda pilnā nozīmē. Piekļuve tai nodrošina katra porta tapas fiziskā stāvokļa nolasīšanu.
Port D tapas var veikt alternatīvas funkcijas, kā parādīts tabulā. 2.2.

2.2. Tabula. Port D Pin alternatīvās funkcijas

Ostas tapa

Alternatīva funkcija

RxD - uztvērēja ievade UART

TxD - UART raidītāja izeja

INT0 - ārējais pārtraukums 0 ieeja

INT1 - ārējā pārtraukuma 1 ieeja

OC1B - taimera / skaitītāja 1 izejas B salīdzinājums

OC1A - taimera / skaitītāja 1 izejas A salīdzināšanas tapa

ICP - taimera / skaitītāja uztveršanas trigera ievade 1

OC2 - taimera / skaitītāja 2 izejas izejas salīdzinājums

Izmantojot tapas alternatīvām funkcijām, ir pareizi jāiestata PORTD, DDRD reģistri.

Ostas datu reģistrsDPORT

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Ostas datu virziena reģistrsDDDRD

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Ostas ievades datu reģistrsDPIND

Mazliet

Lasīt rakstīt

Sākotnējā vērtība

Tā kā attiecīgais darbs ir pirmais, lai studenti apgūtu prasmes strādāt ar laboratorijas kompleksu, visi studenti vispirms veic vienu un to pašu darbu. No savām darba vietām viņi personālajā datorā ievada to pašu problēmu, atņemot skaitli 3 no skaitļa 5, kā norādīts 1.5.3.1. Pēc programmas sastādīšanas tā tiek ierakstīta darba vietas mikrokontrollerī un tās darbs tiek demonstrēts skolotājam.
Pēc šādas iepazīšanās ar kompleksu students turpina individuālo uzdevumu. Ja ir laiks, skolotājs var sarežģīt individuālo uzdevumu.