AVR programmēšana montētājā. Atmel AVR mikrokontrolleru praktiskā programmēšana montāžas valodā. (3. izdevums). Grieķu stila elektronika


Tātad, ceru, ka apzinīgais lasītājs jau ir samontējis programmētāju, eksperimentālo plati, kā arī uzstādījis un konfigurējis nepieciešamo programmatūru.

Tagad, rakstot pirmo sērijas rakstu, saprotu, ka nedaudz aizrāvos un pieļāvu to pašu kļūdu, ko mani priekšgājēji, liekot frāzi “iesācējiem”. Precīzāk būtu formulēt tēmu “Iesācējiem montāžas valodas programmēšanā”, tas ir, pieņemu, ka lasītājam jau ir vismaz virspusēja izpratne par to, kas ir mikrokontrolleris, pretējā gadījumā mums būs nepieciešams daudz laika, lai iepazīties ar šo tēmu. Tiem, kas ar tiem nemaz nav pazīstami, varu ieteikt S. Ryumika rakstu sēriju “AVR Microcontrollers”, kas, manuprāt, ir absolūti brīnišķīga, kas publicēta žurnālā Radioamator (2005. gada 1.-11.nr.) . Šajā ciklā par bāzes kontrolieri tika izvēlēts ATmega8, tomēr iepriekš minētā kontrollera un ATtiny13 vispārīgās funkcionālās vienības praktiski ir vienādas.

Lai tieši iepazītos ar mikrokontrolleri ATtiny13, iesaku grāmatu A.V. Evstifejeva "Mikrokontrolleri" AVR ģimene sīks. Lietotāja rokasgrāmata" (M.: Izdevniecība "Dodeka-XXI", 2007. - 432 lpp.). Tajā ir tulkotas un sistematizētas datu lapas visam mazās ģimenes kontrolleru klāstam, un, manuprāt, tai vajadzētu būt darbvirsmai. lasiet tiem, kas nodarbojas ar mikrokontrolleru programmēšanu.

Taču, stāstam turpinoties, sniegšu informāciju par tiem kontrollera mezgliem un moduļiem, kas tiks izmantoti rakstītajās programmās.

Bet tas viss ir liriska atkāpe. Atgriezīsimies tieši pie stāsta.

ATtiny13 kontrolierim, neskatoties uz tā nelielo izmēru, ir ļoti labas funkcionālās īpašības. Un mazo tapu skaitu vairāk nekā kompensē funkciju skaits, ko katrs no tiem veic. Tapu izvads un apraksts ir parādīti zemāk:

Tabula ir ņemta no iepriekš minētās grāmatas A.V. Evstifejeva.

Kā redzat, katra tapa var veikt vismaz trīs funkcijas vai pat daudz vairāk. Sākumā mēs neapsvērsim alternatīvās funkcijas, bet tikai pamata vienu - digitālo ievadi/izvadi.

Kā redzams attēlā un tabulā, visām tapām, izņemot barošanas tapas, ir nosaukums PB, kam seko sērijas numurs. Ko tas nozīmē? Visas kontrollera tapas ir apvienotas 8 daļās, lai ar tām būtu ērtāk strādāt, un katrai 8 kontaktu grupai ir piešķirti trīs īpaši I/O reģistri. Kopumā reģistru jēdziens ir galvenais, strādājot ar kontrolieriem, īpaši montētājā. Apskatīsim tuvāk katru no trim iepriekš minētajiem reģistriem. Tās visas ir viena baita šūnas kontrollera atmiņā. Katrs bits atbilst vienai no kontrollera izejām, un bita numurs reģistrā sakrīt ar izejas numuru (piemēram, 0. bits ir atbildīgs par PB0 izeju, 1. bits ir atbildīgs par PB1 izeju utt.). Visiem reģistriem ir savs nosaukums, ar kuru tiem var piekļūt, rakstot programmas. Kādi nosaukumi tie ir?

1. DDRB reģistrs ir atbildīgs par katras kontrollera tapas informācijas pārraides virzienu. Ja kāds šī reģistra bits ir “0”, tad atbilstošā izvade būs ieeja, un, ja “1”, tad izeja. Turklāt katra izvade tiek konfigurēta atsevišķi un jebkurā programmas vietā. Tas nozīmē, ka dažādos apstākļos vai dažādos laikos vienu un to pašu tapu var konfigurēt kā ieeju vai izvadi neatkarīgi no citiem tapiem.

2. PINB reģistrā ir visu tapu pašreizējais stāvoklis: ja uz kontakta tiek pielikts spriegums, tad atbilstošajam bitam tiek ierakstīts loģisks “1”, ja sprieguma nav, tiek ierakstīts loģisks “0”. Šo reģistru galvenokārt izmanto, lai nolasītu ievades režīmā esošās tapas stāvokli.

3. PORTB reģistrs veic duālu funkciju atkarībā no informācijas pārraides virziena. Ja tapa darbojas kā digitālā izeja, tad, ierakstot “1” uz jebkuru PORTB reģistra bitu, uz atbilstošās tapas parādās spriegums, un, ierakstot “0”, spriegums pazūd. Tādējādi izvades režīmā tieši šis reģistrs nosaka katras tapas stāvokli. Digitālās ievades režīmā, ierakstot loģisko "1" uz jebkuru bitu, iebūvētais vilkšanas rezistors tiek savienots ar atbilstošo tapu, un rakstot "0", lai to atspējotu. Kāda veida lieta ir šis “vilkšanas rezistors”, un kam tas ir paredzēts? Ja tapa darbojas kā digitālā ieeja, tad ievades bufera pretestība ir diezgan augsta un ieejas strāva ir diezgan maza. Tāpēc jebkuri elektriskie traucējumi var izraisīt spontānu izejas pārslēgšanos uz patvaļīgu stāvokli. Lai tas nenotiktu, starp ieeju un strāvas avotu ir pievienots rezistors ar vairāku desmitu kiloomu pretestību, “pavelkot” ieejas potenciālu līdz barošanas spriegumam (tātad nosaukums). Strāva, kas plūst caur šo rezistoru, ir pietiekami maza, lai netraucētu pārējai ķēdei, bet pietiekami liela, lai novērstu nejaušu tapu pārslēgšanos. Strādājot ar pogām, mēs bieži izmantosim uzvilkšanas rezistorus, jo, kad tie nav nospiesti, tapas, ar kurām tie ir savienoti, būtībā "karājas" gaisā un ir pakļauti traucējumiem.

Jāpiemin, ka pie ieslēgšanas visi reģistri tiek atiestatīti uz 0 un katra tapa darbojas kā digitālā ieeja bez pievilkšanas rezistora.

Tagad, kad mums ir vismaz zināms priekšstats par to, KAS ir nepieciešams, lai strādātu ar kontroliera ieejām, ir pienācis laiks uzzināt, KĀ ar tiem strādāt.

Rakstīsim savu pirmo darba programma montētājā. Vispirms došu pilnu algoritmu jauna projekta izveidei, bet turpmāk to izlaidīšu, koncentrējoties tikai uz pašas programmas tekstu.

1. Dodieties uz mapi asm un izveidojiet tajā jaunu mapi. Pārdēvējiet to par mums ērtu nosaukumu. Lai būtu precīzāk, es tos nosaukšu ar mūsu soļa numuru. Šajā gadījumā "2. solis".

2. Ar peles labo pogu noklikšķiniet uz faila build.bat un mainiet ceļu uz avota failu, norādot uz jaunizveidoto mapi (2. darbība). Pēc tam mans saturs izskatās šādi:

"F:\Prog\AVR\asm\avrasm32 -fI %F:\Prog\AVR\asm\step2\main.asm
pauze"

Tas var atšķirties atkarībā no tā, kur izpakojāt arhīvu.

3. Dodieties uz mapi Asmedit un palaidiet programmu ASM_Ed.exe

4. Atvērtajā logā ierakstiet programmas tekstu. Es pakavēšos pie šī punkta sīkāk, jo tas ir galvenais mūsu šodienas stundā, kā arī turpmākajās.

Kāds ir montāžas programmas teksts? Tas var ietvert vairākus elementus, kas rakstīti saskaņā ar noteiktiem noteikumiem:

Montāžas instrukcijas ar vai bez operandiem atkarībā no instrukciju sintakses. Starp komandas nosaukumu un pirmo operandu ir jābūt atstarpei, tabulēšanai vai jebkuram abu skaitam. Operandi tiek atdalīti ar komatu, pirms kura vai aiz tā var būt arī patvaļīgs atstarpju vai tabulēšanas zīmju skaits;

direktīvas, no kurām katra sākas ar ".";

Etiķetes, kas ir lietotāja patvaļīgi nosauktas vietas programmā, uz kurām, iespējams, būs jāpārvietojas. Katra etiķete beidzas ar ":" rakstzīmi;

Komentāri, kas sākas ar ";". Veidojot hex failu, tiek ignorēts viss teksts no komentāra sākuma līdz rindas beigām, un tas var būt pilnīgi patvaļīgs;

Tukšas rindas labākai programmas struktūrai un lasāmībai.

Katrā rindā var būt ne vairāk kā viena komanda. Tomēr ir atļauta vienlaicīga etiķetes klātbūtne rindā, kam seko komanda un komentārs.

Izmantojot šos noteikumus, mēs uzrakstīsim programmu, kas ieslēgs LED2, kamēr SB1 poga ir nospiesta, un izslēgs to, ja poga tiek atlaista. Programmas teksts ir parādīts zemāk:

.include "F:\Prog\AVR\asm\Appnotes\tn13def.inc"
sbi DDRB, 4 ;РВ4 - izeja (LED2)
sbi PORTB, 2 ; ieslēdziet uzvilkšanas rezistoru uz PB2 (poga SB1)
sbic PINB, 2 ;Ja PB2=0 (nospiesta poga), izlaidiet nākamo. līniju
sbi PORTB, 4 ;PB4 instalēšana vienā (izslēdzot LED)
sbis PINB, 2 ;Ja PB2=1 (poga atlaista), izlaidiet nākamo. līniju
cbi PORTB, 4 ;PB4 iestatīšana uz 0 (deg LED)

Apskatīsim to sīkāk. Pirmajā rindā ir iekļauta direktīva, kas uzrakstīta saskaņā ar iepriekš minētajiem noteikumiem ar punktu sākumā. Tās mērķis ir programmas tekstā iekļaut aiz tā norādīto failu. Kā jau teicu pirmajā solī, mums būs nepieciešams fails "tn13def.inc". Šajā rindā jums būs jāmaina ceļš uz mapes Appnotes atrašanās vietu datorā. Kāpēc mums ir jāiekļauj šis fails? Zinātkārs lasītājs var tajā ieskatīties un izlasīt tā saturu, taču, visticamāk, sākumā viņš no tā maz ko sapratīs. Pagaidām teikšu, ka tajā ir atbilstība starp reģistru nosaukumiem, kurus montētājs pēc noklusējuma nezina, ar to fiziskajām adresēm kontrolierī.

Šīs rindas ir montētāja komandas. Uzmanīgs lasītājs ievēros, ka kopumā tiek izmantotas četras dažādas komandas. Apskatīsim katra mērķi.

Sbi instrukcijai ir divi operandi: pirmais ir reģistra nosaukums, otrais ir bita numurs. Tā izpildes rezultātā norādītais bits norādītajā reģistrā tiek iestatīts uz "1".

Komanda cbi sintaksē ir līdzīga iepriekšminētajai un veic tieši pretēju funkciju - tā atiestata norādīto bitu norādītajā reģistrā uz "0".

Komanda sbis sintaksē ir līdzīga iepriekšminētajai. Taču atšķirībā no tiem, tas neveic nekādas darbības ar reģistriem, bet tikai pārbauda norādītā bita stāvokli norādītajā reģistrā un, ja tas ir vienāds ar "1", izlaiž rindiņu pēc komandas. Pretējā gadījumā tiek izpildīta rinda, kas seko tai, kā arī visas pārējās pēc tās.

Komanda sbiс ir pretēja komandai sbis. Tas izlaiž nākamo rindu, ja norādītais reģistra bits ir "0".

Tagad, apkopojot visu iepriekš minēto, mēģināsim izprast programmas algoritmu. Lai sāktu, es to darīšu burtiski rindu pa rindiņai.

1 rindiņa. Iekļaušanas direktīvā ir iekļauts fails tn13def.inc, kurā ir reģistra definīcijas.

2. rinda. Sbi komanda DDRB reģistra 4. bitā nosaka "1", tādējādi pārslēdzot PB4 kontaktu uz izeju. Ja paskatās uz plates diagrammu (iepriekšējā soļa 1. att.), jūs varat redzēt, ka LED2 ir savienots ar šo tapu. Pēc komandas un zīmes ";" ir uzrakstīts komentārs, kas īsi izskaidro rindā veikto darbību nozīmi.

3 rinda. Tā pati sbi komanda PORTB reģistra 2. bitā iestata "1", savienojot iekšējo vilkšanas rezistoru ar PB2 tapu, kurai ir pievienota poga SB1. Tā kā mēs nemainījām DDRB reģistra 2. bita stāvokli, šī tapa paliks kā ievade, kas mums patiesībā ir nepieciešama.

4 rinda. Komanda sbic pārbauda, ​​vai PB2 ieejā nav loģiskā "0", izmantojot PINB reģistru. Ja paskatās cieši uz diagrammu, jūs varat redzēt, ka pogas, nospiežot, aizver atbilstošo spaili ar kopējo vadu. Šis ir standarta paņēmiens, jo, atlaižot pogu, uzvilkšanas rezistora dēļ izejā parādās loģisks “1”, un, nospiežot pogu, tiek parādīts loģisks “0” savienojuma dēļ. izvade uz kopējo vadu. Tātad, ja pie PB2 tapas ir loģisks “0”, tas ir, poga ir nospiesta, mēs izlaižam nākamo rindu, un, ja poga tiek atlaista, mēs to izpildām.

5 rinda. Tajā komanda sbi PORTB reģistra 4. bitā iestata loģisku “1”, tādējādi izslēdzot LED2. Asprātīgs lasītājs var brīnīties, kāpēc gaismas diode izslēdzas, ja izvadei pieslēdzam spriegumu. Atbilde slēpjas dizainā. Gaismas diode ir savienota ar anodu ar strāvas vadu un katodu ar kontroliera izeju. Tāpēc, ja izejai pievienosit spriegumu, anoda un katoda potenciāli būs vienādi, un gaismas diode nodzisīs. Ja izejā tiek izvadīts loģisks “0”, gaismas diodei tiks pievienots spriegums un tas iedegsies. Tādējādi 4. un 5. līniju pāris izslēdz LED2, kad poga tiek atlaista.

6 rinda. Nozīme ir pretēja 4. datumam. Komanda sbis pārbauda, ​​vai PB2 ieejā ir loģisks “1”, tas ir, tā pārbauda, ​​vai poga ir atlaista. Ja poga tiek atlaista, nākamā rinda tiek izlaista un nākamā rinda tiek pārieta uz nākamo. Bet tā kā 7.rindiņa ir pēdējā, tad notiek pāreja uz 2.rindu. Ja tiek nospiesta poga, tiek izpildīta 7. rinda.

7 rinda. Pretstatā 5. datumam. Komanda cbi atiestata PORTB reģistra 4. bitu uz "0", tādējādi ieslēdzot LED2. Tādējādi 6. un 7. līniju pāris ieslēdz LED2, kad tiek nospiesta poga SB1.

Kā redzat, neko īpaši grūtu nedarījām. Izmantojot zināšanas tikai par 3 reģistriem un 4 instrukcijām, mēs uzrakstījām savu pirmo programmu. Ko darīt ar viņu tālāk? Ja vēl neesat aizmirsis, turpinām rakstīt programmas izveides algoritmu.

5. Pēc programmas teksta ierakstīšanas redaktora logā atlasiet izvēlnes vienumu “Fails” un atvērtajā sarakstā noklikšķiniet uz “Saglabāt kā...”. Faila saglabāšanas logā atlasiet mūsu izveidoto step2 mapi un norādiet faila nosaukumu “main”, jo tas ir nosaukums, ko mēs norādījām failā “build.bat”.

Pēc saglabāšanas programmas logam vajadzētu izskatīties šādi:

6. Izveidojiet hex failu. Lai to izdarītu, rīkjoslā noklikšķiniet uz pogas "II". Ir jāparādās šādam logam:

Tas mums paziņo, ka montāža tika pabeigta bez kļūdām un tika izveidots programmaparatūras fails "main.hex" ar 6 vārdu apjomu, tas ir, 12 baiti. Es to atzīmēju līdzīga programma C valodā būtu vismaz 5 reizes lielāks apjoms.

7. Pārgājuši uz mapi step2, atrodam tai papildinājumu jaunizveidota main.hex faila veidā, kuru tagad var iešūt kontrollerī ar jebkuru programmētāju, kas ir jādara, lai redzētu rezultātus programma, kuru mēs uzrakstījām. Pēc kontrollera mirgošanas, ja ķēde ir salikta pareizi, visam jādarbojas saskaņā ar mūsu izstrādāto algoritmu: kad pogas ir atlaistas, LED2 ir jābūt izslēgtam, un, kamēr poga SB1 tiek turēta nospiesta, tai jābūt ieslēgtai.

Pirms nākamās darbības es iesaku veikt šādus uzdevumus:

1. Pievienojiet programmas apstrādei pogas SB2 nospiešanu ar pretēju algoritmu: atlaižot SB2 pogu, LED1 ir jāiedegas, un, nospiežot, tai jābūt izslēgtai.

2. Uzrakstiet programmu LED2 vadīšanai, izmantojot abas pogas. Kad tiek nospiesta poga SB1, LED jāiedegas un jāpaliek ieslēgtam, līdz tiek nospiesta poga SB2, kas to izslēdz līdz nākamajai SB1 nospiešanai.

Kompilators tulko pirmkodi no montāžas valodas līdz objekta kodam. Iegūto objekta kodu var izmantot ATMEL simulatorā AVR studija, vai ATMEL AVR In-Circuit Emulator. Kompilators arī ģenerē kodu, ko var tieši ieprogrammēt AVR mikrokontrolleros.

Kompilators ģenerē kodu, kuram nav nepieciešama saite.

Kompilators darbojas zem Microsoft Windows 3.11, Microsoft Windows95 un Microsoft Windows NT. Turklāt ir konsoles versija MS-DOS.

Ģimenes instrukciju komplekts AVR mikrokontrolleriīsi aprakstīts šajā dokumentā, lai iegūtu pilnīgākus norādījumus, lūdzu, skatiet visas jūsu konkrētā mikrokontrollera instrukcijas un dokumentāciju.

Avota kodi

Kompilators darbojas ar avota failiem, kas satur instrukcijas, etiķetes un direktīvas. Instrukcijām un direktīvām parasti ir viens vai vairāki operandi.

Koda rindiņa nedrīkst būt garāka par 120 rakstzīmēm.

Jebkura rinda var sākties ar etiķeti, kas ir rakstzīmju virkne, kas beidzas ar kolu. Etiķetes tiek izmantotas, lai norādītu vietu, uz kuru pāreju laikā tiek nodota vadība, kā arī norādītu mainīgo nosaukumus.

Ievades virknei var būt viens no četriem veidiem:

[label:] direktīva [operands] [komentārs][label:] instrukcija [operandi] [komentārs]KomentārsTukša rinda

Komentāram ir šāda forma:

; [Teksts]

Pozīcijas kvadrātiekavās nav obligātas. Tekstu aiz semikola (;) un līdz rindas beigām kompilators ignorē. Etiķetes, instrukcijas un norādījumi ir sīkāk aprakstīti tālāk.

Piemēri:

etiķete: .EQU var1=100 ; Iestata var1 uz 100 (Šī ir direktīva) .EQU var2=200 ; Iestata var2 uz 200

tests: rjmp tests ; Bezgalīga cilpa (Šī ir instrukcija) ; Rindā tikai viens komentārs

; Vēl viena rindiņa ar komentāru

Kompilators neprasa, lai etiķetes, norādījumi, komentāri vai norādījumi būtu noteiktā rindas kolonnā.

avr procesora instrukcijas

Zemāk ir AVR procesora komandu komplekts, kuru detalizētāks apraksts ir atrodams AVR datu grāmatā.

Aritmētika un loģiski norādījumi

Mnemonika

Operandi

Apraksts

Darbība

Karogi

Cikli

Rd,Rr

Summēšana bez pārnēsāšanas

Rd,Rr

Summēšana ar pārnēsāšanu

Rd = Rd + Rr + C

Rd,Rr

Atņemšana bez pārnešanas

Rd,K8

Konstantes atņemšana

Rd,Rr

Atņemšana ar pārnesi

Rd = Rd - Rr - C

Rd,K8

Konstantes atņemšana ar pārnesi

Rd = Rd - K8 - C

Rd,Rr

Loģiski UN

Rd,K8

Loģiski UN ar konstanti

Rd,Rr

Loģiski VAI

Rd,K8

Loģiski VAI ar konstanti

Rd,Rr

Loģiski ekskluzīvs VAI

Bitu inversija

Zīmes maiņa (papildu kods)

Rd,K8

Iestatiet bitu(-us) reģistrā

Rd,K8

Notīrīt bitu(s) reģistrā

Rd = Rd ($FF — K8)

Palieliniet reģistra vērtību

Samaziniet reģistra vērtību

Nulle vai negatīvisma pārbaude

Notīrīt reģistru

Iestatīt reģistru

Rdl,K6

Pievienojiet konstanti un vārdu

Rdh:Rdl = Rdh:Rdl + K6

Rdl,K6

Atņemiet no vārda konstanti

Rdh:Rdl = Rdh:Rdl - K 6

Rd,Rr

Neparakstītu skaitļu reizināšana

R1:R0 = Rd * Rr

Rd,Rr

Parakstīto skaitļu reizināšana

R1:R0 = Rd * Rr

Rd,Rr

Parakstīta skaitļa reizināšana ar neparakstītu skaitli

R1:R0 = Rd * Rr

Rd,Rr

Neparakstīto daļskaitļu reizināšana

R1:R0 = (Rd * Rr)<< 1

Rd,Rr

Parakstīto daļskaitļu reizināšana

R1:R0 = (Rd *Rr)<< 1

Rd,Rr

Parakstītas daļas reizināšana ar neparakstītu skaitli

R1:R0 = (Rd * Rr)<< 1

Nozares norādījumi

Mnemonika

Operandi

Apraksts

Darbība

Karogi

Cikli

Relatīvā pāreja

Netieša pāreja uz ( Z)

Pagarināta netieša pāreja uz ( Z)

STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND

Relatīvā apakšprogrammas izsaukums

STACK = PC+1, PC = PC + k + 1

Netiešais zvans ( Z)

STACK = PC+1, PC = Z

Pagarināts netiešais zvans ( Z)

STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND

Apakšprogrammas izsaukšana

STACK = PC+2, PC = k

Atgriezties no apakšprogrammas

Atgriezties no pārtraukuma

Rd,Rr

Salīdziniet, izlaidiet, ja vienāds

ja (Rd ==Rr) PC = PC 2 vai 3

Rd,Rr

Salīdzināt

Rd,Rr

Salīdziniet ar pārsūtīšanu

Rd,K8

Salīdziniet ar konstanti

Rr,b

Izlaist, ja bits reģistrā ir notīrīts

ja(Rr(b)==0) PC = PC + 2 vai 3

Rr,b

Izlaist, ja ir iestatīts bits reģistrā

ja(Rr(b)==1) PC = PC + 2 vai 3

P,b

Izlaist, ja portā esošais bits ir notīrīts

if(I/O(P,b)==0) PC = PC + 2 vai 3

P,b

Izlaist, ja porta bits ir iestatīts

ja(I/O(P,b)==1) PC = PC + 2 vai 3

s,k

Pārlēkt, ja SREG karodziņš ir notīrīts

if(SREG(s)==0) PC = PC + k + 1

s,k

Iet, ja SREG karogs ir iestatīts

if(SREG(s)==1) PC = PC + k + 1

Ej, ja vienlīdzīgs

ja(Z==1) PC = PC + k + 1

Izlaist, ja nav vienāds

ja(Z==0) PC = PC + k + 1

Iet, ja pārsūtīšana ir instalēta

ja(C==1) PC = PC + k + 1

Iet, ja pārskaitījums ir notīrīts

ja(C==0) PC = PC + k + 1

Pārlēkt, ja tas ir vienāds vai lielāks

ja(C==0) PC = PC + k + 1

Izlaist, ja mazāk

ja(C==1) PC = PC + k + 1

Iet ja mīnus

ja(N==1) PC = PC + k + 1

Iet, ja plus

ja(N==0) PC = PC + k + 1

Pārlēkt, ja lielāks vai vienāds ar (ar zīmi)

ja(S==0) PC = PC + k + 1

Pārlēkt, ja mazāk (parakstīts)

ja(S==1) PC = PC + k + 1

Pārlēkt, ja ir iestatīts iekšējais pārnēsāšanas karogs

ja(H==1) PC = PC + k + 1

Pārlēkt, ja iekšējais pārnēsāšanas karogs ir notīrīts

ja(H==0) PC = PC + k + 1

Pārlēkt, ja ir iestatīts T karogs

ja(T==1) PC = PC + k + 1

Pārlēkt, ja T karogs ir notīrīts

ja(T==0) PC = PC + k + 1

Pārlēkt, ja ir iestatīts pārpildes karodziņš

ja(V==1) PC = PC + k + 1

Pārlēkt, ja pārpildes karodziņš ir notīrīts

ja(V==0) PC = PC + k + 1

Iet, ja ir iespējoti pārtraukumi

ja(I==1) PC = PC + k + 1

Iet, ja pārtraukumi ir atspējoti

ja(I==0) PC = PC + k + 1

* Datu piekļuves darbībām ciklu skaits tiek norādīts, piekļūstot iekšējai datu atmiņai, un nav pareizs, strādājot ar ārējo RAM. Instrukcijām CALL, ICALL, EICALL, RCALL, RET un RETI ir jāpievieno trīs cikli plus divi cikli katrai gaidīšanai kontrolieros ar datoru, kas mazāks par 16 bitiem (128 KB programmas atmiņas). Ierīcēm, kuru programmas atmiņa ir lielāka par 128 KB, pievienojiet piecus ciklus plus trīs ciklus katrai gaidīšanai.

Datu pārsūtīšanas instrukcijas

Mnemonika

Operandi

Apraksts

Darbība

Karogi

Cikli

Rd,Rr

Kopēt reģistru

Rd,Rr

Nokopējiet pāris reģistrus

Rd+1:Rd = Rr+1:Rr, r,d pāra

Rd,K8

Slodzes konstante

Rd,k

Rd,X

Rd,X+

Rd = (X), X = X+1

Rd,-X

X=X-1, Rd = (X)

Rd,Y

Rd,Y+

Rd = (Y), Y = Y+1

Rd,-Y

Y=Y-1, Rd = (Y)

Rd,Y+q

Rd,Z

Rd,Z+

Rd = (Z), Z = Z+1

Rd,-Z

Z=Z-1, Rd = (Z)

Rd,Z+q

Tiešā taupīšana

X,Rr

Netiešā saglabāšana

X+,Rr

(X) = Rr, X = X+1

-X,Rr

Y,Rr

Netiešā saglabāšana

Y+,Rr

Netiešā ietaupīšana ar pēcpieaugumu

(Y) = Rr, Y = Y+1

-Y,Rr

Netieša saglabāšana ar iepriekšēju samazināšanu

Y=Y-1, (Y) = Rr

Y+q,Rr

Z,Rr

Netiešā saglabāšana

Z+,Rr

Netiešā ietaupīšana ar pēcpieaugumu

(Z) = Rr, Z = Z+1

-Z,Rr

Netieša saglabāšana ar iepriekšēju samazināšanu

Z=Z-1, (Z) = Rr

Z+q,Rr

Netiešā uzglabāšana ar nomaiņu

R0 = ( Z)

Rd,Z

Rd = ( Z)

Rd,Z+

Rd = ( Z), Z=Z+1

R0 = (RAMPZ: Z)

Rd,Z

Rd = (RAMPZ: Z)

Rd,Z+

Rd = (RAMPZ: Z), Z = Z+1

Saglabāšana programmas atmiņā

(Z) = R1:R0

Paplašināta krātuve programmas atmiņā

(RAMPZ: Z) = R1:R0

Rd,P

Lasīt portu

P,Rr

Rakstiet uz portu

Reģistra uzspiešana uz kaudzes

Reģistra izņemšana no steka

* Datu piekļuves darbībām ciklu skaits tiek norādīts, piekļūstot iekšējai datu atmiņai, un nav pareizs, strādājot ar ārējo RAM. LD, ST, LDD, STD, LDS, STS, PUSH un POP instrukcijām ir jāpievieno viens cikls plus viens cikls katrai gaidīšanai.

Norādījumi darbam ar bitiem

Mnemonika

Operandi

Apraksts

Darbība

Karogi

Cikli

Loģiskā nobīde pa kreisi

Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7)

Loģiskā maiņa pa labi

Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0)

Pagrieziet pa kreisi, izmantojot C

Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7)

Pagriezieties pa labi, izmantojot C

Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0)

Aritmētiskā nobīde pa labi

Rd(n)=Rd(n+1), n=0,...,6

Piezīmju grāmatiņu pārkārtošana

Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0)

Karoga uzstādīšana

Karoga notīrīšana

P,b

Iestatiet bitu pie porta

P,b

Notīriet uzgali portā

Rr,b

Rd,b

Ielādējiet bitu no T reģistrā

Uzstādiet pārnēsāšanas karogu

Notīrīt Carry karogu

Iestatiet negatīva skaitļa karogu

Notīrīt negatīvā skaitļa karogu

Iestatiet nulles karogu

Notīrīt nulles karogu

Iestatiet pārtraukuma karogu

Notīrīt pārtraukuma karogu

Iestatiet parakstītā numura karogu

Notīrīt parakstīto skaitļu karogu

Iestatiet pārpildes karogu

Notīrīt pārpildes karogu

Uzstādīt karogu T

Notīrīt T karogu

Iestatiet iekšējo pārnēsāšanas karogu

Skaidrs iekšējais pārnēsāšanas karogs

Nav operācijas

Miega režīms (samazināt enerģijas patēriņu)

Skatiet instrukciju aprakstu

Watchdog taimera atiestatīšana

Skatiet instrukciju aprakstu

Montētājs ir reģistrjutīgs.

Operandi var būt šāda veida.

Labvakar visiem! Es raidu no mājīgas pasaules, ko sauc par “assembler”. Tūlīt paskaidrošu, ka tēma attiecas uz AVR mikrokontrolleriem - un es vēl nezinu, vai šis ieraksts būs noderīgs tiem, kas vēlas izmantot montētāju kādam citam uzdevumam. Fakts ir tāds, ka burtiski pirms dažām dienām es sāku mācīties montētāju no nulles - man ir jāizgatavo viena ierīce - un es nolēmu visu izdarīt pats. Tātad, vienā jaukā dienā es to sapratu Mācīties montētāju ir absolūti bezjēdzīgi! Montāžas valodu var tikai saprast! Tas ir, visiem tiem, kas vēlas programmēt montāžas valodā, es ļoti iesaku jums detalizēti iedziļināties mikrokontrolleris FIZISKI darbībā un pēc tam izpētīt komandu sarežģījumus.
Tāpēc es droši vien sākšu nelielu rakstu sēriju, kurā es jums pastāstīšu no paša sākuma kā tieši Asamblejas valodas programmēšanā es sapratu noteiktas lietas - domāju, ka tiem, kas vispār nesaprot, kas ir ASM, būšu tikai tāds “tulkotājs” no to valodas, kam šis jautājums ir ļoti labs.

Uzreiz teikšu, ka šajā tēmā vairāk vai mazāk nokļuvu pēc DIHALT ierosinājuma - tāpēc šie raksti būs sava veida tulkojums no super-duper montāžas-mikrokontrollera valodas uz vairumam saprotamu valodu. Nu ceru, ka guru lugas gaitā mani izlabos, un, ja es pēkšņi kaut ko nepareizi paskaidrošu, viņi mani izlabos.
Tātad, pirmie secinājumi par assembler, ko izdarīju pirms pāris dienām, mani šokēja līdz sirds dziļumiem - un es sēdēju, lasot DI HALT rakstus no pulksten 23:00 līdz 5:00, pēc tam es devos gulēt apmierināts un laimīgs montāžas valodas programmēšana mikrokontrolleriem.
Kā to var izskaidrot vēl vienkāršāk? Es domāju, ka mums jāsāk no pašas būtības.
***
Sākotnēji mēs neiedziļināsimies tehniskās detaļās (par tām mēs runāsim nākamajā rakstā) - vienkārši iedomājieties, ka ir 3 rakstzīmes:
1. Mikrokontrolleris - Tas ir anglis Stīvs, kurš ieradās pie krieva. Viņš lieliski zina angļu valodu, bet viņš nesaprot krievu valodu vispār - ne vārda. Tikai angliski. Viņš zaudēja strīdu un bez šaubām apņēmās darīt visu, ko krievs viņam prasīs.
2. Montētājs -Šī ir tulkotāja Vasja, kuras māte ir angļu valoda, bet tēvs ir krievs. Viņš lieliski zina gan angļu, gan krievu valodu.
3. Mēs - Tas ir krievs, pie kura atnācis anglis. Nu, tas ir, mēs esam mēs =) Tajā pašā laikā mēs lieliski zinām krievu valodu un (!!!) nedaudz angļu valodu - tikai nedaudz, ar vārdnīcu.
***
Iedomājieties šādu situāciju - anglis sēž uz krēsla jūsu istabā. Un tu sēdi pie sava datora un lasi šo ziņu, kad pēkšņi tavs logs pēkšņi atvērās! Tā ir slikta veiksme! Pūš vējš, priekškars pārvērties burā... Būtu jauki aizvērt! Bet ir slinkums piecelties no krēsla, noņemt kājas no sistēmas bloka, iebāzt tās čībās, nolikt kafijas (alus) krūzi un doties cīnīties ar elementiem. Un tad jūs pēkšņi saprotat, ka mums istabā ir anglis, kurš ir zaudējis likmi, un ir pienācis laiks viņu vajāt! Un tu viņam tik mīļi saki: “Drušs! Lūdzu, aizveriet logu, un tad atkal varēsiet apsēsties uz krēsla! un viņš sēž, neizpratnē skatās uz tevi un neko nedara! Jūs, protams, varat sist kāpostu zupu, bet tad viņš joprojām jūs nesapratīs! Tad tu piezvani savam tulkam draugam Vasilijam – viņš atnāk un apsēžas blakus anglim uz krēsla. Un tu saki - Tulko: “Stīv, ej un aizver logu un tad apsēdies uz krēsla!” Tulkotājs tulko angliski - anglis saprot un aiziet un aizver logu, un tad nāk un apsēžas uz krēsla.
Šajā brīdī jums tikai jāsaprot montētāja loma šajā ķēdē "Mēs-montētājs-kontrolieris"
Tas ir, kā visi saprastu, kas ir montētājs? Tad lasiet tālāk.
***

Tātad, iedomāsimies šo situāciju. Tu saki Vasjai – “Klausies, nu, īsi sakot, šis ir tas gadījums – es aizmirsu mājās kalkulatoru, sadali 56983 ar 2 un saki Stīvam izdarīt tik daudz atspiešanās ar dūrēm” un Vasja rēķinās ar kalkulatoru un Stīvs stāsta angļu valodā “Do push-ups with your fists 28491 times” To sauc "DIREKTĪVA"- citiem vārdiem sakot, direktīva ir uzdevums Vasijai, kura rezultāts ir Stīva rīcība.

Ir arī cita situācija – jūs sakāt Vasjai “Pasaki Stīvam izdarīt 28491 atspiešanos”, un Vasja vienkārši pārtulko jūsu vārdus angļu valodā. Tas tiek saukts OPERATORS

Vienkārši – ir direktīva un ir operators. Operators ir jūsu tiešais norādījums Stīvam, kā rīkoties - Vasja šeit tikai tulko jūsu pieprasījumu angļu valodā. Un direktīva ir uzdevums pašam Vasjam – un Vasja vispirms izdara to, ko tu viņam teici, un tad atkarībā no rezultāta viņš kaut ko pastāsta Stīvam.

Tagad angliski mocīsim regulāri! Bet vispirms mums ir labāk jāiepazīst mūsu tulkotājs Vasja. Jums jāzina sekojošais - Vasja vienmēr jums paklausa neapšaubāmi - ko viņam teica, to viņš dara. Vasjas kalkulatorā nav zīmju aiz komata - ja skatāties uz piemēru ar atspiešanos, tad 56983 \ 2 = 28491.5 - bet Vasja viss pēc komata ir nogriezts - un viņš redz tikai veselu skaitli - un tas nav svarīgi vai būs 28491.000001 vai būs 28491.9999999 - Vasjai tas ir viens liels darījums abos gadījumos būs 28491. Nekas nav noapaļots. Svarīgāka informācija par Vasju. Vasja ir nežēlīga - viņam ir vienalga, ka Stīvs divdesmit astoņus tūkstošus reižu izdara atspiešanos. Viņi viņam teica, ka Vasja tulkoja. Un viņš ne tikai tulkoja, bet arī piespieda mani darīt to, ko tu prasi. Tātad, ja Stīvs nomirs divdesmit trīs tūkstoši pieci simti trīspadsmitajā atspiešanās reizē, tā būs tikai jūsu vaina.

Patiesībā pagaidām tas arī viss. Nākamajā ierakstā mēs padziļināsimies - pagaidām pietiek tikai to saprast. Iedomājieties šo situāciju un saprotiet, kas ir kas, kurš kādu lomu spēlē un ar ko direktīva atšķiras no operatora.
Un tad mēģināsim visu nosaukt īstajā vārdā un aptuveni novērtēt, kā montētājs strādā ar mikrokontrolleri kā pieaugušais.

Kas nepieciešams, lai kļūtu par profesionālu mikrokontrolleru programmu izstrādātāju un sasniegtu tādu prasmju līmeni, kas ļaus viegli atrast un iegūt darbu ar augstu atalgojumu (vidējā mikrokontrolleru programmētāja alga Krievijā 2015. gada sākumā ir
80 000 rubļu).

PIEVIENOT

Sintakse: ADD reg1, reg2 Šī komanda pievieno reģistru reg1 un reg2 saturu, saglabājot rezultātu reģistrā reg1. Maina H, S, V, N, Z, C karogu stāvokli.

UN

Sintakse: AND reg1, reg2 Šī komanda veic loģisko UN darbību starp reģistriem reg1 un reg2, saglabājot rezultātu reģistrā reg1. Maina S, V, N, Z karogu stāvokli.

ANDI

Sintakse: ANDI hreg, skaitlis Šī komanda veic loģisko UN darbību starp augstā reģistra hreg saturu un konstanto skaitli (0...255), saglabājot rezultātu reģistrā. Maina S, V, N, Z karogu stāvokli.

BRBC

Sintakse: BRBC bits, etiķete Šī komanda pārbauda SREG reģistra bita stāvokli ($3F) un pāriet uz etiķeti, ja bits ir skaidrs. Iezīmei ir jāatrodas 63 komandu robežās no komandas brbc.

BRBS

Sintakse: BRBS bits, etiķete Šī komanda pārbauda SREG reģistra bita stāvokli ($3F) un pāriet uz etiķeti, ja bits ir iestatīts. Iezīmei ir jāatrodas 63 komandu robežās no komandas brbs.

BRCC

Sintakse: BRCC bits, etiķete Šī komanda pārbauda pārnēsāšanas karogu (C) un pāriet uz etiķeti, ja tā ir skaidra.

BRCS

Sintakse: BRCS bits, etiķete Šī komanda pārbauda pārnēsāšanas karogu (C) un pāriet uz etiķeti, ja tā ir iestatīta.

BREQ

Sintakse: BREQ bits, etiķete Šī komanda pārbauda nulles (Z) karogu un pāriet uz etiķeti, ja tā ir iestatīta.

BRNE

Sintakse: BRNE bits, etiķete Šī komanda pārbauda nulles (Z) karogu un pāriet uz etiķeti, ja tā ir skaidra.

C.B.I.

Sintakse: CBI ioreg, bit Šī komanda atiestata I/O reģistra ioreg bitu ($00...$1F) uz 0. Bitu numurs nosaka bitu operandu.

CLR

Sintakse: CLR reg Šī komanda atiestata visus reg reģistra bitus uz 0. Maina S, V, N, Z karogu stāvokli.

C.P.

Sintakse: CP reg1, reg2 Šī komanda salīdzina reģistru reg1 un reg2 saturu, no reg1 atņemot reg2. Reģistru saturs nemainās. Maina H, S, V, N, Z, C karogu stāvokli.

PCI

Sintakse: CPI hreg, skaitlis Šī komanda salīdzina hreg reģistra saturu ar skaitļa konstanti, atņemot konstanti no reģistra. Reģistru saturs nemainās. Maina karogu H, S, V, N, Z, C stāvokli. Komanda darbojas tikai ar reģistriem R16…R31.

DEC

Sintakse: DEC reg Šī komanda samazina reģistra reg saturu par vienu, ierakstot rezultātu atpakaļ reģistrā. Maina S, V, N, Z karogu stāvokli.

IN

Sintakse: IN reg, ioreg Šī komanda pārsūta I/O reģistra ioreg saturu uz RON reg.

INC

Sintakse: INC reg Šī komanda palielina reģistra reg saturu par vienu, ierakstot rezultātu atpakaļ reģistrā. Maina S, V, N, Z karogu stāvokli.

LD

Sintakse: LD reg, longreg Šī komanda ielādē vienu baitu no datu atmiņas (atmiņas adrese, kas atrodas garākajā reģistrā) reg reģistrā (1200 modelim).

LDI

Sintakse: LDI hreg, skaitlis Šī komanda ielādē tūlītējo skaitļa vērtību augstajā reģistrā hreg (komanda var darboties tikai ar reģistriem R16...R31). Skaitlim ir jābūt diapazonā no 0…255.

LSR

Sintakse: LSR reg Šī komanda veic reģistra reg satura loģisku nobīdi pa labi. Šajā gadījumā 0. bits tiek kopēts uz karogu C, 7. bits tiek atiestatīts uz 0. Maina S, V, N, Z, C karogu stāvokli.

ORI

Sintakse: ORI hreg, skaitlis Šī komanda veic loģisko VAI darbību starp augstā reģistra hreg saturu un skaitļa konstanti (0...255), saglabājot rezultātu reģistrā. Maina S, V, N, Z karogu stāvokli.

ĀRĀ

Sintakse: OUT ioreg, reg Šī komanda pārsūta vispārējas nozīmes reģistra reg saturu uz I/O reģistru ioreg.

IZSAUKŠANĀS

Sintakse: RCALL etiķete Šī komanda izsauc apakšprogrammu, kas identificēta ar etiķeti, un tai ir jābūt 2048 komandām no rcall (relatīvais izsaukums) komandas.

RET

Sintakse: RET Šī komanda atgriežas no apakšprogrammas, pārejot uz komandu, kas seko oriģinālajai izsaukuma komandai.

RETI

Sintakse: RETI Šī komanda atgriežas no apakšprogrammas un iestata vispārīgo pārtraukuma iespējošanas karogu.

RJMP

Sintakse: RJMP apzīmējums Relatīvais lēciens. Pāriet uz programmas sadaļu, kas norādīta ar etiķeti, kurai jāatrodas 2048 robežās no RJMP komandas.

SBI

Sintakse: SBI ioreg, bit Šī komanda iestata I/O reģistra bitu ioreg ($00...$1F) uz 1. Bitu numurs nosaka bitu operandu.

SBIC

Sintakse: SBIC ioreg, bit Šī komanda pārbauda I/O reģistra bitu ioreg ($00...$1F) un izlaiž nākamo komandu, ja šis bits ir skaidrs. Bitu numurs nosaka bitu operandu.

SBIS

Sintakse: SBIS ioreg, bit Šī komanda pārbauda I/O reģistra bitu ioreg ($00...$1F) un izlaiž nākamo komandu, ja šis bits ir iestatīts. Bitu numurs nosaka bitu operandu.

SEI

Sintakse: SEI Šī komanda iestata vispārīgo pārtraukuma iespējošanas karogu.

SER

Sintakse: SER reg Šī komanda iestata visus reg reģistra bitus uz 1. Maina karogu S, V, N, Z stāvokli. Komanda var darboties tikai ar reģistriem R16...R31.

ST

Sintakse: ST reg, longreg 1200 modelim šī komanda datu atmiņā saglabā reg reģistra saturu (atmiņas adrese ir ietverta garākajā reģistrā), t.i. netieši pārsūta PON reg saturu uz garākā reģistrā saglabāto adresi.

SUBI

Sintakse: SUBI hreg, skaitlis Atņem konstanto skaitli no hreg augstākā reģistra. Rezultāts tiek saglabāts tajā pašā reģistrā. Maina karogu H, S, V, N, Z, C stāvokli. Komanda var darboties tikai ar reģistriem R16…R31.

Revičs Jū.

Atmel AVR mikrokontrolleru praktiskā programmēšana valodā
montētājs - 2. izdevums, red. -

Ieskicēti darbības principi, arhitektūras īpatnības un tehnikas

Atmel AVR mikrokontrolleru programmēšana. Tiek piedāvātas gatavas receptes
moderno mikroelektronisko iekārtu pamatfunkciju programmēšanai
ātrums: no reakcijas līdz pogas nospiešanai vai dinamiska displeja uzbūvei
sarežģītiem protokoliem datu ierakstīšanai ārējā atmiņā vai līdzekļos
reāllaika pulksteņa savienojums. Īpaša uzmanība tiek pievērsta datu apmaiņai
dotas skaitliskās mikroelektroniskās ierīces ar personālo datoru
programmu piemēri. Grāmatā ņemtas vērā mūsdienu AVR modeļu iezīmes un līdz.
ceļojošās mikroshēmas no pēdējo gadu ražošanas. Lietojumprogrammas satur pamata
AVR mikrokontrolleru parametri, komandu saraksts un programmu teksti tiem,
kā arī izmantoto terminu un saīsinājumu saraksts.

Studentiem, inženieriem un radioamatieriem

Publikāciju sagatavošanas grupa:

Galvenais redaktors

Jekaterina Kondukova

vietnieks galvenā redaktore

Igors Šišigins

Galva redaktori

Grigorijs Dobins

Redaktors

Jurijs Rožko

Datora izkārtojums

Olga Sergienko

Korektors

Zinaīda Dmitrijeva

Vāka dizains

Jeļena Beļajeva

Galva ražošanu

Nikolajs Tverskihs

Mikrokontrolleri, to izcelsme un pielietojums................................................ ........ 7

Mikrokontrolleru fons ................................................... .................................................. .................. 8

Elektronika grieķu stilā................................................ ...................................................... ............... 10

Kāpēc AVR? .................................................. ...................................................... .......................................... 12

I DAĻA. IERĪCES VISPĀRĪGI PRINCIPI
UN ATMEL AVR DARBĪBA ................................................... .......................... 17

1. nodaļa. Atmel AVR mikrokontrolleru pārskats ................................................ ...................... 19

AVR ģimenes ................................................... ...................................................... ...................................... 21

AVR MK praktiskās lietošanas iezīmes ................................................ ...................... 23

Par patēriņu................................................ ................................................... ...................................... 23

Dažas AVR izmantošanas iespējas shēmās.................................. .............................. 25

2. nodaļa. Vispārīgā struktūra, atmiņas organizācija, pulksteņa noteikšana, atiestatīšana........ 27

Programmas atmiņa................................................ ...................................................... .......................................... 27

Datu atmiņa (RAM, SRAM) ................................................ ...................................................... ...................... 29

Negaistošo datu atmiņa (EEPROM) ................................................ ...................................... 31

Pulksteņa metodes................................................ ...................................................... .............................. 32

Atiestatīt................................................. .................................................. ..................................................... 34

3. nodaļa: Ievads perifērijas ierīcēs................................................ ........ 37

I/O porti................................................ ...................................................... ................................... 38

Taimeri-skaitītāji ................................................... ...................................................... .............................................. 39

Analogā-digitālā pārveidotājs................................................ ...................................................... 41

Seriālie porti................................................ ................................................... ...................... 42

UART.................................................. .. .................................................. ...................................................... 43

SPI interfeiss ................................................... ................................................... ...................................... 46

TWI interfeiss (I

C) ................................................................ .............................................................. ...... 50

Universālā seriālā interfeisa USI ................................................... .......................... 50

4. nodaļa. Pārtraukumi un enerģijas taupīšanas režīmi................................................ ......... ... 53

Pārtraukumi ................................................... ...................................................... .............................................. 53

Pārtraukumu veidi.................................................. ................................................... ...................... 57

Enerģijas taupīšanas režīmi ................................................... ................................................... .............................. 58

II DAĻA. MIKROKONTROLERU PROGRAMMĒŠANA
ATMEL AVR ................................................... ................................................... ...................... 61

5. nodaļa. AVR saimes MCU programmēšanas vispārīgie principi .................................... 63

Asambleja vai C? .................................................. ...................................................... .............................. 63

AVR programmēšanas metodes un rīki ................................................... .......................................... 67

Kodu redaktors................................................ ................................................... ...................................... 67

Par AVR Studio ................................................... ...................................................... .......................................... 68

Montāžas izkārtojums.................................................. ...................................................... ................... 70

Programmētāji................................................ ...................................................... .............................. 71

Par hex failiem................................................ ...................................................... .......................................... 75

AVR montētāja komandas, instrukcijas un apzīmējumi................................................ .......................................... 78

Skaitļi un izteiksmes .............................................. ...................................................... .......................... 79

Direktīvas un funkcijas................................................ ...................................................... .......................... 80

AVR programmas vispārējā struktūra................................................ ...................................................... ......... 84

Pārtraukumu apstrāde ................................................... ................................................................ ........................... 85

ATIESTATĪT ................................................... ...................................................... ...................................... 89

Vienkāršākā programma............................................ ...................................................... ...................... 90

Kavēšanās.................................................. .................................................. ...................................... 92

Skaitītāja programma................................................ ...................................................... .......................... 94

Pārtraukumu izmantošana................................................ ................................................................ .............................. 96

Taimera aizkave.................................................. ...................................................... .......................... 97

Skaitītāja programma, kas izmanto pārtraukumus.................................................. ................................ 98

Par konfigurācijas bitiem................................................ .............................................................. ........................... 101

6. nodaļa. AVR komandu sistēma ................................................ ...................................................... 105

Kontroles pārsūtīšanas instrukcijas un reģistrācija SREG ...................................................................... 105

Pārbaudes caurlaides komandas................................................ ................................................................ .............................. 111

Loģisko operāciju komandas................................................ .............................................................. .......................... 113

Pārslēgšanas instrukcijas un bitu darbības................................................ ...................................................... 114

Aritmētisko darbību norādījumi................................................ ..................................................... 116

Datu pārsūtīšanas komandas................................................ .............................................................. .............................. 118

Sistēmas vadības komandas................................................ ...................................................... ................ 122

Standarta procedūru veikšana montētājā................................................ .............................................. 123

Par steku, vietējiem un globālajiem mainīgajiem................................................. ...................................... 125

7. nodaļa. Aritmētiskās darbības................................................ .......................................... 127

Standarta aritmētiskās darbības................................................ .............................................................. ...... 128

Daudzciparu skaitļu reizināšana................................................. .............................................................. ...... 129

Daudzciparu skaitļu dalīšana................................................. .............................................................. .............. 131

Darbības ar daļskaitļiem................................................ ...................................................... 134

Nejaušo skaitļu ģenerators.................................................. .................................................. ...... ...... 136

Darbības ar cipariem BCD formātā ................................................ ...................................................... ...... 138

Negatīvie skaitļi MK................................................. ...................................................... ........... ....... 143

8. nodaļa. Taimeru programmēšana.................................. .............................. 147

8 un 16 bitu taimeri............................................ ...................................................... .......................... 147

Dotās frekvences vērtības veidošanās................................................ ...................................... 149

Atpakaļskaitīšana ................................................... ............................................................ ...................................................... 153

Precīza laika korekcija................................................ .............................................................. ...................... 158

Frekvences mērītājs un perioda mērītājs................................................ ...................................................... ............... 160

Frekvences mērītājs................................................ ................................................... ...................................... 160

Perioda skaitītājs................................................ ...................................................... .............................................. 164

Dinamiskā displeja vadība................................................ .............................................................. ...... 167

LED indikatori un to pieslēgums................................................ .............................................. 168

Dinamiskā displeja programmēšana................................................ .............................. 171

Taimeri PWM režīmā ................................................... ...................................................... .......................... 174

9. nodaļa. EEPROM izmantošana ................................................ .......................................... 179

Vēlreiz par datu drošību EEPROM ................................... ...................................... 179

EEPROM rakstīšana un lasīšana ................................................... ...................................................... ............... 181

Konstantu glabāšana EEPROM ................................................... ............................................................ .................. .. 183

10. nodaļa. Analogais komparators un ADC................................................ ...................................... 187

Analogi-digitālās darbības un to kļūdas................................................ ...................................... 187

Darbs ar analogo komparatoru................................................ .............................................................. .............. 190

ADC integrēšana komparatorā................................................ .............................................. 193

Darbības princips un aprēķinu formulas................................................ .......................................... 194

ADC programmas integrēšana................................................ .............................................................. ...... 198

Iebūvēts ADC ................................................... ...................................................... ...................................................... 201

ADC izmantošanas piemērs................................................. ................................................................ ...................................... 204

Programma................................................ .................................................. ...................................... 206

11. nodaļa. SPI programmēšana ................................................ .......................................... 215

Pamatdarbības, izmantojot SPI ................................................... .............................................................. ........................... ... 215

Aparatūras opcija................................................ ................................................... ......... ......... 216

Programmatūras opcija................................................ ................................................... ......... ...... 218

Par nepastāvīgās atmiņas veidiem................................................ ...................................... 219

Zibatmiņas rakstīšana un lasīšana, izmantojot SPI ................................................... ...................................................... .. 221

Apmaiņas programma ar atmiņu 45DB011B caur SPI ................................................ ...................... 224

Flash karšu rakstīšana un lasīšana................................................ ...................................................... .......................... 225

MMS karšu pievienošana ................................................... ...................................................... ....... ... 225

Komandu iesniegšana un MMC inicializācija................................................. ...................................... 228

MMS ierakstīšana un lasīšana.................................................. ...................................................... ...................... 232

12. nodaļa. TWI interfeiss (I

C) un tā praktiskā izmantošana................ 237

I pamatprotokols

C ................................................................ ................................................................ ......... 237

I protokola programmatūras emulācija

C ................................................................ ........................ 240

Datu rakstīšana ārējā nemainīgajā atmiņā................................................ ...................... 241

Režīmu apmaiņa ar AT24 atmiņu ................................................ ...................................................... 241

Programma................................................ .................................................. ...................................... 243

Pulkstenis ar interfeisu I

C ................................................................ ................................................................ .... 247

Datu ierakstīšana................................................. ...................................................... .............................. 255

Datu lasīšana................................................ ...................................................... .............................. 259

13. nodaļa. UART/USART programmēšana ................................................ .............. 261

UART inicializācija ................................................ ................................................... ...................... 262

Datu pārsūtīšana un saņemšana ................................................... ...................................................... ...................... 263

Piemērs DS1307 pulksteņa iestatīšanai, izmantojot UART ................................................... ..................... 266

Paņēmieni aizsardzībai pret sakaru traucējumiem................................................ ...................................................... 271

Paritātes pārbaude................................................ ................................................................ .............................. 271

Kā organizēt pareizu apmaiņu................................................ ...................................................... ....... 273

Papildu USART funkcijas ................................................... .............................................. 274

RS-232 un RS-485 saskarņu ieviešana ................................................ .............................................. 276

Līmeņa pārveidotāji RS-232 ................................................ .............................................. 280

RS-485 ................................................... ...................................................... ...................................................... 283

14. nodaļa. Enerģijas taupīšanas režīmi un sargsuņa taimeris................................................. 285

Enerģijas taupīšanas režīma programmēšana................................................. .............................................. 286

Ar akumulatoru darbināmas ierīces piemērs................................................. ...................................................... 287

Programmas pabeigšana.................................................. ...................................................... .................. 289

Sargsuņa taimera lietošana................................................ .............................................................. ........ 293

PIETEIKUMS.................................................. ...................................................... .............. 299

Pielikums 1. Atmel AVR mikrokontrolleru pamatparametri .......... 301

2. pielikums. Atmel AVR komandas ................................................ ..................................... 309

Aritmētiskās un loģiskās komandas................................................ .............................................. 310

Bitu darbības instrukcijas.................................................. .............................................................. ........................... ...... 311

Salīdzināšanas komandas................................................ ................................................... ...................... 312

Vadības pārsūtīšanas komandas................................................ ...................................................... .............. .313

Komandas beznosacījumu lēcienam un apakšprogrammu izsaukšanai................................................... ....... ... 313

Pārbaudes izlaišanas instrukcijas un nosacīta lēciena instrukcijas................................................ ................. 314

Datu pārsūtīšanas komandas................................................ .............................................................. .......................... ........ 315

Sistēmas vadības komandas................................................ ...................................................... ................ 316

3. pielikums. Programmu teksti.................................................. ...................................... 317

Flash komunikācijas demonstrācijas programma 45DB011B
izmantojot SPI interfeisu................................................. ...................................................... ...................................... 317

Interfeisa apmaiņas procedūras I

C ................................................................ ........................ 321

4.pielikums. Datu apmaiņa ar personālo datoru
un atkļūdošanas programmas, izmantojot UART ................................... .............................................. 329

Darbs ar COM portu Delphi ................................... ................................................... ......... ..... 329

RTS līnijas instalēšana operētājsistēmā DOS un Windows ................................... ...................................................... 335

Programma COM2000 ................................................... ................................................... ...................... 337

Programmu atkļūdošana, izmantojot termināļa emulatoru................................................ ....................... 339

Pielikums 5. Biežāk lietoto saīsinājumu un terminu vārdnīca....... 341

Literatūra................................................. .................................................. .......................... 347

Priekšmeta rādītājs................................................ ................................................ 349

IEVADS

Mikrokontrolleri,
to izcelsme un pielietojums

Viņi saka, ka 60. gados, vērojot dalībniekus studentu demonstrācijās
Gordons Mūrs atzīmēja: "Mēs esam īsti revolucionāri." Studenti
viena no tranzistora izgudrotājiem V. Šoklija darbinieks, cita starpā,
slēptais slavenās Silīcija ielejas dibinātājs, savukārt dibināts
tālr. un to uzņēmumu vadītājs, kuriem bija lemts ieņemt vadošo lomu attīstībā
mikroelektronika, Mūrs zināja, par ko runā. Paradoksālā kārtā tā ir
Mūra un viņa līdzstrādnieku izgudrojumiem bija lemts kļūt par šīs pasaules pamatu
kurā vēlāk koncentrējās “dumpīgās jaunatnes” darbība
1960. gadi Mūsdienu hakeri (nevis datoru huligāni no avīzēm, bet īstie)
datorzinātnieki, kas aizraujas ar savu darbu) - tiešie ideoloģiskie mantinieki
Sorbonnas studenti un amerikāņu demonstranti, kuri mainīja moto "Make
mīlestība nevis karš"

uz "Neraksti saukļus - raksti kodu." Tā nav nejaušība, ka daudzi slaveni

ievērojamas personas elektronisko datoru industrijā, izgudrojumu autori, dibinātāji
kuri ir veidojuši mūsdienu pasaules seju - nāk no vides, kas ir tuvu šai "bulciņai"
nīkuļojoša jaunība."
Mūsu stāsts par mikrokontrolleriem sākās ar faktu, ka 1957. gadā Gordons Mūrs līdz
kopā ar Robertu Noisu, kurš vēlāk kļuva par vienu no mikrofona izgudrotājiem
roschemy un vēl seši Shockley Semiconductor Labs darbinieki (Šoklijs piezvanīja
viņu "nodevīgais astoņnieks"), nodibināja uzņēmumu Fairchild Semiconductor. Viņai mēs
ne tikai pusvadītāju tirgus attīstībai un mikroshēmu ieviešanai
inženierpraksē, bet arī tāpēc, ka tā ir kļuvusi par sava veida personāla un
ideju ģenerators jaunai nozarei.
Šeit ir tikai daži no vēsturiskajiem faktiem. Pats Mūrs kopā ar Noisu 60. gadu beigās
izveidoja uzņēmumu Integrated Electronics, kas ar saīsināto nosaukumu Intel
tagad pazīstams katram skolēnam. Džeremijs Sanderss, cita slavena dibinātājs
lielākais uzņēmums - AMD, arī atstāja Fairchild, kur viņš izcēlās ar sadarbības partnera atvēršanu
pagaidu ekonomiskais modelis pusvadītāju ražošanai un pārdošanai
komponenti, kuros produkta pašizmaksa tiecas uz nulli, tai pieaugot

“Mīlies, nevis kari” bija 1960. gadu hipiju sauklis, protestējot pret Vjetnamas karu.

Ievads

mainiet partijas tilpumu. Čārlijs Sporks, viens no Fairchild galvenajiem menedžeriem, 1967. gadā
kļuva par National Semiconductor direktoru, kuru vēlāk vadīja ceturksni
gadsimtā. Puse no "nodevīgā astoņnieka" - Džīns Hērnijs, Jevgeņijs Kleiners,
Džejs Lasts un Šeldons Roberts – 1961. gadā nodibināja uzņēmumu Amelco, no kura
vēlāk izauga tagad labi zināmie Intersil, Maxim un Ixys. Darbinieks
Mēs esam parādā Fērčaildam Robertam Vidlaram par operacionālo pastiprinātāju izgudrošanu.
dažādas mikroshēmas, un līdz šai dienai ir tikai otrā popularitāte
mikroprocesori. Turklāt Fairchild vēsture ir saistīta ar slavenā rašanos
jauna riska (t.i., “riskanta”) finansēšanas modeli, kam bija izšķiroša loma
nozīmīga loma visu nozaru attīstībā, kas saistītas ar elektroniku, datoriem un
telekomunikācijas. Ne velti Fērčaildu bieži sauc par “visas elektrības priekšteci”.
tronika".

Mikrokontrolleru fons

No visas šīs notikumu viesuļvētras mūsu stāstījumam svarīgs ir tas
citi jauninājumi, Fairchild darbinieki bija pirmie, kas popularizēja pusvadītājus
viltota atmiņa. Tagad, kompaktdisku un DVD, cieto disku un zibatmiņas karšu laikmetā, mēs
Grūti iedomāties, ka 60. gadu sākumā datorprogrammas
tika glabāti galvenokārt uz kartona loksnēm (perfokartēm), lūžņu konstruktori
vai galva ir pāri dārgiem RAM moduļiem uz dzīvsudraba aizkaves līnijām, osciloskops
grafiskās caurules un ferīta gredzeni, kur katrs uzgalis tika “sašūts” ar rokām
Nē. To gadu kompaktākā elektroniskā ierīce datu glabāšanai
magnētiskie diski ar nosaukumu RAMAC 305 ar ietilpību 5 MB bija izmēri
ar industriālo ledusskapi un tika īrēts par 5 tūkstošiem dolāru mēnesī.
Vienīgais "gaismas stars" šo monstru tumšajā valstībā bija izgudrojums
Amerikāņu Bosch Arma Corporation darbinieks Yen Chow, kurš 1956. gadā saņēma
patents ierīcei, kas tagad pazīstama kā "vienreiz programmējama ROM"
(OTP ROM

). Starp citu, šajā patentā šis termins tika lietots pirmo reizi

"sadedzināt" - mikromodulis sastāvēja no matricas ar kausējamiem džemperiem, kas
kuri programmēšanas laikā tika izdeguši, pieliekot tiem augstu spriegumu.
OTP ROM ilgu laiku palika vienīgās kompaktās ierīces
datu glabāšanai un savu nozīmi nezaudēja vēl pavisam nesen -
vismaz ceturtā daļa pasaules mikrokontrolleru, īpaši tie, kas ir vienkāršāki, līdz
joprojām tiek ražots tikai ar šādu vienreiz programmējamu iebūvēto programmu
saburzīts, tā ārkārtīgi lētuma dēļ. Un tikai pēdējos gados ir “izdegusi” pa-
atmiņu sāka pakāpeniski aizstāt ar ērtāku zibatmiņu, kad pēdējā
ir tik ļoti samazinājies, ka nav gandrīz nekādas jēgas izmantot OTP ROM.
Bet atgriezīsimies pagājušā gadsimta sešdesmitajos gados. Kompakta pusvadītāju atmiņa bija absolūti nepieciešama
visiem tas patīk - no militārpersonām un NASA līdz sadzīves tehnikas ražotājiem. Vispirms
Fairchild iepazīstināja ar to, ko šodien sauc par DRAM, jo īpaši attiecībā uz šādiem mikro
Krievijas shēmām (32 768 mikroshēmas ar ietilpību 256 biti katra) tika izveidota reklāmkaroga atmiņa

Dažu saīsinājumu skaidrojumu sk 5. pielikums.

kvēldiega superdators ILLIAC-IV, vietējā BESM-6 konkurents. Sajutis
uz kuru pusi pūš vējš, 1968. gadā Mūrs un Noiss pameta Fairchild un nodibināja Intel.
specializēts uzņēmums atmiņas izstrādei un ražošanai. Viņi vēl nav
zināja, ka Intel populārākais produkts vispār nebūs atmiņa, bet gan maza
ierīce (B1. att.), ko sauc par mikroprocesoru, kura izstrāde bija pirmā
sākotnēji tika iecerēts kā palīgposms parastā aprēķina projektēšanā
Tora.

Rīsi. IN 1. Mikroprocesors

UN

MIKROPROCESA IZGUDROJUMS

1969. gadā Intel parādījās vairāki cilvēki no jaunas japāņu kompānijas Busicom.
pētniecības institūts, kas nodarbojas ar kalkulatoru ražošanu. Viņiem bija vajadzīgs 12 inte-
Gral shēmas kā jaunā lētā galda kalkulatora galvenais elements -
Tora. Projektu izstrādāja Masatoshi Shima, kurš pārstāvēja Japānas uzņēmumu
Rons. Teds Hofs (Marcian E. Ted Hoff, dz. 1937), nodaļas vadītājs, kas iesaistīts
izstrādājot lietojumprogrammas Intel produktiem, iepazīstoties ar projektu, es to sapratu
tā vietā, lai izveidotu kalkulatoru ar dažām programmēšanas iespējām
programmēšana, jūs varat darīt pretējo, dators ieprogrammēts strādāt kā
kalkulators. Attīstot šo ideju, 1969. gada rudenī Hofs pieņēma lēmumu par šo mākslu
nākotnes mikroprocesora arhitektūra. Pavasarī Hoffa ieradās nodaļā (visi no tās pašas
Mums jau zināmais Fairchild), jaunais darbinieks Frederiko Fagins, kurš
ry un nāca klajā ar nosaukumu visai sistēmai: “4000 ģimene”. Ģimene sastāvēja
no četrām 16 kontaktu mikroshēmām: 4001 saturēja 2 KB ROM; 4002 - RAM ar
4-

bitu izvades ports programmu lejupielādei; 4003 bija 10 bitu

I/O paplašinātājs ar seriālo ieeju un paralēlo izeju
mājas saziņai ar tastatūru, indikatoru un citām ārējām ierīcēm; tomēr-
4004 bija 4 bitu CPU (centrālais procesors). Šis ir centrālais procesors
saturēja 2300 tranzistoru un darbojās ar takts frekvenci 108 kHz. 15. novembris
1971

Tika paziņots par pirmā mikroprocesora izveidi. Busicom iegādājās

izstrāde, samaksājot Intel 60 000 USD, taču Intel nolēma atdot šo naudu uzņēmumam Busicom,
lai atgūtu tiesības uz mikroprocesoru.
i4004 skaitļošanas jauda bija salīdzināma ar pirmo elektronisko datoru.
Yuter ENIAC (1946). 4004 atrada savu pirmo praktisko pielietojumu sistēmā
luksoforu un asins analizatoru kontrole. Šis mikroprocess
sor tika izmantots starpplanētu zondes Pioneer-10 borta aprīkojumā, kas
ry uzstādīja ilgmūžības rekordu starp līdzīgām ierīcēm: tas tika laists klajā gadā
1972

, un līdz 2001. gada septembrim Pioneer-10 bija attālinājies no Zemes 11,78 miljardu km attālumā un joprojām atradās

strādāja un, diezgan iespējams, joprojām darbojas līdz šai dienai, lai gan 2003. gada februārī NASA oficiāli
sabiedriski atvadījās no viņa.

Ievads

Tā sākās mikroprocesoru uzvaras gājiens, kas vēlāk sadalījās
vairākās šķirnēs, kas galvenokārt pieder pie divām galvenajām grupām:
paši mikroprocesori (MP) un mikrokontrolleri (MC). Pirmais
ir paredzēti izmantošanai kā daļa no skaitļošanas sistēmām, visizplatītākās
no kuriem lielākā daļa ir personālie datori (PC), tāpēc tos joprojām bieži izmanto
tiek saukti par “personālo datoru procesoriem” (lai gan šajā grupā parasti ietilpst arī ražotie
draiveris MP serveriem un dažiem citiem). MK atšķiras no MP ar to
ka tie galvenokārt ir paredzēti dažādu sistēmu vadīšanai,
tādēļ ar salīdzinoši vājāku skaitļošanas kodolu tie ietver
ir daudz papildu mezglu. Fakts, ka parastam deputātam tiek pieņemts
rezerves ārējos mikroshēmojumos vai papildu moduļos (atmiņa, ievades porti)
izeja, taimeri, pārtraukumu kontrolleri, mezgli analogo signālu apstrādei
makšķerēšana utt.), MK tas atrodas tieši uz mikroshēmas, tāpēc tie kādreiz bija modē
sauc to par "mikrodatoru".
Patiešām, vienkāršākajā gadījumā, lai izveidotu pilnībā funkcionālu
datoram viena MK mikroshēma ar pieslēgtu
tam pievienotās ievades/izvades ierīces. Mūsdienu modeļi no parastā viena kristāla
tērauda MK pārsniedz IBM PC AT skaitļošanas iespējas 286. pro-
80. gadu otrās puses procesors. Ir apgabali, kur robeža starp MP un
MK ir grūti veikt: tādi, piemēram, ir mobilo ierīču procesori, no
tālruņus un kabatas datorus uz digitālajām kamerām, kurās procesors
mezglam ir jābūt uzlabotām skaitļošanas funkcijām un jāpārvalda vairākas
daudzas ārējās sastāvdaļas.

Grieķu stila elektronika

1962. gadā Perlegosu ģimene, grieķu emigranti, kas dzimuši
Tripoles pilsētas iedzīvotāji. Vecāki nodarbojās ar vīnkopību, kā dzimtenē, un dēli
Novja, Džordžs un Gusts Perlegos izvēlējās moderno inženierzinātņu specialitāti
elektronikas inženieris: abi vispirms absolvējuši Sanhosē universitāti un pēc tam Stenfordu
universitāte. 1974. gadā, 24 gadu vecumā, jaunākais no brāļiem Džordžs Perlegoss
Sācis strādāt Intel, kur atradās vienā no progresīvākajām jomām:
elektriski dzēšamās atmiņas izstrāde, lai aizstātu ierakstīto OTP ROM.
Pat pirms Perlegos, gandrīz vienlaikus ar mikroprocesora izgudrošanu 1971.
Intel darbinieks Dons Frohmans izgudroja peldošo slēģu un izveidoja pirmo UV
2K dzēšams EPROM (256 8).

Z

PIEZĪMES PAR PIEMĒRU

"Parastā" dzīvē izmantojiet saīsinājumus informācijas vienībām, kas sastāv no viena burta
"K" (kā arī "M") nav ieteicams: dažreiz ir ļoti grūti saprast, vai tā ir
apmēram kilobiti, kilobaiti, "kilovārdi" vai parasti kilobiti sekundē. tomēr
šādi saīsinājumi ir bieži sastopami, tostarp tehniskajā dokumentācijā, un mēs nonāksim pie tā
Es dažreiz cenšos sekot šim piemēram. Skaidrības labad mēs pieņemam šādus noteikumus:
la: viens lielais burts "K" apzīmē bināros kilobitus (1024 bitus), "M" apzīmē bināros kilobitus
bināri megabiti (1024 kbiti). Lai gan literatūrā bieži vien joprojām tiek pieņemts, ka kilobaiti ir
saīsināt kā "KB" un kilobitus kā "KB", mēs centīsimies izvairīties no šīs neskaidrības, un

Mikrokontrolleri, to izcelsme un pielietojums

Visos citos gadījumos rakstiet pilnībā: kbits un MB, kbit/s, MB/s. izņemot-
būs mikrokontrolleru programmu atmiņas apjoma apzīmējums, ja tas tiks ražots
mēra divbaitu vārdos: piemēram, 4K vārdi nozīmēs 4096 šūnas -
vārdi (8 kbaiti).

Džordžs Perlegoss aktīvi iesaistījās šajā procesā, vispirms ar viņa līdzdalību un
pēc tam viņa tiešā vadībā tika izveidotas divas tehnoloģijas,
kas kļuvuši par izaugsmes punktu visai zibatmiņas nozarei – vienu no
mūsdienu "digitālās revolūcijas" galvenie pīlāri. Tas pirmo reizi tika izgudrots
mikroshēma 2716 - 16K (2048 8) EPROM ar vienu barošanas spriegumu +5 V, un pēc tam
2816 - pirmais EEPROM, elektriski dzēšams ROM, kas kļuva par prototipu
zibatmiņa.
1981. gadā Perlegos pameta Intel un ar vairākiem darbiniekiem (tostarp
bija Gordons Kempbels, citas slavenas kompānijas Chips & topošais radītājs
Technologies) izveido uzņēmumu Seeq. Tas bija elektroniskās rūpniecības lejupslīdes laiks.
industrializācija un trīs gadus vēlāk uzņēmumam nācās aiziet pretenzijas dēļ
mani investori. Viņiem vairs neuzticoties, Džordžs un viņa brālis Gusts un vairāki citi
1984. gadā ar Seeq darbiniekiem mēs izveidojām uzņēmumu ar personīgajiem līdzekļiem,
kura pilns nosaukums skan kā Advanced Technology MEmory and Logic vai
saīsināti kā Atmel.
Sākumā Atmel produkti bija visu veidu nemainīgas atmiņas mikroshēmas
jaunas funkcijas, piemēram, OTP EPROM un EEPROM ar seriālo un paralēlo
piekļuve un Flash. 1985. gadā Atmel izlaida pasaulē pirmo mājas EEPROM.
mūsdienu jaunā CMOS tehnoloģija un 1989. gadā pirmā darbināmā zibatmiņa
no viena sprieguma +5 V. 80. gadu beigās Intel nolēma sodīt vairākus uzņēmumus
EPROM ražošanas uzņēmumi, tostarp Atmel, par iespējamu patentu pārkāpšanu,
bet galu galā izdevās vienoties par licenču apmaiņu. Un beigās -
Galu galā Atmel saņēma licenci klasisko mikrokontrolleru ražošanai.
ler 8051, kuru Intel jau tolaik pamazām attālinājās no atbalsta, koncentrējās
datoru procesoru uzlabošana.

P

INFORMĀCIJAS

Atgādināsim, ka EEPROM atšķiras no zibatmiņas ar to, ka pirmā atļauj
atsevišķa piekļuve jebkurai patvaļīgai šūnai, bet otrajai - tikai veseliem blokiem. Pēc-
šim EEPROM ir mazāks apjoms (tipisks specializēto mikro
EEPROM shēmas - no kilobitu vienībām līdz megabitu vienībām) un šobrīd dārgākas
to galvenokārt izmanto datu glabāšanai, tostarp kā daļu no mikrokontrolleriem
Ļerovs. Zibatmiņa ir vienkāršāka un lētāka, kā arī nodrošina ievērojamu ātruma pieaugumu.
izaugsme ar lielu informācijas apjomu, īpaši ar straumēšanas lasīšanu/rakstīšanu,
tipisks multivides ierīcēm (piemēram, digitālajām kamerām vai MP3 atskaņotājiem). Iekļauts
Mikrokontrolleru zibatmiņa tiek izmantota programmu glabāšanai. Dažas detaļas
Papildinformāciju par dažādiem atmiņas veidiem un to darbību skatiet 11. nodaļa.

Tā Atmel atradās "ievilkts" mikrokontrolleru ražotāju skaitā, kurā
rums ļoti ātri atradās pirmajās pozīcijās: ražošana sākās 1993. gadā
nozarē pirmais MCU AT89C51 ar iebūvētu zibatmiņu. Tas nozīmē
sākās revolūcija visā inženiertehniskajā praksē, jo esošā
Iepriekš MK bija vai nu vienreiz programmējama OTP atmiņa, vai

Ievads

Mazgājams ar UV starojumu, kura ražošana ir daudz dārgāka un ar to strādājot noved pie
rada lielu izstrādātāja laika zudumu. UV pārrakstīšanas ciklu skaits
PROM nepārsniedz vairākus desmitus, un tieša dienasgaisma krīt
šāds kristāls var novest pie informācijas dzēšanas. Tāpēc pat mazs
ry ierīces bija jāražo galvenokārt izmantojot
Mēs ēdam OTP ROM, kas ir daudz riskantāk: mainiet kaut mazākā gadījumā
kļūdas ierakstītajā programmā vairs nebija iespējamas. Zibatmiņas rašanās no
mainīja visu "ainavu" šajā jomā: tas bija tā ieviešanas rezultātā, ka tērauds
iespējamas tādas lietas kā programmatūras atjaunināšana datora BIOS vai "atkārtoti
risināšana" vadības programmas plaša patēriņa elektroniskajām ierīcēm.
1995. gadā divi studenti no Norvēģijas Zinātnes un tehnoloģijas universitātes Tron-
Heime, Alfs Bogens un Vegards Vollens nāca klajā ar ideju par 8 bitu RISC kodolu, kas
kas tika ierosināts Atmel vadībai. Izstrādātāju vārdi ir iekļauti mākslas nosaukumā.
AVR arhitektūras: Alf + Vergard + RISC. Man tā ideja iepatikās, ka 1996.g
Atmel pētniecības centrs tika dibināts Tronheimā un jau tā beigās
Pirmais eksperimentālais jaunās AVR sērijas mikrokontrolleris sauc
AT90S1200. 1997. gada otrajā pusē Atmel Corporation sāka sērijveida darbību
AVR saimes ražošana.

Kāpēc AVR?

AVR kontrolieriem "no dzimšanas" ir divas funkcijas, kas tos atšķir
ģimene no pārējās MK. Pirmkārt, AVR instrukciju kopa un galvenā arhitektūra
tika izstrādāti kopā ar uzņēmumu, kas izstrādā pro-valodu kompilatorus
augsta līmeņa programmēšanas IAR sistēmas. Rezultātā tas kļuva iespējams
rakstīt AVR programmas C valodā, nezaudējot lielu veiktspēju
salīdzinot ar programmām, kas rakstītas montāžas valodā. Sīkāka informācija par šo
mēs to apspriedīsim 5. nodaļa.
Otrkārt, viena no būtiskajām AVR priekšrocībām bija konveijera izmantošana
ra. Rezultātā nav AVR iekārtu cikla koncepcijas: lielākā daļa
komandas tiek izpildītas vienā pulksteņa ciklā. Salīdzinājumam mēs atzīmējam, ka tie, kas izmanto
PIC saimes MK ir ļoti populāri, tie izpilda komandu 4 pulksteņa ciklos un klasē
sical 8051 - parasti 12 ciklos (lai gan ir arī moderni modeļi X 51 ar ma-
autobusu cikls vienā ciklā).
Tiesa, tajā pašā laikā mums nācās nedaudz upurēt komandu sistēmas vienkāršību,
īpaši pamanāms salīdzinājumā ar x 51, kur, piemēram, jebkuras pārsūtīšanas operācijas
dati kontroliera iekšienē neatkarīgi no adresācijas metodes tiek izpildīti vienādi
valstsvienībai

dažādos variantos, savukārt AVR gandrīz par

Katrai metodei ir sava komanda, un dažreiz ar ierobežotu darbības jomu.
viya. Darbības ar bitiem jomā ir dažas grūtības. Tomēr tas tā nav
rada ievērojamas grūtības, apgūstot AVR montētāju: gluži pretēji, tekstus
programmas ir īsākas un vairāk atgādina programmu augstā valodā
līmenī. Jāņem vērā arī tas, ka no kopējā komandu skaita no 90 līdz 130 atkarībā no
atkarībā no modeļa tikai 50–60 ir unikāli, pārējie ir savstarpēji aizstājami.

Mikrokontrolleri, to izcelsme un pielietojums

Un visbeidzot, šis trūkums tiek pilnībā novērsts, izmantojot C valodu,
faktiski izlīdzinot dažādas arhitektūras pro-
programmēšana
AVR arhitektūras milzīga priekšrocība ir 32 darbības reģistru klātbūtne,
nav pilnīgi vienāds, bet ļauj dažos gadījumos nepievērsties
RAM un neizmantot steku (kas būtībā nav iespējams tajā pašā
ģimene X 51), turklāt zemākos AVR modeļos steks parasti nav pieejams
programmētājs Tāpēc AVR montāžas programmu struktūra kļuva aizdomīga.
ļoti līdzinās augsta līmeņa valodu programmām, kurās darbojas paziņojumi
nevis ar atmiņas šūnām un reģistriem, bet ar abstraktiem mainīgajiem un konstantēm.
Vēl viena AVR iezīme no shēmas viedokļa ir tā, ka visas tapas ir ievietotas
tie var būt trīs stāvokļos (ieeja - atspējota - izeja) un elektriski
slēpes ir CMOS struktūras (t.i., pastāv izvades simetrija
signāli un liela ieejas pretestība). Kopumā tas ir nozīmīgi
ērtāk nekā ostas X 51 (bistabils un saderīgs ar TTL) un iesaka labāk
trokšņu noturība (vismaz no traucējumiem uz zemes kopnes).
Apkopojot viedokļus no dažādiem avotiem un balstoties uz savu pieredzi,
autors nonāca aptuveni pie šāda trīs visvairāk pielietojuma jomu sadalījuma
kopīgas kontrolieru ģimenes.

Klasiskās arhitektūras kontrolieri X 51 (pirmās ģimenes mikroshēmas
8051 tika izlaistas 80. gadu sākumā) ir vislabākie vispārējiem
pētot priekšmetu. Ņemiet vērā, ka papildus Atmel X 51 saderīgs produkts jūs-
sāk darboties vēl aptuveni ducis uzņēmumu, tostarp tādi milži kā Philips un
Siemens, ir arī vietējie analogi (sērija 1816, 1830 utt.), kas padara šo
arhitektūra ir universālākā.

AVR saime ir ieteicama iesācējiem elektronikas speciālistiem,
ierīces vienkāršības un daudzpusības dēļ struktūras nepārtrauktība priekš
dažāda veida kontrolieri, ķēžu projektēšanas un programmēšanas vienkāršība
(šajā gadījumā “programmēšana” nozīmē programmas ierakstīšanas procesu
grams uz mikroshēmu).

Mikročipu PIC ir ideāli piemēroti vienkāršu ierīču projektēšanai.
bariem, īpaši tiem, kas paredzēti replikācijai.

Šī klasifikācija lielā mērā ir subjektīva, un autors neapstrīdēs citus
viedoklis: dažādas MK ģimenes pakāpeniski tuvojas parametros,
kļūst pilnīgi aizvietojami un, tāpat kā visās mūsdienu elektriskajās
Niks, vienas vai otras ģimenes izvēlei bieži ir “reliģiozs” raksturs.
Turklāt trīs minētās MK ģimenes ir tikai visizplatītākās
starp universālajiem kontrolieriem, bet tālu no populārākajiem kopumā. Ģenerālis
tiek lēsts, ka esošo mikrokontrolleru ģimeņu skaits ir apm.
Patiesībā vairāk nekā 100, un katru gadu parādās arvien vairāk. Katrs no
šajās ģimenēs var būt desmitiem dažādu modeļu. Tajā pašā laikā pirmā vieta
8 bitu MK ražotāju vidū tradicionāli pieder Motorola,
galvenokārt mobilo ierīču kontrolieru dēļ. Mikroshēmu uzņēmums

Ievads

Ar savu PIC saimi tas ieņem trešo vietu, bet Atmel ir tikai sestajā vietā. kurā,
Papildus 8 bitu AVR MCU, Atmel ražo vēl vairākus MCU veidus,
kurā iekļauti ne tikai minētie 8051 pēcteči, bet arī ARM-
procesori un specializēti mikrokontrolleri dažādām lietojumprogrammām. tomēr
šī formālā statistika vēl neko neizsaka - piemēram, starp MK ar iebūvētu
Atmel zibatmiņai jau pieder trešā daļa pasaules tirgus.
Laikā no 2002. līdz 2003. gadam pasaulē katru gadu tika saražoti 3,2 miljardi mikrokonteineru vienību.
trolleri. Ņemiet vērā, ka datoru procesoru ražošanas apjomu var lēst
200 miljoni vienību gadā, t.i., tas ir tikai aptuveni 6% no tirgus (finansiālā izteiksmē)
Kopumā gan attiecība ir cita, jo parastā MK tipiskā cena
ir 2–5 dolāri, un datora procesors ir vismaz par vienu pakāpi augstāks, un
dažreiz sasniedz simtiem dolāru). Tāpēc nebūtu pārspīlēti teikt
ka elektronikas inženiera specialitāte, kas specializējas mikro-
kontrolieri, ir ne mazāk svarīgs un mazs kā datorprogrammētājs -
sistēmu inženieris vai pielāgotu lietojumprogrammu veidotājs.

Šī grāmata ir adresēta lasītājam, kurš vēlas izpētīt struktūru un ķēdes dizainu
AVR MK īpašās funkcijas un iemācieties pareizi izmantot to galvenās funkcijas
iespējas. Tāpēc autors aprobežojas ar montāžas valodu (lasīt vairāk jautājumu
Apskatīsim programmēšanas vides izvēli 5. nodaļa). Uzsvars grāmatā ir
sniegt lasītājam praktiskus padomus, aprakstīt gatavus algoritmus priekš
tipiski uzdevumi, kas izstrādātājiem rodas, ieviešot noteiktus
MK funkcijas. Autore kopā ar lasītājiem detalizēti izskata vairākus jautājumus, kas
ry parasti pārsniedz MK programmēšanas rokasgrāmatu darbības jomu: strādājiet ar pēc-
praktiskie interfeisi, aritmētiskās darbības, saskarne ar datoru, praktiski
enerģijas taupīšanas režīmu tehniskā īstenošana.
Tajā pašā laikā autors neplānoja detalizēti analizēt absolūti visu iespējamo -
sti MK AVR: ar vairākiem sējumiem tam nepietiktu. Mēs esam spiesti iet apkārt
Daudzsološas ir tādas problēmas kā atkļūdošana un programmēšana, izmantojot JTAG saskarni
jūs, kas atklājat kontrolieru pašprogrammēšanu, tikai nejauši
Mēs ar nepacietību gaidām interesantāko skaņas sintēzes problēmu un citus PWM režīmu lietojumus
taimeri.
Šajā grāmatā lielākā daļa piemēru ir vērsti uz minoritātes lietošanu
(ar atmiņas ietilpību 8 MB) Mega apakšsaimes modeļiem, jo ​​tie ir visvairāk
Daudzpusīgāks un piemērots plašam uzdevumu klāstam bez liekas sarežģītības
shēma. Vienkāršākos gadījumos autore koncentrējās uz universālāko
no jaunākajiem ATtiny2313 modeļiem (par tā saderību ar “klasisko” versiju
AT90S2313 cm. sadaļā Nodaļa "Counterprogramma, kas izmanto pārtraukumus".
tu 5
). Lielāko daļu sniegto piemēru var veikt praktiski bez izmaiņām.
pielāgots citiem AVR modeļiem ar atbilstošu konfigurāciju
cijas.

DAĻA

Ierīces vispārīgie principi

un Atmel AVR darbība

1. nodaļa. Atmel AVR mikrokontrolleru apskats

2. nodaļa. Vispārējā struktūra, atmiņas organizācija,

pulkstenis, atiestatīšana

3. nodaļa. Ievads perifērijas ierīcēs

4. nodaļa. Pārtraukumi un enerģijas taupīšanas režīmi

C A P T E R

Mikrokontrollera apskats
Atmel AVR

Atmel AVR ir daudzpusīgu 8 bitu mikrokon-
trolleri, kuru pamatā ir kopīgs kodols ar dažādām iebūvētām perifērijas ierīcēm
bari. AVR MK iespējas ļauj atrisināt daudzas tipiskas problēmas,
radās pirms radioelektronisko iekārtu izstrādātājiem.
Atmel AVR mikrokontrolleru īpašības.

Veiktspēja ir aptuveni 1 MIPS/MHz. MIPS (miljoniem instrukciju uz
Otrkārt, miljons komandu sekundē) ir viena no vecākajām un daudzējādā ziņā
mal raksturīga procesora veiktspējai, jo instrukciju kopas
dažādiem procesoriem ir atšķirīgi un attiecīgi vienāds numurs
norādījumi par dažādām sistēmām sniegs dažādus noderīgus rezultātus. tomēr
vienkāršām 8 bitu skaitļošanas sistēmām, kas nesatur instrukcijas, darbojas
nodarbojas ar lieliem skaitļiem, peldošā komata skaitļiem un masīviem
datiem, tas ir labs rādītājs, lai salīdzinātu to veiktspēju. Aprēķināt
AVR veiktspējas kodols vairākiem uzdevumiem pārsniedz 16 reizes
in-line 80286 procesors.

Uzlabota RISC arhitektūra. RISC (samazināta) koncepcija
Priekšroka tiek dota Instrukciju kopa Computing, aprēķini ar samazinātu instrukciju kopu).
nepieciešama komandu komplekta klātbūtne, kas sastāv no vismaz kompakta un ātra
instrukciju izpilde; tajā pašā laikā tādas apgrūtinošākas operācijas kā
peldošā komata aprēķini vai vairāku bitu aritmētika
reālos skaitļos tas it kā jāīsteno apakšprogrammas līmenī. Koncepcija
RISC vienkāršo pamata dizainu (parastā AVR kodolā ir tikai 32 tūkstoši vienību).
tranzistori, pretstatā desmitiem miljonu personālo datoru procesoru) un paātrināti
demonstrē savu darbību: tipiska instrukcija tiek izpildīta vienā pulksteņa ciklā (izņemot komandas
programmu atzarošana, piekļuve atmiņai un daži citi, kas darbojas ar
gari dati). AVR ir vienkārša divpakāpju konfigurācija.
Weir, kad komanda tiek izpildīta vienā pulksteņa ciklā, kamēr tiek ienests nākamais.
Atšķirībā no Intel arhitektūrām, “klasiskajam” AVR nav aparatūras reizinātāja
dalīšana/dalīšana, tomēr Mega apakšsaimē ir reizināšanas darbības.

Atsevišķas komandu un datu atmiņas kopnes. AVR (tāpat kā vairums citu
mikrokontrolleri) ir tā sauktais. Hārvardas arhitektūra, kur atmiņas zonas