Kazalo:

AVR Assembler Tutorial 9: 7 Koraki
AVR Assembler Tutorial 9: 7 Koraki

Video: AVR Assembler Tutorial 9: 7 Koraki

Video: AVR Assembler Tutorial 9: 7 Koraki
Video: AVR Ассемблер. Урок 9. USART. AVR Assembler. Lesson 9. USART. 2024, Julij
Anonim
Vadnica za sestavljalec AVR 9
Vadnica za sestavljalec AVR 9

Dobrodošli v vadnici 9.

Danes bomo pokazali, kako upravljati 7-segmentni zaslon in 4-mestni zaslon z našo kodo montažnega jezika ATmega328P in AVR. Pri tem bomo morali razmisliti, kako uporabiti sklad za zmanjšanje števila registrov, ki jih moramo povezati. Dodali bomo nekaj kondenzatorjev (nizkoprepustnih filtrov), da bi poskušali zmanjšati hrup na naši tipkovnici. Iz nekaj tranzistorjev bomo ustvarili napetostni ojačevalnik, tako da bo naše prekinitveno stikalo INT0 delovalo bolje za gumbe z nižjo napetostjo v spodnji vrstici tipkovnice. In malo bomo udarjali z glavo ob steno, da bi dobili ustrezne upore, da bo stvar delovala pravilno.

Uporabljali bomo tipkovnico iz vadnice 7

Če želite narediti to vadnico, boste poleg standardnih stvari potrebovali:

  1. 7-segmentni zaslon

    www.sparkfun.com/products/8546

  2. 4-mestni zaslon

    www.sparkfun.com/products/11407

  3. Gumb

    www.sparkfun.com/products/97

  4. Podatkovni listi za prikaz, ki jih je mogoče prenesti z njihovih strani, navedenih zgoraj.
  5. Keramični kondenzator 68 pf, nekaj 104 kondenzatorjev, kup uporov, dva tranzistorja 2N3904 NPN.

Tukaj je povezava do celotne zbirke mojih vadnic za zbiranje AVR:

1. korak: Ožičenje 7-segmentnega zaslona

Ožičenje 7-segmentnega zaslona
Ožičenje 7-segmentnega zaslona
Ožičenje 7-segmentnega zaslona
Ožičenje 7-segmentnega zaslona
Ožičenje 7-segmentnega zaslona
Ožičenje 7-segmentnega zaslona

Za tipkovnico za nadzor 7-segmentnega zaslona bomo uporabili isto kodo, ki smo jo uporabili v vadnici 7. Zato boste morali narediti kopijo tega in mi ga bomo spremenili.

Segmente bomo preslikali na nožice našega mikrokrmilnika na naslednji način:

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

kjer so črke segmentov prikazane na sliki skupaj z izpisom, ki ustreza skupnim 5V, in vsakim od segmentov LED, vključno z decimalno vejico (dp) v spodnjem desnem kotu zaslona. Razlog za to je, da lahko celotno številko vnesemo v en sam register in izpišemo v vrata B in D, da osvetlimo segmente. Kot lahko vidite, so bitovi zaporedno oštevilčeni od 0 do 7, zato se preslikajo v pravilne zatiče, ne da bi morali nastaviti in počistiti posamezne bite.

Kot lahko vidite po kodi, ki smo jo priložili v naslednjem koraku, smo rutino prikaza premaknili v makro in sprostili zatiče SDA in SCL za prihodnjo uporabo v naslednji vadnici.

Moram dodati, da morate med skupno anodo zaslona in 5V vodilo postaviti upor. Kot običajno sem izbral 330 ohmski upor, če pa želite, lahko izračunate najmanjši upor, ki je potreben, da z zaslona izvlečete največjo svetlost, ne da bi jo ocvrtili. Evo, kako to storiti:

Najprej poglejte podatkovni list in opazite, da na prvi strani prikazuje različne lastnosti zaslona. Pomembni količini sta "naprej tok" (I_f = 20 mA) in "naprej napetost" (V_f = 2,2 V). Ti povedo, da želite, da bo padec napetosti na zaslonu, če je tok enak toku naprej. To je največji tok, ki ga zaslon porabi brez cvrtja. Posledično je to tudi največja svetlost, ki jo lahko dosežete iz segmentov.

Zato uporabimo Ohmov zakon in pravilo Circhoffove zanke, da ugotovimo, kakšen najmanjši upor bi morali postaviti skupaj z zaslonom, da bi dobili največjo svetlost. Kirchoffovo pravilo pravi, da je vsota sprememb napetosti okoli zaprte zanke v vezju enaka nič, Ohmov zakon pa pravi, da je padec napetosti na uporu upora R: V = I R, kjer je I tok, ki teče skozi upor.

Torej glede na izvorno napetost V in okoli našega vezja imamo:

V - V_f - I R = 0

kar pomeni (V - V_f)/I = R. Torej je upor, potreben za največjo svetlost (in verjetno cvrtje segmentov), naslednji:

R = (V - V_f)/I_f = (5,0 V - 2,2 V)/0,02 A = 140 ohmov

Torej, če želite, bi lahko brez skrbi z veseljem porabili 150 ohmov. Vendar mislim, da je 140 ohmov preveč svetlo za moje želje, zato uporabljam 330 ohmov (kar je nekakšna moja osebna odpornost na zlato zlato za LED)

2. korak: Koda montaže in video

Priložil sem kodo montaže in video, ki prikazuje delovanje tipkovnice z zaslonom. Kot lahko vidite, smo tipko za ponovno izbiranje preprosto preslikali v "r", tipko flash v "F", zvezdico v "A" in znak razpršitve v "H". Te lahko preslikate v različne operacije, kot so backspace, enter in kaj ne, če želite še naprej uporabljati tipkovnico za tipkanje številk na LCD-zaslonih ali 4-mestnih zaslonih. Tokrat ne bom šel skozi kodo po vrstici, saj je zelo podobna tistemu, kar smo že počeli v prejšnjih vajah. Razlike so predvsem le iste stvari, ki jih že znamo narediti, kot so prekinitve in iskalne tabele. Preglejte kodo in si oglejte nove stvari, ki smo jih dodali, in stvari, ki smo jih spremenili, in od tam ugotovite. V naslednji vadnici se bomo vrnili k analizi po vrsticah, ko bomo predstavili nove vidike kodiranja jezika sestavljanja na mikrokontrolerjih AVR.

Poglejmo zdaj 4-mestni zaslon.

3. korak: Ožičenje 4-mestnega zaslona

Ožičenje 4-mestnega zaslona
Ožičenje 4-mestnega zaslona
Ožičenje 4-mestnega zaslona
Ožičenje 4-mestnega zaslona

Glede na podatkovni list ima 4-mestni zaslon prednji tok 60 mA in napetost naprej 2,2 volta. Torej, po istem izračunu kot prej, bi lahko uporabil 47 ohmski upor, če bi hotel. Namesto tega bom uporabil … hrm.. naj vidim … kaj pa 330 ohmov.

Način ožičenja 4-mestnega zaslona je, da obstajajo 4 anode, ena za vsako od števk, drugi zatiči pa nadzorujejo, kateri segment se vklopi v vsaki. Prikažete lahko 4 števke hkrati, ker so multipleksirane. Z drugimi besedami, tako kot pri kocki, preprosto izmenično preklapljamo moč po vsaki anodi in utripala bo ena za drugo. To bo storil tako hitro, da naše oči ne bodo videle utripajoče in videti bo, kot da so vklopljene vse štiri številke. Zagotovo pa bomo kodirali tako, da nastavimo vse štiri števke, nato anode krožimo, namesto da nastavimo, premaknemo, nastavimo, premaknemo itd. Tako lahko dobimo natančen čas med osvetlitvijo vsake številke.

Zaenkrat preizkusimo, ali vsi segmenti delujejo.

Upor 330 ohmov postavite med pozitivno vodilo vaše plošče in prvo anodo na zaslonu. Podatkovni list nam pove, da so nožice oštevilčene od 1 do 16 v nasprotni smeri urinega kazalca, začenši spodaj levo (ko običajno gledate zaslon.. z decimalnimi točkami vzdolž dna) in navaja, da so anode številke 6, 8, 9 in 12.

Tako povežemo zatič 6 na 5V, nato pa vzamemo negativni kabel iz tirnice GND in ga vtaknemo v vse ostale zatiče in vidimo, da vsi segmenti zasvetijo na številki, ki ji ustreza (kar je pravzaprav druga številka od pravica). Poskrbite, da bodo zasvetili vseh 7 segmentov in decimalna vejica.

Sedaj vtaknite žico GND v enega od zatičev, da osvetli enega od segmentov, tokrat pa premaknite upor na ostale 3 anode in preverite, da isti segment sveti v vsaki drugi številki.

Je kaj nenavadnega?

Izkazalo se je, da je izpis na podatkovnem listu napačen. To je zato, ker gre za podatkovni list in izpis za 12-polni, 4-mestni zaslon. Tj. eno brez dvopičja ali zgornje decimalne vejice. Zaslon, ki sem ga dobil ob naročilu, je 16-polni, 4-mestni. Dejansko so na mojem mestu segmentne anode na zatičih 1, 2, 6 in 8. Anoda debelega črevesa je pin 4 (katodni pin 12), zgornja dp anoda pa pin 10 (katoda je pin 9)

Vaja 1: S svojim uporom in ozemljitveno žico preslikajte, kateri pin ustreza kateremu segmentu in decimalni vejici na zaslonu, tako da se pri kodiranju prižgejo pravilni segmenti.

Način, na katerega želimo kodirati segmentni zemljevid, je popolnoma enak kot pri enomestnem 7-segmentnem zaslonu zgoraj-v kodi nam ni treba ničesar spreminjati, edino, kar spremenimo, je, kako so žice povezane na krovu. Preprosto priključite ustrezen priključek vrat na mikrokrmilniku na ustrezen pin na 4-mestnem zaslonu, tako da na primer PB0 še vedno preide na pin, ki ustreza segmentu a, PB1 gre na segment B itd.

Edina razlika je v tem, da zdaj potrebujemo 4 dodatne zatiče za anode, saj ne moremo več preprosto iti na 5V tirnico. Mikrokontroler se moramo odločiti, katera številka dobi sok.

Zato bomo za nadzor anod štirih mest uporabili PC1, PC2, PC3 in PD4.

Lahko bi šli naprej in priklopili žice. (ne pozabite na 330 ohmske upore na anodnih žicah!)

4. korak: Kodiranje 4-mestnega zaslona

Kodiranje 4-mestnega zaslona
Kodiranje 4-mestnega zaslona

Pomislimo, kako želimo kodirati ta zaslon.

Želeli bi, da uporabnik pritisne tipke na tipkovnici in da se številke na zaslonu prikažejo, ko pritisnejo vsak gumb. Torej, če pritisnem 1, ki mu sledi 2, se bo na zaslonu prikazalo kot 12. Tudi to vrednost, 12, bi rad shranil za notranjo uporabo, vendar bomo k temu prišli nekoliko kasneje. Za zdaj želim napisati nov makro, ki vzame vaše pritiske tipk in jih prikaže. Ker pa imamo samo 4 števke, se želim prepričati, da vam omogoča samo vnos štirih številk.

Druga težava je, da način delovanja multipleksiranega 4-mestnega zaslona deluje s kroženjem anod, tako da je vsaka številka vklopljena le delček sekunde, preden prikaže naslednjo, nato naslednjo in nazadnje spet na prvo itd. potrebujem način za to kodiranje.

Prav tako želimo, da "kurzor" premakne v desno presledek, ko vnesemo naslednjo številko. Če hočem na primer vnesti 1234, potem ko vnesem 1, se kazalec premakne, tako da se naslednja številka, ki jo vnesem, prikaže na naslednjem 7-segmentnem zaslonu itd. Medtem ko se to dogaja, si še vedno želim ogledati, kaj sem vnesel, zato mora še vedno krožiti po številkah in jih prikazovati.

Sliši se kot velika naloga?

Stvari so v resnici še slabše. Potrebujemo še 4 registre splošnega namena, ki jih lahko uporabimo za shranjevanje trenutnih vrednosti 4 števk, ki jih želimo prikazati (če jih želimo prehoditi, jih moramo nekje hraniti), težava pri tem pa je, da imamo uporabljal registre za splošne namene kot nor in če ne bomo pozorni, nam ne bo ostalo. Zato je verjetno dobra ideja, da se tega vprašanja lotite prej in slej ter vam pokažemo, kako z uporabo sklada sprostiti registre.

Zato začnimo z nekoliko poenostavitvijo stvari, uporabimo sklad in sprostimo nekaj registrov, nato pa bomo poskušali izvesti nalogo branja in prikaza naših številk na 4-mestnem zaslonu.

5. korak: Push 'n Pop

Push 'n Pop
Push 'n Pop

Na voljo imamo le nekaj "registrov splošnega namena" in ko se bodo uporabili, jih ni več. Zato je dobra programska praksa, da jih uporabljate le za nekaj spremenljivk, ki se uporabljajo kot začasna shramba, iz katere potrebujete branje, pisanje v vrata in SRAM, ali pa tiste, ki jih boste potrebovali v podprogramih povsod in zato poimenuj jih. Torej, kar sem storil, zdaj, ko smo se inicializirali in se učimo uporabljati Stack, je, da gremo skozi kodo in poiščemo poimenovane registre splošnega namena, ki se uporabljajo samo znotraj ene podprograma ali prekinejo in nikjer drugje v kodi ter zamenjajo jih z enim od naših registrov temp in push and pop v sklad. Pravzaprav, če pogledate kodo, napisano za manjše mikrokrmilnike, ali če se vrnete v preteklost, ko so bili vsi čipi manjši, boste videli le nekaj registrov splošnega namena, ki jih je bilo treba uporabiti za vse, zato ne bi mogli samo shranite vrednost in jo pustite pri miru, saj ste zagotovo potrebovali ta register za druge stvari. Tako boste v kodi povsod videli pushin 'in poppin'. Mogoče bi moral naše začasne registre splošne namene AX in BX poimenovati kot spoštljivo pohvalo za tiste pretekle dni.

Primer bo pomagal, da bo to bolj jasno.

Upoštevajte, da v našem analogno -digitalnem pretvorbenem zaključku prekinitve ADC_int uporabljamo register splošnega namena, ki smo ga poimenovali buttonH, s katerim smo naložili vrednost ADCH in ga primerjali z našo iskalno tabelo pretvorb analognih pritiskov na gumbe. Ta register buttonH uporabljamo samo v podprogramu ADC_int in nikjer drugje. Zato bomo namesto tega uporabili spremenljivko temp2, ki jo uporabljamo kot začasno spremenljivko, ki jo lahko uporabimo v kateri koli podprogramu, njena vrednost pa ne bo vplivala na nič zunaj te podprograma (tj. Vrednost, ki jo damo v ADC_int, ne bo uporabljena nikjer drugače).

Drug primer je naš makro zakasnitve. Imamo register, ki smo ga poimenovali "milisekunde" in vsebuje naš čas zamika v milisekundah. V tem primeru gre za makro in spomnimo se, da način delovanja makra je, da sestavljalec postavi celotno kodo makra na mesto programa, kjer je poklican. V tem primeru bi se radi znebili spremenljivke "milisekunde" in jo nadomestili z eno od naših začasnih spremenljivk. V tem primeru bom naredil nekoliko drugače, da vam pokažem, kako tudi če bo vrednost spremenljivke potrebna drugje, jo lahko še vedno uporabimo z uporabo sklada. Namesto v milisekundah uporabljamo "temp" in da ne bi zmotili drugih stvari, ki uporabljajo tudi vrednost temp, preprosto zaženemo makro "zakasnitev" tako, da "potisnemo" temp na sklad, nato ga uporabimo namesto milisekund, nato pa na koncu makra "skočimo" njegovo prejšnjo vrednost nazaj iz sklada.

Neto rezultat je, da smo si temp in temp2 "izposodili" za začasno uporabo, nato pa jih ob koncu vrnili na prejšnje vrednosti.

Tu je rutina prekinitve ADC_int po tej spremembi:

ADC_int:

potisna temperatura; shrani temp, saj ga tukaj spremenimo push temp2; shrani temp2 lds temp2, ADCH; obremenitev tipke ldi ZH, visoka (2*številke) ldi ZL, nizka (2*številke) cpi temp2, 0 breq return; če se sprožilci hrupa ne spremenijo 7senumber setkey: lpm temp, Z+; obremenitev iz mize in prirast clc cp temp2, temp; primerjaj pritisk tipke z mizo brlo PC+4; če je ADCH nižji, poskusite znova lpm 7.sember, Z; v nasprotnem primeru naložite tabelo vrednosti ključavnice inc števko; povečanje številske številke rjmp vrnitev; in vrnitev adiw ZH: ZL, 1; prirast Z rjmp setkey; in pojdi nazaj na vrh return: pop temp2; obnoviti pop2 temp temp2; obnoviti temp reti

Upoštevajte, da sklad deluje tako, da je prvi vklop zadnji izklop. Tako kot kup papirjev. Vidite, da v prvih dveh vrsticah potisnemo vrednost temp na sklad, nato potisnemo temp2 na sklad, nato jih v podprogramu uporabimo za druge stvari in jih na koncu spet obnovimo tako, da najprej se izklopi temp2 off (ker je bil zadnji pritisnjen nanj, je na vrhu sklada in bo prvi, ki ga izklopimo), nato pa popping temp.

Tako bomo odslej vedno uporabljali to metodo. Edini čas, ko bomo dejansko določili register za kaj drugega kot za spremenljivko temp, je, ko ga bomo potrebovali povsod. Na primer register, imenovan "overflows", je tisti, ki ga uporabljamo na več različnih mestih v programu, zato bi mu radi dali ime. Seveda bi ga lahko še vedno uporabljali tako, kot smo to storili s temp in temp2, saj bi po tem, ko smo končali, obnovili njegovo vrednost. Toda to bi preveč zaspalo stvari. Imenovani so z razlogom in za to delo smo že določili temp in temp2.

Korak 6: Nizkoprepustni filtri in napetostni ojačevalnik

Nizkoprepustni filtri in napetostni ojačevalnik
Nizkoprepustni filtri in napetostni ojačevalnik
Nizkoprepustni filtri in napetostni ojačevalnik
Nizkoprepustni filtri in napetostni ojačevalnik

Da bi nekoliko odpravili hrup in izboljšali delovanje tipkovnice, želimo dodati nekaj nizkoprepustnih filtrov. Ti filtrirajo visokofrekvenčni šum in omogočajo prehod nizkofrekvenčnega signala. V bistvu je to preprosto dodati kondenzator 68 pf med analogni vhod in ozemljitev ter 0,1 mikrofarad (tj. 104) kondenzator med prekinitvijo PD4 (INT0) in maso. Če se s tem igrate, medtem ko pritiskate gumbe na tipkovnici, boste lahko videli, kaj počnejo.

Nato želimo narediti napetostni ojačevalnik. Izkazalo se je, da spodnja vrstica tipk na tipkovnici (pa tudi tipka za ponovno klicanje) oddaja prenizko napetost, da bi izklopila prekinitev INT0. Analogna vrata so dovolj občutljiva, da berejo nizke napetosti s teh tipk, vendar naš prekinitveni pin ne dobi dovolj dobrega naraščajočega roba, ki bi ga lahko prekinil, ko pritisnemo te tipke. Zato bi radi na kakšen način zagotovili, da lep naraščajoči rob napetosti zadene PD4, vendar enaka nizka napetost zadene ADC0. To je precej velika naloga, saj oba signala prihajata iz iste izhodne žice naše tipkovnice. Za to obstaja več sofisticiranih načinov, vendar naše tipkovnice po tej vadnici ne bomo več uporabljali, zato združimo metodo, ki deluje (komaj).

Najprej morate priključiti zunanji gumb, da zamenjate prekinitev INT0 in nadzorujete zaslon tako, da držite tipko na tipkovnici in kliknete gumb. To ima manj težav s tipkovnico in vam bo omogočilo, da ste prepričani, da so vaše napetosti pravilno nastavljene na tabeli za iskanje tipkovnice. Ko veste, da je tipkovnica pravilno priključena, se znebite gumba in prekinitev INT0 postavite nazaj. Na ta način upravljate tipkovnico z nekaterimi resnimi težavami s hrupom in napetostjo, zato je dobro vedeti, da vse deluje, tako da se prihodnje težave lahko ločijo od tipke INT0.

Ko priključite tipkovnico in napetostni ojačevalnik, je zelo verjetno, da iste vrednosti upora, ki sem jih uporabil, ne bodo delovale. Zato boste morali nekaj eksperimentirati, da boste dobili vrednote, ki vam ustrezajo.

Če pogledate diagram, ki sem ga priložil temu koraku, boste videli, kako bo deloval napetostni ojačevalnik. Uporabljamo nekaj uporov in dva tranzistorja. Način delovanja tranzistorjev (glejte podatkovne liste!) Je, da morate vnesti minimalno napetost na osnovni zatič na tranzistorju (srednji zatič), ki ga bo nasičil in omogočil pretok toka med kolektorskim zatičem in oddajnikom pin. V primeru tranzistorja 2N3904, ki ga uporabljamo tukaj, je napetost 0,65 V. Zdaj vzamemo to napetost iz našega izhoda s tipkovnice in tega izhoda ne želimo spremeniti, zato bomo med izhodom iz tipkovnice in bazo prvega tranzistorja (uporabil sem 1Mohm) postavil velik upor. V diagramu sem to označil kot R_1. Nato želimo nastaviti napetostni delilnik, tako da bo osnova tranzistorja "skoraj" že pri 0,65 voltov in le majhen, malo več, ga bo potisnil na vrh in ga nasičil. Ta majhen majhen delček bo prišel iz izhoda tipkovnice, ko pritisnemo gumb. Ker spodnje tipke na tipkovnici oddajajo le majhno napetost, moramo biti že zelo blizu nasičenosti, da bodo dovolj. Upori delilnika napetosti so na diagramu označeni z R_a in R_b. Uporabil sem R_a = 1Mohm in R_b = 560Kohm, vendar je skoraj gotovo, da se boste morali poigrati s temi številkami, da bo to primerno za vašo nastavitev. Morda boste želeli imeti v bližini steno, s katero bi si udarili z glavo, in dva ali tri kozarce viskija pri roki (priporočam Laphroaig - drago, vendar je vredno, če imate radi dim. Če stvari postanejo res nore, potem si priskrbite vrč BV in se namestite za noč)

Zdaj pa poglejmo, kako nam bodo tranzistorji prinesli lepo naraščajočo prednost pri vstopu v tipko INT0 in ustvarili prekinitev pritiska na tipko. Najprej poglejmo, kaj se zgodi, ko ne pritisnem tipke. V tem primeru je prvi tranzistor (označen s T1 na diagramu) izklopljen. Torej med kolektorjem in oddajnikom ne teče tok. Tako bo osnova drugega tranzistorja (z oznako T2) potegnjena visoko in bo tako nasičila, tako da bo tok tekel med nožicami. To pomeni, da bo oddajnik T2 potegnjen nizko, saj je povezan s kolektorjem, ki je sam povezan z maso. Tako bo izhod, ki gre na naš prekinitveni zatič za pritisk tipke INT0 (PD4), nizek in prekinitve ne bo.

Kaj se zgodi, ko pritisnem tipko? No, potem se osnova T1 dvigne nad 0,65 V (v primeru spodnjih tipk le komaj preseže!), Nato pa bo dovoljeno teči tok, ki bo bazo T2 potegnil na nizko napetost in to bo izklopilo T2. Vidimo pa, da ko je T2 izklopljen, se izhod močno potegne in zato bomo dobili 5V signal, ki bo šel na naš pin INT0, kar bo povzročilo prekinitev.

Bodite pozorni na neto rezultat. Če pritisnemo tipko 1, dobimo 5V, ki gre na PD4, ne da bi bistveno spremenili izhod na ADC0, in kar je še pomembneje, tudi če pritisnemo zvezdico, 0, Hash ali ponovno izbiranje, dobimo tudi 5V signal, ki gre na INT0 in tudi povzroči prekinitev! To je pomembno, ker če bi šli neposredno iz izhoda tipkovnice na pin INT0, te tipke ne ustvarjajo skoraj nobene napetosti in ne bodo dovolj za sprožitev tega prekinitvenega zatiča. Naš napetostni ojačevalnik je rešil to težavo.

7. korak: 4-mestna koda in video

To je vse za vadnico 9! Priložil sem kodo in video, ki prikazuje operacijo.

To bo zadnjič, da bomo uporabili analogno tipkovnico (hvala bogu). Bilo je težko uporabljati, vendar je bilo tudi zelo koristno, da smo se naučili o analogno-digitalni pretvorbi, analognih vratih, prekinitvah, multipleksiranju, filtrih hrupa, napetostnih ojačevalnikih in številnih vidikih montažnega kodiranja od iskalnih tabel do časovnikov/števcev itd. Zato smo se odločili, da ga uporabimo. (poleg tega je zabavno čistiti stvari).

Zdaj bomo ponovno pogledali komunikacijo in dobili 7-segmentne in 4-mestne zaslone, da bodo z našega valja za kocke prebrali naše kocke na enak način, kot smo to storili z našim analizatorjem registrov. Tokrat bomo uporabili dvožični vmesnik in ne naše zlomljene metode Morsejeve kode.

Ko komunikacija deluje in se zvitki prikažejo na zaslonih, lahko končno naredimo prvi kos našega končnega izdelka. Opazili boste, da bo naša koda brez vseh analognih vrat precej krajša in verjetno lažja za branje.

Za tiste, ki ste ambiciozni. Tukaj je "projekt", ki bi ga lahko preizkusili, za katerega zagotovo že imate znanje, če ste do te točke prebrali vse te vaje:

Projekt: Naredite kalkulator! Uporabite naš 4-mestni zaslon in našo tipkovnico ter dodajte zunanji pritisk gumba, ki bo deloval kot tipka "enter". Označite zvezdico na "čas", razpršitev za "deljenje" ponovnega izbiranja na "plus" in bliskavico na "minus" in napišite rutino kalkulatorja, ki deluje kot eden od tistih starih kalkulatorjev HP za "povratno poliranje", ki so jih imeli vsi inženirji v starih časih. Tj. način delovanja je, da vnesete številko in pritisnete "enter". To potisne to številko v sklad, nato vnesete drugo številko in pritisnete "enter", ki drugo številko potisne v sklad. Nazadnje pritisnete eno od operacij, kot so X, /, + ali - in ta operacija bo uporabljena za dve zgornji številki v nizu, prikazala rezultat in rezultat potisnila na sklad, tako da ga lahko znova uporabite, če kot. Če želite na primer dodati 2+3, naredite: 2, "enter", 3, "enter", "+" in na zaslonu se bo nato izpisalo 5. Znate uporabljati sklad, zaslon, tipkovnico in je večina kode ozadja že napisana. Samo dodajte tipko enter in podprograme, potrebne za kalkulator. To je nekoliko bolj zapleteno, kot si morda mislite na prvi pogled, vendar je zabavno in izvedljivo.

Se vidimo naslednjič!

Priporočena: