240
Mikrovezérlők mechatronikai alkalmazásai Dr. Kránicz, Balázs Dr. Halas, János Created by XMLmind XSL-FO Converter.

  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és ars poetica. Ismerkedés

Embed Size (px)

Citation preview

Irodalomjegyzk

Irodalomjegyzk

Mikrovezrlk mechatronikai alkalmazsai

Dr. Krnicz, Balzs

Dr. Halas, Jnos

Mikrovezrlk mechatronikai alkalmazsai

rta Dr. Krnicz, Balzs s Dr. Halas, Jnos

Publication date 2014

Szerzi jog 2014 Pannon Egyetem

A tananyag a TMOP-4.1.2.A/1-11/1-2011-0042 azonost szm Mechatronikai mrnk MSc tananyagfejleszts projekt keretben kszlt. A tananyagfejleszts az Eurpai Uni tmogatsval s az Eurpai Szocilis Alap trsfinanszrozsval valsult meg.

Kzirat lezrva: 2014 februr

Lektorlta: Dr. Hidvgi Timt

A kiadsrt felel a(z): Pannon Egyetem

Felels szerkeszt: Pannon Egyetem

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Tartalom

1. Elsz s ars poetica 0

2. Ismerkeds az assembly programozsi nyelvvel 0

1. Az assembly nyelvrl ltalban 0

2. Memria 0

3. Regiszterek 0

4. Kzvetlen cmzs 0

5. Direkt cmzs 0

6. sszehasonltsok s ugrsok 0

3. Az ADuC 842 s a hallgati ramkr 0

4. Els programunk: villogtassuk a panel LED-jeit! 0

1. Portok s funkciregiszterek 0

2. Egyszer ciklusszervezs 0

3. Szubrutinok 0

4. Ugrs a kdon bell 0

5. rajel, vgrehajtsi id 0

6. Az els alkalmazs kdja 0

5. Csk a LED-eken 0

1. Bitek sorszmozsa 0

2. Logikai s aritmetikai utastsok 0

3. Paramtertads szubrutinnak 0

4. A bitmintk ellltsa aritmetikai mveletekkel 0

6. Csk a LED-eken, tmren 0

1. A Carry bit 0

2. Bitforgats C-n keresztl 0

7. Adatok kiolvassa a kdmemribl 0

1. Az adatmutat 0

2. rtkek nvelse s cskkentse 0

3. A kd-indirekt cmzs 0

4. Adatok elhelyezse a kdban 0

5. Az adatmutat automatikus nvelse 0

8. Felttelek kezelse 0

1. sszeads s kivons 0

2. sszehasonlt s elgazsi utastsok 0

3. Hat varici egy feladatra 0

9. Nyomgombok a panelon 0

1. Gombnyoms detektlsa 0

2. Logikai mveletek bitekkel 0

3. Elgazsok bitek alapjn 0

4. Logikai mveletek bjtokkal 0

5. Bitek mdostsa bjton bell 0

6. Gombnyomsok vizsglata 0

7. Lptets nyomgombbal 0

8. Bitvltozk hasznlata 0

9. A prellegs kikszblse vrakozssal 0

10. A teljes als RAM 0

10. A bels ra hasznlata 0

11. Megszaktsok 0

1. Az ADuC 842 megszaktsai 0

2. Kls esemnyek ltal generlt megszakts 0

3. Az idintervallum-szmll ltal generlt megszakts 0

4. A nyomgombokhoz kthet tovbbi alkalmazsok 0

12. Kls ramkrk LED-ekkel 0

1. Jelzlmpa vezrlse 0

2. Relcik kirtkelsnek tovbbi mdja 0

3. Jelzlmpa tbb zemmddal 0

13. Kls ramkr fotokapuval 0

14. Htszegmenses kijelz meghajtsa 0

15. Kommunikci az UART-tal 0

1. Az UART soros interfsz 0

2. Bjtok fogadsa s kldse assemblyben 0

3. Soros porti kommunikci pollozssal 0

4. Soros porti kommunikci megszaktssal 0

5. Kdrszletek beptse sajt programunkba 0

6. Az ADuC vezrlse PC-vel 0

16. rs a memriba 0

1. rs az als s a fels RAM-ba 0

2. rs a bels adatmemriba 0

17. Idztk/szmllk 0

1. Egyszer idmrs az idztvel 0

2. Stopperra kt fotokapuval 0

18. PWM-jelek 0

1. PWM-jel ellltsa a mikrovezrl jelgenertorval 0

2. Pulzl LED-ek 0

19. AD-talakts 0

1. Az ADuC 842-es AD-talaktja 0

2. Egyszer AD-talakts 0

20. Alkonykapcsol 0

1. Besugrzsmrs fototranzisztorral 0

2. Az alkonykapcsol programja 0

3. Hiszterzis 0

21. TTL IC-k s tranzisztorok a portokon 0

1. A felhz-ellenllsok szerepe 0

2. Tranzisztorok mint kapcsolk 0

22. Hmrsklet-mrs 0

1. Termisztorok 0

2. Hmr 0

3. Hmrsklet-szablyozs 0

23. Megvilgtsszablyoz 0

24. Lptetmotor vezrlse 0

1. Unipolris s bipolris lptetmotorok 0

2. Bipolris lptetmotorok vezrlse 0

3. A motor lptetse 0

25. Utsz 0

26. Az Analog Devices hozzjrulsa 0

27. Ksznetnyilvnts 0

28. Fggelk Az ADuC 842-es hallgati panelja 0

Irodalomjegyzk 0

Mikrovezrlk mechatronikai alkalmazsai

Mikrovezrlk mechatronikai alkalmazsai

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Az brk listja

1.1. A legends Commodore 64, melyen genercik nttek fl 0

1.2. A Commodore 64-hez kaphat, a szerz plyafutsban meghatroz szerepet jtsz ignyes tanknyvek s szakknyvek 0

3.1. A hallgati panel, melyre a tanknyv pl 0

3.2. Az Analog Devices soros porti letltprogramjnak fellete 0

3.3. A Hercules kommunikcis alkalmazs fellete 0

5.1. Az RL A (fent) s RR A (lent) utastsok hatsa az akkumultor bitjeire 0

6.1. Az RLC A (fent) s RRC A (lent) utastsok hatsa C-re s az akkumultor bitjeire 0

8.1. Ciklusszervezs kln ciklusvltozval s rdemi vltozval 0

8.2. Az rdemi rtkek ellltsa aritmetikai mveletekkel a ciklusvltozbl 0

8.3. Az rdemi rtkeket maga a ciklusvltoz jelenti. A ciklus htul tesztel 0

8.4. Az rdemi rtkeket maga a ciklusvltoz jelenti. A ciklus ell tesztel 0

8.5. Az rdemi rtkeket maga a ciklusvltoz jelenti. A ciklus htul tesztel. A kilpsi felttelt aritmetikai mvelettel kpezzk, s nullra hegyezzk ki. Az elgazshoz a JNZ utastst hasznljuk 0

8.6. Az rdemi rtkeket maga a ciklusvltoz jelenti. A ciklus htul tesztel. A kilpsi felttelt aritmetikai mvelettel kpezzk, s nullra hegyezzk ki. Az elgazshoz a JZ utastst hasznljuk 0

9.1. A 8. feladat (lptets nyomgombbal) megoldsi elvnek folyamatbrja 0

9.2. A Lower RAM bitenknt cmezhet terlete 0

9.3. A 9. feladat (bitvltozk hasznlata) megoldsi elvnek folyamatbrja 0

9.4. Az als RAM ngy regiszterbankja 0

9.5. Az als RAM ltalnos cl terlete 0

10.1. A 12. feladat (bels ra hasznlata) megoldsi elvnek folyamatbrja 0

11.1. A 13. feladat (Kls esemnyek ltal generlt megszakts) megoldsi elvnek folyamatbrja 0

11.2. A 15. feladatban megkvetelt LED-lptets 0

11.3. A 15. feladat (A nyomgombokhoz kthet tovbbi alkalmazsok) megoldsi elvnek folyamatbrja 0

12.1. Fontos tudnival a portokkal kapcsolatban 0

12.2. A 16. feladat (Jelzlmpa vezrlse) megoldshoz tartoz kapcsols 0

12.3. A 16. feladat megoldshoz tartoz llapot-tmenetgrf 0

12.4. A 16. feladat mdostott megoldshoz tartoz llapot-tmenetgrf 0

12.5. A 17. feladat megoldshoz tartoz llapot-tmenetgrf. A fekete nyilak az adott zemmd kvetkez fzishoz tartoz felttelt reprezentljk. Ezt a felttelt a TIC megszaktsa adja meg, ha letelt az elrt vrakozsi id. A piros nyilak a gomb megnyomst mint felttelt reprezentljk 0

13.1. A 18. feladat (Kls ramkr fotokapuval) megoldshoz tartoz kapcsols 0

13.2. Digitlis fnykpezgppel ksztett felvtel a bekapcsolt infradidrl 0

13.3. A fototranzisztor fldre hzza a P2.1-es lbat, gy az arra kttt LED vilgt 0

14.1. A htszegmenses kijelzk szegmenseinek jellse 0

14.2. Az SA52-11-es htszegmenses kijelz lbkiosztsa 0

14.3. Htszegmenses kijelz meghajtsa 7447-es dekderrel 0

14.4. A 20. feladat (Htszegmenses kijelz meghajtsa) megoldsi elvnek folyamatbrja 0

15.1. USB-kbel bels vezetkei 0

15.2. A baud-rta ellltsa a 3. idzt/szmll esetn 0

15.3. A 21. feladat (Soros porti kommunikci pollozssal) megoldsnak folyamatbrja 0

15.4. Az ASCII karakterkszlet 32-tl 126-ig 0

16.1. Az ADuC 842-es adatmemriinak elrendezse 0

16.2. A 25. feladat (rs az als s a fels RAM-ba) megoldsnak folyamatbrja 0

17.1. A 27. feladat (Stopperra kt fotokapuval) megoldshoz tartoz kapcsols 0

18.1. Ngyszgjel 0

18.2. A PWM-genertor 1. zemmdja 0

19.1. Az AD-talakt rtknek kt regisztere s azok bitjei 0

19.2. Az AD-talakts szablyai 0

19.3. Az AD-talakt rtknek kt regisztere s azok kzps bitjei 0

19.4. A 0. csatorna tski a hallgati panelon (nagytssal is) 0

19.5. Ceruzaelem feszltsgnek mrse a mikrovezrlvel 0

19.6. Feszltsgmrs a mikrovezrlvel. A soros porton a PC-nek kldtt zenetek 0

20.1. A TEPT4400 tpus fototranzisztor sznkpi rzkenysge 0

20.2. Feszltsgmrs az alkonykapcsol emitter-ellenllsn 0

20.3. Az alkonykapcsol emitter-ellenllsn mrt feszltsg kompakt fnycs alatt 0

20.4. Az alkonykapcsol emitter-ellenllsn mrt feszltsg kompakt fnycs alatt, simtkondenztor jelenltben 0

20.5. Hiszterzis ktllapot rendszerben 0

21.1. Vonalmeghajt hasznlata a P2-es port bitjeivel 0

21.2. Vonalmeghajt hasznlata felhz-ellenllssal a port lbn 0

21.3. Npn-tranzisztor mint kapcsolelem vezrlse a P2-es portrl 0

21.4. Npn-tranzisztor mint kapcsolelem vezrlse a P0-s portrl, felhz-ellenllssal 0

21.5. Pnp-tranzisztor mint kapcsolelem vezrlse 0

22.1. A KTY81-120 tpus termisztor hmrsklet-ellenlls karakterisztikja 0

22.2. A KTY81-120 tpus termisztor interpollt hmrsklet-ellenlls karakterisztikja 0

22.3. A termisztor soros kapcsolsban 0

22.4. A hmrsklet-termisztorfeszltsg karakterisztika 500 -os soros ellenllssal 0

22.5. A hmrsklet-termisztorfeszltsg karakterisztika 10 k-os soros ellenllssal 0

22.6. A hmrsklet-termisztorfeszltsg karakterisztika az optimlis 2 385 -os soros ellenllssal s a lineris fggvnnyel 0

22.7. Egyedi hmrsklet-rtkek tlagols nlkl 0

22.8. Hmrsklet-rtkek tlagolssal 0

22.9. Asztali PC tpegysgbl kiszerelt ventiltor 0

22.10. USB csatlakozs hlzati adapter 0

22.11. Figyelmeztets kzs fld kialaktsra 0

22.12. A ventiltor be- s kikapcsolst lehetv tev ramkr 0

22.13. Figyelmeztets vddida hasznlatra 0

22.14. A hiszterzis s a ventiltor llapotnak kezelse 0

23.1. A LED-ek elhelyezkedse a fototranzisztorral szemben 0

23.2. A PWM-jel belltsnak szemlltetse 0

24.1. Unipolris lptetmotor mkdsi elve 0

24.2. Bipolris lptetmotor mkdsi elve 0

24.3. H-hd 0

24.4. CD-olvasbl kiszerelt fejmozgat-egysg, szln a lptetmotorral 0

24.5. A lptetmotor-vezrl IC lbkiosztsa s a motor (tekercseinek) bektse 0

24.6. A lptetmotoros alkalmazs elrendezse 0

28.1. A szalagkbel-csatlakoz lbkiosztsa gy, ahogy rnznk a ksz panelra 0

28.2. A hallgati panel NYK-terve fellnzetbl 0

28.3. A hallgati panel NYK-terve alulnzetbl 0

28.4. Az ADuC 842-es 52-lb MQFP tokozsa. A szmadatok millimterben rtendk 0

28.5. A hallgati panel fellnzeti beltetsi rajza 0

28.6. A hallgati panel alulnzeti beltetsi rajza 0

28.7. A ksz panel fellnzetben, megszmozott tskkkel 0

28.8. A ksz panel alulnzetben 0

Mikrovezrlk mechatronikai alkalmazsai

Mikrovezrlk mechatronikai alkalmazsai

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

A tblzatok listja

2.1. A 8051/8052-es processzormag nhny gpi kd utastsa, mnemonikja s annak jelentse. 0

5.1. Bitek sorszmozsa, helyirtke, decimlis rtke egy bjton bell. 0

5.2. Az R2 s R3 regiszterek rtke a Code02.asm program futsa sorn. 0

7.1. Az adatmutat als bjtja, fels bjtja s azok egyttes rtelmezse. 0

7.2. A kd-indirekt cmzs szemlltetse. 0

7.3. A DPCON SFR trgyalt bitjei. 0

9.1. Az S (AND) mvelet igazsgtblzata. 0

9.2. A VAGY (OR) mvelet igazsgtblzata. 0

9.3. A negci (NOT) mvelet igazsgtblzata. 0

9.4. A kizr VAGY (XOR) mvelet igazsgtblzata. 0

9.5. A PSW SFR paramterei. 0

10.1. Az idegysgek SFR-jeinek paramterei. 0

10.2. A TIMECON SFR paramterei. 0

11.1. A kls megszaktsok jellemzi 0

11.2. Az IE SFR paramterei. 0

11.3. Az idintervallum-szmlls INTVAL SFR-jnek paramterei. 0

11.4. A TIMECON SFR paramterei rszletesebben. 0

11.5. Az IEIP2 SFR paramterei (rszlet). 0

15.1. Az USB-kbel vezetkeinek funkcija. 0

15.2. Az SCON SFR paramterei. 0

15.3. Az SCON SFR kommunikcis mdot meghatrot bitjeinek jelentse. 0

15.4. Az T3CON SFR paramterei. 0

15.5. A soros porti kommunikci tipikus rtkei. 0

15.6. Az SCON SFR-nek a tanknyvben alkalmazott belltsai. 0

15.7. A hrom leggyakrabban haszbnlt rutin a soros porti kommunikcihoz. 0

17.1. A TMOD SFR paramterei. 0

17.2. A TCON SFR paramterei. 0

18.1. A PWMCON SFR paramterei. 0

19.1. Az ADCCON1 SFR paramterei. 0

19.2. Az ADCCON2 SFR paramterei. 0

22.1. A hmrsklet- s feszltsgrtkek tblzata. 0

22.2. A hmrsklet- szablyozhoz meghatrozott paramterek. 0

28.1. A szalagkbel-csatlakoz lbkiosztsa. 0

28.2. A hallgati panel alkatrszlistja. 0

28.3. A hallgati panel tskinek funkcija. 0

Mikrovezrlk mechatronikai alkalmazsai

Mikrovezrlk mechatronikai alkalmazsai

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

1. fejezet - Elsz s ars poetica

E tanknyv szerzje jelen fejezet elkezdsnek pillanatban 38 ves s 298 napos. Trtnt az, hogy az ltalnos iskola 7. osztlynak elvgzse utn a nyri sznetben szlei berattk szmtgpes TIT-tanfolyamra, ahol a mltn legendv vlt Commodore szmtgpek BASIC nyelv programozsval ismerkedhetett. Dlelttnknt. Dlutnonknt aztn ment a jtk, amg ki nem dobtk a csoportot, hogy most mr j lenne haza menni

Innentl kezdve nem volt meglls egy j darabig. Szmtgpes szakkr nyolcadikban (BASIC), sajt Commodore 64-es (lsd [A legends Commodore 64, melyen genercik nttek fl]. bra) vsrlsa Ausztriban, az assembly nyelv programozs elsajttsa, szmtgpes szakkr gimnziumban (ott mr egy id utn XT s Pascal), vgl az akkori Veszprmi Egyetem Mszaki Informatika szakja (eljtt a C ideje).

1.1. bra - A legends Commodore 64, melyen genercik nttek fl

A szerz egyetemi tanulmnyai utn ott maradt az egyetemen, megszerezte a PhD fokozatot, tantott a Mszaki Informatika Karon, majd a Mrnki Kar Fizika s Mechatronika Intzetben kttt ki. Ott nagy lelkesedssel lt be egyik kollgja Mikrovezrlk rjra, s roppant md lvezte, hogy jra assemblyben programozhat s sok-sok hardverkzeli lmnye lehet. Ezt a kurzust ksbb, a kollga versenyszfrba trtn tvozsa utn legnagyobb rmre meg is rklte. 2012-ben eljtt az id, hogy a TMOP plyzatcsald keretben elektronikus tanknyvet kszthessen a mikrovezrlk mechatronikai alkalmazsrl.

Egyetemi jegyzetet, tanknyvet rni nem is olyan knny. Elszr a szerznek el kell dntenie, hogy kikbl ll a clcsoport, majd azt, hogy mely konkrt hardveren s milyen alkalmazsokon keresztl igyekszik bemutatni a mikrovezrlk programozst. Ez a tanknyv ugyanis nem ltalnossgban kvn foglalkozni a mikrovezrlk mechatronikai alkalmazsval, hanem a kvetkez hrom clkitzst prblja megvalstani:

Az ADuC 842-es mikrovezrl lehetsgeinek megismerse.

Az assembly nyelv alapjainak elsajttsa.

Elemi ramkri kapcsolsokkal egyszer mechatronikai alkalmazsok megoldsa.

A fenti hrom ponthoz kielgt magyarzat kvnkozik. Vegyk ht ket sorba!

A vlaszts azrt esett az Analog Devices ADuC 842-es mikrovezrljre (www.analog.com), mert a Pannon Egyetem Fizika s Mechatronika Intzetben ilyen tpus eszkzkkel trtnt a Mikrovezrlk trgy oktatsa mr a szerz csatlakozsa eltt. A mikrovezrlkhz Kntor Zoltn docens r tervezett univerzlisan hasznlhat, sok feladat megoldsra alkalmas, oktatsi clokra remekl hasznlhat panelt. Aztn tvozott a versenyszfrba.

Elfordulhat, hogy az ADuC 842-es mikrovezrlt sokan mr elavultnak tartjk, azonban szeretnnk megnyugtatni a ktkedket: az eszkz kivlan alkalmas arra, hogy az egyetemi hallgatk megfelel szakmai ismereteket szerezzenek a mikrovezrlk lelkivilgrl. A meglv gpparkot gy nagy vtek lenne egyszeren kihajtani. Az elektronikus tanknyv ltal szolgltatott kurzus elvgezse utn brki knnyedn tnyergelhet ms tpus mikrovezrlre. Olyan ez, mintha megfelel nmet nyelvtuds utn arra knyszerlnnk, esetleg nknt dntennk gy, hogy pr hnapon bell rtelmesen kommunikljunk hollandul vagy ppen svdl. Higgyk el, menni fog! tdannyi erfesztssel, mint az els nyelvnl!

Az assembly nyelv emlegetse sokakban kellemetlen rzseket, lenzst vagy ppen pnikreakcit vlt ki. Val igaz, cges krnyezetben ritkn hasznljk; sokkal inkbb kvetelik meg a C nyelv vagy tovbbi script-nyelvek ismerett. Ennek nyilvn megvan a maga oka. A szerz viszont gy gondolja, hogy ha mr egyszer mikrovezrlvel fogunk egyszer kis ramkrket, szenzorokat s lptetmotort mkdtetni, mindenkppen rdemes az assembly nyelvvel kezdeni. Ezen keresztl rtjk meg ugyanis igazn a hardverkzeli programozs lnyegt, s lhetjk t azt az lmnyt, amikor jformn kt ujjunk kz csippenthetjk a biteket. Termszetesen knnyen belefuthatunk olyan problma, melynek megoldsa sokkal knyelmesebb C nyelven rt programmal, de a mikrovezrlkkel trtn ismerkedsnl maradunk az assemblyvel nyelvnl.

A mikrovezrl mechatronikai alkalmazshoz kls ramkrkre lesz szksg. Ebben a tananyagban nem trgyalunk bonyolult pkhlkat, az ramkrk egszen csekly villamossgtani, elektronikai ismeretek alapjn knnyen tlthatk lesznek, mkdsk knnyen megrthet lesz.

A tanknyv termszetesen nem lesz teljes. Egyetlen szmtstechnikai jegyzet vagy knyv sem lehet teljes. Viszont trekedni fogunk arra, hogy az ADuC 842-es mikrovezrl csaknem valamennyi utastst, cmzsmdjt hasznljuk, ill. lehetsgeinek nagyjbl a felre mkd programot, alkalmazst ismertessnk. A tananyag felptse iteratv jelleg lesz. Ez azt jelenti, hogy nem kimert mdon ismertetnk egy-egy tmakrt (pl. portokat, megszaktsokat vagy idztket), hanem mindig csak olyan mrtkben, ahogyan azt az adott rsz megkvnja. Aztn a kvetkez feladatnl mlyebben. Aztn mg mlyebben

Lassan az elsz vghez rnk. A szerz szeretne mlt emlket lltani nhny szakknyvnek (lsd [A Commodore 64-hez kaphat, a szerz plyafutsban meghatroz szerepet jtsz ignyes tanknyvek s szakknyvek]. bra), melyek nlkl nem sokra ment volna a j reg Commodore 64-es programozsval s a nagyon egyszer, LED-ek villogtatsra alkalmas kls ramkr barkcsolsval gimnazista korban. Ezek a knyvek, felptsk, egyes rszeik pldaknt llnak a szerz eltt. A mai kor hallgati mr nem biztos, hogy flismerik ket, de idsebb csaldtagjaik, bartaik kztt bizonyra akadnak ilyenek.

1.2. bra - A Commodore 64-hez kaphat, a szerz plyafutsban meghatroz szerepet jtsz ignyes tanknyvek s szakknyvek

A szerz szintn remli, hogy elektronikus tanknyvt rdekldssel s haszonnal fogjk forgatni (grgetni) mechatronikus hallgatk, villamosmrnk hallgatk, informatikus hallgatk, de akr rdekld kzpiskolsok is.

Ez a tanknyv nem szakknyv. Nem szakembereknek kszlt. Egyetemi hallgatknak kszlt, akik a tanknyvben lertak elsajttsa utn j esllyel a szakember-jellt szinten talljk majd magukat. s ha lesz hozz erejk s kitartsuk, akkor nem is olyan sokkal ksbb igazi szakemberek lesznek.

J tanulst, programozst, ramkrptst s mg tbb nll, megvalstott tletet kvnva:

Krnicz Balzs

szerz

Veszprm, 2013 prilisa

Elsz s ars poetica

Elsz s ars poetica

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

2. fejezet - Ismerkeds az assembly programozsi nyelvvel

1. Az assembly nyelvrl ltalban

Szmtgpek programozsra szmos programnyelvet fejlesztettek ki a hskor ta. A legalacsonyabb szint programozsi nyelv a gpi kd. Ez a nyelv a programot alkot binris utastsok, azaz puszta szmrtkek sorozatbl ll. A gpi kdban val programozs meglehetsen nehzkes lenne (a hskorban viszont egy ideig tnylegesen gy csinltk), ezrt egy-egy rvidtst, gynevezett mnemonikot rendelnek minden egyes utastshoz. A mnemonik ltalban az utasts jelentst ler tmr, tbbnyire angol kifejezsbl alkotott betsz. Ezeket a mnemonikokat nmagukban szoks assembly utastsoknak nevezni. Az ADuC 842-es mikrovezrl 8052-es tpus magjnak kszletbl nhny utastst az [A 8051/8052-es processzormag nhny gpi kd utastsa, mnemonikja s annak jelentse.] mutat be, melyben a hexadecimlis szmokat a szm utn rt h-val jelljk.

2.1. tblzat - A 8051/8052-es processzormag nhny gpi kd utastsa, mnemonikja s annak jelentse.

Gpi kd

Assembly mnemonik

Angol kifejezs

Magyar jelents

14h

DEC A

Decrement Accumulator

Az akkumultor rtknek cskkentse eggyel.

74h

MOV A,#data

Move Data to Accumulator

A data rtk adatbjt (be)mozgatsa az akkumultorba.

23h

RL A

Rotate Accumulator Left

Az akkumultor elforgatsa egy bittel balra.

Az [A 8051/8052-es processzormag nhny gpi kd utastsa, mnemonikja s annak jelentse.] alapjn magtl rtetd, hogy assembly nyelven knnyebb programozni, mint gpi kdban. Gpi kdban ugyanis tnylegesen puszta szmokat kellene rogatnunk egyms utn program gyannt. A kt kifejezst egybknt rdekes mdon sokszor sok helyen sszekeverik. gyeljnk teht a helyes megnevezsre; mi assembly nyelven fogunk programokat rni.

A fentiek utn brki megkrdezheti, hogy hogyan lesz az assembly utastsokbl tnylegesen gpi kd, amit mr meg lehet etetni a processzorral. Nos, erre val a fordtprogram, azaz az assembler. Az assembler tnylegesen gpi kdot llt el, amit aztn alkalmas letltprogrammal rtlthetnk a mikrovezrlre, s futtathatjuk azt. gy kel teht letre az assembly nyelven rt programunk.

Az assembly nyelv programozsrl azt lehet mondani, hogy olyan ez, mint amikor egy hzat az utols tglig s csavarig mi lltunk ssze, mg magas szint programozsi nyelveknl kszen kapjuk a falakat, esetleg az egsz helyisgeket. Az assembly nyelvvel brmelyik memriacmet elrhetjk, s kizrlag tlnk fgg, hogy annak tartalmt miknt rtelmezzk, mire hasznljuk. Nincsenek teht klnfle vltoztpusaink, egyltaln vltozink sincsenek, csak memriarekeszeink. Ez furcsn hangozhat annak, aki mr tanult valamilyen magas szint programozsi nyelvet (BASIC, PASCAL, C), de ez az igazsg. Mindenesetre ettl nem kell megijedni, assembly nyelven is minden megoldhat, s bizonyos problmakrre, mint pldul ersen hardverkzeli gyek kezelsre sokszor alkalmasabb, mint a magas szint nyelvek.

2. Memria

Azt a hardverelemet vagy modult, amely kpes adatok trolsra, memrinak nevezzk. Tulajdonkppen akr egyetlen kondenztort is memrinak nevezhetnk egy ramkrben, hiszen trolrl van sz. A digitlis szmtstechnika vilgban ennl persze sokkal tbbre van szksg. Ebben az esetben memrinak azt a hardveregysget nevezzk, amelyik tbbnyire azonos mret, digitlis informciegysgeket kpes rendezett mdon trolni. A legegyszerbb esetben ez az informciegysg egy bjt, ami nyolc bitbl ll. A memriaegysg mrett a szerint adjuk meg, hogy az hny darabot kpes trolni a vlasztott informciegysgbl, jelen esetben a bjtbl. A memriaegysgeket ltalban gy tervezik, hogy a teljes mret a kett valamely hatvnyval egyezzen meg. A memria mretnek megadsakor az SI-prefixumokat hasznljk, ami persze nem teljesen korrekt, hiszen pldul az 1 kilobjt a szmtstechnikban szigoran 1 024 bjtot jelent, a kilo (k) SI-prefixum viszont 103 = 1 000-rel egyenl. Volt prblkozs ide passzol prefixumok bevezetsre (kibi = 210 = 1 024, mebi = 220 = 1 048 576, gibi = 230 stb.), csak ez valamirt egyelre nem tudott elterjedni.

A memria rendezett mivolta azt jelenti, hogy a memriarekeszek egyrtelmen azonosthatk; tbbnyire sorszm alapjn. Ezt a sorszmot hvjuk egyszeren memriacmnek. ltalnos iskols szakkrkn ezt a megszmozott fikok metaforjval szoktk szemlltetni, s valljuk be; ez a szp analgia egyetemi szinten is kifogstalanul megllja a helyt.

Az ADuC mikrovezrlk memriaszervezse egszen sajtos. Ennek trgyalsa az iteratv felptsnknek megfelelen a ksbbi fejezetekben trtnik. Ha mr a memriknl tartunk, emltsk meg, hogy kt sajtos memriafelpts terjedt el a szmtstechnikban. Az egyiket Neumann-architektrnak hvjk a Magyarorszgon szletett, zsid szrmazs, elkpeszten brilins elmj matematikus tiszteletre. Ennl az architektrnl kzs memriban troljuk a programkdot s az adatokat is. gy teht egy kd minden tovbbi nlkl trhatja sajt magt. A msik tpus a Harvard-architektra. Ennl az architektrnl kln memria szolgl a programkd s az adatok trolsra. A mikrovezrlknl sokkal inkbb ez utbbi megolds terjedt el. Ilyen a mink is.

3. Regiszterek

Az assembly nyelvrl szl ltalnos lersban azt a hasonlatot hasznltuk, hogy olyan ez, mintha az utols tglig s csavarig mi magunk raknnk ssze egy hzat. Ehhez nyilvn kell betonkever, talicska, vakolkanl, kalapcs s mg sok minden ms. Brmilyen alacsony szint program vgrehajtsnl is segdeszkzkre van szksgnk, hiszen magval az assembly nyelvvel nmagban nem tudnnk mivel mveleteket vgrehajtani. Ezek a segdeszkzk a mikroprocesszoroknl elssorban a memriarekeszek, a regiszterek s a jelzbitek vagy flag-ek. Ez utbbiakrl ksbb lesz majd sz.

A memriarekeszek kzvetlen s gyors elrse az assembly nyelv nagy elnye. Egy-egy mikroprocesszor architektrjnl tbbfle memriacmnek lehet kitntetett szerepe, hiszen a memriarekeszek tartalmval ltalban kezdeni akarunk valamit; meg akarjuk vizsglni rtkket, logikai vagy algebrai mveletet akarunk vgrehajtani rajtuk, el akarjuk menteni tartalmukat stb. Az ilyesfle mveletek megknnytsre s a lehet leggyorsabb vgrehajtsra a mikroprocesszorok kitntetett memriarekeszekkel brnak; ezek megnevezse a regiszter.

Br ezt a fejezetet mg mindig elgg ltalnos lersnak sznjuk, a konkrt pldk bemutatsa mr a 8051/8052-es processzormag utastskszletvel trtnik. Jegyezzk meg, hogy valamennyi memriarekesz ill. regiszter egybjtos, azaz rtke a legegyszerbb rtelmezs szerint a halmazbl szrmazik. Olyan eset azonban elfordulhat, hogy kt egybjtos regiszter sszetartozik, s inkbb azt mondjuk, hogy ktbjtos regiszterrl van sz.

ltalnossgban elmondhat, hogy a mikroprocesszoroknak van egy elsdleges fontossg regiszterk, amit akkumultornak hvnak. Az assembly nyelvek erre szinte minden esetben az A szimblummal hivatkoznak. Egyszerbb mikroprocesszorok esetben az akkumultor mrete mindsszesen egyetlen bjt, azaz nyolc bit. A program vgrehajtsa sorn jformn minden szmts s mvelet az akkumultorban trtnik, s ide kerl vissza a szmts vagy mvelet vgeredmnye is.

A 8051/8052-es processzormagnak az akkumultoron kvl van mg ht darab kiemelt fontossg regisztere: R0, R1, ..., R7. Ezeket nagyon sok feladatra alkalmazhatjuk, ahogy azt majd a ksbbiekben ltni fogjuk.

4. Kzvetlen cmzs

Cmzsmdon azt a mdot rtjk, ahogyan egy memriarekesz tartalmt elrjk. Az assembly nyelveknek minden olyan cmzsmdot tartalmazniuk kell, melyekkel mg a legbonyolultabb problma is megoldhat. Az persze mr ms krds, hogy ez mekkora erfesztst ill. programbonyolultsgot jelent. A gyrtk azonban sokszor knyelmesebb teszik a programoz lett, s olyan cmzsmdot is megvalstanak, amelyre tulajdonkppen nem is lenne okvetlenl szksg, de felhasznlsval szmos problma esetleg sokkal gyorsabban s knnyebben oldhat meg.

Az elz alfejezet utn mr mutathatunk pldt arra az esetre, amikor az akkumultorba egy, a programoz ltal rgztett rtket, mondjuk 28-at kell betlteni. Ehhez megtanuljuk azt az utastst, amellyel adatokat lehet mozgatni. Ennek mnemonikja MOV; a mnemonik pedig az angol Move (mozgat) szbl szrmazik. Az utasts szintaxisnl nagyon fontos, hogy elszr azt a memriarekeszt nevezzk meg, amelyikbe az adatot mozgatni akarjuk, msodikknt pedig azt a memriarekeszt, amelyikbl mozgatni akarjuk az adatot. A fenti feladat teht gy oldhat meg:

MOV A,#75

Ezt a cmzsmdot kzvetlen cmzsnek (angolul Immediate Addressing) nevezzk. Azrt kzvetlen a cmzs, mert az akkumultorba vagy ltalnosan a kijellt helyre trtn adatmozgatshoz nem kell elrni semmilyen ms memriarekeszt, hiszen az adatot kzvetlenl mozgatjuk a kijellt helyre. Ezt mindig a ketts kereszt (#) szimblummal jelljk. Ezt az assemblernek fel kell ismernie, s helyesen kell lefordtania a programkdot. Gpi kdban az utastst kdol szmrtk s a konkrt adat egymst kvet memriarekeszekben helyezkedik el, vagyis az adat kzvetlenl az utasts kdjt kveti.

Ha mr itt tartunk, tanuljuk meg, hogy kzvetlen cmzseknl hogyan hasznlhatunk binris, hexadecimlis vagy akr karakteres rtkmegadst. Az albbi kzvetlen cmzsek mind szinonimk a 8051/8052-es processzormagok assembly nyelven trtn programozshoz hasznlhat assemblereknl:

MOV A,#75 MOV A,#04Bh MOV A,#01001011b MOV A,#K

Jegyezzk meg a szintaxist! Decimlis rtket a felhasznlt szmjegyek szmtl fggetlenl mindenfle egyb jells nlkl runk a ketts kereszt utn. A hexadecimlis rtkek megadsa mindig egy 0-val kezddik, majd az azt kvet, tnylegesen a hexadecimlis szmot jell kt karakter (hexadecimlis szmjegy) utn egy h bett runk. Binris rtkmegadsnl a nyolc szmjegyet (1-et vagy 0-t) egy b bet kveti. ASCII kd megadsnl pedig nyugodtan hasznlhatjuk magt a karaktert, csak tegyk aposztrfok kz! A kzvetlen cmzs szerencsre az Rn regiszterekre is mkdik:

MOV Rn,#K

Itt az n bet indexknt rtelmezend, csak a programkdok stlusa szerint nem sllyesztett bettpussal rjuk. Az elz alfejezet utols bekezdsben bemutatott R regiszterek darabszma szerint n rtke 0 s 7 kztti egsz szm lehet.

5. Direkt cmzs

Kpzeljnk el egy olyan memriamodult, melynek mrete mindsszesen 256 bjt. (Azrt ilyet kpzeljnk el, mert az ADuC 842-es architektrjnl ez mg sokszor vissza fog ksznni, ugyanis pontosan ilyen modulokbl pl fl a memria.) A memriarekeszek cmei ezek szerint 0-tl 255-ig terjednek, hexadecimlisan rva 00h-tl FFh-ig. Ha valamelyik specilis regiszterbe szeretnnk betlteni valamelyik memriacmen tallhat rtket, akkor direkt cmzst (angolul Direct Addressing) hasznlunk.

Nzzk a kvetkez pldt:

MOV A,030h

Ennek vgrehajtsa utn az akkumultorba az az rtk kerl, amelyik a 30h-s cmen tallhat. A 30h-s cmen tallhat rtk ettl szerencsre nem vltozik meg.

Az adatmozgats sorrendje fordtott is lehet termszetesen:

MOV 030h,R2

Ennek vgrehajtsa utn a 30h memriacmre az az rtk kerl, amelyik az R2-es regiszterben tallhat. Ekkor az R2-es regiszter tartalma szintgy vltozatlanul marad.

Direkt cmzssel az akkumultor s az R0, R1, ..., R7 regiszterek valamelyike kztt is knnyen bonyolthat az adatmsols, pldul:

MOV A,R5

vagy

MOV R6,A

Jegyezzk azonban meg, hogy ha az egyik R regiszter tartalmt akarjuk a msikba tlteni, akkor erre a mveletre nincsen elegns utasts. Ha teht mondjuk R0 tartalmt akarjuk R7-be msolni, akkor segtsgl hvhatjuk pldul az akkumultort:

MOV A,R0MOV R7,A

Direkt cmzssel egyik memriarekesz tartalmt tmsolhatjuk a msik memriarekeszbe:

MOV 03Eh,03Ah

Ennek vgrehajtsa utn a 3Ah cmen tallhat rtk a 3Eh cmre msoldik. A direkt cmzst tartalmaz adatmozgatst az utastskszlet lersai tbbnyire a

MOV A,directMOV direct,AMOV Rn,directMOV direct,RnMOV direct,direct

ttelekkel illetik; a lnyeg, hogy szerepel bennk a direct utals.

A mr sokat hasznlt MOV utastsnak van olyan varinsa is, amelyben keveredik a direkt s a kzvetlen cmzs:

MOV 032h,#125

Ennek vgrehajtsa utn a decimlisan 125-t jelent rtk kerl a 32h cmre. ltalnos hivatkozsa a kvetkez:

MOV direct,#data

6. sszehasonltsok s ugrsok

Minden assembly nyelvben lennie kell olyan utastsoknak, melyek lehetv teszik regiszterek vagy memriarekeszek tartalmnak sszehasonltst. Ha ez nem gy lenne, nem lehetne programelgazst csinlni, s csak primitv kdokat tudnnk rni. Ha mr szba kerlt az elgazs, akkor nyilvnvalan olyan utastsokra is szksg van, amelyekkel a program vezrlst a vgrehajtand rszekhez lehet ugratni. Aki magas szint programozsi nyelvekkel kezdte a programozs alapjait, annak ez most nagyon idegen lesz, de assemblyben mesteri mdon lehet ssze-vissza ugrltatni a program vgrehajtst; s mindezt gy, hogy annak mg rtelme is legyen!

Az sszehasonltsok eredmnyrl sokszor gy rteslnk, hogy egy specilis regiszter valamely kitntetett bitje vagy bitjei adott jelents szerint llnak be 0-ra vagy 1-re. Az ilyen jelzbiteket szoktk angolul flag-nek nevezni. Tallkozni fogunk majd olyan jelzbittel, amelyik egy rtk-sszehasonltsnl 1-re ll be, ha az egyik rtk kisebb, mint a msik; s 0-ra ll be, ha ez nem gy van, azaz nagyobb vagy egyenl. Ezek utn egy arra alkalmas utastssal elugrathatjuk a programot akkor, ha a jelzbit rtke 1, klnben a program vgrehajtsa szpen csorog tovbb. Ez az elugrats ltalban a jelzbit 0 rtkre is megfogalmazhat. Lesznek azutn olyan utastsok is, amelyek egymagukban vgeznek sszehasonltst, majd az eredmny valamilyen tulajdonsgnak megfelelen ugratjk el a programvezrlst vagy hagyjk tovbb csorogni a programot.

Az olvast megnyugtatjuk; hamarosan pldk znvel tesszk vilgoss az [Ismerkeds az assembly programozsi nyelvvel]. fejezetben lertakat.

Ismerkeds az assembly programozsi nyelvvel

Ismerkeds az assembly programozsi nyelvvel

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

3. fejezet - Az ADuC 842 s a hallgati ramkr

Az ADuC 842-es chiphez hasznlhat assembler, a letltprogram s egyb szoftverek ismertetse nem e tanknyv elsdleges feladata, viszont nem is hinyozhat, ha a tmval most ismerked hallgatk tnylegesen hasznlni akarjk az eszkzket, gy rviden szlnunk kell ezekrl is.

A hallgati panelt, amelyre ezt a tanknyvet alapozzuk, Dr. Kntor Zoltn, a Fizika Intzet egykori munkatrsa tervezte. Itt most csak a f funkciit foglaljuk ssze; a rszletes ramkri terv a Fggelkben tallhat olyan rszletessggel, hogy az eszkz reproduklhat legyen. A [A hallgati panel, melyre a tanknyv pl]. bra kt nzetbl mutatja a panelt. Tallhat rajta egy USB-csatlakoz s egy 20-plus szalagkbel-csatlakoz. Az USB-csatlakozhoz btran hasznlhatunk a nyomtatknl megszokott USB-kbelt. Ezzel kapcsolhatjuk panelunkat a szmtgphez. A 20-plus szalagkbel-csatlakoz tskire kt teljes I/O-port lbai, a +5 V-os tpfeszltsg s a fld (GND) vannak kivezetve. A csatlakoz tskinek funkcikiosztst a fggelkben talljuk. Ugyanez igaz a panelbl kill egyb tskk ismertetsre is.

3.1. bra - A hallgati panel, melyre a tanknyv pl

A panelon jl flismerhet egy nyolcas LED-sor s maga az ADuC 842-es mikrovezrl. Tallunk mg ngy nyomgombot; a panel hosszabbik lhez (a Pannon Egyetem felirathoz) kzelebbi kettnek brmilyen funkcit adhatunk szoftveresen. A szalagkbel-csatlakozhoz legkzelebb elhelyezked gomb a resetgomb. A negyedik a program letltst lehetv tev zemmdba lltja a mikrovezrlt. Ilyenkor gy kell eljrnunk, hogy egyik ujjunkkal lenyomjuk ezt a gombot, majd ezt fel nem engedve lenyomjuk a resetgombot is. gy ll az eszkz letltzemmdba.

Az ADuC 842-es processzormagja a 8052-es. Ez csak nagyon kevs rszletben (fknt a memriaterletek mretben) klnbzik a 8051-es magtl, gy nem vletlen, hogy az Analog Devices gyri CD-i is a 8051-es programozsra alkalmas assemblert tartalmazzk. Ennek neve asm51.exe. Gyri CD hjn az Internetrl tlthetjk le ezt az alkalmazst, melyet mg DOS al fejlesztettek. Windows XP-n mg simn futtathat parancszemmdban vagy valamely alkalmas Commander-t hasznlva. Ksbbi Windows rendszer esetn emultorra lesz szksgnk. Az asm51.exe assemblerhez komplett lersokat is knnyen tallunk az Interneten. Ezrt itt csak annyit emltnk meg, hogy assembly kdot tartalmaz fjl (ltalban sima szvegfjl; legfljebb asm kiterjesztst szoks neki adni) lefordtsa utn egy LST s egy HEX kiterjeszts fjl generldik. Az LST fjlban (ez is egyszer szvegfjl) tjkozdhatunk a fordt ltal tallt hibkrl s a memriacmek hozzrendelsrl. ltalnossgban elmondhat, hogy az LST fjlba tbbnyire csak akkor kukkantunk bele, ha a fordt hibba tkztt.

A HEX kiterjeszts fjl az, amit le kell tltennk a mikrovezrlre, hogy ott futtatni tudjuk. Ehhez megfelel letltprogramra van szksgnk. Az Analog Devices honlapjrl (www.analog.com) ez az alkalmazs szabadon letlthet, a fjl neve wsd_setup_v705, az alkalmazs pedig Windows Serial Dowloader. Els letlts eltt a legfontosabb dolgunk az, hogy a Configuration menpontnl belltsuk a mikrovezrl ltal lefoglalt Com Port szmt. Ezt a Windows VezrlpultRendszerHardverEszkzkezelPortok (COM s LPT) helyen talljuk. Az alkalmazs fellett az albbi bra mutatja.

3.2. bra - Az Analog Devices soros porti letltprogramjnak fellete

A ksbbiekben a soros porti kommunikci lefolytatshoz s a mikrovezrlrl a PC-re rkez zenetek megjelentshez szksgnk lesz arra alkalmas szoftverre. Az Interneten sok ilyen alkalmazs elrhet. A szerz a Hercules nev freeware alkalmazst hasznlta; a tanknyvbe bekerlt kommunikcis pldkat ezzel valstotta meg. Ennek az alkalmazsnak a fellett az [A Hercules kommunikcis alkalmazs fellete]. brn lthatjuk. A Serial menpontnl ugyanazt a COM Portot kell belltanunk, mint a letltprogramnl. Hasznlat kzben arra azonban nagyon figyeljnk, hogy ha a Hercules alkalmazsban nem zrjuk be a korbban megnyitott soros portot, akkor nem tudunk jabb programot letlteni a mikrovezrlre a Windows Serial Downloader-rel! Ez a figyelmetlensg krt nem, bosszsgot viszont annl inkbb tud okozni

3.3. bra - A Hercules kommunikcis alkalmazs fellete

Az ADuC 842 s a hallgati ramkr

Az ADuC 842 s a hallgati ramkr

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

4. fejezet - Els programunk: villogtassuk a panel LED-jeit!

1. feladat:

Az oktatsi clra tervezett panelon egy LED-sor tallhat, amely 8 darab LED-bl ll. Villogtassuk a LED-eket 1 Hz-es frekvencival gy, hogy egyszer az egyik oldali ngy, msszor a msik oldali ngy vilgtson! [Code01]

A feladat megoldsa nagyon egyszer lesz, csak pr sorbl fog llni. Ennek ellenre nhny dolgot mg meg kell beszlnnk, hogy rtsk, mi mirt kerl a programba. A magyarzatokat a kvetkez nhny alfejezetben talljuk; de mindig csak annyit, amennyire ppen szksgnk van.

1. Portok s funkciregiszterek

Az ADuC 842-es mikrovezrlnek ngy darab nyolcbites portja van, melyek nagyon sokfle clra, tbbek kzt I/O-mveletekre hasznlhatk. A portoknak megfelel ngy bjt a mikrovezrl memrijnak egy-egy cmn tallhat. Emltettk mr, hogy egy-egy specilis memriarekeszt regiszternek szoktunk nevezni. Na, ht mi lenne specilisabb egy szmtgpnl, mint az I/O-portok? Az ADuC 842-es mikrovezrl mkdst, konfigurcijt a portokon kvl mg nagyon sok tovbbi memriarekesz tartalma befolysolja. ppen a kitntetett szerepk miatt ezek a bizonyos memriarekeszek a specilis funkcij regiszterek (angolul Special Function Register, rvidtve SFR) elnevezst kaptk.

A hallgati panelon a 2. port felel a LED-ek mkdsrt. Ennek a portnak A0h a cme, de hogy az ilyesfle cmeket ne kelljen fejben tartani programozsnl, az assemblerben ehhez kln szimblumot rendeltek: P2. Ismerve ezt a szimblumot, soha tbbet nem kell a konkrt cmmel foglalkoznunk.

A P2 SFR bitjei egy-egy LED-nek felelnek meg. Tudnunk kell, hogy az ADuC mikrovezrl portjai ltalban nem hasznlhatk aktv kimenetknt, ha mgis, akkor is csak pr tized mA ram leadsra kpesek, klnben fstjelensgek lpnek fl. gy aztn taln nem meglep, hogy a P2-re kttt LED-ek fordtott logikval fognak mkdni, azaz akkor vilgtanak, ha a nekik megfelel bit rtke 0. Ha ez a bit 1, akkor a LED nem vilgt. Ennek tudatban az olvas biztos lehet abban, hogy a LED-ek katdja nz a port lbai fel. Azt is mondhatjuk, hogy a P2 port lbaival a LED-ek katdjait fldre hzzuk, gy tud folyni az ram.

Ha az els 4 LED-et akarjuk bekapcsolni, akkor ezt kell tennnk:

MOV P2,#11110000b

Ha az msik 4 LED-et, akkor ezt:

MOV P2,#00001111b

2. Egyszer ciklusszervezs

A programozs egyik legfontosabb eleme a ciklusszervezs. Mire j egy ciklus? Tall lehet az a definci, hogy egy ciklussal valamely programrszt bizonyos feltteleknek megfelel mdon tbbszr vgrehajtunk. Ezt a bizonyos programrszt ciklusmagnak szoktk nevezni. A ciklusokhoz tbbnyire szksg van egy olyan memriarekeszre vagy regiszterre, melynek rtke meghatrozza, hogy hnyszor hajtdik vgre a ciklusmag. Ezt a memriarekeszt vagy regisztert ciklusvltoznak is nevezhetjk. Ciklusokat szervezni mind magas szint programozsi nyelvekben, mind assemblyben tbbflekppen lehetsges. A legegyszerbb eset taln az, amikor a ciklusmagot elre definilt mdon n-szer hajtjuk vgre. Ezt az n-t adjuk meg magban a programkdban, gy az semmilyen kls vagy bels feltteltl nem fgg.

Az ADuC utastsai kztt van egy olyan, amelyet remekl felhasznlhatunk a fenti kvnalmak szerint. Ez a DJNZ utasts. A mnemonik az angol Decrement and Jump if Not Zero (cskkent, s ugrik, ha nem nulla) kifejezsbl szrmazik. Ennek az utastsnak kt varinsa van, az egyik szintaxisa a kvetkez:

DJNZ Rn,rel

Az Rn azt jelenti, hogy ehhez az utastshoz brmelyik R regisztert hasznlhatjuk. Ez az utasts feltteles elgazst, azaz felttelhez kttt ugrst valst meg. A felttel jelen esetben az, hogy az Rn regiszter ne legyen egyenl 0-val. Ha a regiszter tartalma mgis 0, akkor a program szpen csorog tovbb. Ha nem 0, akkor viszont ugrs trtnik. Azt, hogy hov ugrik a program vezrlse, a rel rtk mutatja meg. Nagyon lnyeges, hogy ide ne akrmilyen memriacmet kpzeljnk! Lesz utasts arra is, amelyikkel brmekkort lehet ugratni, de itt most msrl van sz: relatv ugrs trtnik. Azrt relatv ugrs, mert ahhoz a memriacmhez kpest ugrik elre vagy htra a program vezrlse, amelyiken a DJNZ utasts tallhat. Fontos megjegyeznnk, hogy brmely ilyesfle relatv ugrs elrefel 127 bjtot, visszafel pedig 128 bjtot nem lphet tl! Kezd programozk sokszor meglepdnek azon (aztn mdosult tudatllapotba kerlnek, s klcsapsokkal bntetik a billentyzetet, pedig az semmirl nem tehet), hogy a ltszlag teljesen j programkdjukra hibt jelez a fordt. Ez sokszor azrt van, mert relatv ugrssal tllpik a 127 ill. 128 bjtot. Ennek kivdst a ksbbiekben szintgy megtanuljuk.

Az assemblyben rt kdban az ugrsok helynek megjellsre cmkket hasznlunk. Az alkalmazott assemblerben a cmkk kezetes betket nem tartalmazhatnak, s kettsponttal vgzdnek. Vegyk pldnak a kvetkez, nylfarknyi kdot:

MOV R7,#25

label:

[ciklusmag]

DJNZ R7,label

A fenti kdocska a [ciklusmag]-nak nevezett rszt pontosan 25-szr hajtja vgre. Kpzeljk el ugyanis, hogy R7 tartalma mr csak 1. Ha lefut a ciklusmag, akkor a DJNZ utasts R7 tartalmt 1-gyel cskkenti, azaz 1-rl 0-ra, majd sszehasonltja azt 0-val. Mivel egyezs van, ezrt mr nem trtnik ugrs a label cmkre (ugrs akkor trtnik, amikor a vizsglt regiszter tartalma eltr 0-tl), hanem csorog tovbb a program. R7 tartalma ekkor garantltan 0.

A ciklusokat termszetesen egymsba is gyazhatjuk. ppen gy, ahogy a nagyobb hal megeszi a kisebb halat vagy halakat. Olyan nincs, hogy a halak szja sszeakad, s egyik se tudja megenni a msikat! Ciklusok egymsba gyazsra hamarosan ltunk pldt.

3. Szubrutinok

Ttelezzk fl, hogy a programunk valamely rszt sokszor (nhnyszor, igen sokszor, ki tudja, hnyszor stb.) akarjuk vgrehajtani. Ilyenkor nem clszer ezt a rszt favg mdon sokszor (nhnyszor, igen sokszor, ki tudja, hnyszor stb.) belerni a programba, mert van erre egy gyes megolds. Ezt az gyes megoldst szubrutinnak hvjk. A program brmely helyrl hvhatunk szubrutinokat. Ilyenkor az a memriacm, ahol a program vezrlse tartott, elmentdik egy meghatrozott memriaterletre (ezt hvjk veremnek; errl bvebben ksbb), majd a vezrls a szubrutinhoz ugrik. Azt a ktbjtos regisztert, amelyben az aktulisan vgrehajtand utasts cme tallhat, programszmllnak hvjuk (angolul Program Counter). A szubrutin vgt specilis utastssal kell jeleznnk. Ha ezt elfelejtjk, akkor a vezrls nem ugrik vissza az eredeti helyre, hanem a program fut tovbb, s ltalban anomlis mkdsbe kezd, vagy jl lefagy Ha ellenben a helyre rjuk a szubrutint lezr utastst, akkor a verembe kerlt cm visszatltdik a programszmllba, s a program futsa a szubrutint megv utasts utni ponttl folytatdik. Szubrutin hvsnak utastsa:

CALL subroutine

A mnemonik trtnetesen teljes egszben az angol Call sz, ami hvst jelent. Ha valaki belekukkant az 8051/8052-es processzormagok utastskszletbe, akkor nem is tallja meg a CALL utastst. Tall viszont kt msikat: ACALL (Absolute Call within 2K block) s LCALL (Long Call). A helyzet az, hogy az ACALL utastssal olyan szubrutint hvhatunk, melynek kezdcme ugyanabban a 2 kilobjtos memriablokkban van, mint a hv utasts. Az LCALL utastsnl mr nincsen semmi ilyesfle megkts. Ennek a furcsasgnak az rtelme az, hogy az ACALL utasts gyorsabban vgrehajtdik s radsul gpi kdknt egy bjttal kevesebb helyet foglal a memriban. Ennek akkor van szerepe, amikor olyan nagy programot runk, hogy mr nagyon oda kell figyelni arra, hogy azt bele tudjuk passzrozni a memriba, esetleg ppen azrt, mert a memria mrete csak nhnyszor 2 kilobjt. Azonban ha szerencsnk van, olyan assemblerrel dolgozhatunk, amelyik a cmkk elhelyezkedse alapjn gyis eldnti, hogy melyiket jobb hasznlni (mondjuk mretre optimalizl), gy nyugodtan hasznlhatjuk simn csak a CALL-t.

A szubrutinbl trtn visszatrs utastsa a RET. A mnemonik az angol Return from Subroutine (visszatrs a szubrutinbl) kifejezsbl szrmazik. Plda szubrutin hvsra:

MOV R7,#25

label:

CALL subroutineDJNZ R7,label......

subroutine:

[szubrutin tartalma]

RET

Ez a kis pldaprogramocska ppen gy tartalmaz egy a ciklust, mint az elz fejezet pldja. Itt azonban a ciklusmag semmi egyebet nem csinl, mint meghv egy szubrutint. A ciklusvltoz gyannt felhasznlt R7 regiszter kezdeti rtke alapjn tudhatjuk, hogy a szubrutint a ciklus pontosan 25-szr hvja meg. Aztn, hogy a szubrutin mit tartalmaz, az mr a programoz dolga

4. Ugrs a kdon bell

Aki eddig magas szint, strukturlt programozst tanult, az nagyon jl tudja, hogy ott hivatalbl utlni kellett a kzvetlen ugrst megvalst utastst. Nem gy az assemblyben! Kzvetlen ugrsok vagy egyltaln ugrsok nlkl valamire val assembly kd elkpzelhetetlen. Ebbe jobb, ha beletrdnk. A kzvetlen ugrs utastsnak a mnemonikja a JMP, amely az angol Jump (ugrik) szbl szrmazik. Az utasts egyik verzija utn adott memriacmet kell megadnunk, amelyet termszetesen cmkvel is reprezentlhatunk:

JMP address

Erre az utastsra ugyanaz az rdekessg rvnyes, mint a CALL utastsra. Ezt sem talljuk meg a 8051/8052-es processzormagok utastskszletben. Tallunk viszont hrom msikat: AJMP (Absolute Jump within 2K block, abszolt ugrs 2K-os blokkon bell), LJMP (Long Jump, tvoli ugrs) s SJMP (Short Jump, kzeli ugrs). Az AJMP 2 kilobjtos blokkon belli ugrst tud megvalstani. Az LJMP-ra ilyen megkts mr nem vonatkozik. Az SJMP utasts relatv ugrst valst meg. Ez azt jelenti, hogy ez is csak 128 bjtnyi tvolsgot jelenthet visszafel s 127 bjtnyit elre. Az utastsok kztt most is a hossz s a vgrehajtsi id a klnbsg. s ha szerencsnk van, az assembler a cmkk alapjn gyis meghatrozza, melyik lesz az optimlis, amikor simn csak JMP-ot runk.

5. rajel, vgrehajtsi id

A logikai ramkrkbl alkotott hlzatok a legtbb esetben rajellel mkdnek. Ezeket hvjuk szekvencilis hlzatoknak. A mikroprocesszorok szintn rajelet ignyelnek; mkdsi sebessgket ppen az rajel frekvencijval szoks megadni. Az ADuC 842-es rajele maximlisan 16 777 216 Hz. Bekapcsolskor azonban az rajel nem ekkora, hanem csak 2 097 152 Hz. Ez az n. default rajel. Az ADuC rajele megfelel SFR-rel futs kzben vltoztathat (PLLCON SFR). Erre azonban kezd szinten nem lesz szksgnk.

A gpi kd utastsok mindegyiknek vgrehajtsa egsz szm rajelciklust ignyel. Vannak 1, 2, 3, 4 s 9 rajelciklust flemszt utastsok. Azzal, hogy egy utasts hny rajelciklus alatt hajtdik vgre, ltalban nem kell trdnnk. Egyszer azonban szmoljuk ki, hogy mennyi ideig tart egy rvidke kd, pldul az albbiak vgrehajtsa! Eltte azonban mg megtanuljuk, hogy a NOP utasts, ami az angol No Operation (nincs mvelet) kifejezsbl szrmazik, pontosan azt csinlja, hogy semmit sem csinl. s ehhez kemny 1 rajelciklust emszt fl.

MOV R7,#100cik7:MOV R6,#22cik6:MOV R5,#237cik5:NOPDJNZ R5,cik5DJNZ R6,cik6DJNZ R7,cik7RET

Az egyes utastsok vgrehajtsnak ciklusszmai a kvetkezk:

MOV Rn,#data - 2NOP - 1DJNZ Rn,rel 3RET - 4

Ezek alapjn a fenti program sszesen rajelciklust ignyel. A szmts tgondolsa nem nehz, de inkbb segtnk egy kicsit. A legbels zrjelben az ll, hogy . Ez a NOP utasts s a kzvetlenl utna ll DJNZ R5,cik5 ltal ignyelt rajelciklus. A legbels ciklus, melynek R5 a ciklusvltozja, a kezdeti rtk szerint pontosan 237-szer hajtdik vgre. Innen jn a 237-es szorz. Ahnyszor vgrehajtdik ez a ciklus, annyiszor kell kirtkelni a ciklusvltozra rvnyes kilpsi felttelt; csakgy, mint az sszes tbbi ciklusnl. Maga a kezdeti rtk megadsa R5-nek 2 rajelciklust ignyel. Emiatt szerepel a 2-es az eltt. A legbels ciklus be van gyazva egy kijjebb lv ciklusba, ami 22-szer hajtdik vgre, s aminek ciklusvltozja R6. Csakhogy R6 rtknek kirtkelse, azaz a kvetkez DJNZ utasts is mindig 3 rajelciklust ignyel. Ebbl szrmazik a 3-as szm az utn. Ez eltt a 2-es szm R6 kezdeti rtknek megadst jelenti. Ez a kirtkelsekre vonatkoz fenti magyarzat szerint mg nyilvn a 22-es szorzn bell van. s gy tovbb a teljes kifejezs vgig! Az utols 4-es a szubrutinbl val visszatrs utastsnak, a RET-nek a vgrehajtsi ideje. A default rajel-frekvencival, azaz 2 097 152 Hz-cel szmolva 2 097 106 rajelciklus lefutsi ideje 0,999 978 msodperc. gy ezzel a kis szubrutinnal nagyjbl 1 msodperces idksleltetst valsthatunk meg a nlkl, hogy ismernnk az ADuC idztfunkciit. A ksbbiekben termszetesen azok kzl is tbbet kivesznk.

6. Az els alkalmazs kdja

Az [1. feladat] megoldshoz immron mindent tudunk; mr csak az assemblerrel kapcsolatban kell nhny dolgot tisztznunk. Ezt gy fogjuk tenni, hogy elszr vgre megnzzk magt a kdot, aztn hozzfzzk a magyarzatot. Az [1. feladat] megoldst jelent kd a kvetkez:

;**********Code01.asm**********$MOD842 ;Az ADUC842 szimblumainak hasznlataCSEG ;A kdszegmens kezdeteORG 0000h ;RESET-kor itt kezd a PROGRAM COUNTER. JMP MAIN ;Mindjrt el is pccintjk a program- ;vezrlst feljebb a memriba, hiszen ;a ksbbiekben tanult megszaktsok ;vektorai foglalnak helyet a kdmemria ;legelejn.ORG 0060h ;Itt kezddik a memriban a tnyleges kd.MAIN:MOV P2,#11110000b ;Bekapcsoljuk az als 4 LED-et.CALL DELAY ;Meghvjuk az idhz szubrutint.MOV P2,#00001111b ;Bekapcsoljuk a fels 4 LED-et.CALL DELAY ;Meghvjuk az idhz szubrutint.JMP MAIN ;Visszaugratjuk az elejre a programot. ;Tulajdonkppen vgtelen ciklust hozunk ;ltre.DELAY: ;Idhz szubrutinMOV R7,#50 ;0.5 sec ksleltetscik7:MOV R6,#22cik6:MOV R5,#237cik5:NOPDJNZ R5,cik5DJNZ R6,cik6DJNZ R7,cik7RET ;Visszatrs a szubrutinbl.END

A magyarzatok elkezdse eltt felhvjuk a figyelmet arra, amit taln az olvas is kitallt mr; a kdba szrt megjegyzsek pontosvesszvel kezddnek.

A kd msodik sora eddig ismeretlen ttelt tartalmaz: $MOD842. Ez a fordti direktva arra utastja az assemblert, hogy az ADuC 842-es architektrhoz tartoz szimblumlistt hasznlja. Ebben a fjlban ugyanis jl rthet szimblumokat rendeltek a kitntetett memriacmekhez, regiszterekhez s specilis funkcij regiszterekhez. Ha mr kell jrtassgot szerzett az olvas a tmban, rdemes egyszer belekukkantania ebbe a fjlba. Az elektronikus tanknyvben a tovbbiakban a helytakarkossg vgett ezt a direktvt nem tntetjk fl, de jegyezzk meg, hogy minden lefordtand kdnak ezzel kell kezddnie, amennyiben a 842-es architektrt hasznljuk.

A msodik jdonsg a CSEG direktva. Ezzel jelezzk a fordtak, hogy innentl kezddik a programkd. A kdszegmens az END direktvval zrul. Ezekre a direktvkra ugyanaz lesz rvnyes a tanknyvben, mint a $MOD842-ra.

A harmadik jdonsg az ORG direktva. Ezzel jelezzk az assemblernek, hogy mely memriacmre kerljn a lefordtott kd. Ennek fontos szerepe lesz a programok elhelyezsnl. Tudnunk kell ugyanis, hogy amikor a mikrovezrl elindul vagy reset trtnik, akkor a programvezrls a 0000h cmre ugrik. Szokjunk hozz ahhoz, hogy innen azonnal elugratjuk a programot egy htrbb tallhat cmre, ugyanis a ksbb trgyaland megszaktsok vektorai szpen sorban a kdmemria elejn helyezkednek el. Ha semmifle megszaktst sem hasznlunk, erre az elugratsra nincs szksg, de jobb, ha az sszes kdunkat gy rjuk, hogy annak rdemi rsze kicsit htrbb kezddik, mint 0000h. Elmondhatjuk, hogy a 0060h cmtl kezdden mr semmi veszly nem leselkedik rnk a program szervezsnek szempontjbl, gy ezt a cmet btran vlaszthatjuk a program rdemi rsze kezdetnek.

A kdban az ORG 0000h sor utn az ll, hogy JMP MAIN. A MAIN itt egy cmke, s ide fog ugrani a program induls vagy reset utn. Most mr az is rthet, hogy mirt elzi meg a MAIN cmkt az ORG 0060h direktva s rtk; ezen a cmen kezddik a program rdemi rsze.

A kd maga annyira egyszer, hogy flsleges blokkdiagramban megadni az algoritmust. A lers rviden: bekapcsoljuk az als 4 LED-et (a tbbit kikapcsoljuk), vrakozunk fl msodpercet, bekapcsoljuk a fels 4 LED-et (a tbbit kikapcsoljuk), vrakozunk fl msodpercet, aztn kezdjk ellrl az egszet. Az idhzst szubrutin vgzi gy, ahogyan azt a [Szubrutinok] s [rajel, vgrehajtsi id] alfejezetekben megtrgyaltuk.

Itt s most szeretnnk leszgezni, hogy a tovbbiakban az elektronikus tanknyvben szerepl kdokba magukba csak annyi kommentet runk, amennyi okvetlenl szksges. Ez fknt az jdonsgokat s a fbb egysgeket rinti. Az elektronikus tanknyvhz azonban kdtr is tartozik, amely az azonnal lefordthat, ellenrztt, ksz kdokat tartalmazza. Ezeket a kdokat minden esetben elg nagy rszletessggel kikommentezzk, hogy akkor is rthet legyen, ha majd a tanknyvben lertak megtanulsa utn mondjuk egy vvel nylunk vissza valamelyik alkalmazshoz. A kdtr nem csak a kdokat tartalmazza, hanem sszetettebb alkalmazsoknl ramkri rajzokat, fnykpeket s sok esetben mg rvid videofelvtelt is.

Els programunk: villogtassuk a panel LED-jeit!

Els programunk: villogtassuk a panel LED-jeit!

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

5. fejezet - Csk a LED-eken

Mi a legnagyobb klnbsg az ADuC mikrovezrlnk s egy htkznapi szmtgpes munkalloms kztt? Az egyik az, hogy a mikrovezrln gyrilag semmifle opercis rendszer nem tallhat. (Ez persze nem azt jelenti, hogy nem is lehet r kszteni.) A msik lnyeges klnbsg pedig a [Az ADuC 842 s a hallgati ramkr]. fejezet alapjn taln mr nyilvnvalv vlt: semmifle monitor nem csatlakozik a panelhoz. A jelenlegi szintnkn a 8 LED-bl ll sor az egyetlen visszajelzsi lehetsgnk, azonban meglepen sokatmond lehet mg ez is, pedig mindsszesen egyetlen bjt kijelzsre alkalmas.

A LED-sort termszetesen sokfle funkcihoz tudjuk munkra fogni; klnfle mintzatokat jelenthetnk meg rajta. Ennek mg a mechatronikai alkalmazsok szempontjbl nem sok haszna lesz, viszont jkat fogunk szrakozni, tovbb rengeteget tanulunk vele, aminek mr majd igen. A bevezet utn tekintsk a kvetkez feladatot!

2. feladat:

Jelentsnk meg a LED-soron egy egyre hosszabb cskot, amely nvekeds kzben minden fzisnl vrakozik egy keveset, teltds utn pedig jraindul. [Code02]

Klnfle mintzatoknak a LED-soron val ellltshoz kt mdszert alkalmazhatunk. Az egyik az, hogy a kdmemriban elre rgztett bitmintkat trolunk, majd kiolvassuk azokat. Ezt a ksbbiekben meg is tanuljuk. A msik mdszer az, hogy aritmetikai trkkkkel a program futsa kzben lltjuk el a mintzatot. Oldjuk meg a [2. feladat]ot most ilyen mdon!

1. Bitek sorszmozsa

A szmtstechnikban htkznapi fogalmainkkal ellenttben az objektumok szmozst nem 1-gyel kezdjk, hanem tbbnyire 0-val. Ha egy bjt bitjeirl van sz, akkor azok sorszmozsa szintgy 0-val kezddik, gy termszetes kifejezs lesz az, hogy nulladik bit. Egy bjt bitjeinek helyirtkt, decimlis rtkt s sorszmt a [Bitek sorszmozsa, helyirtke, decimlis rtke egy bjton bell.] mutatja.

5.1. tblzat - Bitek sorszmozsa, helyirtke, decimlis rtke egy bjton bell.

Bit sorszma

Hatvny

Decimlis rtk

0.

20

1

1.

21

2

2.

22

4

3.

23

8

4.

24

16

5.

25

32

6.

26

64

7.

27

128

2. Logikai s aritmetikai utastsok

A [2. feladat] megoldshoz szksgnk lesz arra az utastsra, amelyik a logikai negltjt vagy ms szval komplementert, megint ms szval inverzt kpezi az akkumultornak:

CPL A

A mnemonik az angol Complement Register (regiszter komplementere) kifejezsbl szrmazik. Ha az akkumultor tartalma pldul 10001101, akkor a CPL A utasts kiadsa utn az akkumultor tartalma 01110010 lesz, vagyis csakugyan az eredeti tartalmnak logikai negltja vagy komplementere, esetleg inverze.

A kvetkez utasts, amelyre szksgnk lesz, az tvitel nlkli sszeads utastsa: ADD. A mnemonik az angol Add Accumulator (hozzad az akkumultorhoz) kifejezsbl szrmazik. Ennek az utastsnak, ahogy azt mr a MOV utastsnl megzlelhettk, tbb verzija van; mi most hrommal ismerkednk meg. Az utastsok cmzsmdja az elektronikus tanknyvben eddig elmondottak alapjn vilgos kell, hogy legyen:

ADD A,Rn ADD A,direct ADD A,#data

Mindhrom esetben az akkumultor tartalmhoz adjuk vagy valamelyik R regiszter tartalmt, vagy egy adott memriarekesz tartalmt, vagy a kzvetlenl megadott rtket. tvitel nlkl! Az tvitelt is figyelembe vev sszeadsrl ksbb szlunk.

Ismerkedjnk meg mg kt utastssal, melyek igen nagy segtsgnkre lehetnek, ha aritmetikai mveletekkel s trkkkkel szeretnnk adott bitmintzatot mint rtket ellltani az akkumultorban! Ez a kt utasts a bitforgats mveletet hajtja vgre az akkumultoron. Az egyik balra forgat:

RL A

A msik jobbra forgat:

RR A

A mnemonikok az angol Rotate Accumulator Left (akkumultor forgatsa balra) s Rotate Accumulator Right (akkumultor forgatsa jobbra) kifejezsekbl szrmaznak. A forgats azt jelenti, hogy az akkumultor tartalma egy bittel balra/jobbra csszik, a szln kilp bit pedig visszakerl a megrlt helyre a msik oldalon. Pldul legyen az akkumultor tartalma 00001111. RL A utn az akkumultor tartalma 00011110, RL R utn pedig 10000111 lesz. A [Az RL A (fent) s RR A (lent) utastsok hatsa az akkumultor bitjeire]. brn rajzos magyarzattal szemlltetjk a bitforgat utastsok mkdst. Ezekkel az utastsokkal sok huncutsgot meg tudunk valstani, ahogy azt majd hamarosan ltni fogjuk.

5.1. bra - Az RL A (fent) s RR A (lent) utastsok hatsa az akkumultor bitjeire

3. Paramtertads szubrutinnak

Aki valamely magas szint programozsi nyelvvel kezdett, az nagyon jl tudja, hogy paramtert tadni valamely fggvnynek vagy eljrsnak meglehetsen knny. Aki mg nem tudja, mit jelent ez, kpzelje el azt a szitucit, hogy a [rajel, vgrehajtsi id] s [Az els alkalmazs kdja] alfejezetben bemutatott idhz szubrutint nem llandsult 0,5 vagy ppen 1 msodperces idhzsra akarjuk hasznlni, hanem rugalmasan, ltalunk tetszs szerint megadott rtkkel. Assemblyben gy megy ez, hogy a szubrutinnak tudnia kell, hogy a mkdshez szksges rtket honnan veszi (mely regiszterbl vagy memriacmrl), a szubrutin meghvsa eltt viszont a szksges rtket be kell tlteni a krdses regiszterbe, majd ez utn meghvni a szubrutint. Dntsnk most gy, hogy a paramtertadsra hasznlt regiszter az akkumultor legyen! Ezek utn mdostsuk a [Az els alkalmazs kdja] alfejezetben bemutatott szubrutint a kvetkez mdon:

DELAY:MOV R7,Acik7:MOV R6,#22cik6:MOV R5,#237cik5:NOPDJNZ R5,cik5DJNZ R6,cik6DJNZ R7,cik7RET

Ezzel azt rjk el, hogy a szubrutin a meghvsakor az akkumultorbl tlti be a szksges rtket az R7 regiszterbe. Ez az rtk az egybjtos adatterjedelemnek megfelelen 0 s 255 kztt lehet. A rutin mkdse alapjn, ha 0-t adjunk neki, az olyan lenne, mintha 256-tl szmllnnk vissza! Hiszen amikor a DJNZ a 0-t eggyel cskkenti, akkor az rtk visszafel tfordul 255-re!

A szubrutin meghvsa mondjuk 0,6 msodperces vrakozshoz gy trtnik:

...MOV A,#60CALL DELAY...

Ha a szubrutinnak kell paramtert tadnia a fprogramnak, az assemblyben hasonlan trtnik, mint fordtva; a szubrutinnak valamely memriarekeszekbe vagy regiszterekbe kell rnia az tadni kvnt paramtereket, a fprogramnak viszont tudnia kell, hol keresse azokat. A lnyeg az, hogy bonyolultabb programoknl a szubrutinok ne rjk fll egyms paramtertadsi adatterleteit! Erre nagyon figyelni kell assemblyben!

4. A bitmintk ellltsa aritmetikai mveletekkel

Ahhoz, hogy a csk egyes fzisait el tudjuk lltani a mr ismert ill. a [Logikai s aritmetikai utastsok] alfejezetekben bemutatott utastsokkal, mindenekeltt tisztzzuk, mire van szksgnk! Ha egy nvekv cskot szeretnnk a LED-ekkel kijelezni, akkor a kvetkez bitmintzatokra mint fzisokra lesz szksgnk:

11111111

11111110

11111100

11111000

11110000

11100000

11000000

10000000

00000000

Hogy lehet ilyen sort ltrehozni? Erre nyilvn szzfle megolds van, de tekintsk azt, amikor elszr is egyetlen 1-es bitet lptetnk sorban balra:

00000001

00000010

00000100

00001000

00010000

00100000

01000000

10000000

Figyeljk meg, hogy az els listnak 9, mg a msodiknak csak 8 tagja van! Ha a msodik listnak az elemeit szpen sorban hozzadjuk 00000000-hoz, de gy, hogy a kvetkez listatagot mindig az addig megkapott eredmnyhez adjuk hozz, akkor az egyes fzisok gy alakulnak:

00000000

00000001

00000011

00000111

00001111

00011111

00111111

01111111

11111111

s ha ennek a listnak az elemeit negljuk (kpezzk a komplementerket; invertljuk ket), mris elrkeztnk a kvnt eredmnyhez.

A kvetkez kd nem pofonegyszer, nmi ravaszkodst tartalmaz. A fontos paramterek listjt s rtkeit azonban a kd utn tblzatban foglaljuk ssze, hogy kvetni lehessen, mit trtnik. Az olvast arra biztatjuk, hogy addig ne haladjon tovbb, amg ezt a kdot meg nem rtette! A [Az R2 s R3 regiszterek rtke a Code02.asm program futsa sorn.] ehhez nagy segtsget fog nyjtani. A kdban az R2 regiszterben azok az rtkek llnak el, amelyeket a fenti msodik lista tartalmaz. Az R3 regiszterben kpzdnek azok az rtkek, amelyeket a fenti harmadik lista tartalmaz. Nagyon fontos szerepet jtszik a kt regiszter kezdeti rtke ill. az, hogy a regiszterek rtkt a LED-ek portjnak vltoztatsa eltt vagy utn manipulljuk. A kdban a [Az els alkalmazs kdja] alfejezetben rgztettek szerint mr nem tntetjk fl az lland fordti direktvkat s jelen esetben a [Paramtertads szubrutinnak] alfejezetben bemutatott, paramtertadst is teljest, idhz DELAY szubrutint sem. me, a kd:

;**********Code02.asm**********ORG 0000h ;RESET-kor itt kezd a PROGRAM COUNTER. JMP MAIN ;Mindjrt el is pccintjk a ;programvezrlst feljebb a memriba, ;hiszen a ksbbiekben tanult megszaktsok ;vektorai foglalnak helyet a kdmemria ;legelejn.ORG 0060h ;Itt kezddik a memriban a tnyleges kd.MAIN:MOV R3,#0 ;Kezdeti rtk R3-nak. Ebben gylnek a csk ;egyes fzisainak megfelel rtkek, de ezt ;majd mg neglnunk kell. A kezdeti rtk ;0, azaz egyetlen LED sem vilgt.MOV R2,#10000000b ;Kezdeti rtk R2-nek. Amikor ezt az rtket ;elszr forgatjuk balra, akkor kapjuk meg ;az els hasznlhat rtket, azaz ;00000001-t, amit majd az addigi, de mg nem ;invertlt eredmnyhez adunk.MOV R4,#9 ;Kilencszer fut le ez a ciklus, hiszen 9 ;fzisbl ll a csk.csik:MOV A,R3 ;A-ba tltjk R3-at, azaz a csknak ;megfelel rtket.CPL A ;Negljuk A-t.MOV P2,A ;Kitesszk a LED-ek portjra.MOV A,#10 ;A megfelel paramterrelCALL DELAY ;meghvjuk az idhzst (0,1 s).MOV A,R2 ;A-be tltjk R2-t.RL A ;Balra forgatjuk az rtket.MOV R2,A ;Visszatltjk R2-be. ;R2-ben alakul ki a kvetkez lista: ;00000001 ;00000010 ;00000100 ;stb.MOV A,R3 ;A-ba tltjk R3-at, azaz a csk aktulis ;fzist.ADD A,R2 ;Hozzadjuk a balra lptetett bitet. ;gy alakul ki a kvetkez lista: ;00000001 ;00000011 ;00000111 ;stb.MOV R3,A ;Visszarjuk R3-ba a csk kvetkez fzist.DJNZ R4,csik ;Lekezeljk a ciklus kilpsi felttelt.JMP MAIN ;Visszaugratjuk az elejre a programot.

A [Az R2 s R3 regiszterek rtke a Code02.asm program futsa sorn.]ban a program kt kritikus jelentsg vltozjnak, azaz az R2 s R3 regisztereknek rtkeit tntetjk fl lpsrl lpsre. Kezd jelenti a kezdeti rtket, Be1 a ciklus els vgrehajtsnl a belpsi, Ki1 a kilpsi rtket. Be2 s Ki2 ugyangy; a ciklus msodik vgrehajtsnl stb. A P2-es portra a ciklus minden egyes vgrehajtsnl az R3 regiszterben trolt rtk komplementere kerl ki. Ez utn a regiszterek tartalma megvltozik. Tulajdonkppen ez az utmunklat jelenti a programban a ravaszkodst, hiszen ezzel a regisztereket elksztjk a ciklus kvetkez futshoz. Lthat, hogy amikor a ciklus valamely lefutsa vget r, a kvetkez lefuts ugyanazokkal a regiszterrtkekkel kezddik.

5.2. tblzat - Az R2 s R3 regiszterek rtke a Code02.asm program futsa sorn.

Programllapot

R2

R3

Kezd

10000000

00000000

Be1

10000000

00000000

Ki1

00000001

00000001

Be2

00000001

00000001

Ki2

00000010

00000011

Be3

00000010

00000011

Ki3

00000100

00000111

...

...

...

Be8

01000000

01111111

Ki8

10000000

11111111

Be9

10000000

11111111

Ki9

00000001

00000000

Csk a LED-eken

Csk a LED-eken

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

6. fejezet - Csk a LED-eken, tmren

Az elz alfejezetben a [2. feladat] megoldsnak assembly kdja taln egy kicsit nehezen volt emszthet. Sebaj, szokjunk hozz ahhoz, hogy az assemblyben ilyesfle gondolatmentek srn fordulnak el. Azonban meg szeretnnk nyugtatni az olvast; egy j darabig sokkal egyszerbb kdokkal fogjuk bemutatni az ADuC lehetsgeit. Vizsgljuk most meg, hogy hogyan lehetne sokkal egyszerbben megoldani a [2. feladat]ot akkor, ha mg nhny utastst ismernk!

1. A Carry bit

Az [Regiszterek] alfejezetben mr emltettk, hogy az assembly nyelv programozsnl bizonyos, az architektrra jellemz jelzbitek vagy flag-ek is fontos szerephez jutnak. Ismerkedjnk meg ht azzal a bittel, amelyik az ADuC mikrovezrlknl kulcsszerepet jtszik nagyon sok mveletnl! Ezt a bitet Carry bitnek vagy rviden C bitnek hvjk. A Carry angol sz magyarul tvitelt (is) jelent. Ez szoros sszefggsben ll a C bit szerepvel. Mire hasznlhat a C bit? Mit jelez? Mit mutat? Fbb hasznlati terletei a kvetkezk:

1. Kt bjt sszeadsakor tartalmazhatja a kezdeti tvitelt ill. jelzi, ha az eredmny tvitelt tartalmaz.

2. Kt bjt kivonsakor tartalmazhatja a kezdeti tvitelt ill. jelzi, ha az eredmny tvitelt tartalmaz.

3. Jelezheti a kirtkelt relci mint logikai kifejezs igaz vagy hamis mivoltt sszehasonlt utastsoknl.

4. Bitforgat mveleteknl ideiglenes trolknt mkdhet.

5. Bitmveleteknl a logikai kifejezsek egyik operandusa.

Amint lthat, a C bit hasznlhatsga nagyon szleskr. Sokszor mr a miatt bizonytalanodnak el a kezd programozk, hogy egyltaln van-e olyan utasts, amelynek vgrehajtsa nem befolysolja a C bit rtkt. Termszetesen van, m csakugyan sok utasts van hatssal a C bitre. gy amikor valaki nllan bngszi a 8051/8052-es processzormagok utastskszlett, akkor azt is mindig nzze meg, hogy egy adott utasts mit tesz a C bittel!

A C bit rtkt befolysol legegyszerbb utastsok a kvetkezk:

SETB C CLR C CPL C

Az els utasts magasra lltja a C bitet, teht C = 1 lesz. A msodik utasts trli a C bitet, teht C = 0 lesz. A harmadik utasts eredmnye mr sejthet; invertlja a C bitet. A mnemonikok rendre az angol Set Bit (bit magasra lltsa) kifejezsbl ill. Clear (trl) s Complement (komplementer) szavakbl szrmaznak.

2. Bitforgats C-n keresztl

A mr bemutatott bitforgat utastsoknak, teht RL-nek s RR-nek van olyan vltozatuk is, amely a C-biten keresztl vgzi a forgatst. Ez azt jelenti, hogy az akkumultor kilptetett bitje C-be kerl, a belp bit viszont C-bl rkezik. A kt utasts mnemonikja a kvetkez:

RLC A

s

RRC A

A mnemonikok az angol Rotate Accumulator Left through C (akkumultor forgatsa balra C-n keresztl) s Rotate Accumulator Right through C (akkumultor forgatsa jobbra C-n keresztl) kifejezsekbl szrmaznak. Knny meggondolni, hogy ha a C-bit rtkt szabadon lltgathatjuk, akkor azt lptethetnk be az akkumultorba, amit csak akarunk. A C-biten keresztl dolgoz bitforgat utastsok hatst a [Az RLC A (fent) s RRC A (lent) utastsok hatsa C-re s az akkumultor bitjeire]. bra szemllteti.

6.1. bra - Az RLC A (fent) s RRC A (lent) utastsok hatsa C-re s az akkumultor bitjeire

Az j utastsok ismeretben fogalmazzuk t a [2. feladat]ot:

3. feladat:

Jelentsnk meg a LED-soron egy egyre hosszabb cskot, amely nvekeds kzben minden fzisnl vrakozik egy keveset, teltds utn pedig jraindul. Hasznljuk a C-n keresztli bitforgats mvelett! [Code03]

A [A bitmintk ellltsa aritmetikai mveletekkel] alfejezet els listja mutatja, hogy milyen bitmintzatokat kell a 2-es portra kitennnk, hogy ellljanak a megjelentend csk egyes fzisai. Ltni fogjuk, hogy milyen hatkony eszkzt ad a keznkbe a C-n keresztl trtn bitforgats. Ttelezzk fl ugyanis, hogy az akkumultor tartalma 11111111. Ez ugyebr az els fzis, amikor egyetlen LED sem vilgt. Ha ezek utn trljk a C bitet (C = 0), majd kiadjuk az RLC A utastst, akkor az akkumultor tartalma 11111110 lesz. Az eredeti rtk bal szls, azaz 7. bitje, azaz aktulisan 1 lp be C-be. Ezzel az rtkkel a tovbbiakban semmi dolgunk. A kvetkez fzis ellltshoz jra trljk a C bit rtkt, jra alkalmazzuk a C-n keresztli bitforgatst, s gy tovbb. Ezzel az eljrssal sokkal egyszerbben lltjuk el a csk egyes fzisainak bitmintzats, mint amikor aritmetikai s logikai mveletekkel tettk. A kd is sokkal rvidebb, tmrebb s knnyebben rthetv vlik. Figyeljnk arra, hogy a csk fzisainak megfelel rtkeket az R3 regiszterben troljuk, hiszen az akkumultort az idhz szubrutin meghvshoz hasznlni fogjuk. Ez a szubrutin (DELAY) tkletesen megegyezik azzal, amit a [Paramtertads szubrutinnak] alfejezetben ksztettnk. me, a kd:

;**********Code03.asm********** ORG 0000h ;RESET-kor itt kezd a PROGRAM COUNTER. JMP MAIN ;Mindjrt el is pccintjk a ;programvezrlst feljebb a memriba, ;hiszen a ksbbiekben tanult megszaktsok ;vektorai foglalnak helyet a kdmemria ;legelejn. ORG 0060h ;Itt kezddik a memriban a tnyleges kd. MAIN: MOV R3,#11111111b ;Kezdeti rtk R3-nak. Ebben gylnek a csk ;egyes fzisainak megfelel rtkek, melyek ;a P2-es portra randk. A kezdeti rtk ;az sszes LED-et kikapcsolja. MOV R4,#9 ;Kilencszer fut le ez a ciklus, hiszen 9 ;fzisbl ll a csk. csik: MOV P2,R3 ;Kitesszk a LED-ek portjra a csk rtkt. MOV A,#10 ;A megfelel paramterrel CALL DELAY ;meghvjuk az idhzst (0,1 s). MOV A,R3 ;A-ba tltjk a csk aktulis rtkt. CLR C ;Trljk a C bitet. RLC A ;Belptetjk A-ba a C bitet, jobbrl balra. MOV R3,A ;Visszarjuk R3-ba a csk j fzist. DJNZ R4,csik ;Lekezeljk a ciklus kilpsi felttelt. JMP MAIN ;Ugrs vissza a program elejre.

Csk a LED-eken, tmren

Csk a LED-eken, tmren

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

7. fejezet - Adatok kiolvassa a kdmemribl

A [Csk a LED-eken]. s [Csk a LED-eken, tmren]. fejezetekben megtanultuk, hogyan lehet szisztematikusan mintzatokat alkotni, melyeket aztn kijeleztnk az ADuC-panel LED-sorn. Azonnal addik a krds: mi van, ha tetszlegesen vlasztott mintzatokat szeretnnk kijelezni? A vlasz erre az, hogy ez is knnyszerrel megoldhat, csupn egy igen fontos regisztert s egy j cmzsmdot kell megismernnk hozz. A kvetkez feladatot teht gy fogalmazzuk meg:

4. feladat:

Jelentsnk meg a LED-soron a kdmemriban elre rgztett mintzatokat! [Code04, Code05]

1. Az adatmutat

A 8051/8052-es processzormagoknak van olyan regiszterk is, amelyikkel a memriban tallhat adatokat rhetjk el szisztematikusan. Ez a regiszter az adatmutat, angol nevn Data Pointer. Nagyon fontos tudnunk, hogy ez a regiszter valjban hrombjtos, azaz hrom egybjtos regiszterbl ll. Ezek megnevezse: DPP, DPH, DPL. A rvidtsek az angol Data Pointer Page, Data Pointer High s Data Pointer Low kifejezsekbl szrmaznak. A DPP regiszterrel ebben a tanknyvben nem foglalkozunk (ez mutatja a megcmzend memriaterlet adott lapjt); elg lesz most neknk a DPH/DPL regiszterketts. Ez a kt regiszter szorosan sszetartozik, egytt egy 16-bites cmet alkot. Ezzel a 16-bites cmmel 64 kilobjtos memriaterlet cmezhet. A memriaterletek 256-bjtos egysgeit nevezik lapoknak. gy pl. az 1. lap a 64 kbyte-on bell a 0100h cmtl a 01FFh cmig tart. A DPH regiszter az adatmutat fels bjtja, mg a DPL regiszter az als bjtja. Ezek egyttes rtelmezshez nyjt segtsget a [Az adatmutat als bjtja, fels bjtja s azok egyttes rtelmezse.]. Magt a regiszterkettst innentl kezdve DPTR-nek fogjuk jellni, hiszen egyttesen alkotjk az adatmutatt (Data Pointer-t). Lthat, hogy a DPTR adatmutat gy sszesen 16-bites binris rtket reprezentl. Ha ezt memriacmzsre hasznljuk, akkor gy jn ki a 64 kbyte, hiszen 216 = 65 536 = 641 024 = 64210 (v. [Memria] alfejezet).

7.1. tblzat - Az adatmutat als bjtja, fels bjtja s azok egyttes rtelmezse.

DPH bitjei

DPL bitjei

7.

6.

5.

4.

3.

2.

1.

0.

7.

6.

5.

4.

3.

2.

1.

0.

A ktbjtos DPTR regiszter

15.

14.

13.

12.

11.

10.

9.

8.

7.

6.

5.

4.

3.

2.

1.

0.

2. rtkek nvelse s cskkentse

Az assembly nyelvek elemi utastsi kz tartozik a memriarekeszek tartalmnak 1-gyel val nvelse s cskkentse. Ezeket az utastsokat szigor rtelemben aritmetikai utastsoknak kell tekintennk, de ennl a besorolsnl azrt rezeg a lc. No, de semmi baj, az egyszer nvel s cskkent utastsok nlkl nha szinte kptelensg, de legalbbis igen nehzkes lenne megrni azt, amit akarunk.

A memriarekesz nvelst vgrehajt utasts mnemonikja INC, ami az angol Increment Register (regiszter nvelse) kifejezsbl szrmazik, a memriarekesz cskkentst vgrehajt utasts mnemonikja DEC, ami az angol Decrement Register (regiszter cskkentse) kifejezsbl jn. Az eddig ismertetett cmzsmdokkal a kt utasts vltozatai a kvetkezk:

INC AINC RnINC directINC DPTRDEC ADEC RnDEC direct

Lthat, hogy az adatmutat nvelsre ltezik utasts, de cskkentsre nincs! Ez azonban ne kesertsen el bennnket, az ADuC 842-es a megfelel SFR hasznlatval konfigurlhat gy, hogy az adatmutatval trtn cmzs vgrehajtsa utn annak rtke automatikusan 1-gyel njn vagy akr 1-gyel cskkenjen. Egyb esetekben neknk kell gondoskodnunk DPTR nvelsrl vagy cskkentsrl.

3. A kd-indirekt cmzs

Az assembly nyelvekben ltalban lteznek olyan utastsok, melyekkel indirekt cmzs valsthat meg. Aki tanult mr magas szint programozsi nyelvet, annak a mutatk koncepcija jelenthet nmi fogdzkodt. Az indirekt cmzs lnyege az, hogy egy rgztett cmhez egy segdregiszter vagy az adatmutat tartalmt mg hozzadja a processzor, s az gy kapott cmen lv memriarekeszhez nyl hozz. A rszletes magyarzatot jelen esetben mindjrt egy konkrt cmzstpussal ismertetjk. Ennek a cmzsnek a neve: kd-indirekt cmzs (angolul Code Indirect Addressing). Azrt kd-indirekt, mert a processzor a kdmemrihoz fr hozz s msol ki onnan adatot. rni a megcmzett helyre nyilvn nem tud, hiszen a kdmemria futs kzben csak olvashat memriaknt mkdik. Nzzk, milyen szintaxisa van annak a kd-indirekt cmzssel dolgoz utastsnak, amellyel foglalkozni fogunk:

MOVC A,@A+DPTR

Kicsit csemegzznk az utasts megjelensn! A MOV utastst mr ismerjk tbbfle cmzsmddal. Azonnal feltnhet, hogy ehhez kpest a fenti utasts mg egy C karaktert tartalmaz. Ez a C bet utal a kdhoz trtn hozzfrsre. A MOVC mnemonik ugyanis az angol Move Code Byte to Accumulator (kdbjt (be)mozgatsa az akkumultorba) kifejezsbl szrmazik. Ami mg feltnhet, az az a tny, hogy a cmzsnl szerepel a kukac karakter: @. Ez a karakter neknk, magyaroknak kukac, a hollandoknak majomfarkinca (apenstaartje), aminek itt semmi rtelme, s egy angol anyanyelv ember egy e-mail-cm felolvassakor a kukac karakterhez rve azt mondja, hogy at ([t], prepozci, jelentse: -nl, -nl). Helymegjellsre hasznlja! Gondolkodjunk most ezzel a logikval! A MOVC utasts a MOV eltag alapjn adatot fog msolni a kdbl; erre a C karakter utal. Az utasts els operandusa az A, gy a msols clllomsa az akkumultor. Most jn az, hogy honnt trtnik a msols: ennek cmt gy hatrozzuk meg, hogy az adatmutathoz (DPTR) hozzadjuk az akkumultor (A) aktulis rtkt: DPTR+A. Vgl a kukac karakter mutatja, hogy a DPTR+A mvelettel megadott cm a forrscm, azaz onnan trtnik az ott llomsoz adat kiolvassa. Figyeljnk oda arra, hogy ennl az utastsnl az akkumultor tartalma fllrdik! A kd-indirekt cmzs megrtshez az [A kd-indirekt cmzs szemlltetse.] nyjt segtsget.

7.2. tblzat - A kd-indirekt cmzs szemlltetse.

Kdmemria cmei

rtkek

0200h

20

0201h

11

0202h

3

0203h

28

0204h

19

0205h

72

0206h

10

0207h

5

DPTR

A

A rtke a MOVC A,@A+DPTR utasts vgrehajtsa utn

0200h

0

20

0200h

2

3

0200h

6

10

0200h

7

5

0204h

0

19

0204h

3

5

4. Adatok elhelyezse a kdban

Adatok elhelyezse a kdban viszonylag egyszeren trtnik. Ehhez csak a DB (Data Byte, magyarul adatbjt) fordti direktvt kell ismernnk. Az adatok felsorolst jelent terletnek vagy konkrt cmet, vagy cmkt (ez a gyakoribb) kell adnunk, amint azt az albbi kdrszletben lthatjuk:

adatok:

DB 11111111b ;Az adattmb elemei.DB 01111110bDB 00111100bDB 00011000bDB 00000000bDB ...

A DB direktvk megadsa utn az rtkads pontosan azzal a szintaxissal trtnhet, mint amit a kzvetlen cmzsnl lttunk ([Kzvetlen cmzs] alfejezet), de most nincs szksg a ketts keresztre (#).

Az adatmutatba a cmkvel elltott memriaterlet kezdcmt a kvetkez szintaxissal tlthetjk:

MOV DPTR,#adatok

Ennek az utastsnak az ltalnos megjellse a kvetkez:

MOV DPTR,#data16

A kzvetlen cmzs rendben is van, de figyeljnk oda arra, hogy az adatmutatnak 16-bites adatot kell megadnunk, hiszen 64 kilobjt megcmzshez ppen ennyi szksges.

Elrkeztnk ht ahhoz a ponthoz, hogy megoldjuk a [4. feladat]ot. A kdhoz folyamatbrt nem tartunk szksgesnek most sem, mert ismt csak nagyon egyszer esettel llunk szemben. Nyolc bitmintzatot fogunk kijelezni a LED-soron, majd jraindtjuk a ciklust, gy jpofa, mozg mintzatok hatst kelt alkalmazst kapunk. A kdbl ppen gy hinyozni fognak az lland direktvk s az idhz szubrutin (DELAY), mint a korbbi nhny esetben.

;**********Code04.asm**********ORG 0000h ;RESET-kor itt kezd a PROGRAM COUNTER. JMP MAIN ;Ugrs a tnyleges programkezdethet. ORG 0060h ;A tnyleges program kezdete.MAIN:MOV DPTR,#adatok ;Az adatok tmbjnek cme az adatmutatba ;kerl.MOV R3,#0 ;Az R3 regisztert hasznljuk ;indexregiszternek az indirekt cmzshez.MOV R4,#8 ;8-szor fut le ez a ciklus, mert 8 ;adatbjtot akarunk kijelezni.displ:MOV A,R3 ;A-ba tesszk a soros indexnket R3-bl.MOVC A,@A+DPTR ;Adat olvassa a kdmemribl kd-indirekt ;cmzssel.MOV P2,A ;A beolvasott adat kihelyezse a LED-sorra.MOV A,#20 ;A megfelel paramterrelCALL DELAY ;meghvjuk az idhzst (0,2 s).INC R3 ;Az indexregiszternk rtknek nvelse a ;ciklus kvetkez lefutshoz.DJNZ R4,displ ;Lekezeljk a ciklus kilpsi felttelt.JMP MAIN ;Ugrs vissza a program elejre.adatok:DB 01111110b ;Az adattmb elemeiDB 00111100bDB 10011001bDB 11000011bDB 11100111bDB 11000011bDB 10011001bDB 00111100b

5. Az adatmutat automatikus nvelse

Az elz alfejezetben bemutatott kdban az adatmutat rtkt nem vltoztattuk. Indexelshez csak az akkumultorra volt szksgnk. Ms lenne a helyzet, ha 255-nl tbb adatbjtot szeretnnk kijelezni. Ekkor az akkumultor nmaga mr nem lenne elg az indexelsre, gy gondoskodnunk kellene az adatmutat nvelsrl is. Van viszont lehetsg arra, hogy az ADuC 842-es minden egyes kd-indirekt cmzs utn automatikusan 1-gyel nvelje DPTR-t. Ehhez egy SFR-be kell elhelyeznnk a megfelel rtket.

A specilis funkcij regiszterekrl rviden mr tettnk emltst a [Portok s funkciregiszterek] alfejezetben. Az elektronikus tanknyv htralv rszben sokszor fogunk hasznlni SFR-eket. Ehhez elengedhetetlenl szksges lesz az Analog Devices cg ltal a 842-es architektrhoz mellkelt lers tanulmnyozsa [1]. Ennek a tanknyvnek nem az a feladata, hogy minden SFR minden funkcijt kimerten bemutassa. Sok SFR-rel fogunk dolgozni, de nem mindegyikkel. Amelyekkel dolgozunk, azoknak sem tudjuk mindig minden konfigurcijt bemutatni. Amennyire azonban lehetsges, tanknyvhz ill mdon prbljuk meg taglalni az aktulisan hasznlt SFR kivlasztott konfigurcijnak hatst. Az SFR-eknek ltalban van sajt nevk, melyekkel hivatkozhatunk rjuk. Ezek a nevek is tbbnyire mnemonikok, melyek angol kifejezsekbl szrmaznak. Ezek a nevek szerepelnek tbbek kztt az assemblerhez tartoz MOD842 fjlban is. Szmos SFR bitenknt cmezhet, azaz minden bitjnek kln neve van, melyeket a C bithez hasonlan lltgathatunk magasra vagy alacsonyra. A tbbi SFR bitenknt nem, csak egsz bjtknt cmezhet. Ebben az esetben a mi felelssgnk az, hogy minden bitnek pontosan azt az rtket adjuk, ami a felhasznlni kvnt hatst kivltja. Az [1] referenciaknt megadott, ADuC841_2_3.pdf fjlban, mely a gyrttl megvsrolt CD-rl szrmazik, az SFR-ek trgyalsnl mindig kzlik azok mnemonikjt, teljes angol nevt, memriacmt, bekapcsolskor felvett default rtkt s bitenknti cmezhetsgt. gy gondoljuk, hogy ezek kzl a legfontosabbakat mi is mindig sszefoglaljuk egy tblzatban, kiegsztve a magyar megnevezssel.

Visszatrve az adatmutatra, az adatmutat mkdst befolysol SFR adatait a [A DPCON SFR trgyalt bitjei.]ban talljuk. Kezd szintnk miatt csak kt bitjnek hatst ismertetjk.

7.3. tblzat - A DPCON SFR trgyalt bitjei.

DPCON

Data Pointer Control

Adatmutat-vezrl

Bekapcsols utni default rtk:

00h

Bitenknti cmzsi lehetsg:

nincs

Bit

Bit neve

Lers

3

DP0m1

Az adatmutat viselkedse.

DP0m1 DP0m0 zemmd

0 0 Norml (8052-es) viselkeds.

0 1 MOVX s MOVC utastsok utn DPTR

nvelse 1-gyel.

1 0 MOVX s MOVC utastsok utn DPTR

cskkentse 1-gyel.

1 1 DPTR als bjtjnak kipeckelse.

(16-bites eszkzknl lehet hasznos.)

2

DP0m0

Az egyes SFR-ek lehetsgeinek trgyalsakor arra biztatjuk az olvast, hogy ezzel az elektronikus tankknyvvel prhuzamosan tanulmnyozza az emltett ADuC841_2_3.pdf fjl megfelel rszt! Az adatmutat mkdst befolysol DPCON SFR sszes bitjnek magyarzata itt tallhat meg: [1, p. 51, Table 21]. A hivatkozott tblzatbl kiderl, hogy a bemutatott adatmutatt elsdleges adatmutatnak kell neveznnk, mert van egy msodlagos vagy hbb fordtssal rnyk-adatmutat is. Ez utbbival azonban nem foglalkozunk. Az elsdleges adatmutat viselkedst a DPCON 3. s 2. bitje hatrozza meg. Ha e kt bit rtke egyttesen 01, akkor az azt a mkdst vltja ki, hogy minden egyes MOVC (s MOVX, de errl majd ksbb) utasts utn DPTR rtke 1-gyel n. Ezek szerint ilyenkor az akkumultorra igazibl nincs is szksgnk a cmzshez, de mivel az mindig rsze a kd-indirekt cmzsnek, ezrt clszer az rtkt 0-n tartani. (Rafinltabb programozk persze kombinlhatjk a kettt) Mindazt, amit most elmondtunk, a kvetkez kdban mutatjuk be. Ez a kd a bemutatott rsztl eltekintve tkletesen megegyezik Code04-gyel, lsd elz alfejezet. Ezzel az adatmutats trkkel a kd mg rvidebb vlik.

;**********Code05.asm**********MAIN:MOV DPCON,#00000100b ;Annak belltsa, hogy az elsdleges ;adatmutat automatikusan 1-gyel njn, ;valahnyszor vgrehajtdik a MOVC ;utasts.MOV DPTR,#adatok ;Az adatok tmbjnek cme az adatmutatba ;kerl.MOV R4,#8 ;8-szor fut le ez a ciklus, mert 8 ;adatbjtot akarunk kijelezni.displ:MOV A,#0 ;A kd-indirekt cmzshez 0-t tesznk A-ba, ;mert most majd a DPTR fog automatikusan ;nni.MOVC A,@A+DPTR ;Adat olvassa a kdmemribl kd-indirekt ;cmzssel.MOV P2,A ;A beolvasott adat kihelyezse a LED-sorra.MOV A,#20 ;A megfelel paramterrelCALL DELAY ;meghvjuk az idhzst (0,2 s).DJNZ R4,displ ;Lekezeljk a ciklus kilpsi felttelt.JMP MAIN ;Ugrs vissza a program elejre.

Adatok kiolvassa a kdmemribl

Adatok kiolvassa a kdmemribl

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

Created by XMLmind XSL-FO Converter.

8. fejezet - Felttelek kezelse

A 8051/8052-es processzormagok utastskszlete nem bvelkedik sszehasonltsokat lehetv tev utastsokban. Persze azzal a nhnnyal, ami rendelkezsnkre ll, mindent el lehet intzni, csak hozz kell szokni a logikjukhoz. Felttelek kezelsre egy programban szinte mindig szksg van. Ha mr akrcsak egyetlen ciklust is runk, annak kilpsi felttele is felttel. Ez az egyik legfontosabb eset. A msik az, amikor valamely logikai kifejezs igaz vagy hamis mivolta alapjn el kell gaztatnunk a programot. Ebben a fejezetben megmutatjuk, hogy miknt lehet pontosan ugyangy mkd ciklusokat tbbflekppen megrni. A bemutatott mdszerek nem kimert elemzst jelentenek; ezek alapjn (vagy ppen ezektl fggetlenl) tovbbi ciklusszervezsi gondolatmeneteket bizonyra az olvas is knnyen ki tud tallni.

1. sszeads s kivons

Az tvitel nlkli sszeads utastst mr bemutattuk a [Logikai s aritmetikai utastsok] alfejezetben, azonban a teljessg kedvrt jra felsoroljuk a mr ismert cmzsmd vltozatokat:

ADD A,RnADD A,directADD A,#data

Ez az utasts befolysolja a C bit rtkt. Ha az sszeads eredmnye nagyobb, mint 255, akkor a C bit 1 lesz, klnben 0. Ezrt hvjk tviteli bitnek. Ennek segtsgvel lehet tbb bjton brzolt szmokat sszeadni, de akkor azt mr sszeads kzben figyelembe kell venni, amit az ADD utasts nem tesz! Az sszeadsnak van olyan vltozata is, amely nem csak az operandust adja az akkumultorhoz, hanem a C bit tartalmt is. Az tviteles sszeads mnemonikja ADDC, ami az angol Add Accumulator with Carry (hozzad az akkumultorhoz tvitellel) kifejezsbl szrmazik. A mvelet vgrehajtsa befolysolja a C bit rtkt, brmi volt is az a mvelet elvgzse eltt. Jelentse a mvelet utn ugyanaz, mint az ADD utastsnl. Az tviteles sszeads utastsa az eddig megtanult cmzsmdokkal:

ADDC A,RnADDC A,directADDC A,#data

Hogy jl rthet legyen, megismteljk a C bittel kapcsolatos tudnivalkat. Vannak olyan utastsok, melyek vgrehajtsnl nem mindegy, hogy mi volt a C bit rtke az utasts vgrehajtsa eltt. Vannak aztn olyan utastsok, amelyek vgrehajtsa befolysolja a C bit rtkt, de ez csak az utasts vgrehajtsa utn derl ki. A kt eset teljesen mst jelent, s figyeljnk arra, hogy bizonyos utastsokra mind a kt megfogalmazs igaz!

A teljessg kedvrt el kell mondanunk, hogy a C bit mellett van mg kt jelzbit vagy flag, melyek rtkt befolysoljk az aritmetikai mveletek. Ezek az AC ill. OV bitek. Az AC rvidts az angol Auxiliary Carry (segd-, kiegszt tvitel) kifejezsbl, az OV pedig az Overflow (tlcsorduls) szbl szrmazik. AC pont ugyanazt jelzi, mint C, csak nem a 7. bitnl, hanem a 3. bitnl (a bitek szmozst 0-val kezdve). OV a kettes komplemensben brzolt eljeles szmoknl jut szerephez. Ezekkel a jelzbitekkel egyelre nem foglalkozunk.

A kivons utastsnak mnemonikja SUBB, ami az angol Subtract from Accumulator with Borrow (kivons az akkumultorbl klcsnzssel) kifejezsbl szrmazik. A borrow, azaz klcsnzs sz magyarzatra szorul. Amerikban az terjedt el kt szm papron trtn kivonsnl, hogy ha kisebb szmjegybl kell nagyobbat kivonni valamely helyirtknl, akkor a kisebbtend kvetkez jegyt cskkentik eggyel, majd ezt a klcsnvett rtket adjk hozz tmenetileg a kisebbtend, problms szmjegyhez. Az eggyel cskkentett jegyet t is hzzk, majd odarjk az eggyel kisebb szmjegyet. Ez a klcsnzs szerepel az utasts megnevezsben. A mveletet magyarul mi hvjuk nyugodtan simn tviteles kivonsnak. A SUBB utasts vltozatai a mr ismert cmzsmdokkal:

SUBB A,RnSUBB A,directSUBB A,#data

A SUBB utasts vgrehajtsnl a C bit eredeti rtke is beszmt! Ha az utasts vgrehajtsa eltt C = 1, akkor eleve lesz klcsnzs, ha C = 0, akkor nem lesz. (Fldi haland ez utbbi rtelemben gondolna elsknt a kivons mveletre.) Kivonsnl, ahogy az vrhat, maga az eredmny is befolysolja a C bitet. C akkor lesz 1, ha a kivonand nagyobb, mint a kisebbtend, azaz az akkumultor rtke. (AC s OV rtke itt is ahhoz hasonlan alakul, mint az sszead utastsoknl.) Ha nem akarunk magunknak meglepetst a SUBB utasts hasznlatnl, nagyon figyeljnk arra, hogy mi a C bit rtke a vgrehajts eltt!

2. sszehasonlt s elgazsi utastsok

Ebben a fejezetben sszeszedjk azokat az sszehasonlt s elgazsi utastsokat, melyekkel ciklusokat lehet szervezni s egyb programelgazsokat megvalstani.

A [Egyszer ciklusszervezs] alfejezetben mr trgyaltuk a DJNZ utastst az R segdregiszterekkel. Ezt most megismteljk a felsorlsban, s most mr egy msik cmzssel is rteni fogjuk:

DJNZ Rn,relDJNZ direct,rel

Az utastshoz tartoz magyarzat megtallhat az emltett alfejezetben.

A msik sszehasonlt s elgazsi utasts a CJNE. A mnemonik az angol Compare and Jump if Not Equal (sszehasonlt, s ugrik, ha nem egyenl) kifejezsbl szrmazik. Cmzsmd alapjn az albbi verzik lteznek:

CJNE A,direct,relCJNE A,#data,relCJNE Rn,#data,rel

A hrom operandusbl az els azt jelenti, amit sszehasonltunk. Ez lehet az akkumultor vagy valamelyik R regiszter tartalma. A msodik operandus az, amihez hasonltunk, a harmadik pedig egy relatv ugrs mrtke, azaz az ugrs mrtke az utasts pozcijhoz kpest +127 s 128 bjt kztt. Assemblyben ezt ltalban cmkkkel adjuk meg, s az assembler az, ami a kokrt rtket meghatrozza. Ugrs akkor trtnik, ha a kt sszehasonltott objektum rtke nem egyenl. Klnben a program csorog tovbb.

A harmadik s negyedik sszehasonlt s elgazsi utasts a JZ s a JNZ. A mnemonikok az angol Jump if Accumulator Zero (ugrik, ha az akkumultor nulla) s Jump if Accumulator Not Zero (ugrik, ha az akkumultor nem nulla) kifejezsbl szrmaznak. Ezek csak az akkumultor rtke alapjn ugratnak vagy nem ugratnak:

JZ relJNZ rel

Ennyi! Bitekre vonatkozan mg vannak elgazsi utastsok; azokat ksbb vesszk. De tbb tnyleg nincs. Nhny trkkt azonban mg a ksbbiekben ismertetnk az ugr utastsokkal kapcsolatban.

3. Hat varici egy feladatra

Az elz alfejezetek utn prbljunk klnfle mdon ciklusokat szervezni valami ltszlag rtelmes feladatot teljestve, de gy, hogy a ciklusszervezs mdjainak logikja akr jelentsen eltrhet egymstl, a ltszat azonban tkletesen ugyanaz maradjon!

5. feladat:

Szmoljunk el a programmal 1-tl 15-ig, s kis vrakozssal jelentsk meg a LED-soron az rtkeket a kettes szmrendszerben! [Code06, Code07, Code08, Code09, Code10, Code11]

Ennek a feladatnak a megoldsnl hat eltr ciklusszervezst fogunk kielemezni. Ezekhez most mr folyamatbrt is rajzolunk. A megadott kdrszletekben az idhz szubrutinunk mg mindig az, mint az elz nhny feladat megoldsnl, gy ezt jra ismt csak flsleges lenne megadnunk. Jelenltre csak az azt meghv utasts fog utalni.

Az els megoldsban a DJNZ utastst