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

regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

Dr Kraacutenicz BalaacutezsDr Halas Jaacutenos

Created by XMLmind XSL-FO Converter

Mikrovezeacuterlők mechatronikai alkalmazaacutesaiiacuterta Dr Kraacutenicz Balaacutezs eacutes Dr Halas Jaacutenos

Publication date 2014Szerzői jog copy 2014 Pannon Egyetem

A tananyag a TAacuteMOP-412A1-111-2011-0042 azonosiacutetoacute szaacutemuacute bdquoMechatronikai meacuternoumlk MSc tananyagfejleszteacutesrdquo projekt kereteacuteben keacuteszuumllt A tananyagfejleszteacutes az Euroacutepai Unioacute taacutemogataacutesaacuteval eacutes az Euroacutepai Szociaacutelis Alap taacutersfinansziacuterozaacutesaacuteval valoacutesult meg

Keacutezirat lezaacuterva 2014 februaacuter

Lektoraacutelta Dr Hidveacutegi Timoacutet

A kiadaacuteseacutert felel a(z) Pannon Egyetem

Felelős szerkesztő Pannon Egyetem

Created by XMLmind XSL-FO Converter

Tartalom1 Előszoacute eacutes ars poetica 12 Ismerkedeacutes az assembly programozaacutesi nyelvvel 4

1 Az assembly nyelvről aacuteltalaacuteban 42 Memoacuteria 53 Regiszterek 54 Koumlzvetlen ciacutemzeacutes 65 Direkt ciacutemzeacutes 66 Oumlsszehasonliacutetaacutesok eacutes ugraacutesok 7

3 Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr 94 Első programunk villogtassuk a panel LED-jeit 11

1 Portok eacutes funkcioacuteregiszterek 112 Egyszerű ciklusszervezeacutes 113 Szubrutinok 124 Ugraacutes a koacutedon beluumll 135 Oacuterajel veacutegrehajtaacutesi idő 136 Az első alkalmazaacutes koacutedja 14

5 Csiacutek a LED-eken 161 Bitek sorszaacutemozaacutesa 162 Logikai eacutes aritmetikai utasiacutetaacutesok 163 Parameacuteteraacutetadaacutes szubrutinnak 174 A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkel 18

6 Csiacutek a LED-eken toumlmoumlren Error Reference source not found1 A Carry bit 222 Bitforgataacutes C-n keresztuumll 22

7 Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel 241 Az adatmutatoacute 242 Eacuterteacutekek noumlveleacutese eacutes csoumlkkenteacutese 243 A koacuted-indirekt ciacutemzeacutes 254 Adatok elhelyezeacutese a koacutedban 265 Az adatmutatoacute automatikus noumlveleacutese 27

8 Felteacutetelek kezeleacutese 301 Oumlsszeadaacutes eacutes kivonaacutes 302 Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesok 313 Hat variaacutecioacute egy feladatra 31

9 Nyomoacutegombok a panelon 381 Gombnyomaacutes detektaacutelaacutesa 382 Logikai műveletek bitekkel 383 Elaacutegazaacutesok bitek alapjaacuten 404 Logikai műveletek baacutejtokkal 405 Bitek moacutedosiacutetaacutesa baacutejton beluumll 416 Gombnyomaacutesok vizsgaacutelata 427 Leacutepteteacutes nyomoacutegombbal 438 Bitvaacuteltozoacutek hasznaacutelata 449 A prellegeacutes kikuumlszoumlboumlleacutese vaacuterakozaacutessal 4710 A teljes alsoacute RAM 48

10 A belső oacutera hasznaacutelata 5111 Megszakiacutetaacutesok 55

Created by XMLmind XSL-FO Converter

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

1 Az ADuC 842 megszakiacutetaacutesai 552 Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes 573 Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutes 604 A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok 63

12 Kuumllső aacuteramkoumlroumlk LED-ekkel 671 Jelzőlaacutempa vezeacuterleacutese 672 Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedja 713 Jelzőlaacutempa toumlbb uumlzemmoacuteddal 72

13 Kuumllső aacuteramkoumlr fotokapuval 7714 Heacutetszegmenses kijelző meghajtaacutesa 8015 Kommunikaacutecioacute az UART-tal 84

1 Az UART soros interfeacutesz 842 Baacutejtok fogadaacutesa eacutes kuumlldeacutese assemblyben 903 Soros porti kommunikaacutecioacute pollozaacutessal 924 Soros porti kommunikaacutecioacute megszakiacutetaacutessal 955 Koacutedreacuteszletek beeacutepiacuteteacutese sajaacutet programunkba 966 Az ADuC vezeacuterleacutese PC-vel 99

16 Iacuteraacutes a memoacuteriaacuteba 1011 Iacuteraacutes az alsoacute eacutes a felső RAM-ba 1022 Iacuteraacutes a belső adatmemoacuteriaacuteba 105

17 Időziacutetőkszaacutemlaacuteloacutek 1081 Egyszerű időmeacutereacutes az időziacutetővel 1112 Stopperoacutera keacutet fotokapuval 113

18 PWM-jelek 1171 PWM-jel előaacutelliacutetaacutesa a mikrovezeacuterlő jelgeneraacutetoraacuteval 1172 Pulzaacuteloacute LED-ek 121

19 AD-aacutetalakiacutetaacutes 1251 Az ADuC 842-es AD-aacutetalakiacutetoacuteja 1252 Egyszerű AD-aacutetalakiacutetaacutes 129

20 Alkonykapcsoloacute 1341 Besugaacuterzaacutesmeacutereacutes fototranzisztorral 1342 Az alkonykapcsoloacute programja 1363 Hisztereacutezis 137

21 TTL IC-k eacutes tranzisztorok a portokon 1391 A felhuacutezoacute-ellenaacutellaacutesok szerepe 1392 Tranzisztorok mint kapcsoloacutek 141

22 Hőmeacuterseacuteklet-meacutereacutes 1441 Termisztorok 1442 Hőmeacuterő 1473 Hőmeacuterseacuteklet-szabaacutelyozaacutes 153

23 Megvilaacutegiacutetaacutesszabaacutelyozoacute 15924 Leacuteptetőmotor vezeacuterleacutese 163

1 Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorok 1632 Bipolaacuteris leacuteptetőmotorok vezeacuterleacutese 1643 A motor leacutepteteacutese 166

25 Utoacuteszoacute 17026 Az Analog Devices hozzaacutejaacuterulaacutesa 17127 Koumlszoumlnetnyilvaacuteniacutetaacutes 17228 Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja 173Irodalomjegyzeacutek Error Reference source not found

Created by XMLmind XSL-FO Converter

Az aacutebraacutek listaacuteja11 A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll 112 A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek 231 A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll 932 Az Analog Devices soros porti letoumlltőprogramjaacutenak feluumllete 933 A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete 1051 Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire 1761 Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor bitjeire 2281 Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval 3282 Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel 3283 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő 3384 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő 3485 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk 3586 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk 3691 A 8 feladat (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja 4392 A Lower RAM bitenkeacutent ciacutemezhető teruumllete 4493 A 9 feladat (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja 4594 Az alsoacute RAM neacutegy regiszterbankja 4895 Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete 49101 A 12 feladat (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja 53111 A 13 feladat (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja 58112 A 15 feladatban megkoumlvetelt LED-leacutepteteacutes 63113 A 15 feladat (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja 64121 Fontos tudnivaloacute a portokkal kapcsolatban 67122 A 16 feladat (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 67123 A 16 feladat megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef 68124 A 16 feladat moacutedosiacutetott megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef 70125 A 17 feladat megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek 72131 A 18 feladat (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 77132 Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel 78133 A fototranzisztor foumlldre huacutezza a P21-es laacutebat iacutegy az arra koumltoumltt LED vilaacutegiacutet 78141 A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese 80142 Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa 80143 Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel 80144 A 20 feladat (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja 82151 USB-kaacutebel belső vezeteacutekei 84152 A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten 88153 A 21 feladat (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja 92154 Az ASCII karakterkeacuteszlet 32-től 126-ig 94161 Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese 101162 A 25 feladat (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja 102171 A 27 feladat (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 113181 Neacutegyszoumlgjel 117

Created by XMLmind XSL-FO Converter

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

182 A PWM-generaacutetor 1 uumlzemmoacutedja 119191 Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei 125192 Az AD-aacutetalakiacutetaacutes szabaacutelyai 129193 Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei 130194 A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is) 131195 Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel 132196 Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek 132201 A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege 134202 Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten 135203 Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt 135204 Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben 136205 Hisztereacutezis keacutetaacutellapotuacute rendszerben 137211 Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel 139212 Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten 141213 Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel 141214 Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal 142215 Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese 142221 A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja 144222 A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja 144223 A termisztor soros kapcsolaacutesban 145224 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal 145225 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal 146226 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel 146227 Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll 148228 Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal 149229 Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor 1532210 USB csatlakozoacutes haacuteloacutezati adapter 1542211 Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera 1542212 A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr 1542213 Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera 1552214 A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese 156231 A LED-ek elhelyezkedeacutese a fototranzisztorral szemben 159232 A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese 160241 Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve 163242 Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve 164243 H-hiacuted 165244 CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral 165245 A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese 166246 A leacuteptetőmotoros alkalmazaacutes elrendezeacutese 167281 A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra 173282 A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből 175283 A hallgatoacutei panel NYAacuteK-terve alulneacutezetből 175284 Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők 175285 A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza 175286 A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza 176287 A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel 176288 A keacutesz panel alulneacutezetben 177

Created by XMLmind XSL-FO Converter

A taacuteblaacutezatok listaacuteja21 A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese 451 Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll 1652 Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten 2071 Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese 2472 A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese 2573 A DPCON SFR taacutergyalt bitjei 2791 Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata 3992 A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata 3993 A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata 3994 A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata 4195 A PSW SFR parameacuteterei 49101 Az időegyseacutegek SFR-jeinek parameacuteterei 51102 A TIMECON SFR parameacuteterei 52111 A kuumllső megszakiacutetaacutesok jellemzői 57112 Az IE SFR parameacuteterei 57113 Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei 60114 A TIMECON SFR parameacuteterei reacuteszletesebben 60115 Az IEIP2 SFR parameacuteterei (reacuteszlet) 61151 Az USB-kaacutebel vezeteacutekeinek funkcioacuteja 84152 Az SCON SFR parameacuteterei 85153 Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese 86154 Az T3CON SFR parameacuteterei 87155 A soros porti kommunikaacutecioacute tipikus eacuterteacutekei 90156 Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai 90157 A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz 96171 A TMOD SFR parameacuteterei 108172 A TCON SFR parameacuteterei 110181 A PWMCON SFR parameacuteterei 117191 Az ADCCON1 SFR parameacuteterei 125192 Az ADCCON2 SFR parameacuteterei 127221 A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata 147222 A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek 155281 A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa 174282 A hallgatoacutei panel alkatreacuteszlistaacuteja 177283 A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja 178

Created by XMLmind XSL-FO Converter

1 fejezet - Előszoacute eacutes ars poeticaE tankoumlnyv szerzője jelen fejezet elkezdeacuteseacutenek pillanataacuteban 38 eacuteves eacutes 298 napos Toumlrteacutent az hogy az aacuteltalaacutenos iskola 7 osztaacutelyaacutenak elveacutegzeacutese utaacuten a nyaacuteri szuumlnetben szuumllei beiacuterattaacutek szaacutemiacutetoacutegeacutepes TIT-tanfolyamra ahol a meacuteltaacuten legendaacutevaacute vaacutelt Commodore szaacutemiacutetoacutegeacutepek BASIC nyelvű programozaacutesaacuteval ismerkedhetett Deacutelelőttoumlnkeacutent Deacutelutaacutenonkeacutent aztaacuten ment a jaacuteteacutek amiacuteg ki nem dobtaacutek a csoportot hogy bdquomost maacuter joacute lenne haza mennirdquohellip

Innentől kezdve nem volt megaacutellaacutes egy joacute darabig Szaacutemiacutetoacutegeacutepes szakkoumlr nyolcadikban (BASIC) sajaacutet Commodore 64-es (laacutesd [A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll] aacutebra) vaacutesaacuterlaacutesa Ausztriaacuteban az assembly nyelvű programozaacutes elsajaacutetiacutetaacutesa szaacutemiacutetoacutegeacutepes szakkoumlr gimnaacuteziumban (ott maacuter egy idő utaacuten XT eacutes Pascal) veacuteguumll az akkori Veszpreacutemi Egyetem Műszaki Informatika szakja (eljoumltt a C ideje)

11 aacutebra - A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll

A szerző egyetemi tanulmaacutenyai utaacuten ott maradt az egyetemen megszerezte a PhD fokozatot taniacutetott a Műszaki Informatika Karon majd a Meacuternoumlki Kar Fizika eacutes Mechatronika Inteacutezeteacuteben koumltoumltt ki Ott nagy lelkesedeacutessel uumllt be egyik kolleacutegaacuteja Mikrovezeacuterlők oacuteraacutejaacutera eacutes roppant moacuted eacutelvezte hogy uacutejra assemblyben programozhat eacutes sok-sok hardverkoumlzeli eacutelmeacutenye lehet Ezt a kurzust keacutesőbb a kolleacutega versenyszfeacuteraacuteba toumlrteacutenő taacutevozaacutesa utaacuten legnagyobb oumlroumlmeacutere meg is oumlroumlkoumllte 2012-ben eljoumltt az idő hogy a TAacuteMOP paacutelyaacutezatcsalaacuted kereteacuteben elektronikus tankoumlnyvet keacutesziacutethessen a mikrovezeacuterlők mechatronikai alkalmazaacutesaacuteroacutel

Egyetemi jegyzetet tankoumlnyvet iacuterni nem is olyan koumlnnyű Előszoumlr a szerzőnek el kell doumlntenie hogy kikből aacutell a ceacutelcsoport majd azt hogy mely konkreacutet hardveren eacutes milyen alkalmazaacutesokon keresztuumll igyekszik bemutatni a mikrovezeacuterlők programozaacutesaacutet Ez a tankoumlnyv ugyanis nem aacuteltalaacutenossaacutegban kiacutevaacuten foglalkozni a mikrovezeacuterlők mechatronikai alkalmazaacutesaacuteval hanem a koumlvetkező haacuterom ceacutelkitűzeacutest proacutebaacutelja megvaloacutesiacutetani

bull Az ADuC 842-es mikrovezeacuterlő lehetőseacutegeinek megismereacutese

bull Az assembly nyelv alapjainak elsajaacutetiacutetaacutesa

bull Elemi aacuteramkoumlri kapcsolaacutesokkal egyszerű mechatronikai alkalmazaacutesok megoldaacutesa

A fenti haacuterom ponthoz kieleacutegiacutető magyaraacutezat kiacutevaacutenkozik Vegyuumlk haacutet őket sorba

A vaacutelasztaacutes azeacutert esett az Analog Devices ADuC 842-es mikrovezeacuterlőjeacutere (wwwanalogcom) mert a Pannon Egyetem Fizika eacutes Mechatronika Inteacutezeteacuteben ilyen tiacutepusuacute eszkoumlzoumlkkel toumlrteacutent a Mikrovezeacuterlők taacutergy oktataacutesa maacuter a szerző csatlakozaacutesa előtt A mikrovezeacuterlőkhoumlz Kaacutentor Zoltaacuten docens uacuter tervezett univerzaacutelisan hasznaacutelhatoacute sok feladat megoldaacutesaacutera alkalmas oktataacutesi ceacutelokra remekuumll hasznaacutelhatoacute panelt Aztaacuten taacutevozott a versenyszfeacuteraacuteba

Előfordulhat hogy az ADuC 842-es mikrovezeacuterlőt sokan maacuter elavultnak tartjaacutek azonban szeretneacutenk megnyugtatni a keacutetkedőket az eszkoumlz kivaacuteloacutean alkalmas arra hogy az egyetemi hallgatoacutek megfelelő szakmai ismereteket szerezzenek a mikrovezeacuterlők lelkivilaacutegaacuteroacutel A megleacutevő bdquogeacutepparkotrdquo iacutegy nagy veacutetek lenne egyszerűen kihajiacutetani Az elektronikus tankoumlnyv aacuteltal szolgaacuteltatott bdquokurzusrdquo elveacutegezeacutese utaacuten baacuterki koumlnnyedeacuten aacutetnyergelhet maacutes tiacutepusuacute mikrovezeacuterlőre Olyan ez mintha megfelelő neacutemet nyelvtudaacutes utaacuten arra keacutenyszeruumllneacutenk esetleg oumlnkeacutent doumlnteneacutenk uacutegy hogy paacuter hoacutenapon beluumll eacutertelmesen kommunikaacuteljunk hollandul vagy eacuteppen sveacuteduumll Higgyeacutek el menni fog Oumltoumldannyi erőfesziacuteteacutessel mint az első nyelvneacutel

Az assembly nyelv emlegeteacutese sokakban kellemetlen eacuterzeacuteseket leneacutezeacutest vagy eacuteppen paacutenikreakcioacutet vaacutelt ki Valoacute igaz ceacuteges koumlrnyezetben ritkaacuten hasznaacuteljaacutek sokkal inkaacutebb koumlvetelik meg a C nyelv vagy tovaacutebbi script-nyelvek

Created by XMLmind XSL-FO Converter

Előszoacute eacutes ars poetica

ismereteacutet Ennek nyilvaacuten megvan a maga oka A szerző viszont uacutegy gondolja hogy ha maacuter egyszer mikrovezeacuterlővel fogunk egyszerű kis aacuteramkoumlroumlket szenzorokat eacutes leacuteptetőmotort műkoumldtetni mindenkeacuteppen eacuterdemes az assembly nyelvvel kezdeni Ezen keresztuumll eacutertjuumlk meg ugyanis igazaacuten a hardverkoumlzeli programozaacutes leacutenyegeacutet eacutes eacutelhetjuumlk aacutet azt az eacutelmeacutenyt amikor joacuteformaacuten keacutet ujjunk koumlzeacute csippenthetjuumlk a biteket Termeacuteszetesen koumlnnyen belefuthatunk olyan probleacutema melynek megoldaacutesa sokkal keacutenyelmesebb C nyelven iacutert programmal de a mikrovezeacuterlőkkel toumlrteacutenő ismerkedeacutesneacutel maradunk az assemblyvel nyelvneacutel

A mikrovezeacuterlő mechatronikai alkalmazaacutesaacutehoz kuumllső aacuteramkoumlroumlkre lesz szuumlkseacuteg Ebben a tananyagban nem taacutergyalunk bonyolult bdquopoacutekhaacuteloacutekatrdquo az aacuteramkoumlroumlk egeacuteszen csekeacutely villamossaacutegtani elektronikai ismeretek alapjaacuten koumlnnyen aacutetlaacutethatoacutek lesznek műkoumldeacutesuumlk koumlnnyen megeacuterthető lesz

A tankoumlnyv termeacuteszetesen nem lesz teljes Egyetlen szaacutemiacutetaacutestechnikai jegyzet vagy koumlnyv sem lehet teljes Viszont toumlrekedni fogunk arra hogy az ADuC 842-es mikrovezeacuterlő csaknem valamennyi utasiacutetaacutesaacutet ciacutemzeacutesmoacutedjaacutet hasznaacuteljuk ill lehetőseacutegeinek nagyjaacuteboacutel a feleacutere műkoumldő programot alkalmazaacutest ismertessuumlnk A tananyag feleacutepiacuteteacutese iteratiacutev jellegű lesz Ez azt jelenti hogy nem kimeriacutető moacutedon ismertetuumlnk egy-egy teacutemakoumlrt (pl portokat megszakiacutetaacutesokat vagy időziacutetőket) hanem mindig csak olyan meacuterteacutekben ahogyan azt az adott reacutesz megkiacutevaacutenja Aztaacuten a koumlvetkező feladatnaacutel meacutelyebben Aztaacuten meacuteg meacutelyebbenhellip

Lassan az előszoacute veacutegeacutehez eacuteruumlnk A szerző szeretne meacuteltoacute emleacuteket aacutelliacutetani neacutehaacuteny szakkoumlnyvnek (laacutesd [A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek] aacutebra) melyek neacutelkuumll nem sokra ment volna a joacute oumlreg Commodore 64-es programozaacutesaacuteval eacutes a nagyon egyszerű LED-ek villogtataacutesaacutera alkalmas kuumllső aacuteramkoumlr barkaacutecsolaacutesaacuteval gimnazista koraacuteban Ezek a koumlnyvek feleacutepiacuteteacutesuumlk egyes reacuteszeik peacuteldakeacutent aacutellnak a szerző előtt A mai kor hallgatoacutei maacuter nem biztos hogy foumllismerik őket de idősebb csalaacutedtagjaik baraacutetaik koumlzoumltt bizonyaacutera akadnak ilyenek

12 aacutebra - A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek

A szerző őszinteacuten remeacuteli hogy elektronikus tankoumlnyveacutet eacuterdeklődeacutessel eacutes haszonnal fogjaacutek forgatni (goumlrgetni) mechatronikus hallgatoacutek villamosmeacuternoumlk hallgatoacutek informatikus hallgatoacutek de akaacuter eacuterdeklődő koumlzeacutepiskolaacutesok is

Ez a tankoumlnyv nem szakkoumlnyv Nem szakembereknek keacuteszuumllt Egyetemi hallgatoacuteknak keacuteszuumllt akik a tankoumlnyvben leiacutertak elsajaacutetiacutetaacutesa utaacuten joacute eseacutellyel a szakember-jeloumllt szinten talaacuteljaacutek majd magukat Eacutes ha lesz hozzaacute erejuumlk eacutes kitartaacutesuk akkor nem is olyan sokkal keacutesőbb igazi szakemberek lesznek

Joacute tanulaacutest programozaacutest aacuteramkoumlreacutepiacuteteacutest eacutes meacuteg toumlbb oumlnaacutelloacute megvaloacutesiacutetott oumltletet kiacutevaacutenva

Kraacutenicz Balaacutezs

Created by XMLmind XSL-FO Converter

Előszoacute eacutes ars poetica

szerző

Veszpreacutem 2013 aacuteprilisa

Created by XMLmind XSL-FO Converter

2 fejezet - Ismerkedeacutes az assembly programozaacutesi nyelvvel1 Az assembly nyelvről aacuteltalaacutebanSzaacutemiacutetoacutegeacutepek programozaacutesaacutera szaacutemos programnyelvet fejlesztettek ki a hőskor oacuteta A legalacsonyabb szintű programozaacutesi nyelv a geacutepi koacuted Ez a nyelv a programot alkotoacute binaacuteris utasiacutetaacutesok azaz puszta szaacutemeacuterteacutekek sorozataacuteboacutel aacutell A geacutepi koacutedban valoacute programozaacutes meglehetősen neheacutezkes lenne (a hőskorban viszont egy ideig teacutenylegesen iacutegy csinaacuteltaacutek) ezeacutert egy-egy roumlvidiacuteteacutest uacutegynevezett mnemonikot rendelnek minden egyes utasiacutetaacuteshoz A mnemonik aacuteltalaacuteban az utasiacutetaacutes jelenteacuteseacutet leiacuteroacute toumlmoumlr toumlbbnyire angol kifejezeacutesből alkotott betűszoacute Ezeket a mnemonikokat oumlnmagukban szokaacutes assembly utasiacutetaacutesoknak nevezni Az ADuC 842-es mikrovezeacuterlő 8052-es tiacutepusuacute magjaacutenak keacuteszleteacuteből neacutehaacuteny utasiacutetaacutest az [A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese] mutat be melyben a hexadecimaacutelis szaacutemokat a szaacutem utaacuten iacutert h-val jeloumlljuumlk

21 taacuteblaacutezat - A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese

Geacutepi koacuted Assembly mnemonik Angol kifejezeacutes Magyar jelenteacutes

14h DEC A Decrement Accumulator Az akkumulaacutetor eacuterteacutekeacutenek csoumlkkenteacutese eggyel

74h MOV Adata Move Data to Accumulator A data eacuterteacutekű adatbaacutejt (be)mozgataacutesa az akkumulaacutetorba

23h RL A Rotate Accumulator Left Az akkumulaacutetor elforgataacutesa egy bittel balra

Az [A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese] alapjaacuten magaacutetoacutel eacutertetődő hogy assembly nyelven koumlnnyebb programozni mint geacutepi koacutedban Geacutepi koacutedban ugyanis teacutenylegesen puszta szaacutemokat kellene iacuterogatnunk egymaacutes utaacuten program gyanaacutent A keacutet kifejezeacutest egyeacutebkeacutent eacuterdekes moacutedon sokszor sok helyen oumlsszekeverik Uumlgyeljuumlnk tehaacutet a helyes megnevezeacutesre mi assembly nyelven fogunk programokat iacuterni

A fentiek utaacuten baacuterki megkeacuterdezheti hogy hogyan lesz az assembly utasiacutetaacutesokboacutel teacutenylegesen geacutepi koacuted amit maacuter meg lehet etetni a processzorral Nos erre valoacute a fordiacutetoacuteprogram azaz az assembler Az assembler teacutenylegesen geacutepi koacutedot aacutelliacutet elő amit aztaacuten alkalmas letoumlltőprogrammal raacutetoumllthetuumlnk a mikrovezeacuterlőre eacutes futtathatjuk azt Iacutegy kel tehaacutet eacuteletre az assembly nyelven iacutert programunk

Az assembly nyelvű programozaacutesroacutel azt lehet mondani hogy olyan ez mint amikor egy haacutezat az utolsoacute teacuteglaacuteig eacutes csavarig mi aacutelliacutetunk oumlssze miacuteg magas szintű programozaacutesi nyelvekneacutel keacuteszen kapjuk a falakat esetleg az egeacutesz helyiseacutegeket Az assembly nyelvvel baacutermelyik memoacuteriaciacutemet eleacuterhetjuumlk eacutes kizaacuteroacutelag tőluumlnk fuumlgg hogy annak tartalmaacutet mikeacutent eacutertelmezzuumlk mire hasznaacuteljuk Nincsenek tehaacutet kuumlloumlnfeacutele vaacuteltozoacutetiacutepusaink egyaacuteltalaacuten vaacuteltozoacuteink sincsenek csak memoacuteriarekeszeink Ez furcsaacuten hangozhat annak aki maacuter tanult valamilyen magas szintű programozaacutesi nyelvet (BASIC PASCAL C) de ez az igazsaacuteg Mindenesetre ettől nem kell megijedni

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

assembly nyelven is minden megoldhatoacute eacutes bizonyos probleacutemakoumlrre mint peacuteldaacuteul erősen hardverkoumlzeli uumlgyek kezeleacuteseacutere sokszor alkalmasabb mint a magas szintű nyelvek

2 MemoacuteriaAzt a hardverelemet vagy modult amely keacutepes adatok taacuterolaacutesaacutera memoacuteriaacutenak nevezzuumlk Tulajdonkeacuteppen akaacuter egyetlen kondenzaacutetort is memoacuteriaacutenak nevezhetuumlnk egy aacuteramkoumlrben hiszen taacuteroloacuteroacutel van szoacute A digitaacutelis szaacutemiacutetaacutestechnika vilaacutegaacuteban enneacutel persze sokkal toumlbbre van szuumlkseacuteg Ebben az esetben memoacuteriaacutenak azt a hardveregyseacuteget nevezzuumlk amelyik toumlbbnyire azonos meacuteretű digitaacutelis informaacutecioacuteegyseacutegeket keacutepes rendezett moacutedon taacuterolni A legegyszerűbb esetben ez az informaacutecioacuteegyseacuteg egy baacutejt ami nyolc bitből aacutell A memoacuteriaegyseacuteg meacutereteacutet a szerint adjuk meg hogy az haacuteny darabot keacutepes taacuterolni a vaacutelasztott informaacutecioacuteegyseacutegből jelen esetben a baacutejtboacutel A memoacuteriaegyseacutegeket aacuteltalaacuteban uacutegy tervezik hogy a teljes meacuteret a kettő valamely hatvaacutenyaacuteval egyezzen meg A memoacuteria meacutereteacutenek megadaacutesakor az SI-prefixumokat hasznaacuteljaacutek ami persze nem teljesen korrekt hiszen peacuteldaacuteul az 1 kilobaacutejt a szaacutemiacutetaacutestechnikaacuteban szigoruacutean 1 024 baacutejtot jelent a kilo (k) SI-prefixum viszont 103 = 1 000-rel egyenlő Volt proacutebaacutelkozaacutes ide passzoloacute prefixumok bevezeteacuteseacutere (kibi = 210 = 1 024 mebi = 220 = 1 048 576 gibi = 230 stb) csak ez valamieacutert egyelőre nem tudott elterjedni

A memoacuteria rendezett mivolta azt jelenti hogy a memoacuteriarekeszek egyeacutertelműen azonosiacutethatoacutek toumlbbnyire sorszaacutem alapjaacuten Ezt a sorszaacutemot hiacutevjuk egyszerűen memoacuteriaciacutemnek Aacuteltalaacutenos iskolaacutes szakkoumlroumlkoumln ezt a megszaacutemozott fioacutekok metaforaacutejaacuteval szoktaacutek szemleacuteltetni eacutes valljuk be ez a szeacutep analoacutegia egyetemi szinten is kifogaacutestalanul megaacutellja a helyeacutet

Az ADuC mikrovezeacuterlők memoacuteriaszervezeacutese egeacuteszen sajaacutetos Ennek taacutergyalaacutesa az iteratiacutev feleacutepiacuteteacutesuumlnknek megfelelően a keacutesőbbi fejezetekben toumlrteacutenik Ha maacuter a memoacuteriaacuteknaacutel tartunk emliacutetsuumlk meg hogy keacutet sajaacutetos memoacuteriafeleacutepiacuteteacutes terjedt el a szaacutemiacutetaacutestechnikaacuteban Az egyiket Neumann-architektuacuteraacutenak hiacutevjaacutek a Magyarorszaacutegon szuumlletett zsidoacute szaacutermazaacutesuacute elkeacutepesztően briliaacutens elmeacutejű matematikus tiszteleteacutere Enneacutel az architektuacuteraacutenaacutel koumlzoumls memoacuteriaacuteban taacuteroljuk a programkoacutedot eacutes az adatokat is Iacutegy tehaacutet egy koacuted minden tovaacutebbi neacutelkuumll aacutetiacuterhatja sajaacutet magaacutet A maacutesik tiacutepus a Harvard-architektuacutera Enneacutel az architektuacuteraacutenaacutel kuumlloumln memoacuteria szolgaacutel a programkoacuted eacutes az adatok taacuterolaacutesaacutera A mikrovezeacuterlőkneacutel sokkal inkaacutebb ez utoacutebbi megoldaacutes terjedt el Ilyen a mieacutenk is

3 RegiszterekAz assembly nyelvről szoacuteloacute aacuteltalaacutenos leiacuteraacutesban azt a hasonlatot hasznaacuteltuk hogy olyan ez mintha az utolsoacute teacuteglaacuteig eacutes csavarig mi magunk raknaacutenk oumlssze egy haacutezat Ehhez nyilvaacuten kell betonkeverő talicska vakoloacutekanaacutel kalapaacutecs eacutes meacuteg sok minden maacutes Baacutermilyen alacsony szintű program veacutegrehajtaacutesaacutenaacutel is segeacutedeszkoumlzoumlkre van szuumlkseacuteguumlnk hiszen magaacuteval az assembly nyelvvel oumlnmagaacuteban nem tudnaacutenk mivel műveleteket veacutegrehajtani Ezek a segeacutedeszkoumlzoumlk a mikroprocesszoroknaacutel elsősorban a memoacuteriarekeszek a regiszterek eacutes a jelzőbitek vagy flag-ek Ez utoacutebbiakroacutel keacutesőbb lesz majd szoacute

A memoacuteriarekeszek koumlzvetlen eacutes gyors eleacutereacutese az assembly nyelv nagy előnye Egy-egy mikroprocesszor architektuacuteraacutejaacutenaacutel toumlbbfeacutele memoacuteriaciacutemnek lehet kituumlntetett szerepe hiszen a memoacuteriarekeszek tartalmaacuteval aacuteltalaacuteban kezdeni akarunk valamit meg akarjuk vizsgaacutelni eacuterteacutekuumlket logikai vagy algebrai műveletet akarunk veacutegrehajtani rajtuk el akarjuk menteni tartalmukat stb Az ilyesfeacutele műveletek megkoumlnnyiacuteteacuteseacutere eacutes a lehető leggyorsabb veacutegrehajtaacutesaacutera a mikroprocesszorok kituumlntetett memoacuteriarekeszekkel biacuternak ezek megnevezeacutese a regiszter

Baacuter ezt a fejezetet meacuteg mindig eleacuteggeacute aacuteltalaacutenos leiacuteraacutesnak szaacutenjuk a konkreacutet peacuteldaacutek bemutataacutesa maacuter a 80518052-es processzormag utasiacutetaacuteskeacuteszleteacutevel toumlrteacutenik Jegyezzuumlk meg hogy valamennyi memoacuteriarekesz ill

regiszter egybaacutejtos azaz eacuterteacuteke a legegyszerűbb eacutertelmezeacutes szerint a halmazboacutel szaacutermazik Olyan eset azonban előfordulhat hogy keacutet egybaacutejtos regiszter oumlsszetartozik eacutes inkaacutebb azt mondjuk hogy keacutetbaacutejtos regiszterről van szoacute

Aacuteltalaacutenossaacutegban elmondhatoacute hogy a mikroprocesszoroknak van egy elsődleges fontossaacuteguacute regiszteruumlk amit akkumulaacutetornak hiacutevnak Az assembly nyelvek erre szinte minden esetben az A szimboacutelummal hivatkoznak Egyszerűbb mikroprocesszorok eseteacuteben az akkumulaacutetor meacuterete mindoumlsszesen egyetlen baacutejt azaz nyolc bit A program veacutegrehajtaacutesa soraacuten joacuteformaacuten minden szaacutemiacutetaacutes eacutes művelet az akkumulaacutetorban toumlrteacutenik eacutes ide keruumll vissza a szaacutemiacutetaacutes vagy művelet veacutegeredmeacutenye is

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

A 80518052-es processzormagnak az akkumulaacutetoron kiacutevuumll van meacuteg heacutet darab kiemelt fontossaacuteguacute regisztere R0 R1 R7 Ezeket nagyon sok feladatra alkalmazhatjuk ahogy azt majd a keacutesőbbiekben laacutetni fogjuk

4 Koumlzvetlen ciacutemzeacutesCiacutemzeacutesmoacutedon azt a moacutedot eacutertjuumlk ahogyan egy memoacuteriarekesz tartalmaacutet eleacuterjuumlk Az assembly nyelveknek minden olyan ciacutemzeacutesmoacutedot tartalmazniuk kell melyekkel meacuteg a legbonyolultabb probleacutema is megoldhatoacute Az persze maacuter maacutes keacuterdeacutes hogy ez mekkora erőfesziacuteteacutest ill programbonyolultsaacutegot jelent A gyaacutertoacutek azonban sokszor keacutenyelmesebbeacute teszik a programozoacute eacuteleteacutet eacutes olyan ciacutemzeacutesmoacutedot is megvaloacutesiacutetanak amelyre tulajdonkeacuteppen nem is lenne okvetlenuumll szuumlkseacuteg de felhasznaacutelaacutesaacuteval szaacutemos probleacutema esetleg sokkal gyorsabban eacutes koumlnnyebben oldhatoacute meg

Az előző alfejezet utaacuten maacuter mutathatunk peacuteldaacutet arra az esetre amikor az akkumulaacutetorba egy a programozoacute aacuteltal roumlgziacutetett eacuterteacuteket mondjuk 28-at kell betoumllteni Ehhez megtanuljuk azt az utasiacutetaacutest amellyel adatokat lehet mozgatni Ennek mnemonikja MOV a mnemonik pedig az angol Move (mozgat) szoacuteboacutel szaacutermazik Az utasiacutetaacutes szintaxisaacutenaacutel nagyon fontos hogy előszoumlr azt a memoacuteriarekeszt nevezzuumlk meg amelyikbe az adatot mozgatni akarjuk maacutesodikkeacutent pedig azt a memoacuteriarekeszt amelyikből mozgatni akarjuk az adatot A fenti feladat tehaacutet iacutegy oldhatoacute meg

MOV A75

Ezt a ciacutemzeacutesmoacutedot koumlzvetlen ciacutemzeacutesnek (angolul Immediate Addressing) nevezzuumlk Azeacutert koumlzvetlen a ciacutemzeacutes mert az akkumulaacutetorba vagy aacuteltalaacutenosan a kijeloumllt helyre toumlrteacutenő adatmozgataacuteshoz nem kell eleacuterni semmilyen maacutes memoacuteriarekeszt hiszen az adatot koumlzvetlenuumll mozgatjuk a kijeloumllt helyre Ezt mindig a kettős kereszt () szimboacutelummal jeloumlljuumlk Ezt az assemblernek fel kell ismernie eacutes helyesen kell lefordiacutetania a programkoacutedot Geacutepi koacutedban az utasiacutetaacutest koacutedoloacute szaacutemeacuterteacutek eacutes a konkreacutet adat egymaacutest koumlvető memoacuteriarekeszekben helyezkedik el vagyis az adat koumlzvetlenuumll az utasiacutetaacutes koacutedjaacutet koumlveti

Ha maacuter itt tartunk tanuljuk meg hogy koumlzvetlen ciacutemzeacutesekneacutel hogyan hasznaacutelhatunk binaacuteris hexadecimaacutelis vagy akaacuter karakteres eacuterteacutekmegadaacutest Az alaacutebbi koumlzvetlen ciacutemzeacutesek mind szinonimaacutek a 80518052-es processzormagok assembly nyelven toumlrteacutenő programozaacutesaacutehoz hasznaacutelhatoacute assemblerekneacutel

MOV A75 MOV A04Bh MOV A01001011b MOV ArsquoKrsquo

Jegyezzuumlk meg a szintaxist Decimaacutelis eacuterteacuteket a felhasznaacutelt szaacutemjegyek szaacutemaacutetoacutel fuumlggetlenuumll mindenfeacutele egyeacuteb jeloumlleacutes neacutelkuumll iacuterunk a kettős kereszt utaacuten A hexadecimaacutelis eacuterteacutekek megadaacutesa mindig egy 0-val kezdődik majd az azt koumlvető teacutenylegesen a hexadecimaacutelis szaacutemot jeloumllő keacutet karakter (hexadecimaacutelis szaacutemjegy) utaacuten egy h betűt iacuterunk Binaacuteris eacuterteacutekmegadaacutesnaacutel a nyolc szaacutemjegyet (1-et vagy 0-t) egy b betű koumlveti ASCII koacuted megadaacutesaacutenaacutel pedig nyugodtan hasznaacutelhatjuk magaacutet a karaktert csak tegyuumlk aposztroacutefok koumlzeacute A koumlzvetlen ciacutemzeacutes szerencseacutere az Rn regiszterekre is műkoumldik

MOV RnrsquoKrsquo

Itt az n betű indexkeacutent eacutertelmezendő csak a programkoacutedok stiacutelusa szerint nem suumlllyesztett betűtiacutepussal iacuterjuk Az előző alfejezet utolsoacute bekezdeacuteseacuteben bemutatott R regiszterek darabszaacutema szerint n eacuterteacuteke 0 eacutes 7 koumlzoumltti egeacutesz szaacutem lehet

5 Direkt ciacutemzeacutesKeacutepzeljuumlnk el egy olyan memoacuteriamodult melynek meacuterete mindoumlsszesen 256 baacutejt (Azeacutert ilyet keacutepzeljuumlnk el mert az ADuC 842-es architektuacuteraacutejaacutenaacutel ez meacuteg sokszor vissza fog koumlszoumlnni ugyanis pontosan ilyen modulokboacutel eacutepuumll foumll a memoacuteria) A memoacuteriarekeszek ciacutemei ezek szerint 0-toacutel 255-ig terjednek hexadecimaacutelisan iacuterva 00h-toacutel FFh-ig Ha valamelyik speciaacutelis regiszterbe szeretneacutenk betoumllteni valamelyik memoacuteriaciacutemen talaacutelhatoacute eacuterteacuteket akkor direkt ciacutemzeacutest (angolul Direct Addressing) hasznaacutelunk

Neacutezzuumlk a koumlvetkező peacuteldaacutet

MOV A030h

Ennek veacutegrehajtaacutesa utaacuten az akkumulaacutetorba az az eacuterteacutek keruumll amelyik a 30h-s ciacutemen talaacutelhatoacute A 30h-s ciacutemen talaacutelhatoacute eacuterteacutek ettől szerencseacutere nem vaacuteltozik meg

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

Az adatmozgataacutes sorrendje fordiacutetott is lehet termeacuteszetesen

MOV 030hR2

Ennek veacutegrehajtaacutesa utaacuten a 30h memoacuteriaciacutemre az az eacuterteacutek keruumll amelyik az R2-es regiszterben talaacutelhatoacute Ekkor az R2-es regiszter tartalma szintuacutegy vaacuteltozatlanul marad

Direkt ciacutemzeacutessel az akkumulaacutetor eacutes az R0 R1 R7 regiszterek valamelyike koumlzoumltt is koumlnnyen bonyoliacutethatoacute az adatmaacutesolaacutes peacuteldaacuteul

MOV AR5

vagy

MOV R6A

Jegyezzuumlk azonban meg hogy ha az egyik R regiszter tartalmaacutet akarjuk a maacutesikba toumllteni akkor erre a műveletre nincsen elegaacutens utasiacutetaacutes Ha tehaacutet mondjuk R0 tartalmaacutet akarjuk R7-be maacutesolni akkor segiacutetseacuteguumll hiacutevhatjuk peacuteldaacuteul az akkumulaacutetort

MOV AR0MOV R7A

Direkt ciacutemzeacutessel egyik memoacuteriarekesz tartalmaacutet aacutetmaacutesolhatjuk a maacutesik memoacuteriarekeszbe

MOV 03Eh03Ah

Ennek veacutegrehajtaacutesa utaacuten a 3Ah ciacutemen talaacutelhatoacute eacuterteacutek a 3Eh ciacutemre maacutesoloacutedik A direkt ciacutemzeacutest tartalmazoacute adatmozgataacutest az utasiacutetaacuteskeacuteszlet leiacuteraacutesai toumlbbnyire a

MOV AdirectMOV directAMOV RndirectMOV directRnMOV directdirect

teacutetelekkel illetik a leacutenyeg hogy szerepel bennuumlk a direct utalaacutes

A maacuter sokat hasznaacutelt MOV utasiacutetaacutesnak van olyan variaacutensa is amelyben keveredik a direkt eacutes a koumlzvetlen ciacutemzeacutes

MOV 032h125

Ennek veacutegrehajtaacutesa utaacuten a decimaacutelisan 125-oumlt jelentő eacuterteacutek keruumll a 32h ciacutemre Aacuteltalaacutenos hivatkozaacutesa a koumlvetkező

MOV directdata

6 Oumlsszehasonliacutetaacutesok eacutes ugraacutesokMinden assembly nyelvben lennie kell olyan utasiacutetaacutesoknak melyek lehetőveacute teszik regiszterek vagy memoacuteriarekeszek tartalmaacutenak oumlsszehasonliacutetaacutesaacutet Ha ez nem iacutegy lenne nem lehetne programelaacutegazaacutest csinaacutelni eacutes csak primitiacutev koacutedokat tudnaacutenk iacuterni Ha maacuter szoacuteba keruumllt az elaacutegazaacutes akkor nyilvaacutenvaloacutean olyan utasiacutetaacutesokra is szuumlkseacuteg van amelyekkel a program vezeacuterleacuteseacutet a veacutegrehajtandoacute reacuteszekhez lehet ugratni Aki magas szintű programozaacutesi nyelvekkel kezdte a programozaacutes alapjait annak ez most nagyon idegen lesz de assemblyben mesteri moacutedon lehet oumlssze-vissza ugraacuteltatni a program veacutegrehajtaacutesaacutet eacutes mindezt uacutegy hogy annak meacuteg eacutertelme is legyen

Az oumlsszehasonliacutetaacutesok eredmeacutenyeacuteről sokszor uacutegy eacutertesuumlluumlnk hogy egy speciaacutelis regiszter valamely kituumlntetett bitje vagy bitjei adott jelenteacutes szerint aacutellnak be 0-ra vagy 1-re Az ilyen jelzőbiteket szoktaacutek angolul flag-nek nevezni Talaacutelkozni fogunk majd olyan jelzőbittel amelyik egy eacuterteacutek-oumlsszehasonliacutetaacutesnaacutel 1-re aacutell be ha az egyik eacuterteacutek kisebb mint a maacutesik eacutes 0-ra aacutell be ha ez nem iacutegy van azaz nagyobb vagy egyenlő Ezek utaacuten egy arra alkalmas utasiacutetaacutessal elugrathatjuk a programot akkor ha a jelzőbit eacuterteacuteke 1 kuumlloumlnben a program veacutegrehajtaacutesa szeacutepen csorog tovaacutebb Ez az elugrataacutes aacuteltalaacuteban a jelzőbit 0 eacuterteacutekeacutere is megfogalmazhatoacute Lesznek azutaacuten olyan utasiacutetaacutesok is amelyek egymagukban veacutegeznek oumlsszehasonliacutetaacutest majd az eredmeacuteny valamilyen tulajdonsaacutegaacutenak

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

megfelelően ugratjaacutek el a programvezeacuterleacutest vagy hagyjaacutek tovaacutebb csorogni a programot

Az olvasoacutet megnyugtatjuk hamarosan peacuteldaacutek oumlzoumlneacutevel tesszuumlk vilaacutegossaacute az [Ismerkedeacutes az assembly programozaacutesi nyelvvel] fejezetben leiacutertakat

Created by XMLmind XSL-FO Converter

3 fejezet - Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlrAz ADuC 842-es chiphez hasznaacutelhatoacute assembler a letoumlltőprogram eacutes egyeacuteb szoftverek ismerteteacutese nem e tankoumlnyv elsődleges feladata viszont nem is hiaacutenyozhat ha a teacutemaacuteval most ismerkedő hallgatoacutek teacutenylegesen hasznaacutelni akarjaacutek az eszkoumlzoumlket iacutegy roumlviden szoacutelnunk kell ezekről is

A hallgatoacutei panelt amelyre ezt a tankoumlnyvet alapozzuk Dr Kaacutentor Zoltaacuten a Fizika Inteacutezet egykori munkataacutersa tervezte Itt most csak a fő funkcioacuteit foglaljuk oumlssze a reacuteszletes aacuteramkoumlri terv a Fuumlggeleacutekben talaacutelhatoacute olyan reacuteszletesseacuteggel hogy az eszkoumlz reprodukaacutelhatoacute legyen A [A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll] aacutebra keacutet neacutezetből mutatja a panelt Talaacutelhatoacute rajta egy USB-csatlakozoacute eacutes egy 20-poacutelusuacute szalagkaacutebel-csatlakozoacute Az USB-csatlakozoacutehoz baacutetran hasznaacutelhatunk a nyomtatoacuteknaacutel megszokott USB-kaacutebelt Ezzel kapcsolhatjuk panelunkat a szaacutemiacutetoacutegeacutephez A 20-poacutelusuacute szalagkaacutebel-csatlakozoacute tuumlskeacuteire keacutet teljes IO-port laacutebai a +5 V-os taacutepfeszuumlltseacuteg eacutes a foumlld (GND) vannak kivezetve A csatlakozoacute tuumlskeacuteinek funkcioacutekiosztaacutesaacutet a fuumlggeleacutekben talaacuteljuk Ugyanez igaz a panelboacutel kiaacutelloacute egyeacuteb tuumlskeacutek ismerteteacuteseacutere is

31 aacutebra - A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll

A panelon joacutel foumllismerhető egy nyolcas LED-sor eacutes maga az ADuC 842-es mikrovezeacuterlő Talaacutelunk meacuteg neacutegy nyomoacutegombot a panel hosszabbik eacuteleacutehez (a Pannon Egyetem felirathoz) koumlzelebbi kettőnek baacutermilyen funkcioacutet adhatunk szoftveresen A szalagkaacutebel-csatlakozoacutehoz legkoumlzelebb elhelyezkedő gomb a resetgomb A negyedik a program letoumllteacuteseacutet lehetőveacute tevő uumlzemmoacutedba aacutelliacutetja a mikrovezeacuterlőt Ilyenkor uacutegy kell eljaacuternunk hogy egyik ujjunkkal lenyomjuk ezt a gombot majd ezt fel nem engedve lenyomjuk a resetgombot is Iacutegy aacutell az eszkoumlz letoumlltőuumlzemmoacutedba

Az ADuC 842-es processzormagja a 8052-es Ez csak nagyon keveacutes reacuteszletben (főkeacutent a memoacuteriateruumlletek meacutereteacuteben) kuumlloumlnboumlzik a 8051-es magtoacutel iacutegy nem veacuteletlen hogy az Analog Devices gyaacuteri CD-i is a 8051-es programozaacutesaacutera alkalmas assemblert tartalmazzaacutek Ennek neve asm51exe Gyaacuteri CD hiacutejaacuten az Internetről toumllthetjuumlk le ezt az alkalmazaacutest melyet meacuteg DOS alaacute fejlesztettek Windows XP-n meacuteg simaacuten futtathatoacute parancsuumlzemmoacutedban vagy valamely alkalmas Commander-t hasznaacutelva Keacutesőbbi Windows rendszer eseteacuten emulaacutetorra lesz szuumlkseacuteguumlnk Az asm51exe assemblerhez komplett leiacuteraacutesokat is koumlnnyen talaacutelunk az Interneten Ezeacutert itt csak annyit emliacutetuumlnk meg hogy assembly koacutedot tartalmazoacute faacutejl (aacuteltalaacuteban sima szoumlvegfaacutejl legfoumlljebb asm kiterjeszteacutest szokaacutes neki adni) lefordiacutetaacutesa utaacuten egy LST eacutes egy HEX kiterjeszteacutesű faacutejl generaacuteloacutedik Az LST faacutejlban (ez is egyszerű szoumlvegfaacutejl) taacutejeacutekozoacutedhatunk a fordiacutetoacute aacuteltal talaacutelt hibaacutekroacutel eacutes a memoacuteriaciacutemek hozzaacuterendeleacuteseacuteről Aacuteltalaacutenossaacutegban elmondhatoacute hogy az LST faacutejlba toumlbbnyire csak akkor kukkantunk bele ha a fordiacutetoacute hibaacuteba uumltkoumlzoumltt

A HEX kiterjeszteacutesű faacutejl az amit le kell toumlltenuumlnk a mikrovezeacuterlőre hogy ott futtatni tudjuk Ehhez megfelelő letoumlltőprogramra van szuumlkseacuteguumlnk Az Analog Devices honlapjaacuteroacutel (wwwanalogcom) ez az alkalmazaacutes szabadon letoumllthető a faacutejl neve wsd_setup_v705 az alkalmazaacuteseacute pedig Windows Serial Dowloader Első letoumllteacutes előtt a legfontosabb dolgunk az hogy a Configuration menuumlpontnaacutel beaacutelliacutetsuk a mikrovezeacuterlő aacuteltal lefoglalt Com Port szaacutemaacutet Ezt a Windows VezeacuterlőpultrarrRendszerrarrHardverrarrEszkoumlzkezelőrarrPortok (COM eacutes LPT) helyen talaacuteljuk Az alkalmazaacutes feluumlleteacutet az alaacutebbi aacutebra mutatja

32 aacutebra - Az Analog Devices soros porti letoumlltőprogramjaacutenak feluumllete

Created by XMLmind XSL-FO Converter

Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr

A keacutesőbbiekben a soros porti kommunikaacutecioacute lefolytataacutesaacutehoz eacutes a mikrovezeacuterlőről a PC-re eacuterkező uumlzenetek megjeleniacuteteacuteseacutehez szuumlkseacuteguumlnk lesz arra alkalmas szoftverre Az Interneten sok ilyen alkalmazaacutes eleacuterhető A szerző a Hercules nevű freeware alkalmazaacutest hasznaacutelta a tankoumlnyvbe bekeruumllt kommunikaacutecioacutes peacuteldaacutekat ezzel valoacutesiacutetotta meg Ennek az alkalmazaacutesnak a feluumlleteacutet az [A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete] aacutebraacuten laacutethatjuk A Serial menuumlpontnaacutel ugyanazt a COM Portot kell beaacutelliacutetanunk mint a letoumlltőprogramnaacutel Hasznaacutelat koumlzben arra azonban nagyon figyeljuumlnk hogy ha a Hercules alkalmazaacutesban nem zaacuterjuk be a koraacutebban megnyitott soros portot akkor nem tudunk uacutejabb programot letoumllteni a mikrovezeacuterlőre a Windows Serial Downloader-rel Ez a figyelmetlenseacuteg kaacutert nem bosszuacutesaacutegot viszont annaacutel inkaacutebb tud okoznihellip

33 aacutebra - A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete

Created by XMLmind XSL-FO Converter

4 fejezet - Első programunk villogtassuk a panel LED-jeit1 feladat

Az oktataacutesi ceacutelra tervezett panelon egy LED-sor talaacutelhatoacute amely 8 darab LED-ből aacutell Villogtassuk a LED-eket 1 Hz-es frekvenciaacuteval uacutegy hogy egyszer az egyik oldali neacutegy maacutesszor a maacutesik oldali neacutegy vilaacutegiacutetson [Code01]

A feladat megoldaacutesa nagyon egyszerű lesz csak paacuter sorboacutel fog aacutellni Ennek elleneacutere neacutehaacuteny dolgot meacuteg meg kell beszeacutelnuumlnk hogy eacutertsuumlk mi mieacutert keruumll a programba A magyaraacutezatokat a koumlvetkező neacutehaacuteny alfejezetben talaacuteljuk de mindig csak annyit amennyire eacuteppen szuumlkseacuteguumlnk van

1 Portok eacutes funkcioacuteregiszterekAz ADuC 842-es mikrovezeacuterlőnek neacutegy darab nyolcbites portja van melyek nagyon sokfeacutele ceacutelra toumlbbek koumlzt IO-műveletekre hasznaacutelhatoacutek A portoknak megfelelő neacutegy baacutejt a mikrovezeacuterlő memoacuteriaacutejaacutenak egy-egy ciacutemeacuten talaacutelhatoacute Emliacutetettuumlk maacuter hogy egy-egy speciaacutelis memoacuteriarekeszt regiszternek szoktunk nevezni Na haacutet mi lenne speciaacutelisabb egy szaacutemiacutetoacutegeacutepneacutel mint az IO-portok Az ADuC 842-es mikrovezeacuterlő műkoumldeacuteseacutet konfiguraacutecioacutejaacutet a portokon kiacutevuumll meacuteg nagyon sok tovaacutebbi memoacuteriarekesz tartalma befolyaacutesolja Eacuteppen a kituumlntetett szerepuumlk miatt ezek a bizonyos memoacuteriarekeszek a speciaacutelis funkcioacutejuacute regiszterek (angolul Special Function Register roumlvidiacutetve SFR) elnevezeacutest kaptaacutek

A hallgatoacutei panelon a 2 port felel a LED-ek műkoumldeacuteseacuteeacutert Ennek a portnak A0h a ciacuteme de hogy az ilyesfeacutele ciacutemeket ne kelljen fejben tartani programozaacutesnaacutel az assemblerben ehhez kuumlloumln szimboacutelumot rendeltek P2 Ismerve ezt a szimboacutelumot soha toumlbbet nem kell a konkreacutet ciacutemmel foglalkoznunk

A P2 SFR bitjei egy-egy LED-nek felelnek meg Tudnunk kell hogy az ADuC mikrovezeacuterlő portjai aacuteltalaacuteban nem hasznaacutelhatoacutek aktiacutev kimenetkeacutent ha meacutegis akkor is csak paacuter tized mA aacuteram leadaacutesaacutera keacutepesek kuumlloumlnben fuumlstjelenseacutegek leacutepnek foumll Iacutegy aztaacuten talaacuten nem meglepő hogy a P2-re koumltoumltt LED-ek fordiacutetott logikaacuteval fognak műkoumldni azaz akkor vilaacutegiacutetanak ha a nekik megfelelő bit eacuterteacuteke 0 Ha ez a bit 1 akkor a LED nem vilaacutegiacutet Ennek tudataacuteban az olvasoacute biztos lehet abban hogy a LED-ek katoacutedja neacutez a port laacutebai feleacute Azt is mondhatjuk hogy a P2 port laacutebaival a LED-ek katoacutedjait foumlldre huacutezzuk iacutegy tud folyni az aacuteram

Ha az első 4 LED-et akarjuk bekapcsolni akkor ezt kell tennuumlnk

MOV P211110000b

Ha az maacutesik 4 LED-et akkor ezt

MOV P200001111b

2 Egyszerű ciklusszervezeacutesA programozaacutes egyik legfontosabb eleme a ciklusszervezeacutes Mire joacute egy ciklus Talaacuteloacute lehet az a definiacutecioacute hogy egy ciklussal valamely programreacuteszt bizonyos felteacuteteleknek megfelelő moacutedon toumlbbszoumlr veacutegrehajtunk Ezt a bizonyos programreacuteszt ciklusmagnak szoktaacutek nevezni A ciklusokhoz toumlbbnyire szuumlkseacuteg van egy olyan memoacuteriarekeszre vagy regiszterre melynek eacuterteacuteke meghataacuterozza hogy haacutenyszor hajtoacutedik veacutegre a ciklusmag Ezt a memoacuteriarekeszt vagy regisztert ciklusvaacuteltozoacutenak is nevezhetjuumlk Ciklusokat szervezni mind magas szintű programozaacutesi nyelvekben mind assemblyben toumlbbfeacutelekeacuteppen lehetseacuteges A legegyszerűbb eset talaacuten az amikor a ciklusmagot előre definiaacutelt moacutedon n-szer hajtjuk veacutegre Ezt az n-t adjuk meg magaacuteban a programkoacutedban iacutegy az semmilyen kuumllső vagy belső felteacuteteltől nem fuumlgg

Az ADuC utasiacutetaacutesai koumlzoumltt van egy olyan amelyet remekuumll felhasznaacutelhatunk a fenti kiacutevaacutenalmak szerint Ez a DJNZ utasiacutetaacutes A mnemonik az angol Decrement and Jump if Not Zero (csoumlkkent eacutes ugrik ha nem nulla) kifejezeacutesből szaacutermazik Ennek az utasiacutetaacutesnak keacutet variaacutensa van az egyik szintaxisa a koumlvetkező

DJNZ Rnrel

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

Az Rn azt jelenti hogy ehhez az utasiacutetaacuteshoz baacutermelyik R regisztert hasznaacutelhatjuk Ez az utasiacutetaacutes felteacuteteles elaacutegazaacutest azaz felteacutetelhez koumltoumltt ugraacutest valoacutesiacutet meg A felteacutetel jelen esetben az hogy az Rn regiszter ne legyen egyenlő 0-val Ha a regiszter tartalma meacutegis 0 akkor a program szeacutepen csorog tovaacutebb Ha nem 0 akkor viszont ugraacutes toumlrteacutenik Azt hogy hovaacute ugrik a program vezeacuterleacutese a rel eacuterteacutek mutatja meg Nagyon leacutenyeges hogy ide ne akaacutermilyen memoacuteriaciacutemet keacutepzeljuumlnk Lesz utasiacutetaacutes arra is amelyikkel baacutermekkoraacutet lehet ugratni de itt most maacutesroacutel van szoacute relatiacutev ugraacutes toumlrteacutenik Azeacutert relatiacutev ugraacutes mert ahhoz a memoacuteriaciacutemhez keacutepest ugrik előre vagy haacutetra a program vezeacuterleacutese amelyiken a DJNZ utasiacutetaacutes talaacutelhatoacute Fontos megjegyeznuumlnk hogy baacutermely ilyesfeacutele relatiacutev ugraacutes előrefeleacute 127 baacutejtot visszafeleacute pedig 128 baacutejtot nem leacutephet tuacutel Kezdő programozoacutek sokszor meglepődnek azon (aztaacuten moacutedosult tudataacutellapotba keruumllnek eacutes oumlkoumllcsapaacutesokkal buumlntetik a billentyűzetet pedig az semmiről nem tehet) hogy a laacutetszoacutelag teljesen joacute programkoacutedjukra hibaacutet jelez a fordiacutetoacute Ez sokszor azeacutert van mert relatiacutev ugraacutessal tuacutelleacutepik a 127 ill 128 baacutejtot Ennek kiveacutedeacuteseacutet a keacutesőbbiekben szintuacutegy megtanuljuk

Az assemblyben iacutert koacutedban az ugraacutesok helyeacutenek megjeloumlleacuteseacutere ciacutemkeacuteket hasznaacutelunk Az alkalmazott assemblerben a ciacutemkeacutek eacutekezetes betűket nem tartalmazhatnak eacutes kettősponttal veacutegződnek Vegyuumlk peacuteldaacutenak a koumlvetkező nyuacutelfarknyi koacutedot

MOV R725

label

[ciklusmag]

DJNZ R7label

A fenti koacutedocska a [ciklusmag]-nak nevezett reacuteszt pontosan 25-szoumlr hajtja veacutegre Keacutepzeljuumlk el ugyanis hogy R7 tartalma maacuter csak 1 Ha lefut a ciklusmag akkor a DJNZ utasiacutetaacutes R7 tartalmaacutet 1-gyel csoumlkkenti azaz 1-ről 0-ra majd oumlsszehasonliacutetja azt 0-val Mivel egyezeacutes van ezeacutert maacuter nem toumlrteacutenik ugraacutes a label ciacutemkeacutere (ugraacutes akkor toumlrteacutenik amikor a vizsgaacutelt regiszter tartalma elteacuter 0-toacutel) hanem csorog tovaacutebb a program R7 tartalma ekkor garantaacuteltan 0

A ciklusokat termeacuteszetesen egymaacutesba is aacutegyazhatjuk Eacuteppen uacutegy ahogy a nagyobb hal megeszi a kisebb halat vagy halakat Olyan nincs hogy a halak szaacuteja oumlsszeakad eacutes egyik se tudja megenni a maacutesikat Ciklusok egymaacutesba aacutegyazaacutesaacutera hamarosan laacutetunk peacuteldaacutet

3 SzubrutinokTeacutetelezzuumlk foumll hogy a programunk valamely reacuteszeacutet sokszor (neacutehaacutenyszor igen sokszor ki tudja haacutenyszor stb) akarjuk veacutegrehajtani Ilyenkor nem ceacutelszerű ezt a reacuteszt favaacutegoacute moacutedon sokszor (neacutehaacutenyszor igen sokszor ki tudja haacutenyszor stb) beleiacuterni a programba mert van erre egy uumlgyes megoldaacutes Ezt az uumlgyes megoldaacutest szubrutinnak hiacutevjaacutek A program baacutermely helyeacuteről hiacutevhatunk szubrutinokat Ilyenkor az a memoacuteriaciacutem ahol a program vezeacuterleacutese tartott elmentődik egy meghataacuterozott memoacuteriateruumlletre (ezt hiacutevjaacutek veremnek erről bővebben keacutesőbb) majd a vezeacuterleacutes a szubrutinhoz ugrik Azt a keacutetbaacutejtos regisztert amelyben az aktuaacutelisan veacutegrehajtandoacute utasiacutetaacutes ciacuteme talaacutelhatoacute programszaacutemlaacuteloacutenak hiacutevjuk (angolul Program Counter) A szubrutin veacutegeacutet speciaacutelis utasiacutetaacutessal kell jeleznuumlnk Ha ezt elfelejtjuumlk akkor a vezeacuterleacutes nem ugrik vissza az eredeti helyre hanem a program fut tovaacutebb eacutes aacuteltalaacuteban anomaacutelis műkoumldeacutesbe kezd vagy joacutel lefagyhellip Ha ellenben a helyeacutere iacuterjuk a szubrutint lezaacuteroacute utasiacutetaacutest akkor a verembe keruumllt ciacutem visszatoumlltődik a programszaacutemlaacuteloacuteba eacutes a program futaacutesa a szubrutint megiacutevoacute utasiacutetaacutes utaacuteni ponttoacutel folytatoacutedik Szubrutin hiacutevaacutesaacutenak utasiacutetaacutesa

CALL subroutine

A mnemonik toumlrteacutenetesen teljes egeacuteszeacuteben az angol Call szoacute ami hiacutevaacutest jelent Ha valaki belekukkant az 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacutebe akkor nem is talaacutelja meg a CALL utasiacutetaacutest Talaacutel viszont keacutet maacutesikat ACALL (Absolute Call within 2K block) eacutes LCALL (Long Call) A helyzet az hogy az ACALL utasiacutetaacutessal olyan szubrutint hiacutevhatunk melynek kezdőciacuteme ugyanabban a 2 kilobaacutejtos memoacuteriablokkban van mint a hiacutevoacute utasiacutetaacutes Az LCALL utasiacutetaacutesnaacutel maacuter nincsen semmi ilyesfeacutele megkoumlteacutes Ennek a furcsasaacutegnak az eacutertelme az hogy az ACALL utasiacutetaacutes gyorsabban veacutegrehajtoacutedik eacutes raacuteadaacutesul geacutepi koacutedkeacutent egy baacutejttal kevesebb helyet foglal a memoacuteriaacuteban Ennek akkor van szerepe amikor olyan nagy programot iacuterunk hogy maacuter nagyon oda kell figyelni arra hogy azt bele tudjuk passziacuterozni a memoacuteriaacuteba esetleg eacuteppen azeacutert mert a memoacuteria meacuterete csak neacutehaacutenyszor 2 kilobaacutejt Azonban ha szerencseacutenk van olyan assemblerrel dolgozhatunk amelyik a ciacutemkeacutek elhelyezkedeacutese alapjaacuten uacutegyis eldoumlnti hogy melyiket jobb hasznaacutelni (mondjuk meacuteretre optimalizaacutel) iacutegy nyugodtan hasznaacutelhatjuk simaacuten csak a CALL-t

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

A szubrutinboacutel toumlrteacutenő visszateacutereacutes utasiacutetaacutesa a RET A mnemonik az angol Return from Subroutine (visszateacutereacutes a szubrutinboacutel) kifejezeacutesből szaacutermazik Peacutelda szubrutin hiacutevaacutesaacutera

MOV R725

label

CALL subroutineDJNZ R7label

subroutine

[szubrutin tartalma]

RET

Ez a kis peacuteldaprogramocska eacuteppen uacutegy tartalmaz egy a ciklust mint az előző fejezet peacuteldaacuteja Itt azonban a ciklusmag semmi egyebet nem csinaacutel mint meghiacutev egy szubrutint A ciklusvaacuteltozoacute gyanaacutent felhasznaacutelt R7 regiszter kezdeti eacuterteacuteke alapjaacuten tudhatjuk hogy a szubrutint a ciklus pontosan 25-szoumlr hiacutevja meg Aztaacuten hogy a szubrutin mit tartalmaz az maacuter a programozoacute dolgahellip

4 Ugraacutes a koacutedon beluumllAki eddig magas szintű strukturaacutelt programozaacutest tanult az nagyon joacutel tudja hogy ott hivatalboacutel utaacutelni kellett a koumlzvetlen ugraacutest megvaloacutesiacutetoacute utasiacutetaacutest Nem iacutegy az assemblyben Koumlzvetlen ugraacutesok vagy egyaacuteltalaacuten ugraacutesok neacutelkuumll valamire valoacute assembly koacuted elkeacutepzelhetetlen Ebbe jobb ha beletoumlrőduumlnk A koumlzvetlen ugraacutes utasiacutetaacutesaacutenak a mnemonikja a JMP amely az angol Jump (ugrik) szoacuteboacutel szaacutermazik Az utasiacutetaacutes egyik verzioacuteja utaacuten adott memoacuteriaciacutemet kell megadnunk amelyet termeacuteszetesen ciacutemkeacutevel is reprezentaacutelhatunk

JMP address

Erre az utasiacutetaacutesra ugyanaz az eacuterdekesseacuteg eacuterveacutenyes mint a CALL utasiacutetaacutesra Ezt sem talaacuteljuk meg a 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben Talaacutelunk viszont haacuterom maacutesikat AJMP (Absolute Jump within 2K block abszoluacutet ugraacutes 2K-os blokkon beluumll) LJMP (Long Jump taacutevoli ugraacutes) eacutes SJMP (Short Jump koumlzeli ugraacutes) Az AJMP 2 kilobaacutejtos blokkon beluumlli ugraacutest tud megvaloacutesiacutetani Az LJMP-ra ilyen megkoumlteacutes maacuter nem vonatkozik Az SJMP utasiacutetaacutes relatiacutev ugraacutest valoacutesiacutet meg Ez azt jelenti hogy ez is csak 128 baacutejtnyi taacutevolsaacutegot jelenthet visszafeleacute eacutes 127 baacutejtnyit előre Az utasiacutetaacutesok koumlzoumltt most is a hossz eacutes a veacutegrehajtaacutesi idő a kuumlloumlnbseacuteg Eacutes ha szerencseacutenk van az assembler a ciacutemkeacutek alapjaacuten uacutegyis meghataacuterozza melyik lesz az optimaacutelis amikor simaacuten csak JMP-ot iacuterunk

5 Oacuterajel veacutegrehajtaacutesi időA logikai aacuteramkoumlroumlkből alkotott haacuteloacutezatok a legtoumlbb esetben oacuterajellel műkoumldnek Ezeket hiacutevjuk szekvenciaacutelis haacuteloacutezatoknak A mikroprocesszorok szinteacuten oacuterajelet igeacutenyelnek műkoumldeacutesi sebesseacuteguumlket eacuteppen az oacuterajel frekvenciaacutejaacuteval szokaacutes megadni Az ADuC 842-es oacuterajele maximaacutelisan 16 777 216 Hz Bekapcsolaacuteskor azonban az oacuterajel nem ekkora hanem csak 2 097 152 Hz Ez az uacuten default oacuterajel Az ADuC oacuterajele megfelelő SFR-rel futaacutes koumlzben vaacuteltoztathatoacute (PLLCON SFR) Erre azonban kezdő szinten nem lesz szuumlkseacuteguumlnk

A geacutepi koacuteduacute utasiacutetaacutesok mindegyikeacutenek veacutegrehajtaacutesa egeacutesz szaacutemuacute oacuterajelciklust igeacutenyel Vannak 1 2 3 4 eacutes 9 oacuterajelciklust foumllemeacutesztő utasiacutetaacutesok Azzal hogy egy utasiacutetaacutes haacuteny oacuterajelciklus alatt hajtoacutedik veacutegre aacuteltalaacuteban nem kell toumlrődnuumlnk Egyszer azonban szaacutemoljuk ki hogy mennyi ideig tart egy roumlvidke koacuted peacuteldaacuteul az alaacutebbiak veacutegrehajtaacutesa Előtte azonban meacuteg megtanuljuk hogy a NOP utasiacutetaacutes ami az angol No Operation (nincs művelet) kifejezeacutesből szaacutermazik pontosan azt csinaacutelja hogy semmit sem csinaacutel Eacutes ehhez kemeacuteny 1 oacuterajelciklust emeacuteszt foumll

MOV R7100cik7MOV R622cik6MOV R5237cik5

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET

Az egyes utasiacutetaacutesok veacutegrehajtaacutesaacutenak ciklusszaacutemai a koumlvetkezők

MOV Rndata - 2NOP - 1DJNZ Rnrel ndash 3RET - 4

Ezek alapjaacuten a fenti program oumlsszesen oacuterajelciklust igeacutenyel A szaacutemiacutetaacutes aacutetgondolaacutesa nem neheacutez de inkaacutebb segiacutetuumlnk egy kicsit A legbelső zaacuteroacutejelben az aacutell hogy Ez a NOP utasiacutetaacutes eacutes a koumlzvetlenuumll utaacutena aacutelloacute DJNZ R5cik5 aacuteltal igeacutenyelt oacuterajelciklus A legbelső ciklus melynek R5 a ciklusvaacuteltozoacuteja a kezdeti eacuterteacutek szerint pontosan 237-szer hajtoacutedik veacutegre Innen joumln a 237-es szorzoacute Ahaacutenyszor veacutegrehajtoacutedik ez a ciklus annyiszor kell kieacuterteacutekelni a ciklusvaacuteltozoacutera eacuterveacutenyes kileacutepeacutesi felteacutetelt csakuacutegy mint az oumlsszes toumlbbi ciklusnaacutel Maga a kezdeti eacuterteacutek megadaacutesa R5-nek 2 oacuterajelciklust

igeacutenyel Emiatt szerepel a 2-es az előtt A legbelső ciklus be van aacutegyazva egy kijjebb leacutevő ciklusba ami 22-szer hajtoacutedik veacutegre eacutes aminek ciklusvaacuteltozoacuteja R6 Csakhogy R6 eacuterteacutekeacutenek kieacuterteacutekeleacutese azaz a

koumlvetkező DJNZ utasiacutetaacutes is mindig 3 oacuterajelciklust igeacutenyel Ebből szaacutermazik a 3-as szaacutem az utaacuten Ez előtt a 2-es szaacutem R6 kezdeti eacuterteacutekeacutenek megadaacutesaacutet jelenti Ez a kieacuterteacutekeleacutesekre vonatkozoacute fenti magyaraacutezat szerint meacuteg nyilvaacuten a 22-es szorzoacuten beluumll van Eacutes iacutegy tovaacutebb a teljes kifejezeacutes veacutegeacuteig Az utolsoacute 4-es a szubrutinboacutel valoacute visszateacutereacutes utasiacutetaacutesaacutenak a RET-nek a veacutegrehajtaacutesi ideje A default oacuterajel-frekvenciaacuteval azaz 2 097 152 Hz-cel szaacutemolva 2 097 106 oacuterajelciklus lefutaacutesi ideje 0999 978 maacutesodperc Iacutegy ezzel a kis szubrutinnal nagyjaacuteboacutel 1 maacutesodperces időkeacuteslelteteacutest valoacutesiacutethatunk meg a neacutelkuumll hogy ismerneacutenk az ADuC időziacutetőfunkcioacuteit A keacutesőbbiekben termeacuteszetesen azok koumlzuumll is toumlbbet kiveseacutezuumlnk

6 Az első alkalmazaacutes koacutedjaAz [1 feladat] megoldaacutesaacutehoz immaacuteron mindent tudunk maacuter csak az assemblerrel kapcsolatban kell neacutehaacuteny dolgot tisztaacuteznunk Ezt uacutegy fogjuk tenni hogy előszoumlr veacutegre megneacutezzuumlk magaacutet a koacutedot aztaacuten hozzaacutefűzzuumlk a magyaraacutezatot Az [1 feladat] megoldaacutesaacutet jelentő koacuted a koumlvetkező

Code01asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelataCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a program- vezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacutenORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacutedMAINMOV P211110000b Bekapcsoljuk az alsoacute 4 LED-etCALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintMOV P200001111b Bekapcsoljuk a felső 4 LED-etCALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintJMP MAIN Visszaugratjuk az elejeacutere a programot Tulajdonkeacuteppen veacutegtelen ciklust hozunk leacutetreDELAY Időhuacutezoacute szubrutinMOV R750 05 sec keacuteslelteteacutescik7MOV R622cik6MOV R5237cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

END

A magyaraacutezatok elkezdeacutese előtt felhiacutevjuk a figyelmet arra amit talaacuten az olvasoacute is kitalaacutelt maacuter a koacutedba szuacutert megjegyzeacutesek pontosvesszővel kezdődnek

A koacuted maacutesodik sora eddig ismeretlen teacutetelt tartalmaz $MOD842 Ez a fordiacutetoacutei direktiacuteva arra utasiacutetja az assemblert hogy az ADuC 842-es architektuacuteraacutehoz tartozoacute szimboacutelumlistaacutet hasznaacutelja Ebben a faacutejlban ugyanis joacutel eacuterthető szimboacutelumokat rendeltek a kituumlntetett memoacuteriaciacutemekhez regiszterekhez eacutes speciaacutelis funkcioacutejuacute regiszterekhez Ha maacuter kellő jaacutertassaacutegot szerzett az olvasoacute a teacutemaacuteban eacuterdemes egyszer belekukkantania ebbe a faacutejlba Az elektronikus tankoumlnyvben a tovaacutebbiakban a helytakareacutekossaacuteg veacutegett ezt a direktiacutevaacutet nem tuumlntetjuumlk foumll de jegyezzuumlk meg hogy minden lefordiacutetandoacute koacutednak ezzel kell kezdődnie amennyiben a 842-es architektuacuteraacutet hasznaacuteljuk

A maacutesodik uacutejdonsaacuteg a CSEG direktiacuteva Ezzel jelezzuumlk a fordiacutetoacuteak hogy innentől kezdődik a programkoacuted A koacutedszegmens az END direktiacutevaacuteval zaacuterul Ezekre a direktiacutevaacutekra ugyanaz lesz eacuterveacutenyes a tankoumlnyvben mint a $MOD842-ra

A harmadik uacutejdonsaacuteg az ORG direktiacuteva Ezzel jelezzuumlk az assemblernek hogy mely memoacuteriaciacutemre keruumlljoumln a lefordiacutetott koacuted Ennek fontos szerepe lesz a programok elhelyezeacuteseacuteneacutel Tudnunk kell ugyanis hogy amikor a mikrovezeacuterlő elindul vagy reset toumlrteacutenik akkor a programvezeacuterleacutes a 0000h ciacutemre ugrik Szokjunk hozzaacute ahhoz hogy innen azonnal elugratjuk a programot egy haacutetreacutebb talaacutelhatoacute ciacutemre ugyanis a keacutesőbb taacutergyalandoacute megszakiacutetaacutesok vektorai szeacutepen sorban a koacutedmemoacuteria elejeacuten helyezkednek el Ha semmifeacutele megszakiacutetaacutest sem hasznaacutelunk erre az elugrataacutesra nincs szuumlkseacuteg de jobb ha az oumlsszes koacutedunkat uacutegy iacuterjuk hogy annak eacuterdemi reacutesze kicsit haacutetreacutebb kezdődik mint 0000h Elmondhatjuk hogy a 0060h ciacutemtől kezdődően maacuter semmi veszeacutely nem leselkedik raacutenk a program szervezeacuteseacutenek szempontjaacuteboacutel iacutegy ezt a ciacutemet baacutetran vaacutelaszthatjuk a program eacuterdemi reacutesze kezdeteacutenek

A koacutedban az ORG 0000h sor utaacuten az aacutell hogy JMP MAIN A MAIN itt egy ciacutemke eacutes ide fog ugrani a program indulaacutes vagy reset utaacuten Most maacuter az is eacuterthető hogy mieacutert előzi meg a MAIN ciacutemkeacutet az ORG 0060h direktiacuteva eacutes eacuterteacutek ezen a ciacutemen kezdődik a program eacuterdemi reacutesze

A koacuted maga annyira egyszerű hogy foumlloumlsleges blokkdiagramban megadni az algoritmust A leiacuteraacutes roumlviden bekapcsoljuk az alsoacute 4 LED-et (a toumlbbit kikapcsoljuk) vaacuterakozunk feacutel maacutesodpercet bekapcsoljuk a felső 4 LED-et (a toumlbbit kikapcsoljuk) vaacuterakozunk feacutel maacutesodpercet aztaacuten kezdjuumlk eloumllről az egeacuteszet Az időhuacutezaacutest szubrutin veacutegzi uacutegy ahogyan azt a [Szubrutinok] eacutes [Oacuterajel veacutegrehajtaacutesi idő] alfejezetekben megtaacutergyaltuk

Itt eacutes most szeretneacutenk leszoumlgezni hogy a tovaacutebbiakban az elektronikus tankoumlnyvben szereplő koacutedokba magukba csak annyi kommentet iacuterunk amennyi okvetlenuumll szuumlkseacuteges Ez főkeacutent az uacutejdonsaacutegokat eacutes a főbb egyseacutegeket eacuterinti Az elektronikus tankoumlnyvhoumlz azonban koacutedtaacuter is tartozik amely az azonnal lefordiacutethatoacute ellenőrzoumltt keacutesz koacutedokat tartalmazza Ezeket a koacutedokat minden esetben eleacuteg nagy reacuteszletesseacuteggel kikommentezzuumlk hogy akkor is eacuterthető legyen ha majd a tankoumlnyvben leiacutertak megtanulaacutesa utaacuten mondjuk egy eacutevvel nyuacutelunk vissza valamelyik alkalmazaacuteshoz A koacutedtaacuter nem csak a koacutedokat tartalmazza hanem oumlsszetettebb alkalmazaacutesoknaacutel aacuteramkoumlri rajzokat feacutenykeacutepeket eacutes sok esetben meacuteg roumlvid videofelveacutetelt is

Created by XMLmind XSL-FO Converter

5 fejezet - Csiacutek a LED-ekenMi a legnagyobb kuumlloumlnbseacuteg az ADuC mikrovezeacuterlőnk eacutes egy heacutetkoumlznapi szaacutemiacutetoacutegeacutepes munkaaacutellomaacutes koumlzoumltt Az egyik az hogy a mikrovezeacuterlőn gyaacuterilag semmifeacutele operaacutecioacutes rendszer nem talaacutelhatoacute (Ez persze nem azt jelenti hogy nem is lehet raacute keacutesziacuteteni) A maacutesik leacutenyeges kuumlloumlnbseacuteg pedig a [Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr] fejezet alapjaacuten talaacuten maacuter nyilvaacutenvaloacutevaacute vaacutelt semmifeacutele monitor nem csatlakozik a panelhoz A jelenlegi szintuumlnkoumln a 8 LED-ből aacutelloacute sor az egyetlen visszajelzeacutesi lehetőseacuteguumlnk azonban meglepően sokatmondoacute lehet meacuteg ez is pedig mindoumlsszesen egyetlen baacutejt kijelzeacuteseacutere alkalmas

A LED-sort termeacuteszetesen sokfeacutele funkcioacutehoz tudjuk munkaacutera fogni kuumlloumlnfeacutele mintaacutezatokat jeleniacutethetuumlnk meg rajta Ennek meacuteg a mechatronikai alkalmazaacutesok szempontjaacuteboacutel nem sok haszna lesz viszont joacutekat fogunk szoacuterakozni tovaacutebbaacute rengeteget tanulunk vele aminek maacuter majd igen A bevezető utaacuten tekintsuumlk a koumlvetkező feladatot

2 feladat

Jeleniacutetsuumlnk meg a LED-soron egy egyre hosszabb csiacutekot amely noumlvekedeacutes koumlzben minden faacutezisnaacutel vaacuterakozik egy keveset teliacutetődeacutes utaacuten pedig uacutejraindul [Code02]

Kuumlloumlnfeacutele mintaacutezatoknak a LED-soron valoacute előaacutelliacutetaacutesaacutehoz keacutet moacutedszert alkalmazhatunk Az egyik az hogy a koacutedmemoacuteriaacuteban előre roumlgziacutetett bitmintaacutekat taacuterolunk majd kiolvassuk azokat Ezt a keacutesőbbiekben meg is tanuljuk A maacutesik moacutedszer az hogy aritmetikai truumlkkoumlkkel a program futaacutesa koumlzben aacutelliacutetjuk elő a mintaacutezatot Oldjuk meg a [2 feladat]ot most ilyen moacutedon

1 Bitek sorszaacutemozaacutesaA szaacutemiacutetaacutestechnikaacuteban heacutetkoumlznapi fogalmainkkal ellenteacutetben az objektumok szaacutemozaacutesaacutet nem 1-gyel kezdjuumlk hanem toumlbbnyire 0-val Ha egy baacutejt bitjeiről van szoacute akkor azok sorszaacutemozaacutesa szintuacutegy 0-val kezdődik iacutegy termeacuteszetes kifejezeacutes lesz az hogy nulladik bit Egy baacutejt bitjeinek helyieacuterteacutekeacutet decimaacutelis eacuterteacutekeacutet eacutes sorszaacutemaacutet a [Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll] mutatja

51 taacuteblaacutezat - Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll

Bit sorszaacutema Hatvaacuteny Decimaacutelis eacuterteacutek

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 eacutes aritmetikai utasiacutetaacutesok

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

A [2 feladat] megoldaacutesaacutehoz szuumlkseacuteguumlnk lesz arra az utasiacutetaacutesra amelyik a logikai negaacuteltjaacutet vagy maacutes szoacuteval komplementereacutet megint maacutes szoacuteval inverzeacutet keacutepezi az akkumulaacutetornak

CPL A

A mnemonik az angol Complement Register (regiszter komplementere) kifejezeacutesből szaacutermazik Ha az akkumulaacutetor tartalma peacuteldaacuteul 10001101 akkor a CPL A utasiacutetaacutes kiadaacutesa utaacuten az akkumulaacutetor tartalma 01110010 lesz vagyis csakugyan az eredeti tartalmaacutenak logikai negaacuteltja vagy komplementere esetleg inverze

A koumlvetkező utasiacutetaacutes amelyre szuumlkseacuteguumlnk lesz az aacutetvitel neacutelkuumlli oumlsszeadaacutes utasiacutetaacutesa ADD A mnemonik az angol Add Accumulator (hozzaacutead az akkumulaacutetorhoz) kifejezeacutesből szaacutermazik Ennek az utasiacutetaacutesnak ahogy azt maacuter a MOV utasiacutetaacutesnaacutel megiacutezlelhettuumlk toumlbb verzioacuteja van mi most haacuterommal ismerkeduumlnk meg Az utasiacutetaacutesok ciacutemzeacutesmoacutedja az elektronikus tankoumlnyvben eddig elmondottak alapjaacuten vilaacutegos kell hogy legyen

ADD ARn ADD Adirect ADD Adata

Mindhaacuterom esetben az akkumulaacutetor tartalmaacutehoz adjuk vagy valamelyik R regiszter tartalmaacutet vagy egy adott memoacuteriarekesz tartalmaacutet vagy a koumlzvetlenuumll megadott eacuterteacuteket Aacutetvitel neacutelkuumll Az aacutetvitelt is figyelembe vevő oumlsszeadaacutesroacutel keacutesőbb szoacutelunk

Ismerkedjuumlnk meg meacuteg keacutet utasiacutetaacutessal melyek igen nagy segiacutetseacuteguumlnkre lehetnek ha aritmetikai műveletekkel eacutes truumlkkoumlkkel szeretneacutenk adott bitmintaacutezatot mint eacuterteacuteket előaacutelliacutetani az akkumulaacutetorban Ez a keacutet utasiacutetaacutes a bitforgataacutes műveletet hajtja veacutegre az akkumulaacutetoron Az egyik balra forgat

RL A

A maacutesik jobbra forgat

RR A

A mnemonikok az angol Rotate Accumulator Left (akkumulaacutetor forgataacutesa balra) eacutes Rotate Accumulator Right (akkumulaacutetor forgataacutesa jobbra) kifejezeacutesekből szaacutermaznak A forgataacutes azt jelenti hogy az akkumulaacutetor tartalma egy bittel balrajobbra csuacuteszik a szeacuteleacuten kileacutepő bit pedig visszakeruumll a meguumlruumllt helyre a maacutesik oldalon Peacuteldaacuteul legyen az akkumulaacutetor tartalma 00001111 RL A utaacuten az akkumulaacutetor tartalma 00011110 RL R utaacuten pedig 10000111 lesz A [Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire] aacutebraacuten rajzos magyaraacutezattal szemleacuteltetjuumlk a bitforgatoacute utasiacutetaacutesok műkoumldeacuteseacutet Ezekkel az utasiacutetaacutesokkal sok huncutsaacutegot meg tudunk valoacutesiacutetani ahogy azt majd hamarosan laacutetni fogjuk

51 aacutebra - Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire

3 Parameacuteteraacutetadaacutes szubrutinnakAki valamely magas szintű programozaacutesi nyelvvel kezdett az nagyon joacutel tudja hogy parameacutetert aacutetadni valamely fuumlggveacutenynek vagy eljaacuteraacutesnak meglehetősen koumlnnyű Aki meacuteg nem tudja mit jelent ez keacutepzelje el azt a szituaacutecioacutet hogy a [Oacuterajel veacutegrehajtaacutesi idő] eacutes [Az első alkalmazaacutes koacutedja] alfejezetben bemutatott időhuacutezoacute szubrutint nem aacutellandoacutesult 05 vagy eacuteppen 1 maacutesodperces időhuacutezaacutesra akarjuk hasznaacutelni hanem rugalmasan aacuteltalunk tetszeacutes szerint megadott eacuterteacutekkel Assemblyben uacutegy megy ez hogy a szubrutinnak tudnia kell hogy a műkoumldeacuteseacutehez szuumlkseacuteges eacuterteacuteket honnan veszi (mely regiszterből vagy memoacuteriaciacutemről) a szubrutin meghiacutevaacutesa előtt viszont a szuumlkseacuteges eacuterteacuteket be kell toumllteni a keacuterdeacuteses regiszterbe majd ez utaacuten meghiacutevni a szubrutint Doumlntsuumlnk most uacutegy hogy a parameacuteteraacutetadaacutesra hasznaacutelt regiszter az akkumulaacutetor legyen Ezek utaacuten moacutedosiacutetsuk a [Az első alkalmazaacutes koacutedja] alfejezetben bemutatott szubrutint a koumlvetkező moacutedon

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

DELAYMOV R7Acik7MOV R622cik6MOV R5237cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET

Ezzel azt eacuterjuumlk el hogy a szubrutin a meghiacutevaacutesakor az akkumulaacutetorboacutel toumllti be a szuumlkseacuteges eacuterteacuteket az R7 regiszterbe Ez az eacuterteacutek az egybaacutejtos adatterjedelemnek megfelelően 0 eacutes 255 koumlzoumltt lehet A rutin műkoumldeacutese alapjaacuten ha 0-t adjunk neki az olyan lenne mintha 256-toacutel szaacutemlaacutelnaacutenk vissza Hiszen amikor a DJNZ a 0-t eggyel csoumlkkenti akkor az eacuterteacutek visszafeleacute aacutetfordul 255-re

A szubrutin meghiacutevaacutesa mondjuk 06 maacutesodperces vaacuterakozaacuteshoz iacutegy toumlrteacutenik

MOV A60CALL DELAY

Ha a szubrutinnak kell parameacutetert aacutetadnia a főprogramnak az assemblyben hasonloacutean toumlrteacutenik mint fordiacutetva a szubrutinnak valamely memoacuteriarekeszekbe vagy regiszterekbe kell iacuternia az aacutetadni kiacutevaacutent parameacutetereket a főprogramnak viszont tudnia kell hol keresse azokat A leacutenyeg az hogy bonyolultabb programoknaacutel a szubrutinok ne iacuterjaacutek foumlluumll egymaacutes parameacuteteraacutetadaacutesi adatteruumlleteit Erre nagyon figyelni kell assemblyben

4 A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkelAhhoz hogy a csiacutek egyes faacutezisait elő tudjuk aacutelliacutetani a maacuter ismert ill a [ Logikai eacutes aritmetikai utasiacutetaacutesok] alfejezetekben bemutatott utasiacutetaacutesokkal mindenekelőtt tisztaacutezzuk mire van szuumlkseacuteguumlnk Ha egy noumlvekvő csiacutekot szeretneacutenk a LED-ekkel kijelezni akkor a koumlvetkező bitmintaacutezatokra mint faacutezisokra lesz szuumlkseacuteguumlnk

11111111

11111110

11111100

11111000

11110000

11100000

11000000

10000000

00000000

Hogy lehet ilyen sort leacutetrehozni Erre nyilvaacuten szaacutezfeacutele megoldaacutes van de tekintsuumlk azt amikor előszoumlr is egyetlen 1-es bitet leacuteptetuumlnk sorban balra

00000001

00000010

00000100

00001000

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

00010000

00100000

01000000

10000000

Figyeljuumlk meg hogy az első listaacutenak 9 miacuteg a maacutesodiknak csak 8 tagja van Ha a maacutesodik listaacutenak az elemeit szeacutepen sorban hozzaacuteadjuk 00000000-hoz de uacutegy hogy a koumlvetkező listatagot mindig az addig megkapott eredmeacutenyhez adjuk hozzaacute akkor az egyes faacutezisok iacutegy alakulnak

00000000

00000001

00000011

00000111

00001111

00011111

00111111

01111111

11111111

Eacutes ha ennek a listaacutenak az elemeit negaacuteljuk (keacutepezzuumlk a komplementeruumlket invertaacuteljuk őket) maacuteris eleacuterkeztuumlnk a kiacutevaacutent eredmeacutenyhez

A koumlvetkező koacuted nem pofonegyszerű neacutemi ravaszkodaacutest tartalmaz A fontos parameacuteterek listaacutejaacutet eacutes eacuterteacutekeit azonban a koacuted utaacuten taacuteblaacutezatban foglaljuk oumlssze hogy koumlvetni lehessen mit toumlrteacutenik Az olvasoacutet arra biztatjuk hogy addig ne haladjon tovaacutebb amiacuteg ezt a koacutedot meg nem eacutertette A [Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten] ehhez nagy segiacutetseacuteget fog nyuacutejtani A koacutedban az R2 regiszterben azok az eacuterteacutekek aacutellnak elő amelyeket a fenti maacutesodik lista tartalmaz Az R3 regiszterben keacutepződnek azok az eacuterteacutekek amelyeket a fenti harmadik lista tartalmaz Nagyon fontos szerepet jaacutetszik a keacutet regiszter kezdeti eacuterteacuteke ill az hogy a regiszterek eacuterteacutekeacutet a LED-ek portjaacutenak vaacuteltoztataacutesa előtt vagy utaacuten manipulaacuteljuk A koacutedban a [Az első alkalmazaacutes koacutedja] alfejezetben roumlgziacutetettek szerint maacuter nem tuumlntetjuumlk foumll az aacutellandoacute fordiacutetoacutei direktiacutevaacutekat eacutes jelen esetben a [Parameacuteteraacutetadaacutes szubrutinnak] alfejezetben bemutatott parameacuteteraacutetadaacutest is teljesiacutető időhuacutezoacute DELAY szubrutint sem Iacuteme a koacuted

Code02asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a programvezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacutenORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacutedMAINMOV R30 Kezdeti eacuterteacutek R3-nak Ebben gyűlnek a csiacutek egyes faacutezisainak megfelelő eacuterteacutekek de ezt majd meacuteg negaacutelnunk kell A kezdeti eacuterteacutek 0 azaz egyetlen LED sem vilaacutegiacutetMOV R210000000b Kezdeti eacuterteacutek R2-nek Amikor ezt az eacuterteacuteket előszoumlr forgatjuk balra akkor kapjuk meg az első hasznaacutelhatoacute eacuterteacuteket azaz 00000001-t amit majd az addigi de meacuteg nem invertaacutelt eredmeacutenyhez adunkMOV R49 Kilencszer fut le ez a ciklus hiszen 9 faacutezisboacutel aacutell a csiacutekcsikMOV AR3 A-ba toumlltjuumlk R3-at azaz a csiacuteknak

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

megfelelő eacuterteacuteketCPL A Negaacuteljuk A-tMOV P2A Kitesszuumlk a LED-ek portjaacuteraMOV A10 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (01 s)MOV AR2 A-be toumlltjuumlk R2-tRL A Balra forgatjuk az eacuterteacuteketMOV R2A Visszatoumlltjuumlk R2-be R2-ben alakul ki a koumlvetkező lista 00000001 00000010 00000100 stbMOV AR3 A-ba toumlltjuumlk R3-at azaz a csiacutek aktuaacutelis faacutezisaacutetADD AR2 Hozzaacuteadjuk a balra leacuteptetett bitet Iacutegy alakul ki a koumlvetkező lista 00000001 00000011 00000111 stbMOV R3A Visszaiacuterjuk R3-ba a csiacutek koumlvetkező faacutezisaacutetDJNZ R4csik Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Visszaugratjuk az elejeacutere a programot

A [Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten]ban a program keacutet kritikus jelentőseacutegű vaacuteltozoacutejaacutenak azaz az R2 eacutes R3 regisztereknek eacuterteacutekeit tuumlntetjuumlk foumll leacutepeacutesről leacutepeacutesre bdquoKezdrdquo jelenti a kezdeti eacuterteacuteket bdquoBe1rdquo a ciklus első veacutegrehajtaacutesaacutenaacutel a beleacutepeacutesi bdquoKi1rdquo a kileacutepeacutesi eacuterteacuteket bdquoBe2rdquo eacutes bdquoKi2rdquo ugyaniacutegy a ciklus maacutesodik veacutegrehajtaacutesaacutenaacutel stb A P2-es portra a ciklus minden egyes veacutegrehajtaacutesaacutenaacutel az R3 regiszterben taacuterolt eacuterteacutek komplementere keruumll ki Ez utaacuten a regiszterek tartalma megvaacuteltozik Tulajdonkeacuteppen ez az utoacutemunkaacutelat jelenti a programban a ravaszkodaacutest hiszen ezzel a regisztereket előkeacutesziacutetjuumlk a ciklus koumlvetkező futaacutesaacutehoz Laacutethatoacute hogy amikor a ciklus valamely lefutaacutesa veacuteget eacuter a koumlvetkező lefutaacutes ugyanazokkal a regisztereacuterteacutekekkel kezdődik

52 taacuteblaacutezat - Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten

Programaacutellapot 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

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

Ki9 00000001 00000000

Created by XMLmind XSL-FO Converter

6 fejezet - Csiacutek a LED-eken toumlmoumlrenAz előző alfejezetben a [2 feladat] megoldaacutesaacutenak assembly koacutedja talaacuten egy kicsit nehezen volt emeacuteszthető Sebaj szokjunk hozzaacute ahhoz hogy az assemblyben ilyesfeacutele gondolatmentek sűrűn fordulnak elő Azonban meg szeretneacutenk nyugtatni az olvasoacutet egy joacute darabig sokkal egyszerűbb koacutedokkal fogjuk bemutatni az ADuC lehetőseacutegeit Vizsgaacuteljuk most meg hogy hogyan lehetne sokkal egyszerűbben megoldani a [2 feladat]ot akkor ha meacuteg neacutehaacuteny utasiacutetaacutest ismeruumlnk

1 A Carry bitAz [Regiszterek] alfejezetben maacuter emliacutetettuumlk hogy az assembly nyelvű programozaacutesnaacutel bizonyos az architektuacuteraacutera jellemző jelzőbitek vagy flag-ek is fontos szerephez jutnak Ismerkedjuumlnk meg haacutet azzal a bittel amelyik az ADuC mikrovezeacuterlőkneacutel kulcsszerepet jaacutetszik nagyon sok műveletneacutel Ezt a bitet Carry bitnek vagy roumlviden C bitnek hiacutevjaacutek A Carry angol szoacute magyarul aacutetvitelt (is) jelent Ez szoros oumlsszefuumlggeacutesben aacutell a C bit szerepeacutevel Mire hasznaacutelhatoacute a C bit Mit jelez Mit mutat Főbb hasznaacutelati teruumlletei a koumlvetkezők

1 Keacutet baacutejt oumlsszeadaacutesakor tartalmazhatja a kezdeti aacutetvitelt ill jelzi ha az eredmeacuteny aacutetvitelt tartalmaz

2 Keacutet baacutejt kivonaacutesakor tartalmazhatja a kezdeti aacutetvitelt ill jelzi ha az eredmeacuteny aacutetvitelt tartalmaz

3 Jelezheti a kieacuterteacutekelt relaacutecioacute mint logikai kifejezeacutes igaz vagy hamis mivoltaacutet oumlsszehasonliacutetoacute utasiacutetaacutesoknaacutel

4 Bitforgatoacute műveletekneacutel ideiglenes taacuteroloacutekeacutent műkoumldhet

5 Bitműveletekneacutel a logikai kifejezeacutesek egyik operandusa

Amint laacutethatoacute a C bit hasznaacutelhatoacutesaacutega nagyon szeacuteleskoumlrű Sokszor maacuter a miatt bizonytalanodnak el a kezdő programozoacutek hogy egyaacuteltalaacuten van-e olyan utasiacutetaacutes amelynek veacutegrehajtaacutesa nem befolyaacutesolja a C bit eacuterteacutekeacutet Termeacuteszetesen van aacutem csakugyan sok utasiacutetaacutes van hataacutessal a C bitre Iacutegy amikor valaki oumlnaacutelloacutean boumlngeacuteszi a 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacutet akkor azt is mindig neacutezze meg hogy egy adott utasiacutetaacutes mit tesz a C bittel

A C bit eacuterteacutekeacutet befolyaacutesoloacute legegyszerűbb utasiacutetaacutesok a koumlvetkezők

SETB C CLR C CPL C

Az első utasiacutetaacutes magasra aacutelliacutetja a C bitet tehaacutet C = 1 lesz A maacutesodik utasiacutetaacutes toumlrli a C bitet tehaacutet C = 0 lesz A harmadik utasiacutetaacutes eredmeacutenye maacuter sejthető invertaacutelja a C bitet A mnemonikok rendre az angol Set Bit (bit magasra aacutelliacutetaacutesa) kifejezeacutesből ill Clear (toumlroumll) eacutes Complement (komplementer) szavakboacutel szaacutermaznak

2 Bitforgataacutes C-n keresztuumllA maacuter bemutatott bitforgatoacute utasiacutetaacutesoknak tehaacutet RL-nek eacutes RR-nek van olyan vaacuteltozatuk is amely a C-biten keresztuumll veacutegzi a forgataacutest Ez azt jelenti hogy az akkumulaacutetor kileacuteptetett bitje C-be keruumll a beleacutepő bit viszont C-ből eacuterkezik A keacutet utasiacutetaacutes mnemonikja a koumlvetkező

RLC A

eacutes

RRC A

A mnemonikok az angol Rotate Accumulator Left through C (akkumulaacutetor forgataacutesa balra C-n keresztuumll) eacutes Rotate Accumulator Right through C (akkumulaacutetor forgataacutesa jobbra C-n keresztuumll) kifejezeacutesekből szaacutermaznak Koumlnnyű meggondolni hogy ha a C-bit eacuterteacutekeacutet szabadon aacutelliacutetgathatjuk akkor azt leacuteptethetuumlnk be az akkumulaacutetorba amit csak akarunk A C-biten keresztuumll dolgozoacute bitforgatoacute utasiacutetaacutesok hataacutesaacutet a [Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor bitjeire] aacutebra szemleacutelteti

61 aacutebra - Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken toumlmoumlren

bitjeire

Az uacutej utasiacutetaacutesok ismereteacuteben fogalmazzuk aacutet a [2 feladat]ot

3 feladat

Jeleniacutetsuumlnk meg a LED-soron egy egyre hosszabb csiacutekot amely noumlvekedeacutes koumlzben minden faacutezisnaacutel vaacuterakozik egy keveset teliacutetődeacutes utaacuten pedig uacutejraindul Hasznaacuteljuk a C-n keresztuumlli bitforgataacutes műveleteacutet [Code03]

A [A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkel] alfejezet első listaacuteja mutatja hogy milyen bitmintaacutezatokat kell a 2-es portra kitennuumlnk hogy előaacutelljanak a megjeleniacutetendő csiacutek egyes faacutezisai Laacutetni fogjuk hogy milyen hateacutekony eszkoumlzt ad a kezuumlnkbe a C-n keresztuumll toumlrteacutenő bitforgataacutes Teacutetelezzuumlk foumll ugyanis hogy az akkumulaacutetor tartalma 11111111 Ez ugyebaacuter az első faacutezis amikor egyetlen LED sem vilaacutegiacutet Ha ezek utaacuten toumlroumlljuumlk a C bitet (C = 0) majd kiadjuk az RLC A utasiacutetaacutest akkor az akkumulaacutetor tartalma 11111110 lesz Az eredeti eacuterteacutek bal szeacutelső azaz 7 bitje azaz aktuaacutelisan 1 leacutep be C-be Ezzel az eacuterteacutekkel a tovaacutebbiakban semmi dolgunk A koumlvetkező faacutezis előaacutelliacutetaacuteshoz uacutejra toumlroumlljuumlk a C bit eacuterteacutekeacutet uacutejra alkalmazzuk a C-n keresztuumlli bitforgataacutest eacutes iacutegy tovaacutebb Ezzel az eljaacuteraacutessal sokkal egyszerűbben aacutelliacutetjuk elő a csiacutek egyes faacutezisainak bitmintaacutezataacutes mint amikor aritmetikai eacutes logikai műveletekkel tettuumlk A koacuted is sokkal roumlvidebbeacute toumlmoumlrebbeacute eacutes koumlnnyebben eacuterthetőveacute vaacutelik Figyeljuumlnk arra hogy a csiacutek faacutezisainak megfelelő eacuterteacutekeket az R3 regiszterben taacuteroljuk hiszen az akkumulaacutetort az időhuacutezoacute szubrutin meghiacutevaacutesaacutehoz hasznaacutelni fogjuk Ez a szubrutin (DELAY) toumlkeacuteletesen megegyezik azzal amit a [Parameacuteteraacutetadaacutes szubrutinnak] alfejezetben keacutesziacutetettuumlnk Iacuteme a koacuted

Code03asm ORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a programvezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacuten ORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacuted MAIN MOV R311111111b Kezdeti eacuterteacutek R3-nak Ebben gyűlnek a csiacutek egyes faacutezisainak megfelelő eacuterteacutekek melyek a P2-es portra iacuterandoacutek A kezdeti eacuterteacutek az oumlsszes LED-et kikapcsolja MOV R49 Kilencszer fut le ez a ciklus hiszen 9 faacutezisboacutel aacutell a csiacutek csik MOV P2R3 Kitesszuumlk a LED-ek portjaacutera a csiacutek eacuterteacutekeacutet MOV A10 A megfelelő parameacuteterrel CALL DELAY meghiacutevjuk az időhuacutezaacutest (01 s) MOV AR3 A-ba toumlltjuumlk a csiacutek aktuaacutelis eacuterteacutekeacutet CLR C Toumlroumlljuumlk a C bitet RLC A Beleacuteptetjuumlk A-ba a C bitet jobbroacutel balra MOV R3A Visszaiacuterjuk R3-ba a csiacutek uacutej faacutezisaacutet DJNZ R4csik Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutet JMP MAIN Ugraacutes vissza a program elejeacutere

Created by XMLmind XSL-FO Converter

7 fejezet - Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutelA [Csiacutek a LED-eken] eacutes [Csiacutek a LED-eken toumlmoumlren] fejezetekben megtanultuk hogyan lehet szisztematikusan mintaacutezatokat alkotni melyeket aztaacuten kijeleztuumlnk az ADuC-panel LED-soraacuten Azonnal adoacutedik a keacuterdeacutes mi van ha tetszőlegesen vaacutelasztott mintaacutezatokat szeretneacutenk kijelezni A vaacutelasz erre az hogy ez is koumlnnyűszerrel megoldhatoacute csupaacuten egy igen fontos regisztert eacutes egy uacutej ciacutemzeacutesmoacutedot kell megismernuumlnk hozzaacute A koumlvetkező feladatot tehaacutet iacutegy fogalmazzuk meg

4 feladat

Jeleniacutetsuumlnk meg a LED-soron a koacutedmemoacuteriaacuteban előre roumlgziacutetett mintaacutezatokat [Code04 Code05]

1 Az adatmutatoacuteA 80518052-es processzormagoknak van olyan regiszteruumlk is amelyikkel a memoacuteriaacuteban talaacutelhatoacute adatokat eacuterhetjuumlk el szisztematikusan Ez a regiszter az adatmutatoacute angol neveacuten Data Pointer Nagyon fontos tudnunk hogy ez a regiszter valoacutejaacuteban haacuterombaacutejtos azaz haacuterom egybaacutejtos regiszterből aacutell Ezek megnevezeacutese DPP DPH DPL A roumlvidiacuteteacutesek az angol Data Pointer Page Data Pointer High eacutes Data Pointer Low kifejezeacutesekből szaacutermaznak A DPP regiszterrel ebben a tankoumlnyvben nem foglalkozunk (ez mutatja a megciacutemzendő memoacuteriateruumllet adott lapjaacutet) eleacuteg lesz most nekuumlnk a DPHDPL regiszterkettős Ez a keacutet regiszter szorosan oumlsszetartozik egyuumltt egy 16-bites ciacutemet alkot Ezzel a 16-bites ciacutemmel 64 kilobaacutejtos memoacuteriateruumllet ciacutemezhető A memoacuteriateruumlletek 256-baacutejtos egyseacutegeit nevezik lapoknak Iacutegy pl az 1 lap a 64 kbyte-on beluumll a 0100h ciacutemtől a 01FFh ciacutemig tart A DPH regiszter az adatmutatoacute felső baacutejtja miacuteg a DPL regiszter az alsoacute baacutejtja Ezek egyuumlttes eacutertelmezeacuteseacutehez nyuacutejt segiacutetseacuteget a [Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese] Magaacutet a regiszterkettőst innentől kezdve DPTR-nek fogjuk jeloumllni hiszen egyuumlttesen alkotjaacutek az adatmutatoacutet (Data Pointer-t) Laacutethatoacute hogy a DPTR adatmutatoacute iacutegy oumlsszesen 16-bites binaacuteris eacuterteacuteket reprezentaacutel Ha ezt memoacuteriaciacutemzeacutesre hasznaacuteljuk akkor iacutegy joumln ki a 64 kbyte hiszen 216 = 65 536 = 641 024 = 64210 (vouml [Memoacuteria] alfejezet)

71 taacuteblaacutezat - Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese

DPH bitjei DPL bitjei

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

A keacutetbaacutejtos DPTR regiszter

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

2 Eacuterteacutekek noumlveleacutese eacutes csoumlkkenteacuteseAz assembly nyelvek elemi utasiacutetaacutesi koumlzeacute tartozik a memoacuteriarekeszek tartalmaacutenak 1-gyel valoacute noumlveleacutese eacutes csoumlkkenteacutese Ezeket az utasiacutetaacutesokat szigoruacute eacutertelemben aritmetikai utasiacutetaacutesoknak kell tekintenuumlnk de enneacutel a besorolaacutesnaacutel azeacutert rezeg a leacutec No de semmi baj az egyszerű noumlvelő eacutes csoumlkkentő utasiacutetaacutesok neacutelkuumll neacuteha szinte keacuteptelenseacuteg de legalaacutebbis igen neheacutezkes lenne megiacuterni azt amit akarunk

A memoacuteriarekesz noumlveleacuteseacutet veacutegrehajtoacute utasiacutetaacutes mnemonikja INC ami az angol Increment Register (regiszter noumlveleacutese) kifejezeacutesből szaacutermazik a memoacuteriarekesz csoumlkkenteacuteseacutet veacutegrehajtoacute utasiacutetaacutes mnemonikja DEC ami az angol Decrement Register (regiszter csoumlkkenteacutese) kifejezeacutesből joumln Az eddig ismertetett ciacutemzeacutesmoacutedokkal a keacutet utasiacutetaacutes vaacuteltozatai a koumlvetkezők

INC AINC Rn

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

INC directINC DPTRDEC ADEC RnDEC direct

Laacutethatoacute hogy az adatmutatoacute noumlveleacuteseacutere leacutetezik utasiacutetaacutes de csoumlkkenteacuteseacutere nincs Ez azonban ne keseriacutetsen el bennuumlnket az ADuC 842-es a megfelelő SFR hasznaacutelataacuteval konfiguraacutelhatoacute uacutegy hogy az adatmutatoacuteval toumlrteacutenő ciacutemzeacutes veacutegrehajtaacutesa utaacuten annak eacuterteacuteke automatikusan 1-gyel nőjoumln vagy akaacuter 1-gyel csoumlkkenjen Egyeacuteb esetekben nekuumlnk kell gondoskodnunk DPTR noumlveleacuteseacuteről vagy csoumlkkenteacuteseacuteről

3 A koacuted-indirekt ciacutemzeacutesAz assembly nyelvekben aacuteltalaacuteban leacuteteznek olyan utasiacutetaacutesok melyekkel indirekt ciacutemzeacutes valoacutesiacutethatoacute meg Aki tanult maacuter magas szintű programozaacutesi nyelvet annak a mutatoacutek koncepcioacuteja jelenthet neacutemi fogoacutedzkodoacutet Az indirekt ciacutemzeacutes leacutenyege az hogy egy roumlgziacutetett ciacutemhez egy segeacutedregiszter vagy az adatmutatoacute tartalmaacutet meacuteg hozzaacuteadja a processzor eacutes az iacutegy kapott ciacutemen leacutevő memoacuteriarekeszhez nyuacutel hozzaacute A reacuteszletes magyaraacutezatot jelen esetben mindjaacutert egy konkreacutet ciacutemzeacutestiacutepussal ismertetjuumlk Ennek a ciacutemzeacutesnek a neve koacuted-indirekt ciacutemzeacutes (angolul Code Indirect Addressing) Azeacutert koacuted-indirekt mert a processzor a koacutedmemoacuteriaacutehoz feacuter hozzaacute eacutes maacutesol ki onnan adatot Iacuterni a megciacutemzett helyre nyilvaacuten nem tud hiszen a koacutedmemoacuteria futaacutes koumlzben csak olvashatoacute memoacuteriakeacutent műkoumldik Neacutezzuumlk milyen szintaxisa van annak a koacuted-indirekt ciacutemzeacutessel dolgozoacute utasiacutetaacutesnak amellyel foglalkozni fogunk

MOVC AA+DPTR

Kicsit csemegeacutezzuumlnk az utasiacutetaacutes megjeleneacuteseacuten A MOV utasiacutetaacutest maacuter ismerjuumlk toumlbbfeacutele ciacutemzeacutesmoacuteddal Azonnal feltűnhet hogy ehhez keacutepest a fenti utasiacutetaacutes meacuteg egy C karaktert tartalmaz Ez a C betű utal a koacutedhoz toumlrteacutenő hozzaacutefeacutereacutesre A MOVC mnemonik ugyanis az angol Move Code Byte to Accumulator (koacutedbaacutejt (be)mozgataacutesa az akkumulaacutetorba) kifejezeacutesből szaacutermazik Ami meacuteg feltűnhet az az a teacuteny hogy a ciacutemzeacutesneacutel szerepel a kukac karakter Ez a karakter nekuumlnk magyaroknak kukac a hollandoknak majomfarkinca (apenstaartje) aminek itt semmi eacutertelme eacutes egy angol anyanyelvű ember egy e-mail-ciacutem felolvasaacutesakor a kukac karakterhez eacuterve azt mondja hogy at ([aeligt] prepoziacutecioacute jelenteacutese -naacutel -neacutel) Helymegjeloumlleacutesre hasznaacutelja Gondolkodjunk most ezzel a logikaacuteval A MOVC utasiacutetaacutes a MOV előtag alapjaacuten adatot fog maacutesolni a koacutedboacutel erre a C karakter utal Az utasiacutetaacutes első operandusa az A iacutegy a maacutesolaacutes ceacutelaacutellomaacutesa az akkumulaacutetor Most joumln az hogy honneacutet toumlrteacutenik a maacutesolaacutes ennek ciacutemeacutet uacutegy hataacuterozzuk meg hogy az adatmutatoacutehoz (DPTR) hozzaacuteadjuk az akkumulaacutetor (A) aktuaacutelis eacuterteacutekeacutet DPTR+A Veacuteguumll a kukac karakter mutatja hogy a DPTR+A művelettel megadott ciacutem a forraacutesciacutem azaz onnan toumlrteacutenik az ott aacutellomaacutesozoacute adat kiolvasaacutesa Figyeljuumlnk oda arra hogy enneacutel az utasiacutetaacutesnaacutel az akkumulaacutetor tartalma foumlluumlliacuteroacutedik A koacuted-indirekt ciacutemzeacutes megeacuterteacuteseacutehez az [A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese] nyuacutejt segiacutetseacuteget

72 taacuteblaacutezat - A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese

Koacutedmemoacuteria ciacutemei Eacuterteacutekek

0200h 20

0201h 11

0202h 3

0203h 28

0204h 19

0205h 72

0206h 10

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

0207h 5

DPTR A A eacuterteacuteke a MOVC AA+DPTR utasiacutetaacutes veacutegrehajtaacutesa utaacuten

0200h 0 20

0200h 2 3

0200h 6 10

0200h 7 5

0204h 0 19

0204h 3 5

4 Adatok elhelyezeacutese a koacutedbanAdatok elhelyezeacutese a koacutedban viszonylag egyszerűen toumlrteacutenik Ehhez csak a DB (Data Byte magyarul adatbaacutejt) fordiacutetoacutei direktiacutevaacutet kell ismernuumlnk Az adatok felsorolaacutesaacutet jelentő teruumlletnek vagy konkreacutet ciacutemet vagy ciacutemkeacutet (ez a gyakoribb) kell adnunk amint azt az alaacutebbi koacutedreacuteszletben laacutethatjuk

adatok

DB 11111111b Az adattoumlmb elemeiDB 01111110bDB 00111100bDB 00011000bDB 00000000bDB

A DB direktiacutevaacutek megadaacutesa utaacuten az eacuterteacutekadaacutes pontosan azzal a szintaxissal toumlrteacutenhet mint amit a koumlzvetlen ciacutemzeacutesneacutel laacutettunk ([Koumlzvetlen ciacutemzeacutes] alfejezet) de most nincs szuumlkseacuteg a kettős keresztre ()

Az adatmutatoacuteba a ciacutemkeacutevel ellaacutetott memoacuteriateruumllet kezdőciacutemeacutet a koumlvetkező szintaxissal toumllthetjuumlk

MOV DPTRadatok

Ennek az utasiacutetaacutesnak az aacuteltalaacutenos megjeloumlleacutese a koumlvetkező

MOV DPTRdata16

A koumlzvetlen ciacutemzeacutes rendben is van de figyeljuumlnk oda arra hogy az adatmutatoacutenak 16-bites adatot kell megadnunk hiszen 64 kilobaacutejt megciacutemzeacuteseacutehez eacuteppen ennyi szuumlkseacuteges

Eleacuterkeztuumlnk haacutet ahhoz a ponthoz hogy megoldjuk a [4 feladat]ot A koacutedhoz folyamataacutebraacutet nem tartunk szuumlkseacutegesnek most sem mert ismeacutet csak nagyon egyszerű esettel aacutellunk szemben Nyolc bitmintaacutezatot fogunk kijelezni a LED-soron majd uacutejraindiacutetjuk a ciklust iacutegy joacutepofa mozgoacute mintaacutezatok hataacutesaacutet keltő alkalmazaacutest kapunk A koacutedboacutel eacuteppen uacutegy hiaacutenyozni fognak az aacutellandoacute direktiacutevaacutek eacutes az időhuacutezoacute szubrutin (DELAY) mint a koraacutebbi neacutehaacuteny esetben

Code04asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Ugraacutes a teacutenyleges programkezdethet ORG 0060h A teacutenyleges program kezdete

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

MAINMOV DPTRadatok Az adatok toumlmbjeacutenek ciacuteme az adatmutatoacuteba keruumllMOV R30 Az R3 regisztert hasznaacuteljuk indexregiszternek az indirekt ciacutemzeacuteshezMOV R48 8-szor fut le ez a ciklus mert 8 adatbaacutejtot akarunk kijeleznidisplMOV AR3 A-ba tesszuumlk a soros indexuumlnket R3-boacutelMOVC AA+DPTR Adat olvasaacutesa a koacutedmemoacuteriaacuteboacutel koacuted-indirekt ciacutemzeacutesselMOV P2A A beolvasott adat kihelyezeacutese a LED-sorraMOV A20 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (02 s)INC R3 Az indexregiszteruumlnk eacuterteacutekeacutenek noumlveleacutese a ciklus koumlvetkező lefutaacutesaacutehozDJNZ R4displ Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Ugraacutes vissza a program elejeacutereadatokDB 01111110b Az adattoumlmb elemeiDB 00111100bDB 10011001bDB 11000011bDB 11100111bDB 11000011bDB 10011001bDB 00111100b

5 Az adatmutatoacute automatikus noumlveleacuteseAz előző alfejezetben bemutatott koacutedban az adatmutatoacute eacuterteacutekeacutet nem vaacuteltoztattuk Indexeleacuteshez csak az akkumulaacutetorra volt szuumlkseacuteguumlnk Maacutes lenne a helyzet ha 255-neacutel toumlbb adatbaacutejtot szeretneacutenk kijelezni Ekkor az akkumulaacutetor oumlnmaga maacuter nem lenne eleacuteg az indexeleacutesre iacutegy gondoskodnunk kellene az adatmutatoacute noumlveleacuteseacuteről is Van viszont lehetőseacuteg arra hogy az ADuC 842-es minden egyes koacuted-indirekt ciacutemzeacutes utaacuten automatikusan 1-gyel noumlvelje DPTR-t Ehhez egy SFR-be kell elhelyeznuumlnk a megfelelő eacuterteacuteket

A speciaacutelis funkcioacutejuacute regiszterekről roumlviden maacuter tettuumlnk emliacuteteacutest a [Portok eacutes funkcioacuteregiszterek] alfejezetben Az elektronikus tankoumlnyv haacutetraleacutevő reacuteszeacuteben sokszor fogunk hasznaacutelni SFR-eket Ehhez elengedhetetlenuumll szuumlkseacuteges lesz az Analog Devices ceacuteg aacuteltal a 842-es architektuacuteraacutehoz melleacutekelt leiacuteraacutes tanulmaacutenyozaacutesa [1] Ennek a tankoumlnyvnek nem az a feladata hogy minden SFR minden funkcioacutejaacutet kimeriacutetően bemutassa Sok SFR-rel fogunk dolgozni de nem mindegyikkel Amelyekkel dolgozunk azoknak sem tudjuk mindig minden konfiguraacutecioacutejaacutet bemutatni Amennyire azonban lehetseacuteges tankoumlnyvhoumlz illő moacutedon proacutebaacuteljuk meg taglalni az aktuaacutelisan hasznaacutelt SFR kivaacutelasztott konfiguraacutecioacutejaacutenak hataacutesaacutet Az SFR-eknek aacuteltalaacuteban van sajaacutet nevuumlk melyekkel hivatkozhatunk raacutejuk Ezek a nevek is toumlbbnyire mnemonikok melyek angol kifejezeacutesekből szaacutermaznak Ezek a nevek szerepelnek toumlbbek koumlzoumltt az assemblerhez tartozoacute MOD842 faacutejlban is Szaacutemos SFR bitenkeacutent ciacutemezhető azaz minden bitjeacutenek kuumlloumln neve van melyeket a C bithez hasonloacutean aacutelliacutetgathatunk magasra vagy alacsonyra A toumlbbi SFR bitenkeacutent nem csak egeacutesz baacutejtkeacutent ciacutemezhető Ebben az esetben a mi felelősseacuteguumlnk az hogy minden bitnek pontosan azt az eacuterteacuteket adjuk ami a felhasznaacutelni kiacutevaacutent hataacutest kivaacuteltja Az [1] referenciakeacutent megadott ADuC841_2_3pdf faacutejlban mely a gyaacutertoacutetoacutel megvaacutesaacuterolt CD-ről szaacutermazik az SFR-ek taacutergyalaacutesnaacutel mindig koumlzlik azok mnemonikjaacutet teljes angol neveacutet memoacuteriaciacutemeacutet bekapcsolaacuteskor felvett default eacuterteacutekeacutet eacutes bitenkeacutenti ciacutemezhetőseacutegeacutet Uacutegy gondoljuk hogy ezek koumlzuumll a legfontosabbakat mi is mindig oumlsszefoglaljuk egy taacuteblaacutezatban kiegeacutesziacutetve a magyar megnevezeacutessel

Visszateacuterve az adatmutatoacutera az adatmutatoacute műkoumldeacuteseacutet befolyaacutesoloacute SFR adatait a [A DPCON SFR taacutergyalt bitjei]ban talaacuteljuk Kezdő szintuumlnk miatt csak keacutet bitjeacutenek hataacutesaacutet ismertetjuumlk

73 taacuteblaacutezat - A DPCON SFR taacutergyalt bitjei

DPCON Data Pointer Control

Adatmutatoacute-vezeacuterlő

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Bit neve Leiacuteraacutes

3 DP0m1 Az adatmutatoacute viselkedeacutese

DP0m1 DP0m0 Uumlzemmoacuted

0 0 Normaacutel (8052-es) viselkedeacutes

0 1 MOVX eacutes MOVC utasiacutetaacutesok utaacuten DPTR

noumlveleacutese 1-gyel

1 0 MOVX eacutes MOVC utasiacutetaacutesok utaacuten DPTR

csoumlkkenteacutese 1-gyel

1 1 DPTR alsoacute baacutejtjaacutenak kipeckeleacutese

(16-bites eszkoumlzoumlkneacutel lehet hasznos)

2 DP0m0

Az egyes SFR-ek lehetőseacutegeinek taacutergyalaacutesakor arra biztatjuk az olvasoacutet hogy ezzel az elektronikus tankkoumlnyvvel paacuterhuzamosan tanulmaacutenyozza az emliacutetett ADuC841_2_3pdf faacutejl megfelelő reacuteszeacutet Az adatmutatoacute műkoumldeacuteseacutet befolyaacutesoloacute DPCON SFR oumlsszes bitjeacutenek magyaraacutezata itt talaacutelhatoacute meg [1 p 51 Table 21] A hivatkozott taacuteblaacutezatboacutel kideruumll hogy a bemutatott adatmutatoacutet elsődleges adatmutatoacutenak kell neveznuumlnk mert van egy maacutesodlagos vagy hűbb fordiacutetaacutessal aacuternyeacutek-adatmutatoacute is Ez utoacutebbival azonban nem foglalkozunk Az elsődleges adatmutatoacute viselkedeacuteseacutet a DPCON 3 eacutes 2 bitje hataacuterozza meg Ha e keacutet bit eacuterteacuteke egyuumlttesen 01 akkor az azt a műkoumldeacutest vaacuteltja ki hogy minden egyes MOVC (eacutes MOVX de erről majd keacutesőbb) utasiacutetaacutes utaacuten DPTR eacuterteacuteke 1-gyel nő Ezek szerint ilyenkor az akkumulaacutetorra igaziboacutel nincs is szuumlkseacuteguumlnk a ciacutemzeacuteshez de mivel az mindig reacutesze a koacuted-indirekt ciacutemzeacutesnek ezeacutert ceacutelszerű az eacuterteacutekeacutet 0-n tartani (Rafinaacuteltabb programozoacutek persze kombinaacutelhatjaacutek a kettőthellip) Mindazt amit most elmondtunk a koumlvetkező koacutedban mutatjuk be Ez a koacuted a bemutatott reacutesztől eltekintve toumlkeacuteletesen megegyezik Code04-gyel laacutesd előző alfejezet Ezzel az adatmutatoacutes truumlkkel a koacuted meacuteg roumlvidebbeacute vaacutelik

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

Code05asmMAINMOV DPCON00000100b Annak beaacutelliacutetaacutesa hogy az elsődleges adatmutatoacute automatikusan 1-gyel nőjoumln valahaacutenyszor veacutegrehajtoacutedik a MOVC utasiacutetaacutesMOV DPTRadatok Az adatok toumlmbjeacutenek ciacuteme az adatmutatoacuteba keruumllMOV R48 8-szor fut le ez a ciklus mert 8 adatbaacutejtot akarunk kijeleznidisplMOV A0 A koacuted-indirekt ciacutemzeacuteshez 0-t teszuumlnk A-ba mert most majd a DPTR fog automatikusan nőniMOVC AA+DPTR Adat olvasaacutesa a koacutedmemoacuteriaacuteboacutel koacuted-indirekt ciacutemzeacutesselMOV P2A A beolvasott adat kihelyezeacutese a LED-sorraMOV A20 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (02 s)DJNZ R4displ Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Ugraacutes vissza a program elejeacutere

Created by XMLmind XSL-FO Converter

8 fejezet - Felteacutetelek kezeleacuteseA 80518052-es processzormagok utasiacutetaacuteskeacuteszlete nem bővelkedik oumlsszehasonliacutetaacutesokat lehetőveacute tevő utasiacutetaacutesokban Persze azzal a neacutehaacutennyal ami rendelkezeacutesuumlnkre aacutell mindent el lehet inteacutezni csak hozzaacute kell szokni a logikaacutejukhoz Felteacutetelek kezeleacuteseacutere egy programban szinte mindig szuumlkseacuteg van Ha maacuter akaacutercsak egyetlen ciklust is iacuterunk annak kileacutepeacutesi felteacutetele is felteacutetel Ez az egyik legfontosabb eset A maacutesik az amikor valamely logikai kifejezeacutes igaz vagy hamis mivolta alapjaacuten el kell aacutegaztatnunk a programot Ebben a fejezetben megmutatjuk hogy mikeacutent lehet pontosan ugyanuacutegy műkoumldő ciklusokat toumlbbfeacutelekeacuteppen megiacuterni A bemutatott moacutedszerek nem kimeriacutető elemzeacutest jelentenek ezek alapjaacuten (vagy eacuteppen ezektől fuumlggetlenuumll) tovaacutebbi ciklusszervezeacutesi gondolatmeneteket bizonyaacutera az olvasoacute is koumlnnyen ki tud talaacutelni

1 Oumlsszeadaacutes eacutes kivonaacutesAz aacutetvitel neacutelkuumlli oumlsszeadaacutes utasiacutetaacutesaacutet maacuter bemutattuk a [Logikai eacutes aritmetikai utasiacutetaacutesok] alfejezetben azonban a teljesseacuteg kedveacuteeacutert uacutejra felsoroljuk a maacuter ismert ciacutemzeacutesmoacuteduacute vaacuteltozatokat

ADD ARnADD AdirectADD Adata

Ez az utasiacutetaacutes befolyaacutesolja a C bit eacuterteacutekeacutet Ha az oumlsszeadaacutes eredmeacutenye nagyobb mint 255 akkor a C bit 1 lesz kuumlloumlnben 0 Ezeacutert hiacutevjaacutek aacutetviteli bitnek Ennek segiacutetseacutegeacutevel lehet toumlbb baacutejton aacutebraacutezolt szaacutemokat oumlsszeadni de akkor azt maacuter oumlsszeadaacutes koumlzben figyelembe kell venni amit az ADD utasiacutetaacutes nem tesz Az oumlsszeadaacutesnak van olyan vaacuteltozata is amely nem csak az operandust adja az akkumulaacutetorhoz hanem a C bit tartalmaacutet is Az aacutetviteles oumlsszeadaacutes mnemonikja ADDC ami az angol Add Accumulator with Carry (hozzaacutead az akkumulaacutetorhoz aacutetvitellel) kifejezeacutesből szaacutermazik A művelet veacutegrehajtaacutesa befolyaacutesolja a C bit eacuterteacutekeacutet baacutermi volt is az a művelet elveacutegzeacutese előtt Jelenteacutese a művelet utaacuten ugyanaz mint az ADD utasiacutetaacutesnaacutel Az aacutetviteles oumlsszeadaacutes utasiacutetaacutesa az eddig megtanult ciacutemzeacutesmoacutedokkal

ADDC ARnADDC AdirectADDC Adata

Hogy joacutel eacuterthető legyen megismeacuteteljuumlk a C bittel kapcsolatos tudnivaloacutekat Vannak olyan utasiacutetaacutesok melyek veacutegrehajtaacutesaacutenaacutel nem mindegy hogy mi volt a C bit eacuterteacuteke az utasiacutetaacutes veacutegrehajtaacutesa előtt Vannak aztaacuten olyan utasiacutetaacutesok amelyek veacutegrehajtaacutesa befolyaacutesolja a C bit eacuterteacutekeacutet de ez csak az utasiacutetaacutes veacutegrehajtaacutesa utaacuten deruumll ki A keacutet eset teljesen maacutest jelent eacutes figyeljuumlnk arra hogy bizonyos utasiacutetaacutesokra mind a keacutet megfogalmazaacutes igaz

A teljesseacuteg kedveacuteeacutert el kell mondanunk hogy a C bit mellett van meacuteg keacutet jelzőbit vagy flag melyek eacuterteacutekeacutet befolyaacutesoljaacutek az aritmetikai műveletek Ezek az AC ill OV bitek Az AC roumlvidiacuteteacutes az angol Auxiliary Carry (segeacuted- kiegeacutesziacutető aacutetvitel) kifejezeacutesből az OV pedig az Overflow (tuacutelcsordulaacutes) szoacuteboacutel szaacutermazik AC pont ugyanazt jelzi mint C csak nem a 7 bitneacutel hanem a 3 bitneacutel (a bitek szaacutemozaacutesaacutet 0-val kezdve) OV a kettes komplemensben aacutebraacutezolt előjeles szaacutemoknaacutel jut szerephez Ezekkel a jelzőbitekkel egyelőre nem foglalkozunk

A kivonaacutes utasiacutetaacutesaacutenak mnemonikja SUBB ami az angol Subtract from Accumulator with Borrow (kivonaacutes az akkumulaacutetorboacutel koumllcsoumlnzeacutessel) kifejezeacutesből szaacutermazik A borrow azaz koumllcsoumlnzeacutes szoacute magyaraacutezatra szorul Amerikaacuteban az terjedt el keacutet szaacutem papiacuteron toumlrteacutenő kivonaacutesaacutenaacutel hogy ha kisebb szaacutemjegyből kell nagyobbat kivonni valamely helyieacuterteacutekneacutel akkor a kisebbiacutetendő koumlvetkező jegyeacutet csoumlkkentik eggyel majd ezt a koumllcsoumlnvett eacuterteacuteket adjaacutek hozzaacute aacutetmenetileg a kisebbiacutetendő probleacutemaacutes szaacutemjegyeacutehez Az eggyel csoumlkkentett jegyet aacutet is huacutezzaacutek majd odaiacuterjaacutek az eggyel kisebb szaacutemjegyet Ez a koumllcsoumlnzeacutes szerepel az utasiacutetaacutes megnevezeacuteseacuteben A műveletet magyarul mi hiacutevjuk nyugodtan simaacuten aacutetviteles kivonaacutesnak A SUBB utasiacutetaacutes vaacuteltozatai a maacuter ismert ciacutemzeacutesmoacutedokkal

SUBB ARnSUBB AdirectSUBB Adata

A SUBB utasiacutetaacutes veacutegrehajtaacutesaacutenaacutel a C bit eredeti eacuterteacuteke is beszaacutemiacutet Ha az utasiacutetaacutes veacutegrehajtaacutesa előtt C = 1 akkor eleve lesz koumllcsoumlnzeacutes ha C = 0 akkor nem lesz (Foumlldi halandoacute ez utoacutebbi eacutertelemben gondolna elsőkeacutent a kivonaacutes műveletre) Kivonaacutesnaacutel ahogy az vaacuterhatoacute maga az eredmeacuteny is befolyaacutesolja a C bitet C akkor lesz 1

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

ha a kivonandoacute nagyobb mint a kisebbiacutetendő azaz az akkumulaacutetor eacuterteacuteke (AC eacutes OV eacuterteacuteke itt is ahhoz hasonloacutean alakul mint az oumlsszeadoacute utasiacutetaacutesoknaacutel) Ha nem akarunk magunknak meglepeteacutest a SUBB utasiacutetaacutes hasznaacutelataacutenaacutel nagyon figyeljuumlnk arra hogy mi a C bit eacuterteacuteke a veacutegrehajtaacutes előtt

2 Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesokEbben a fejezetben oumlsszeszedjuumlk azokat az oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesokat melyekkel ciklusokat lehet szervezni eacutes egyeacuteb programelaacutegazaacutesokat megvaloacutesiacutetani

A [Egyszerű ciklusszervezeacutes] alfejezetben maacuter taacutergyaltuk a DJNZ utasiacutetaacutest az R segeacutedregiszterekkel Ezt most megismeacuteteljuumlk a felsorlaacutesban eacutes most maacuter egy maacutesik ciacutemzeacutessel is eacuterteni fogjuk

DJNZ RnrelDJNZ directrel

Az utasiacutetaacuteshoz tartozoacute magyaraacutezat megtalaacutelhatoacute az emliacutetett alfejezetben

A maacutesik oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutes a CJNE A mnemonik az angol Compare and Jump if Not Equal (oumlsszehasonliacutet eacutes ugrik ha nem egyenlő) kifejezeacutesből szaacutermazik Ciacutemzeacutesmoacuted alapjaacuten az alaacutebbi verzioacutek leacuteteznek

CJNE AdirectrelCJNE AdatarelCJNE Rndatarel

A haacuterom operandusboacutel az első azt jelenti amit oumlsszehasonliacutetunk Ez lehet az akkumulaacutetor vagy valamelyik R regiszter tartalma A maacutesodik operandus az amihez hasonliacutetunk a harmadik pedig egy relatiacutev ugraacutes meacuterteacuteke azaz az ugraacutes meacuterteacuteke az utasiacutetaacutes poziacutecioacutejaacutehoz keacutepest +127 eacutes ndash128 baacutejt koumlzoumltt Assemblyben ezt aacuteltalaacuteban ciacutemkeacutekkel adjuk meg eacutes az assembler az ami a kokreacutet eacuterteacuteket meghataacuterozza Ugraacutes akkor toumlrteacutenik ha a keacutet oumlsszehasonliacutetott objektum eacuterteacuteke nem egyenlő Kuumlloumlnben a program csorog tovaacutebb

A harmadik eacutes negyedik oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutes a JZ eacutes a JNZ A mnemonikok az angol Jump if Accumulator Zero (ugrik ha az akkumulaacutetor nulla) eacutes Jump if Accumulator Not Zero (ugrik ha az akkumulaacutetor nem nulla) kifejezeacutesből szaacutermaznak Ezek csak az akkumulaacutetor eacuterteacuteke alapjaacuten ugratnak vagy nem ugratnak

JZ relJNZ rel

Ennyi Bitekre vonatkozoacutean meacuteg vannak elaacutegazaacutesi utasiacutetaacutesok azokat keacutesőbb vesszuumlk De toumlbb teacutenyleg nincs Neacutehaacuteny truumlkkoumlt azonban meacuteg a keacutesőbbiekben ismertetuumlnk az ugroacute utasiacutetaacutesokkal kapcsolatban

3 Hat variaacutecioacute egy feladatraAz előző alfejezetek utaacuten proacutebaacuteljunk kuumlloumlnfeacutele moacutedon ciklusokat szervezni valami laacutetszoacutelag eacutertelmes feladatot teljesiacutetve de uacutegy hogy a ciklusszervezeacutes moacutedjainak logikaacuteja akaacuter jelentősen elteacuterhet egymaacutestoacutel a laacutetszat azonban toumlkeacuteletesen ugyanaz maradjon

5 feladat

Szaacutemoljunk el a programmal 1-től 15-ig eacutes kis vaacuterakozaacutessal jeleniacutetsuumlk meg a LED-soron az eacuterteacutekeket a kettes szaacutemrendszerben [Code06 Code07 Code08 Code09 Code10 Code11]

Ennek a feladatnak a megoldaacutesaacutenaacutel hat elteacuterő ciklusszervezeacutest fogunk kielemezni Ezekhez most maacuter folyamataacutebraacutet is rajzolunk A megadott koacutedreacuteszletekben az időhuacutezoacute szubrutinunk meacuteg mindig az mint az előző neacutehaacuteny feladat megoldaacutesaacutenaacutel iacutegy ezt uacutejra ismeacutet csak foumlloumlsleges lenne megadnunk Jelenleacuteteacutere csak az azt meghiacutevoacute utasiacutetaacutes fog utalni

Az első megoldaacutesban a DJNZ utasiacutetaacutest hasznaacuteljuk A ciklusvaacuteltozoacute az R4 regiszter lesz a kijelezendő eacuterteacutekek vaacuteltozoacuteja pedig R3 Leacutenyeges hogy az első megoldaacutesban e keacutet vaacuteltozoacutenak semmi koumlze nem lesz egymaacuteshoz az egyik (R4) csak azeacutert lesz felelős hogy a ciklus 15-szoumlr fusson le miacuteg a maacutesik (R3) eacuterteacutekeacutet kuumlloumln kezeljuumlk A megoldaacutes folyamataacutebraacuteja az [Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval] aacutebraacuten laacutethatoacute Vegyuumlk eacuteszre hogy a DJNZ utasiacutetaacutes nem csak a felteacutetelt jelkeacutepező teacutetelt valoacutesiacutetja meg hanem az az előtt aacutelloacute

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

eacuterteacutekcsoumlkkenteacutest is

81 aacutebra - Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval

Az [Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval] aacutebraacuten laacutethatoacute folyamataacutebra koacutedja a koumlvetkező

Code06asmMOV R31 Kezdeti eacuterteacutek R3-nakMOV R415 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a kijelezendő eacuterteacuteketCPL A Vesszuumlk a komplementereacutetMOV P2A Kijelezzuumlk a LED-soronMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 Noumlveljuumlk a kijelezendő eacuterteacuteketDJNZ R4cik Lekezeljuumlk a ciklusvaacuteltozoacutet Ugrunk vissza ha R4 eacuterteacuteke meacuteg nem 0 Ha maacuter igen csorog tovaacutebb a program azaz kileacutepuumlnk a ciklusboacutelJMP $ Oumlnmagaacutera ugratjuk vissza a programot A program helyben jaacuter toumlbbet semmit sem csinaacutel

A koacutedban egyetlen aproacute uacutejdonsaacutegot laacutethatunk Ez a legutolsoacute utasiacutetaacutesnaacutel a $ jel a JMP utaacuten Ez azt jelenti hogy az ugraacutes az utasiacutetaacutesra oumlnmagaacutera toumlrteacutenik iacutegy igen toumlmoumlr alakjaacutet laacutetjuk egy veacutegtelen ciklusnak Itt a program megakad eacutes innentől kezdve helyben jaacuter

A feladat maacutesodik megoldaacutesaacuteban ugyanuacutegy szervezzuumlk a ciklust mint az előbb de a kijelezendő eacuterteacutekekhez most nem hasznaacutelunk kuumlloumln vaacuteltozoacutet hanem azokat kifejezetten a ciklusvaacuteltozoacuteboacutel aacutelliacutetjuk elő aritmetikai műveletekkel Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code07)

82 aacutebra - Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code07asmMOV R415 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV A16 A-ba tesszuumlk a kijelezendő eacuterteacuteketCLR C C-t toumlroumlljuumlk a kivonaacuteshozSUBB AR4 A=16-R4 lesz az eredmeacuteny azaz a kijelezendő eacuterteacutek 1-től megy 15-igCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintDJNZ R4cik Lekezeljuumlk a ciklusvaacuteltozoacutet Ugrunk vissza ha R4 eacuterteacuteke meacuteg nem 0 Ha maacuter igen csorog tovaacutebb a program azaz kileacutepuumlnk a ciklusboacutelJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat harmadik megoldaacutesaacuteban maacuteshogy szervezzuumlk a ciklust Most a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet Tulajdonkeacuteppen ez lesz a ciklusvaacuteltozoacute is A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet a ciklus veacutegeacuten eacuterteacutekeljuumlk ki azaz a ciklus haacutetul tesztelő lesz Ehhez a CJNE utasiacutetaacutest hasznaacuteljuk Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code08)

83 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code08asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetCJNE R316cik R3 utolsoacute eacuterteacuteke ami joacute nekuumlnk a 15 Ha ez utaacuten noumlveluumlnk rajta egyet akkor 16-ot kapunk Ez a 16-os eacuterteacutek lesz joacute kileacutepeacutesi felteacutetelnek Ha ezt meacuteg nem eacutertuumlk el ugrunk visszaJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat negyedik megoldaacutesaacuteban szintuacutegy a CJNE utasiacutetaacutest hasznaacuteljuk Most is a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet eacutes ismeacutet ez lesz a ciklusvaacuteltozoacute is A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet azonban a ciklus elejeacuten eacuterteacutekeljuumlk ki azaz a ciklus eloumll tesztelő lesz Ennek a megoldaacutesnak a folyamataacutebraacuteja a [ Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code09)

84 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code09asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikCJNE R316rendben Ha R3 meacuteg nem eacuterte el a 16-ot akkor joumlhet a ciklusmag Ugrunk a rsquorendbenrsquo ciacutemkeacutereJMP kiugrik Ha R3 maacuter 16-tal egyenlő akkor ide csorog a program Elhagyjuk a ciklust Kiugratjuk a ciklus moumlgeacute

rendben

MOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetJMP cik Visszaugrunk a ciklus elejeacutere az ott leacutevő vizsgaacutelathoz

kiugrik

JMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat oumltoumldik megoldaacutesaacuteban szintuacutegy a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet Ismeacutet ez lesz a ciklusvaacuteltozoacute A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet ismeacutet csak ciklus veacutegeacuten eacuterteacutekeljuumlk ki azaz a ciklus megint haacutetul tesztelő lesz Ehhez azonban most a JNZ utasiacutetaacutest hasznaacuteljuk Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code10)

85 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk

Code10asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutet kor kell kileacutepni ha R3-at 16-ra noumlveltuumlk hiszen utolsoacute hasznos eacuterteacuteke 15MOV AR3 A-ba tesszuumlk R3-atCLR C Toumlroumlljuumlk C-t a kivonaacuteshozSUBB A16 A=R3-16JNZ cik Ha az eredmeacuteny nem 0 akkor meacuteg nem eacutertuumlk el 16-ot azaz a kileacutepeacutesi felteacutetelt Ekkor ugrunk vissza a ciklus elejeacutereJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

Veacuteguumll a feladat hatodik megoldaacutesaacuteban az a kuumlloumlnbseacuteg az oumltoumldikhez keacutepest hogy itt a JZ utasiacutetaacutest hasznaacuteljuk Ehhez mind a folyamataacutebra ([Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk] aacutebra) mind a koacuted (Code11) neacutemileg moacutedosul hogy most akkor toumlrteacutenjen ugraacutes ha egy eredmeacuteny eacuteppen nulla Figyeljuumlk meg hogy e keacutet utolsoacute algoritmusnaacutel hol helyezkedik el a ciklusvaacuteltozoacute eacuterteacutekeacutenek noumlveleacutese a kileacutepeacutesi felteacutetel kieacuterteacutekeleacuteseacutehez keacutepest

86 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk

Code11asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintMOV AR3 A-ba tesszuumlk R3-atCLR C Toumlroumlljuumlk C-t a kivonaacuteshozSUBB A15 A=R3-15JZ kiugrik Ha az eredmeacuteny 0 akkor eleacutertuumlk R3 utolsoacute hasznos eacuterteacutekeacutet Ez a kileacutepeacutesi felteacutetel Kiugrunk a ciklusboacutelINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetJMP cik Ugraacutes vissza a ciklus elejeacutere

kiugrik

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

JMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

Az [5 feladat] megoldaacutesaacutera gyaacutertott hat elteacuterő oumltlet nem az oumlsszes lehetőseacuteget jelenti Sok-sok aproacute reacuteszletekben elteacuterő moacutedszert lehetne meacuteg bemutatni A ceacutel mindenesetre az volt hogy megmutassuk az olvasoacutenak hogy meacuteg a nagyon keveacutes elaacutegazaacutesi utasiacutetaacutessal is milyen ceacuteliraacutenyos moacutedon van lehetőseacuteg ciklusok szervezeacuteseacutere eacutes felteacutetelek kieacuterteacutekeleacuteseacutere Sajaacutet programban pedig az aktuaacutelis feladattoacutel fuumlggően baacutetran lehet uumlgyeskedni a legroumlvidebb koacuted leggyorsabb veacutegrehajtaacutes legkevesebb felhasznaacutelt regiszter stb eacuterdekeacuteben

Created by XMLmind XSL-FO Converter

9 fejezet - Nyomoacutegombok a panelonAz ADuC 842 egyik portjaacutenak keacutet laacuteba alkalmas arra hogy az azon toumlrteacutenő vaacuteltozaacutest kuumllső esemeacutenykeacutent eacuterteacutekelje a processzor Ezzel kicsit keacutesőbb behatoacutebban foglalkozunk de maacuter most is keacutepesek vagyunk arra hogy ezeket a laacutebakat programboacutel figyeljuumlk A hallgatoacutei panelon egy-egy nyomoacutegomb van koumltve a 3 port 2 eacutes 3 laacutebaacutera Amikor ezeket a nyomoacutegombokat lenyomjuk akkor foumlldre huacutezzuk a laacutebakat Ha a gombok nincsenek lenyomva akkor a laacutebak magas jelszinten uumllnek

A nyomoacutegombok keacutenyelmes hasznaacutelataacutehoz tanuljuk meg az assembler BIT fordiacutetoacutei direktiacutevaacutejaacutet Ezzel a direktiacutevaacuteval bitekhez rendelhetuumlnk szimboacutelumokat peacuteldaacuteul

led1 BIT P20led2 BIT P27but1 BIT P32but2 BIT P33

Az első keacutet sor a 2 port (a LED-sor portja) keacutet szeacutelső bitjeacutet rendeli a led1 ill led2 szimboacutelumhoz miacuteg az utolsoacute keacutet sor a nyomoacutegombok portbitjeit rendeli a but1 ill but2 szimboacutelumhoz Figyeljuumlk meg hogyan hivatkozunk adott port adott bitjeacutere A P jelenti a portot az utaacutena aacutelloacute szaacutem a port sorszaacutema a tizedespont utaacuteni szaacutem pedig a portbit sorszaacutema (0-val kezdve)

1 Gombnyomaacutes detektaacutelaacutesaEbben az alfejezetben egy nagyon elemi kis feladatot oldunk meg a nyomoacutegombokkal kapcsolatban

6 feladat

A panel nyomoacutegombjainak lenyomaacutesaacutera vilaacutegiacutetson egy-egy LED a panel LED-soraacuten Egyuumlttes megnyomaacutesukkor mindkeacutet LED vilaacutegiacutetson A LED-ek bekapcsolaacutesa pontosan a lenyomaacutes idejeacuteig tartson [Code12]

A feladat megoldaacutesaacutehoz a MOV utasiacutetaacutesnak keacutet uacutej verzioacutejaacutet tanuljuk meg azokat amelyekkel adott bitet mozgatunk a Carry bitbe ill fordiacutetva

MOV CbitMOV bitC

A [6 feladat] megoldaacutesa amilyen roumlvid annyira laacutetvaacutenyos lesz műkoumldeacutes koumlzben A koacuted teacutenyleg csak paacuter sor iacutegy teljes egeacuteszeacuteben koumlzoumlljuumlk A bitek definiaacutelaacutesa gyakorlatilag baacuterhol toumlrteacutenhet a koacutedon beluumll

Code12asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelatabut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaled1 BIT P20 Az egyik szeacutelső LED szimboacutelumaled2 BIT P27 A maacutesik szeacutelső LED szimboacutelumaCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV Cbut1 Az 1 gomb bitjeacutenek mozgataacutesa C-beMOV led1C Aztaacuten C kirakaacutesa a led1 portbitreMOV Cbut2 A 2 gomb bitjeacutenek mozgataacutesa C-beMOV led2C Aztaacuten C kirakaacutesa a led2 portbitreJMP MAIN Kezdjuumlk eloumllrőlEND

2 Logikai műveletek bitekkelEzzel az alfejezettel eleacuterkeztuumlnk ahhoz a ponthoz ami a szaacutemiacutetaacutestechnikaacuteban aacuteltalaacuteban elkeruumllhetetlen

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

oumlsszefoglaljuk a logikai műveleteket eacutes az azokhoz tartozoacute utasiacutetaacutesokat Egyelőre mindezt a bitek szintjeacuten A baacutejtokkal ezek alapjaacuten kicsit keacutesőbb maacuter egeacuteszen koumlnnyen el fogunk baacutenni

Az előző alfejezetben megismerkedtuumlnk az egyedileg kezelhető bitek fogalmaacuteval eacutes maacutesoltuk is őket ide-oda Ezeket a biteket termeacuteszetesen eacuteppen uacutegy lehet magasra aacutelliacutetani toumlroumllni eacutes invertaacutelni mint a C bitet (laacutesd [A Carry bit] alfejezet)

SETB bitCLR bitCPL bit

Egyedi bitekkel a keacutet legfontosabb logikai műveletet veacutegezhetjuumlk el az EacuteS ill VAGY műveletet A biztonsaacuteg kedveacuteeacutert a [Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata]ban eacutes a [A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata] felideacutezzuumlk e keacutet művelet igazsaacutegtaacuteblaacutezataacutet csak a műveletekre az angol szoacutet hasznaacuteljuk Ha maacuter itt tartunk ne maradjon ki a negaacutecioacute művelete sem ([A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata])

91 taacuteblaacutezat - Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata

A B A AND B

0 0 0

0 1 0

1 0 0

1 1 1

92 taacuteblaacutezat - A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata

A B A OR B

0 0 0

0 1 1

1 0 1

1 1 1

93 taacuteblaacutezat - A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata

A NOT A

0 1

1 0

A fenti keacutet logikai művelet utasiacutetaacutesa bit tiacutepusuacute operandusokra a koumlvetkező

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

ANL CbitORL Cbit

A mnemonikok első keacutet betűje nyilvaacutenvaloacute az utaacutenuk koumlvetkező L pedig valoacutesziacutenűleg az angol Logical (logikai) szoacuteboacutel szaacutermazik A 80518052-es processzormag programozaacutesaacuteval foglalkozoacute szakkoumlnyvek mindenesetre ezekre a mnemonikokra nem adnak kimeriacutető magyaraacutezatot

Nagyon fontos szem előtt tartanunk hogy az eredmeacuteny mindig a C bitbe keruumll Mintha a koumlvetkező moacutedon iacuternaacutenk foumll a műveleteket

C = C AND bit

C = C OR bit

Amennyiben uacutegy adoacutedik a helyzet hogy a logikai műveletek elveacutegzeacuteseacutehez nem a bit neacutevvel illetett bitre hanem annak komplementereacutere (negaacuteltjaacutera inverzeacutere) van szuumlkseacuteg akkor a koumlvetkező keacutet utasiacutetaacutes lehet a segiacutetseacuteguumlnkre

ANL CbitORL Cbit

Ez utoacutebbi keacutet utasiacutetaacutes nem azonos a fentebbi kettővel geacutepi koacutedjuk is elteacuterő A perjel () utal arra hogy a művelet a C biten eacutes a megciacutemzett bit negaacuteltjaacuten hajtoacutedik veacutegre

3 Elaacutegazaacutesok bitek alapjaacutenA JZ eacutes JNZ utasiacutetaacutesok logikaacutejaacutet koumlvetve bitek eacuterteacuteke alapjaacuten is leacutetrehozhatunk felteacuteteles ugraacutesokat

JC relJNC relJB bitrelJNB bitrel

A mnemonikok az angol Jump if CBit Set (ugraacutes ha Cbit magas) eacutes Jump if CBit Not Set (ugraacutes ha Cbit nem magas (tehaacutet alacsony)) kifejezeacutesekből szaacutermaznak Az ugraacutes meacuterteacuteke a relatiacutev ciacutemkeacutenek megfelelően megint csak ndash128 eacutes +127 baacutejt koumlzoumltti eacuterteacutek lehet A harmadik eacutes negyedik utasiacutetaacutesnaacutel az első operandus azaz a bit arra utal hogy konkreacutet bitre kell hivatkoznunk Hogy teljes legyen a lista megadjuk az oumltoumldik ide tartozoacute utasiacutetaacutest is

JBC bitrel

Ez a mnemonik az angol Jump if Bit Set and Clear Bit kifejezeacutesből szaacutermazik Akkor toumlrteacutenik ugraacutes ha a hivatkozott bit eacuterteacuteke 1 eacutes ugraacuteskor mindjaacutert toumlrlődik is ez a bit Ez az utasiacutetaacutes viszonylag ritkaacuten keruumll elő de attoacutel meacuteg bizonyos helyzetekben nagyon is hasznos lehet

4 Logikai műveletek baacutejtokkalA [Logikai műveletek bitekkel] alfejezetben aacutettekintettuumlk a legelemibb logikai műveleteket kuumlloumlnaacutelloacute bitek eseteacuteben Hasonloacute moacutedon lehet logikai műveleteket veacutegezni baacutejtokon egyszerűen arroacutel van szoacute hogy keacutet baacutejtnak mindig az azonos helyieacuterteacutekű bitjein veacutegezzuumlk a műveletet A baacutejtokon azaz regiszterek vagy memoacuteriarekeszek tartalmaacuten veacutegrehajthatoacute logikai műveletek listaacuteja a maacuter ismert ciacutemzeacutesmoacutedokkal a koumlvetkező

ANL ARnANL AdirectANL AdataANL directAANL directdataORL ARnORL AdirectORL AdataORL directAORL directdata

Baacutejtok eseteacuteben szerencseacutere leacutetezik utasiacutetaacutes arra a logikai műveletre amelyet talaacuten sok olvasoacute titokban maacuter

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

hiaacutenyolt is ez lesz a kizaacuteroacute VAGY Angolul exclusive OR-nak hiacutevjaacutek iacutegy mi is az ebből szaacutermazoacute XOR roumlvidiacuteteacutest hasznaacuteljuk a [A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata]ban Eacuterdekes hogy bitekre nem hoztak leacutetre a gyaacutertoacutek ilyen utasiacutetaacutest

94 taacuteblaacutezat - A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata

A B A XOR B

0 0 0

0 1 1

1 0 1

1 1 0

A kizaacuteroacute VAGY műveletre vonatkozoacute utasiacutetaacutesok listaacuteja iacutegy fest

XRL ARnXRL AdirectXRL AdataXRL directAXRL directdata

A mnemonik az Exclusive OR Logical (kizaacuteroacute vagy logikai) angol kifejezeacutesből szaacutermazhat

Az ebben a fejezetben felsorolt ciacutemzeacutesmoacutedoknaacutel a logikai művelet eredmeacutenye mindig az első operanduskeacutent megadott regiszterbe vagy memoacuteriaciacutemre keruumll

5 Bitek moacutedosiacutetaacutesa baacutejton beluumllA baacutejtokra vonatkozoacute logikai műveletekkel aproacute de igen fontos feladatokat oldhatunk meg Az EacuteS művelettel tetszőlegesen vaacutelasztott biteket toumlroumllhetuumlnk egy baacutejtban fuumlggetlenuumll attoacutel hogy mi volt azok eredeti eacuterteacuteke Mindezt uacutegy hogy a toumlbbi bit eacuterteacuteke nem vaacuteltozik meg Vegyuumlk peacuteldaacutenak azt az esetet amikor toumlroumllni akarjuk egy baacutejt 1 eacutes 3 bitjeacutet Ebben az esetben az EacuteS művelet egyik operandusa az 11110101 lesz tehaacutet oda iacuterunk nullaacutekat ahol a bit toumlrleacuteseacutet veacutegezzuumlk Az ilyen műveletekre hasznaacutelt bitmintaacutekat maszknak vagy logikai maszknak nevezzuumlk Konkreacutet peacutelda bitek toumlrleacuteseacutere

11001100

AND 11110101

--------

11000100

Laacutethatoacute hogy ami a kijeloumllt helyeken az eredeti baacutejtban 1 volt az csakugyan 0-vaacute vaacutelt ami 0 volt az maradt 0 a toumlbbi bit pedig vaacuteltozatlan maradt

Ha most az a ceacutelunk hogy az előbbi helyeken eacuteppen magasra aacutelliacutetsuk a biteket akkor az előbbi maszk inverzeacutet hasznaacuteljuk azaz 00001010-t Tehaacutet oda iacuterunk 1-et ahol a magasra aacutelliacutetaacutest veacutegezzuumlk EacuteS művelet helyett most a VAGY műveletre van szuumlkseacuteguumlnk

11001100

OR 00001010

--------

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

11001110

Laacutethatoacute hogy ami a kijeloumllt helyeken az eredeti baacutejtban 0 volt az csakugyan 1-gyeacute vaacutelt ami 1 volt az maradt 1 a toumlbbi bit pedig vaacuteltozatlan maradt

A kizaacuteroacute VAGY művelettel meacuteg a fentiekneacutel is nagyobb huncutsaacutegot tudunk kivitelezni invertaacutelhatjuk a kijeloumllt helyen leacutevő biteket

11001100

XOR 00001010

--------

11000110

Ezek a maszkolaacutesi truumlkkoumlk nagyon hasznos eszkoumlzt adnak a kezuumlnkbe assembly nyelvű programozaacutes soraacuten hiszen igen sokszor kell majd egyes regiszterek bitjeit elszigetelt a toumlbbitől fuumlggetlen moacutedon aacutelliacutetgatnunk

6 Gombnyomaacutesok vizsgaacutelataEbben az alfejezetben olyan feladatot fogalmazunk meg a nyomoacutegombokkal kapcsolatban melynek megoldaacutesaacutehoz szuumlkseacuteg lesz az előző keacutet alfejezetben ismertetett utasiacutetaacutesokra

7 feladat

A panel nyomoacutegombjainak lenyomaacutesaacutera vilaacutegiacutetson egy-egy LED a panel LED-soraacutenak egyik ill maacutesik szeacuteleacuten Egyuumlttes megnyomaacutesukkor az oumlsszes LED vilaacutegiacutetson A LED-ek bekapcsolaacutesaacutet a gombnyomaacutesok pillanatnyi aacutellapota hataacuterozza meg [Code13]

A [6 feladat] megoldaacutesaacutenaacutel nem volt maacutes dolgunk mint hogy beraacutemoljuk a nyomoacutegomboknak megfelelő biteket a LED-ek bitjeibe Ez annak volt koumlszoumlnhető hogy mind a nyomoacutegombok mind a LED-ek inverz logikaacuteval dolgoznak azaz ha az ezeknek megfelelő bit 0 akkor vilaacutegiacutet egy LED ill van lenyomott aacutellapotban a nyomoacutegomb Most azonban enneacutel toumlbbre lesz szuumlkseacuteg Az algoritmus nem bonyolult folyamataacutebraacutera nincs is szuumlkseacuteg Code12 szimboacutelumait alapul veacuteve figyeljuumlk meg csupaacuten az alaacutebbi haacuterom sort mert ez lesz a [6 feladat] megoldaacutesaacutenak a lelke

CLR CORL Cbut1ORL Cbut2

Mi toumlrteacutenik itt Előszoumlr toumlroumlljuumlk a C bitet Utaacutena VAGY műveletet hajtunk veacutegre C-n szeacutepen sorban mindkeacutet gomb bitjeacutevel Ha mindkeacutet gomb le van nyomva (but1=but2=0) akkor a haacuterom sor veacutegrehajtaacutesa utaacuten C eacuterteacuteke 0 Ha csak az egyik gomb van lenyomva (valamelyikuumlk bitjeacutenek eacuterteacuteke 1) akkor a haacuterom sor veacutegrehajtaacutesa utaacuten C = 1 Ha egyik gomb sincs lenyomva akkor is ugyanezt kapjuk Laacutethatoacute tehaacutet hogy a kritikus esetet vagyis azt amikor mindkeacutet gombot lenyomtuk az jelzi ha a haacuterom sor veacutegrehajtaacutesa utaacuten C = 0 Eacutes ezzel a felteacutetellel maacuter meg tudunk fogalmazni elaacutegazaacutest A koacutedot ismeacutet teljes terjedelmeacuteben koumlzoumlljuumlk Vegyuumlk eacuteszre hogy a bitek szimboacutelumainak definiacutecioacuteja most maacutes helyen aacutell mint Code12-ben hiszen azt aacutelliacutetottuk hogy az ilyen sorok gyakorlatilag baacuterhol elhelyezkedhetnek a koacutedban

Code13asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelataCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaled1 BIT P20 Az egyik szeacutelső LED szimboacutelumaled2 BIT P27 A maacutesik szeacutelső LED szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV Cbut1 Az 1 gomb bitjeacutenek mozgataacutesa C-beMOV led1C Aztaacuten C kirakaacutesa a led1 portbitreMOV Cbut2 A 2 gomb bitjeacutenek mozgataacutesa C-be

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

MOV led2C Aztaacuten C kirakaacutesa a led2 portbitreCLR C Toumlroumlljuumlk C-tORL Cbut1 VAGY műveletet hajtunk veacutegre a nyomoacutegombok keacutet bitjeacutevelORL Cbut2 Ha valamelyik gomb nincs lenyomva (azaz eacuterteacuteke 1) akkor a VAGY műveletek veacutegeredmeacutenye 1 Ha mindkeacutet gombot lenyomjuk (bitjeik eacuterteacuteke 0) akkor a VAGY műveletek veacutegeredmeacutenye 0JNC dupla Ugrunk ha mindkeacutet gomb le van nyomvaORL P201111110b Akaacutermi is volt eddig a LED-eken kikapcsoljuk a koumlzeacutepső hatot a keacutet szeacutelsőt nem baacutentjukJMP MAIN Ugraacutes vissza a program elejeacutereduplaMOV P20 Az oumlsszes LED bekapcsolaacutesaJMP MAIN Kezdjuumlk eloumllrőlEND

7 Leacutepteteacutes nyomoacutegombbalNyomoacutegombokat toumlbbnyire nem a nyomogataacutes oumlroumlmeacuteeacutert hasznaacutelunk hanem valamilyen funkcioacutet adunk nekik A koumlvetkező feladat egeacuteszen egyszerű kis alkalmazaacutest fogalmaz meg melyben egyetlen nyomoacutegombeacute lesz a főszerep

8 feladat

Az 1 nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Uacutej leacutepeacutes csak a gomb felengedeacutese eacutes uacutejboacuteli lenyomaacutesa utaacuten toumlrteacutenhet [Code14]

Ha veacutegiggondoljuk hogy mire lesz itt szuumlkseacuteguumlnk sejthetjuumlk hogy a gomb lenyomaacutesaacutenak teacutenyeacutet valahogyan roumlgziacutetenuumlnk kell eacutes uacutej leacutepeacutes csak akkor koumlvetkezhet be ha a gombot felengedtuumlk majd uacutejra lenyomtuk azaz a lenyomaacutes teacutenyeacutenek aacutellapota megszűnik majd uacutejra fennaacutell Ezt az aacutellapotjelzeacutest most a C bittel valoacutesiacutetjuk meg keacutesőbb tanulunk raacute jobban hasznaacutelhatoacute megoldaacutest is Magaacutehoz az elvhez azonban a C bit is toumlkeacuteletesen megfelel A megvaloacutesiacutetaacutes folyamataacutebraacuteja a [A (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute

91 aacutebra - A [8 feladat] (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A koacuted maga nem tuacutel hosszuacute a koumltelező direktiacutevaacutekat ismeacutet elhagyjuk

Code14asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesaCLR C A C bit toumlrleacutese Ebben a programban arra hasznaacuteljuk hogy jelezze a lenyomaacutes aacutellapotaacutetwaitJNB but1lenyom Ugrunk ha a gomb le van nyomvaCLR C Toumlroumlljuumlk C-t mert felengedtuumlk a gombotJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozlenyomJC wait Ha maacuter lenyomott aacutellapotban van a gomb akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB C Ha meacuteg nem volt lenyomva a gomb akkor most maacuter le van nyomva Jelezzuumlk ezt az aacutellapotot a C bitenMOV AP2 Eggyel odeacutebb leacuteptetjuumlk a LED-et aRL A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

Amikor nagy eacutelvezettel nyomogatjuk a gombot hogy a vilaacutegiacutetoacute LED laacutetszoacutelag szaladgaacuteljon koumlrbe-koumlrbe neacuteha eacuterdekes jelenseacuteget tapasztalunk A nyomoacutegomb mechanikai szerkezeteacutetől fuumlggően ugyanis sokszor nem csekeacutely valoacutesziacutenűseacuteggel előfordul az hogy a LED hirtelen kettőt ugrik egy helyett Eacutes ez nem programhiba A jelenseacuteg neve prellegeacutes A prellegeacutes neacutemet eredetű szoacute (prellen ndash csapoacutedik kocog pattog visszapattan) az elektronikaacuteban azt jelenti hogy valamely alkatreacutesz jellemzően kapcsoloacute vagy nyomoacutegomb nem stabilan vaacutelt aacutet egyik aacutellapotaacuteboacutel a maacutesikba hanem toumlbbszoumlr zaacuterja ill szakiacutetja meg az aacuteramkoumlrt Ez a jelenseacuteg a most keacutesziacutetett alkalmazaacutesunkban anomaacutelis viselkedeacutest ideacutezhet elő Nagyon fontos hogy a prellegeacutes lehetőseacutegeacutenek mindig tudataacuteban legyuumlnk eacutes amikor csak tehetjuumlk veacutedekezzuumlnk ellene Keacutesőbb arra is mutatunk peacuteldaacutet hogy ezt hogyan tehetjuumlk meg

8 Bitvaacuteltozoacutek hasznaacutelataA [Nyomoacutegombok a panelon] fejezet bevezetőjeacuteben bemutattuk hogy hogyan lehet szimboacutelumokat rendelni konkreacutet bitekhez mint nyomoacutegombokhoz eacutes portbitekhez A [7 feladat] megoldaacutesaacutenaacutel a C bitet hasznaacuteltuk aacuteltalaacutenos ceacuteluacute keacutetaacutellapotuacute vaacuteltozoacutenak azaz bitvaacuteltozoacutenak Ott meacuteg elegendő volt egynek a hasznaacutelata Ez azonban csak ritkaacuten tarthatoacute igen sokszor egyneacutel joacuteval toumlbb bitvaacuteltozoacutera lesz szuumlkseacuteguumlnk amelyek maacuter nem a C bitet fogjaacutek terhelni

Az ADuC 842-es architektuacutera memoacuteriaacuteja 0 lapjaacutenak első 128 baacutejtjaacutet Lower RAM-nak azaz alsoacute RAM-nak hiacutevjaacutek Ez a memoacuteriateruumllet kuumlloumlnoumlsen eacuterdekes Az elektronikus tankoumlnyvben toumlbbszoumlr elővesszuumlk a memoacuteria speciaacutelis teruumlleteinek teacutemakoumlreacutet most azonban csak azt a teruumlletet taacutergyaljuk amelyik bitenkeacutent ciacutemezhető laacutesd [A Lower RAM bitenkeacutent ciacutemezhető teruumllete] aacutebra

92 aacutebra - A Lower RAM bitenkeacutent ciacutemezhető teruumllete

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A bitenkeacutent ciacutemezhető teruumllet memoacuteriaciacutemei 20h-toacutel 2Fh-ig tartanak A 20h memoacuteriaciacutemen pl egy nyolcbites baacutejt talaacutelhatoacute eacuteppen uacutegy mint maacuteshol Megfelelő ciacutemzeacutessel ez a baacutejt teljes egeacuteszeacuteben feluumlliacuterhatoacute Azonban ezt a kincset eacuterő memoacuteriateruumlletet nem iacutegy szokaacutes hasznaacutelni hiszen az ADuC 842-es architektuacuteraacuteja lehetőveacute teszi hogy a 20h-toacutel 2Fh-ig terjedő ciacutemeken leacutevő baacutejtokat bitenkeacutent ciacutemezhessuumlk Vagyis az emliacutetett 20h ciacutemen elhelyezkedő baacutejt minden egyes bitjeacutehez kuumlloumln hozzaacutefeacuterhetuumlnk eacutes felhasznaacutelhatjuk őket a programjainkban Peacuteldaacuteul jelzőbitkeacutent bitvaacuteltozoacutekeacutent Az alaacutebbi lista a bitenkeacutent ciacutemezhető memoacuteriateruumllet hozzaacuterendeleacuteseacutere mutat peacuteldaacutekat

bit0 BIT 00h

bit1 BIT 01h

gomb BIT 1Fh

marker BIT 5Bh

last_bit BIT 7Fh

Ezek utaacuten baacutermelyik bitre vonatkozoacute utasiacutetaacutesba baacutetran beiacuterhatnaacutenk a bit aacuteltalaacutenos megnevezeacutes (laacutesd [Logikai műveletek bitekkel] eacutes [Elaacutegazaacutesok bitek alapjaacuten] alfejezet) helyeacutere a fenti listaacuteban megadott neveket

A bitvaacuteltozoacutek megismereacutese utaacuten megfogalmazzuk a [9 feladat]ot amely a [8 feladat] tovaacutebbfejleszteacutese mindkeacutet iraacutenyra

9 feladat

A keacutet nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Az 1 gombbal balra a 2 gombbal jobbra toumlrteacutenjen a leacutepteteacutes Uacutej leacutepeacuteshez a gombok felengedeacutese eacutes uacutejboacuteli lenyomaacutesa szuumlkseacuteges [Code15]

Enneacutel a feladatnaacutel uacutegy tűnik hogy nem lesz eleacuteg egyetlen jelzőbit De ez nem jelent probleacutemaacutet hiszen maacuter tudjuk hogyan hasznaacutelhatunk bitvaacuteltozoacutekat A [A (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatjuk a [9 feladat] folyamataacutebraacutejaacutet amelyen a kritikus bitvaacuteltozoacutek a koumlvetkezők le1 le2 Ha ezek a jelzőbitek magasak akkor az 1 ill 2 gomb lenyomott aacutellapotban van Minden tovaacutebbi uumlgylet uacutegy toumlrteacutenik mint a [8 feladat] megoldaacutesaacutenaacutel

93 aacutebra - A [9 feladat] (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A [A (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten szereplő folyamataacutebra baacuter terjedelmesebb mint az eddigiek a koacuted nem lesz ennyire ijesztő

Code15asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumale1 BIT 00h Az 1 gomb lenyomott aacutellapotaacutet jelző bitvaacuteltozoacutele2 BIT 01h A 2 gomb lenyomott aacutellapotaacutet jelző bitvaacuteltozoacute

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

ORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesaCLR le1 A gombok lenyomott aacutellapotaacutet jelzőCLR le2 bitvaacuteltozoacutek toumlrleacutesewaitJNB but1balra Ugrunk ha az 1 gomb le van nyomvaJNB but2jobbra Ugrunk ha a 2 gomb le van nyomvaCLR le1 Ha egyik gomb sincs lenyomva toumlroumlljuumlk azokCLR le2 jelzőbitjeitJMP wait Uacutejra gombnyomaacutesra vaacuterunkbalraJB le1wait Ha baacutermelyik gomb lenyomott aacutellapotban vanJB le2wait akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB le1 Ha meacuteg nem volt lenyomva az 1 gomb akkor most maacuter le van nyomva Jelezzuumlk ez az aacutellapototMOV AP2 Eggyel balra leacuteptetjuumlk a LED-et a RL A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozjobbraJB le1wait Ha baacutermelyik gomb lenyomott aacutellapotban vanJB le2wait akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB le2 Ha meacuteg nem volt lenyomva a 2 gomb akkor most maacuter le van nyomva Jelezzuumlk ez az aacutellapototMOV AP2 Eggyel jobbra leacuteptetjuumlk a LED-et a RR A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

A prellegeacutes jelenseacutege enneacutel az alkalmazaacutesnaacutel eacuteppen uacutegy megfigyelhető mint Code14-neacutel Eacuteppen uacutegy tudomaacutesul vettuumlk eacutes eacuteppen uacutegy nem tettuumlnk ellene semmit mint előzőleg Tudaacutesunk jelenlegi szintjeacuten meacuteg pironkodva tovaacutebbleacutephetuumlnk de komoly alkalmazaacutesoknaacutel ez maacuter nem maradhat ennyiben

9 A prellegeacutes kikuumlszoumlboumlleacutese vaacuterakozaacutessalEbben az alfejezetben a feladat legyen hasonloacute a [9 feladat]hoz de moacutedosiacutetsuk azt egy kicsikeacutet Most ne az legyen a leacutenyeg hogy fel kelljen engedni a nyomoacutegombokat a koumlvetkező leacutepeacuteshez hanem az hogy bizonyos időnek el kelljen telnie ahhoz hogy uacutejboacuteli kieacuterteacutekeleacutes koumlvetkezzeacutek be

10 feladat

A keacutet nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Az 1 gombbal balra a 2 gombbal jobbra toumlrteacutenik a leacutepteteacutes A gombok uacutejboacuteli kieacuterteacutekeleacuteseacutehez neacutemi időkeacuteslelteteacutesen keresztuumll vezessen az uacutet [Code16]

Enneacutel a feladatnaacutel nem lesz szuumlkseacuteguumlnk bitvaacuteltozoacutekra viszont uacutejra előhuacutezzuk a joacutel bevaacutelt időhuacutezoacute szubrutinunkat (laacutesd [Parameacuteteraacutetadaacutes szubrutinnak] alfejezet) Amikor nyomoacutegomb lenyomaacutesaacutet eacuterzeacutekeli a program akkor elveacutegzi azt a műveletet amit kell (jelen esetben a bitforgataacutest) utaacutena pedig neacutehaacuteny tized maacutesodpercig vaacuter Iacutegy a prellegeacutest kikuumlszoumlboumlljuumlk viszont a vaacuterakozaacutest jelentő idő holt idő mert ott tovaacutebbi beavatkozaacutesra esemeacutenykezeleacutesre egyelőre nem lesz lehetőseacuteguumlnk Egyszerűbb esetekben ez nem is baj de kifinomultabb igeacutenyek eacutes feladatok eseteacuteben ez a moacutedszer nem engedhető meg Amikor eleacuteruumlnk a megszakiacutetaacutesok taacutergyalaacutesaacuteig erre a helyzetre is mutatni fogunk megoldaacutest A gombnyomaacutes eacuteszleleacutese utaacuteni cselekveacutes eacutes vaacuterakozaacutes egyszerűbb mint az előző keacutet feladat megoldaacutesaacutenak gondolatmenete iacutegy folyamataacutebra megadaacutesa sem szuumlkseacuteges A koacuted koumlnnyen eacutertelmezhető Eacutes annak is nyilvaacutenvaloacutenak kell lennie hogy enneacutel a megoldaacutesnaacutel akaacuter raacute is tenyerelhetuumlnk a nyomoacutegombokra akkor is leacutepkedni fog koumlrbe a LED Ha mindkeacutet gomb le van nyomva akkor viszont visszaugratjuk a vezeacuterleacutest a vaacuterakozaacuteshoz A leacutepeacutesek maximaacutelis sebesseacutegeacutet egyeacutebkeacutent eacuteppen a prellegeacutest kikuumlszoumlboumllő vaacuterakozaacutes hataacuterozza meg Ezt a szubrutint eacuteppen uacutegy nem tuumlntetjuumlk foumll mint a koraacutebbi programoknaacutel mert az nem vaacuteltozik meg most is ugyanazt hasznaacuteljuk (DELAY)

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

Code16asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut1 BIT P33 A 2 gomb szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesawaitJNB but1balra Ugrunk ha az 1 gomb le van nyomvaJNB but2jobbra Ugrunk ha a 2 gomb le van nyomvaJMP wait Uacutejra gombnyomaacutesra vaacuterunkbalraJNB but2wait Ha a 2 gomb is le van nyomva (azaz itt eacuteppen mind a kettő) akkor visszaugrunk a vaacuterakozaacuteshozMOV AP2 Eggyel balra leacuteptetjuumlk a LED-et a RL A bitforgataacutes művelettelMOV P2AMOV A10 01 s időhuacutezaacutes joumln aCALL DELAY szubrutinnalJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozjobbraJNB but1wait Ha az 1 gomb is le van nyomva (azaz itt eacuteppen mind a kettő) akkor visszaugrunk a vaacuterakozaacuteshozMOV AP2 Eggyel jobbra leacuteptetjuumlk a LED-et a RR A bitforgataacutes művelettelMOV P2AMOV A10 01 s időhuacutezaacutes joumln aCALL DELAY szubrutinnalJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

10 A teljes alsoacute RAMAz alsoacute RAM-roacutel maacuter foumllvillantottunk neacutehaacuteny reacuteszletet a [Bitvaacuteltozoacutek hasznaacutelata] alfejezetben Ott kizaacuteroacutelag a bitenkeacutent ciacutemezhető teruumlletet taacutergyaltuk Az alsoacute RAM-nak azonban van meacuteg keacutet fontos teruumllete Az első ilyen teruumllet ciacutemei 00h-toacutel 1Fh-ig tartanak azaz oumlsszesen 32 memoacuteriarekeszről van szoacute Ezen a teruumlleten helyezkednek el a memoacuteriaacuteban az R regiszterek Eacutes az a helyzet hogy ezekből a regiszterekből oumlsszesen neacutegy peacuteldaacuteny leacutetezik nyolcasaacuteval rendezve Olyan ez mintha nyolcfioacutekos szekreacutenyből lenne oumlsszesen neacutegy darabunk a szobaacutenkban Az R regiszterek ciacutemeit a [Az alsoacute RAM neacutegy regiszterbankja] aacutebra mutatja Bal szeacutelen a decimaacutelis ciacutemek mellettuumlk a hexadecimaacutelis eacuterteacutekek majd a regiszterek nevei

94 aacutebra - Az alsoacute RAM neacutegy regiszterbankja

A neacutegy darab nyolcfioacutekos szekreacutenyuumlnkkel viszont lesz egy kis baj Mindig csak egyiket hasznaacutelhatjuk A 80518052-es processzormagnaacutel ez azt jelenti hogy a neacutegy regiszterbank koumlzuumll mindig pontosan egy lesz aktiacutev azaz ha peacuteldaacuteul kiadjuk a MOV AR3 utasiacutetaacutest akkor az akkumulaacutetorba vagy a 03h vagy a 0Bh vagy az 13h vagy az 1Bh ciacutemről toumlltődik be a tartalom vagyis az eacuteppen aktuaacutelis R3 regiszter tartalma A regiszterbank kivaacutelasztaacutesa a PSW (Program Status Word ndash programaacutellapot) SFR-rel toumlrteacutenik Default esetben a 0 regiszterbank aktiacutev Ebben a tankoumlnyvben a tovaacutebbiakban nem vaacuteltunk regiszterbankot a default beaacutelliacutetaacutest hasznaacuteljuk A PSW (Program Status Word) SFR viszont annyira fontos hogy teljes tartalmaacutet megadjuk (laacutesd [A PSW SFR parameacuteterei]) eacutes nem csak hivatkozunk az ADuC 842-es leiacuteraacutesaacutera [1 p 21 Table 5]

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

95 taacuteblaacutezat - A PSW SFR parameacuteterei

PSW Program Status Word

Programaacutellapot

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Angol neacutev Magyar neacutev

7 CY Carry Flag Aacutetviteli bit

6 AC Auxiliary Carry Flag

Kiegeacutesziacutető aacutetviteli bit

5 F0 General-Purpose Flag

Aacuteltalaacutenos ceacuteluacute jelzőbit

4 RS1 Register Bank Select Bits

Regiszterbankot kivaacutelasztoacute bitek

3 RS0 RS1

0

0

1

1

RS0

0

1

0

1

Bank

0

1

2

3

2 OV Overflow Flag Tuacutelcsordulaacutes-bit

1 F1 General-Purpose Flag

Aacuteltalaacutenos ceacuteluacute jelzőbit

0 P Parity Bit Paritaacutesbit

A [A Lower RAM bitenkeacutent ciacutemezhető teruumllete] eacutes [Az alsoacute RAM neacutegy regiszterbankja] aacutebra alapjaacuten laacutethatoacute hogy a 128 baacutejt meacuteretű alsoacute RAM-ban 00h-toacutel 1Fh-ig a regiszterbankok helyezkednek el 20h-toacutel 2Fh-ig pedig a bitenkeacutent ciacutemezhető teruumllet De mi van 30h-toacutel 7Fh-ig Ezt a teruumlletet aacuteltalaacutenos ceacuteluacute teruumlletnek hiacutevjuk laacutesd [Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete] aacutebra

95 aacutebra - Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete

Ez a teruumllet elvileg szabad arra hasznaacuteljuk amire akarjuk Kivaacuteloacutean alkalmas baacutejtmeacuteretű vaacuteltozoacutek definiaacutelaacutesaacutera csak most egy maacutesik a DATA direktiacutevaacutet kell hasznaacutelnunk az assemblerben peacuteldaacuteul

byte0 DATA 030hbyte1 DATA 031h

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

last_byte DATA 07Fh

Iacutegy tehaacutet maacuter nem csak bitvaacuteltozoacuteink hanem baacutejtvaacuteltozoacuteink is lehetnek meacuteghozzaacute az alsoacute RAM-ban oumlsszesen 80 darab Ez talaacuten nem tűnik soknak elsőre de laacutetni fogjuk hogy ezzel a kis szabad hellyel is mennyi mindent meg lehet oldani

Created by XMLmind XSL-FO Converter

10 fejezet - A belső oacutera hasznaacutelataAz ADuC 842-es architektuacuteraacuteja toumlbb időziacutetőtszaacutemlaacuteloacutet tartalmaz eacutes tartalmaz egy belső oacuteraacutet is Ebben a fejezetben az oacutera hasznaacutelataacuteval fogunk megismerkedni Ennek neve angolul Time Interval Counter (TIC) ami magyarul időintervallum-szaacutemlaacuteloacutet jelent Az oacuteraacutehoz seregnyi SFR tartozik iacutegy előszoumlr is meg kell ismerkednuumlnk ezekkel Az időegyseacutegekhez tartozoacute SFR-eket a [Az időegyseacutegek SFR-jeinek parameacuteterei] foglalja oumlssze [1 p 56]

101 taacuteblaacutezat - Az időegyseacutegek SFR-jeinek parameacuteterei

SFR Angol neacutev Eacuterveacutenyes eacuterteacutekek Funkcioacute Default eacuterteacutek bekapcsolaacuteskor

HTHSEC Hundredths Seconds Time Register

0-127 A regiszter eacuterteacuteke 1-egyel nő minden 1128-maacutesodperces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a SEC regiszter noumlvekszik

00h

SEC Seconds Time Register

0-59 A regiszter eacuterteacuteke 1-egyel nő minden 1-maacutesodperces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a MIN regiszter noumlvekszik

00h

MIN Minutes Time Register 0-59 A regiszter eacuterteacuteke 1-egyel nő minden 1-perces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a HOUR regiszter noumlvekszik

00h

HOUR Hours Time Register 0-23 A regiszter eacuterteacuteke 1-egyel nő minden 60-perces időintervallum letelte utaacuten

00h

Az időegyseacutegek regiszterei gyakorlatilag belső uumltemezeacutes szerint kezelt vaacuteltozoacuteknak tekinthetők Az oacuteraacutet azonban be is kell kapcsolni azt meg lehet aacutelliacutetani eacutes meacuteg sok eacuterdekes dologra lehet raacutebiacuterni A legfontosabb az hogy el tudjuk indiacutetani eacutes meg tudjuk aacutelliacutetani Ehhez (eacutes a toumlbbi eacuterdekes dologhoz) a TIMECON SFR ismerete szuumlkseacuteges A [A TIMECON SFR parameacuteterei] a TIMECON SFR aacuteltalaacutenos parameacutetereit foglalja oumlssze Keacutesőbb a megszakiacutetaacutesok taacutergyalaacutesaacutenaacutel reacuteszletesebb ismerteteacutest koumlzluumlnk ([A TIMECON SFR parameacuteterei reacuteszletesebben]) A leacutenyeg most csupaacuten az hogy az oacuteraacutet a [Az időegyseacutegek SFR-jeinek parameacuteterei]ban ismertetett vaacuteltozoacutek kezdeti eacuterteacutekeacutenek beaacutelliacutetaacutesa utaacuten a TIMECON SFR 0 bitjeacutenek magasra aacutelliacutetaacutesaacuteval indiacutethatjuk el Ennek a bitnek a toumlrleacuteseacutevel az oacutera megaacutell Nagyon leacutenyeges hogy az oacutera az uacutejboacuteli indiacutetaacuteskor nem a megaacutelliacutetaacutesnaacutel megfigyelhető időeacuterteacutekről ketyeg tovaacutebb hanem a [Az időegyseacutegek SFR-jeinek parameacuteterei]ban ismertetett vaacuteltozoacutek legutoacutebbi beaacutelliacutetaacutesai szerint indul uacutejra [1 p 55 Table 24] Iacutegy ha folytatni akarjuk az időmeacutereacutest akkor az oacutera megaacutelliacutetaacutesakor el kell mentenuumlnk az időegyseacutegek vaacuteltozoacuteinak tartalmaacutet majd uacutejraindiacutetaacutes előtt uacutejra be kell toumlltenuumlnk azokat Az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban az oacutera regisztereinek ismerteteacuteseacuteneacutel foumllhiacutevjaacutek a figyelmet arra hogy bdquoelegendő időt kell hagyni az oacutera regisztereire vonatkozoacute utasiacutetaacutesok koumlzoumlttrdquo [1 p 54] Ez a megfogalmazaacutes eleacuteg koumldoumls de proacutebaacuteljuk meg eacutertelmezni Arroacutel van szoacute hogy

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

az intervallumszaacutemlaacuteloacutet egy 32 kHz-es kuumllső kristaacutely hajtja eacutes ez az oacuterajel vonatkozik az oacutera regisztereinek hozzaacutefeacutereacuteseacutehez is Iacutegy ha joacuteval nagyobb frekvenciaacuteval fut a processzorunk akkor egyszerűen nem lesz eleacuteg idő a regisztereket foumlluumlliacuterni eacutes anomaacutelis viselkedeacutesbe torkollik a program futaacutesa Erre megfelelő gyoacutegyiacuter lehet ha beszuacuterunk a programba egy roumlvid vaacuterakozaacutest Peacuteldaacuteul a NOP utasiacutetaacutest hajtjuk veacutegre neacutehaacutenyszor egy ciklussal A leacutenyeg az hogy ha a belső oacuteraacutet hasznaacuteljuk akkor mindig kuumlloumlnoumls figyelemmel teszteljuumlk a programunk műkoumldeacuteseacutet eacutes legyuumlnk felkeacuteszuumllve a fent emliacutetett hataacutes jelentkezeacuteseacutere eacutes annak kikuumlszoumlboumlleacuteseacutere

102 taacuteblaacutezat - A TIMECON SFR parameacuteterei

TIMECON TIC Control Register

Az időintervallum-szaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Az oacutera a 0 bit magasra aacutelliacutetaacutesaacuteval indul toumlrleacuteseacutevel megaacutell

Az oacutera indiacutetaacutesa logikai maszkolaacutessal a koumlvetkező moacutedon kivitelezhető

ORL TIMECON00000001b

Hasonloacute technikaacuteval az oacutera leaacutelliacutetaacutesa iacutegy toumlrteacutenhet

ANL TIMECON11111110b

Mindezek utaacuten fogalmazzunk meg egy nagyon egyszerű feladatot az oacuteraacuteval (TIC) kapcsolatban

11 feladat

Nullaacutezzuk majd Indiacutetsuk el a belső oacuteraacutet eacutes jelezzuumlk ki a maacutesodperceket a panel LED-soraacuten [Code17]

A feladat annyira egyszerű hogy ehhez joacuteformaacuten meacuteg magyaraacutezat is foumlloumlsleges Mivel a maacutesodperceket kell kijeleznuumlnk elegendő a SEC eacutes HTHSEC regisztreket nullaacuteznunk hiszen a maacutesik kettő időregiszter konkreacutet eacuterteacuteke esetuumlnkben teljesen melleacutekes

Code17asmMAINMOV TIMECON0 Mindenfeacutele oacuteraparameacutetert lenullaacutezunkMOV HTHSEC0 A 1128 maacutesodpercek nullaacutezaacutesaMOV SEC0 A maacutesodpercek nullaacutezaacutesaORL TIMECON00000001b Elindiacutetjuk az oacuteraacutet Logikai maszkolaacutessal magasra aacutelliacutetjuk a 0 bitetdisplayMOV ASEC A-ba toumlltjuumlk a maacutesodperceketCPL A Invertaacuteljuk az eacuterteacuteket a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-eken a maacutesodperceketJMP display Folytatjuk a kijelzeacutest Uacutejra eacutes uacutejra

Moacutedosiacutetsuk uacutegy a [11 feladat]ot hogy az 1 gomb megnyomaacutesaacutera megaacutelljon az oacutera a 2 gomb megnyomaacutesaacutera pedig folytatoacutedjeacutek az idő meacutereacutese

12 feladat

Indiacutetsuk el a belső oacuteraacutet 000000-roacutel Jelezzuumlk ki a maacutesodperceket a panel LED-soraacuten Az 1 gomb megnyomaacutesaacutera aacutelljon meg az oacutera a 2 gomb megnyomaacutesaacutera pedig induljon tovaacutebb onneacutet ahol megaacutellt [Code18]

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

Ahogyan emliacutetettuumlk az oacutera uacutejraindiacutetaacutesakor be kell toumlltenuumlnk a megfelelő SFR-ekbe azokat az eacuterteacutekeket amelyeket az oacutera megaacutelliacutetaacutesakor remeacutelhetőleg elmentettuumlnk Ehhez nevet adunk egy-egy memoacuteriarekesznek az alsoacute RAM-ban uacutegy ahogyan azt a [A teljes alsoacute RAM] alfejezetben bemutattuk A koacuted maga nem sokkal lesz bonyolultabb csupaacuten kicsit bővuumll Ennek elleneacutere ehhez a vaacuteltozathoz folyamataacutebraacutet is keacutesziacutetuumlnk (laacutesd [A (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebra)

101 aacutebra - A [12 feladat] (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja

Code18asmMHOUR DATA 030h A HOUR eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMMIN DATA 031h A MIN eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMSEC DATA 032h A SEC eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMHTHSEC DATA 033h A HTHSEC eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaMAINMOV TIMECON0 Mindenfeacutele oacuteraparameacutetert lenullaacutezunkMOV HTHSEC0 A 1128 maacutesodpercek nullaacutezaacutesaMOV SEC0 A maacutesodpercek nullaacutezaacutesaMOV MIN0 A percek nullaacutezaacutesaMOV HOUR0 Az oacuteraacutek nullaacutezaacutesaORL TIMECON00000001b Elindiacutetjuk az oacuteraacutet Logikai maszkolaacutessal magasra aacutelliacutetjuk a 0 bitetdisplay

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

MOV ASEC A-ba toumlltjuumlk a maacutesodperceketCPL A Invertaacuteljuk az eacuterteacuteket a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-eken a maacutesodperceketJNB but1stop Leaacutellunk ha megnyomtuk az 1 gombotJMP display Folytatjuk a kijelzeacutest Uacutejra eacutes uacutejrastopMOV MHTHSECHTHSEC Az 1128 maacutesodpercek elmenteacuteseMOV MSECSEC A maacutesodpercek elmenteacuteseMOV MMINMIN A percek elmenteacuteseMOV MHOURHOUR Az oacuteraacutek elmenteacuteseANL TIMECON11111110b A TIMECON regiszter 0 bitjeacutenek toumlrleacutese azaz megaacutelliacutetjuk az oacuteraacutetJB but2$ Vaacuterjuk a 2 gomb lenyomaacutesaacutetMOV HTHSECMHTHSEC Az 1128 maacutesodpercek visszatoumllteacuteseMOV SECMSEC A maacutesodpercek visszatoumllteacuteseMOV MINMMIN A percek visszatoumllteacuteseMOV HOURMHOUR Az oacuteraacutek visszatoumllteacuteseORL TIMECON00000001b A TIMECON regiszter 0 bitjeacutenek 1-re aacutelliacutetaacutesa azaz (uacutejra) elindiacutetjuk az oacuteraacutetJMP display Ugrunk vissza a kijelzeacuteshez

Veacutegezetuumll neacutezzuumlk meg kiacutevaacutencsisaacutegboacutel hogy igaz-e az hogy ha nem toumlltjuumlk vissza az oacutera uacutejraindiacutetaacutesa előtt az elmentett regiszterek eacuterteacutekeacutet akkor az teacutenyleg az utoljaacutera beaacutelliacutetott eacuterteacutekről indul Ehhez a fenti Code18-boacutel szedjuumlk ki azokat a sorokat amelyek a regiszterek elmenteacuteseacuteeacutert ill visszatoumllteacuteseacuteeacutert felelősek beleeacutertve persze a helyfoglalaacutest is a vaacuteltozoacuteknak Ehhez nem melleacutekeluumlnk kuumlloumln koacutedot a tankoumlnyvben de a moacutedosiacutetott programot Code19 neacuteven megtalaacutelhatjuk a koacutedkoumlnyvtaacuterban A hataacutes joacutel laacutethatoacute

Created by XMLmind XSL-FO Converter

11 fejezet - MegszakiacutetaacutesokA programozaacutest eacuteppen tanuloacute lelkes emberek a megszakiacutetaacutes szoacute hallataacuten aacuteltalaacuteban valami feacutelelmetes eacutes varaacutezslatos dologra gondolnak Attoacutel a perctől kezdve azonban hogy megeacutertik mi az mindez a vilaacuteg legtermeacuteszetesebb dolgaacutevaacute vaacutelik ami neacutelkuumll maacuter nem is lenne joacute az eacutelet (Ez egyeacutebkeacutent teacutenyleg iacutegy van)

Miről is van szoacute Keacutepzeljuumlk el azt az esetet amikor levelet vaacuterunk Valami nagyon fontos levelet Eacutes ilyen vagy olyan okok miatt a vilaacutegeacutert sem akarjuk elmulasztani annak szemeacutelyes aacutetveacuteteleacutet Mit tehetuumlnk ilyenkor

Tegyuumlk fel hogy nincsen csengőnk vagy van de nem műkoumldik Ilyenkor megtehetjuumlk azt hogy kiaacutellunk az ajtoacutenkba eacutes addig el nem megyuumlnk onneacutet amiacuteg meg nem joumln a postaacutes Kedvezőtlen esetben persze eacutehen halunk mert nem joumln a postaacutes Az elv tovaacutebbfejleszteacutese az hogy mondjuk 10 percenkeacutent 1 percig lessuumlk a postaacutest az ajtoacuteban aztaacuten visszamegyuumlnk a dolgunkra Ez maacuter sokszor műkoumldőkeacutepes oumltletnek fog bizonyulni Az ilyen elven toumlrteacutenő esemeacutenykezeleacutest jelfogaacutest pollozaacutesnak (poll angol ndash elnyer kap) hiacutevjaacutek a szaacutemiacutetaacutestechnikaacuteban Ennek finomiacutetott moacutedszere teacutenylegesen gyakran hasznaacutelatos

Tegyuumlk fel hogy van csengőnk A postaacutest lesni nincs időnk mert mondjuk a deacutel-afrikai beacutelyegeinket rendezgetjuumlk a baraacutetunkkal froumlccsoumlzuumlnk vagy eacuteppen puskaport keacutesziacutetuumlnk stb Nos ha megjoumln a postaacutes megnyomja a csengőt Ekkor megszakiacutetjuk addigi cselekveacutesuumlnket kimegyuumlnk alaacuteiacuterjuk a cetlit aztaacuten visszamegyuumlnk eacutes ott folytatjuk a teveacutekenyseacuteguumlnket ahol abbahagytuk Az ilyesfeacutele esemeacutenykezeleacutest hiacutevjuk a szaacutemiacutetaacutestechnikaacuteban megszakiacutetaacutesnak Ez az esemeacutenykezelő moacutedszer a valoacutesaacutegban aacuteltalaacuteban hateacutekonyabb mint a pollozaacutes

1 Az ADuC 842 megszakiacutetaacutesaiAz elektronikus tankoumlnyvben nem fogjuk az oumlsszes megszakiacutetaacutest peacuteldaacutekkal illusztraacutelva taacutergyalni De joacute neacutehaacutenyat felhasznaacutelunk koumlzuumlluumlk eacutes azokat termeacuteszetesen igen A megszakiacutetaacutes (interrupt angol latin eredetű ndash megszakiacutetaacutes) fogalom a szaacutemiacutetaacutestechnikaacuteban azt jelenti hogy az addig zajloacute programfutaacutes valamilyen esemeacuteny bekoumlvetkezte miatt felfuumlggesztődik eacutes a vezeacuterleacutes maacuteshovaacute keruumll ahonnan az esemeacuteny lekezeleacutese utaacuten aacuteltalaacuteban visszateacuter a vezeacuterleacutes az eredeti helyeacutere A megszakiacutetaacutesok kezeleacutese azt az eacuterzetet kelti sokszor hogy multitasking-roacutel van szoacute vagyis toumlbb folyamat paacuterhuzamos kezeleacuteseacuteről Ez azonban csak illuacutezioacute a 80518052-es mag egyszerre csak egy dolgot tud veacutegezni Ezt azonban sokszor annyira gyorsan teszi hogy toumlbb szakaszosan kezelt esemeacuteny eacutes veacutegrehajtaacutes csakugyan azt az illuacutezioacutet kelti mintha multitasking-roacutel lenne szoacute

Mi toumlrteacutenik egy megszakiacutetaacutesnaacutel A processzor elmenti a programszaacutemlaacuteloacute tartalmaacutet a verembe majd a megszakiacutetaacutes tiacutepusaacutenak fuumlggveacutenyeacuteben az adott megszakiacutetaacutes vektoraacutenak ciacutemeacutere ugrik a vezeacuterleacutes Neacutezzuumlk reacuteszletesen hogy mit jelentenek ezek a fogalmak

A verem sajaacutetos szerkezetű taacuteroloacute a szaacutemiacutetaacutestechnikaacuteban LIFO-taacuteroloacutenak is hiacutevjaacutek mert az utolsoacutenak belerakott elemet lehet kivenni elsőkeacutent Az angol betűszoacute is erre utal az eredeti kifejezeacutes last in ndash first out azaz utolsoacutenak be elsőnek ki Eacutertelmeacuteben ugyanezt jelenti a FILO betűszoacute is first in ndash last out azaz elsőnek be utolsoacutenak ki A verem szoacute szeacutepen kifejezi a taacuteroloacute jellegeacutet baacuter az eredeti angol szoacute a stack valoacutejaacuteban rakaacutest halmot jelent Kicsit vidaacutemabb szemleacutelettel eacutelve a veremtaacuteroloacute uacutegy műkoumldik mint amikor egy teacuterdzokniba gyoumlmoumlszoumlluumlnk biliaacuterdgolyoacutekat Nyilvaacuten azt tudjuk előszoumlr kivenni amelyiket utolsoacutekeacutent dugtuk bele a zokniba

A verem a szokvaacutenyos memoacuteriaacutek eseteacuteben meghataacuterozott memoacuteriateruumlletet jelent Azt hogy hovaacute keruumll be a koumlvetkező teacutetel a veremmutatoacute hataacuterozza meg A 80518052-es processzormag eseteacuten indulaacuteskor a verem a [A teljes alsoacute RAM] alfejezetben bemutatott alsoacute RAM 08h ciacutemeacuten kezdődik vagyis az 1 regiszterbanknaacutel Iacutegy tehaacutet nagyon vigyaacutezzunk arra hogy mikeacutent baacutenunk a regiszterbankokkal ha ezeket mind hasznaacutelni akarjuk akkor a verem helyeacutet aacutet kell definiaacutelnunk Ennek moacutedjaacuteroacutel azonban ebben a tankoumlnyvben nem eacutertekezuumlnk mert a default verem meacuterete is bőven eleacuteg lesz szaacutemunkra A veremmutatoacutet keacutet SFR tartalmazza most csak megemliacutetjuumlk hogy ezek SP eacutes SPH

A megszakiacutetaacutesvektorok ciacutemei a koacutedmemoacuteria legelejeacuten helyezkednek el Ezt a teacutenyt maacuter megemliacutetettuumlk a Code01 kommentjei koumlzoumltt A 0000h ciacutemre indulaacutesnaacutel eacutes reset-kor ugrik a program vezeacuterleacutese Kuumllső esemeacuteny bekoumlvetkezeacutesekor a 0003h vagy a 0013h ciacutemre Időziacutetőkszaacutemlaacuteloacutek tuacutelcsordulaacutesakor a 000Bh vagy 001Bh ciacutemre A soros porti kommunikaacutecioacute aacuteltal generaacutelt megszakiacutetaacuteskor a 0023h ciacutemre Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacuteskor a 0053h ciacutemre Az ADuC 842-es meacuteg toumlbb kuumlloumlnleges megszakiacutetaacutest keacutepes kezelni

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

itt csak azokat soroltuk foumll hamarjaacuteban melyekkel reacuteszletesen foglalkozunk a tankoumlnyvben A megszakiacutetaacutesvektorokat azeacutert hiacutevjaacutek vektornak mert ezekről a ciacutemekről jellemzően tovaacutebb kell ugratnunk a programot hiszen a megszakiacutetaacutesvektorokhoz tartozoacute ciacutemek igencsak koumlzel vannak egymaacuteshoz a koacutedmemoacuteriaacuteban paacuter utasiacutetaacutesnaacutel hosszabb koacutedot nem lehet koumlzeacutejuumlk iacuterni Iacutegy ezek a vektorok teacutenylegesen mutatnak valahovaacute

A megszakiacutetaacutesok taacutergyalaacutesaacutenaacutel oacutehatatlanul előjoumln a regiszterveacutedelem fogalma A tankoumlnyvben eddig leiacutertak alapjaacuten tudjuk hogy csaknem minden assembly nyelvű utasiacutetaacutes valamelyik kituumlntetett regiszterre vonatkozik Maacuterpedig ha a megszakiacutetaacutes lekezeleacuteseacutere szolgaacuteloacute koacutedreacuteszletben baacutermelyik regisztert foumllhasznaacuteljuk akkor aacuteltalaacuteban azok eacuterteacuteke megvaacuteltozik Ez pedig katasztrofaacutelis koumlvetkezmeacutenyekkel jaacuterna a főprogram uumlgyeire vonatkozoacutean Ilyenkor egyszerűen azt kell tennuumlnk hogy a megszakiacutetaacutest lekezelő programreacuteszben elmentjuumlk azoknak a regisztereknek az eacuterteacutekeacutet melyeket felhasznaacutelunk ebben a programreacuteszben A regiszterek tartalmaacutenak elmenteacutese a verembe toumlrteacutenik Visszateacutereacutes előtt pedig a sorrendre figyelve visszatoumlltoumlgetjuumlk az elmentett regiszterek eacuterteacutekeacutet a veremből majd visszateacuteruumlnk a megszakiacutetaacutest lekezelő programreacuteszből Ez utoacutebbi fogalmat gyakran szintuacutegy csak megszakiacutetaacutesnak nevezik iacutegy ez a szoacute ettől kezdve keacutet fogalmat is jeloumllhet aacutem ez eacutertelemzavart szinte sohasem okoz

Regiszterveacutedelemre sokszor szubrutinoknaacutel is szuumlkseacuteg van hiszen ugyanaz lehet igaz a regiszterek hasznaacutelataacutera mint amit az előbb taglaltunk Eacutes persze az is lehet hogy a hasznaacutelandoacute szubrutint nem is mi iacutertuk hanem valaki maacutes eacutes mi csak be akarjuk eacutepiacuteteni a sajaacutet koacutedunkba Remeacuteljuumlk hogy a mostanra magaacutetoacutel vilaacutegossaacute vaacutelt hogy mi a kuumlloumlnbseacuteg szubrutin eacutes megszakiacutetaacutes koumlzoumltt Ha netaacuten meacutegsem akkor a keacutet fogalom koumlzoumltti kuumlloumlnbseacuteg leacutenyege abban rejlik hogy a szubrutinokat előre tervezett moacutedon mindig ugyanarroacutel a helyről hiacutevogatja a főprogram a megszakiacutetaacutesok viszont bizonyos esemeacutenyek hataacutesaacutera vaacuteltoacutednak ki fuumlggetlenuumll attoacutel hogy hol tart a főprogram

A verembe valoacute adatmenteacutest a koumlvetkező utasiacutetaacutessal valoacutesiacutethatjuk meg

PUSH iram addr

Az utasiacutetaacuteslistaacutek ezt a fenti moacutedon adjaacutek meg Az iram addr az internal RAM address angol kifejezeacutesből szaacutermazik azaz belső RAM-ciacutemet jelent A Push szoacute azt jelenti hogy nyom raacutenyom Az toumlrteacutenik hogy a megadott memoacuteriaciacutemen talaacutelhatoacute eacuterteacuteket raacutenyomjuk a kupacra rakaacutesra azaz beletesszuumlk a verembe Ilyesformaacuten adhatunk meg konkreacutet regisztereket

PUSH ACCPUSH R0PUSH R7

A veremből valoacute adatkiveacutetel a

POP iram addr

utasiacutetaacutessal toumlrteacutenik A Pop angol szoacute igen-igen sok mindent jelent de a Pop Value from Stack kifejezeacutest legszerencseacutesebben talaacuten a kupacroacutel lekap jelenteacutessel fordiacutethatjuk ami itt annyit tesz hogy eacuterteacuteket veszuumlnk ki a veremből Konkreacutet peacuteldaacutekkal

POP R7POP R0POP ACC

Jegyezzuumlk meg hogy az akkumulaacutetorra enneacutel a keacutet utasiacutetaacutesnaacutel az ACC roumlvidiacuteteacutessel hivatkozunk Ez azeacutert van iacutegy mert ilyenkor az akkumulaacutetor nem az utasiacutetaacuteshoz tartozik hanem annak csupaacuten az argumentuma Lehetne baacutermi maacutes is viszont ezt a konkreacutet memoacuteriaciacutemet (az E0h ciacutemű SFR-ről van szoacute kuumlloumlnben) az assemblerhez tartozoacute szimboacutelumlistaacuteban eacuteppen az ACC neacutevvel illetteacutek Akaacuter azt is iacuterhatnaacutenk hogy

PUSH 0E0hPOP 0E0h

Megszakiacutetaacutesboacutel a RETI utasiacutetaacutessal teacuter vissza a program vezeacuterleacutese az eredeti helyeacutere A mnemonik a Return from Interrupt (visszateacutereacutes a megszakiacutetaacutesboacutel) kifejezeacutesből szaacutermazik

A megszakiacutetaacutesoknak prioritaacutesi parameacuteteruumlk lehet ami az ADuC 842-esneacutel a koumlvetkezőkeacuteppen neacutez ki vannak magas eacutes alacsony prioritaacutesuacute megszakiacutetaacutesok Ezek az IP eacutes IEIP2 SFR-ek tartalmaacuteval konfiguraacutelhatoacutek A default beaacutelliacutetaacutes szerint az oumlsszes eddig emliacutetett megszakiacutetaacutestiacutepus alacsony prioritaacutesuacute A tankoumlnyvben ezen nem is

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

vaacuteltoztatunk Annyit azonban el kell mondanunk hogy magas prioritaacutesuacute megszakiacutetaacutes megszakiacutetja az alacsony prioritaacutesuacutet de fordiacutetva ilyen nem toumlrteacutenhet eacutes nem is toumlrteacutenik Ha azonos prioritaacutesuacute megszakiacutetaacutesok egyidejűleg koumlvetkezneacutenek be akkor az eddig emliacutetettek koumlzuumll a koumlvetkező sorrendben hajtoacutednak veacutegre (a legnagyobb prioritaacutesuacuteval kezdve) 0 kuumllső esemeacuteny 0 időziacutetőszaacutemlaacuteloacute 1 kuumllső esemeacuteny 1 időziacutetőszaacutemlaacuteloacute soros porti esemeacuteny időintervallum-szaacutemlaacuteloacute A megszakiacutetaacutesok hasznaacutelataacutet egy aacuteltalaacutenos jelzőbittel (EA) engedeacutelyezni kell majd egyeseacutevel a hasznaacutelni kiacutevaacutent tiacutepusokat is Ha pedig bizonyos esemeacutenyre valoacute reagaacutelaacutes nemkiacutevaacutenatossaacute vaacutelik a megszakiacutetaacutesokat le is lehet tiltani Sőt azok egymaacutest is letilthatjaacutek De meacuteg sajaacutet magukat is Minderről reacuteszletesen a koumlvetkező alfejezetekben nyerhetuumlnk keacutepet

2 Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutesAz ADuC-panel keacutet nyomoacutegombjaacutenak megnyomaacutesa egy-egy olyan esemeacuteny amely megszakiacutetaacutes kivaacuteltaacutesaacutera alkalmas amennyiben engedeacutelyezzuumlk azt Ezeket a megszakiacutetaacutesokat kuumllső megszakiacutetaacutesoknak nevezzuumlk A [A kuumllső megszakiacutetaacutesok jellemzői] a kuumllső megszakiacutetaacutesokkal kapcsolatos tudnivaloacutekat foglalja oumlssze a [Az IE SFR parameacuteterei] pedig azt az SFR-t amelyben a megszakiacutetaacutesok engedeacutelyezőbitjei talaacutelhatoacutek [1 p 70 Table 35]

111 taacuteblaacutezat - A kuumllső megszakiacutetaacutesok jellemzői

A Kuumllső megszakiacutetaacutesok jellemzői

ADuC 842 laacuteba portbit P32 P33

Megnevezeacutes angolul external interrupt 0 external interrupt 1

Megnevezeacutes magyarul 0 kuumllső megszakiacutetaacutes 1 kuumllsőmegszakiacutetaacutes

Engedeacutelyezőbit EX0 EX1

Nyomoacutegomb 1 gomb 2 gomb

Vektor ciacuteme 0003h 0013h

112 taacuteblaacutezat - Az IE SFR parameacuteterei

IE Interrupt Enable Register

Megszakiacutetaacutesengedeacutelyező regiszter

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Jelenteacutes

7 EA Valamennyi megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

6 EADC Nem taacutergyaljuk

5 ET2 Nem taacutergyaljuk

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

4 ES Az UART soros port megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

3 ET1 A Timer 1 megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

2 EX1 Az 1 kuumllső megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

1 ET0 A Timer 0 megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

0 EX0 A 0 kuumllső megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

A fentiek utaacuten megfogalmazhatjuk a koumlvetkező feladatunkat amelyben szuumlkseacuteguumlnk lesz a gombnyomaacutesok megszakiacutetaacutesokkal toumlrteacutenő kezeleacuteseacutere

13 feladat

Az ADuC-panel LED-soraacuten fusson koumlrbe egy LED Az 1 gomb megnyomaacutesaacutera aacutelljon meg a futaacutes ezt pedig a 2 gomb megnyomaacutesaacuteval lehessen feloldani [Code20]

A feladat megoldaacutesa nem lesz neheacutez meacutegis rajzolunk folyamataacutebraacutet hiszen előszoumlr hasznaacutelunk megszakiacutetaacutesokat A főprogram semmi egyebet nem csinaacutel mint leacutepteti koumlrbe-koumlrbe az egy szem kigyuacutejtott LED-et Egy-egy leacutepeacutes (eacutes utaacutena a megszokott vaacuterakozaacutes) akkor toumlrteacutenik ha egy fut nevű jelzőbit eacuterteacuteke magas kuumlloumlnben a főprogram helyben jaacuter A fut nevű jelzőbit eacuterteacutekeacutet eacuteppen a megszakiacutetaacutesok aacutelliacutetjaacutek be a megfelelő moacutedon A keacutet megszakiacutetaacutes mindig letiltja sajaacutet magaacutet eacutes engedeacutelyezi a maacutesikat Ez amolyan koumllcsoumlnoumls kizaacuteraacutest jelent A folyamataacutebra a [A (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute Ezen maacuter hasznaacuteljuk a fut EX0 eacutes EX1 biteket A [13 feladat] megoldaacutesaacutet jelentő koacuted meacuteg mindig nem tekintendő bdquohosszuacutenakrdquo

111 aacutebra - A [13 feladat] (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

Code20asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutes vektoraJMP GOMB1 Ugrunk az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacuteszhezORG 0013h A 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutes vektoraJMP GOMB2 Ugrunk a 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacuteszhezORG 0060h A teacutenyleges programkoacuted kezdetefut BIT 00h A futaacutes engedeacutelyezőbitje Bitvaacuteltozoacute Ezt majd a megszakiacutetaacutesok aacutelliacutetgatjaacutek a főprogram leginkaacutebb csak figyeliGOMB1 Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutes lekezeleacuteseCLR EX0 Az 1 gomb megszakiacutetaacutesaacutenak letiltaacutesaCLR fut Toumlroumlljuumlk a fut jelzőbitetSETB EX1 Engedeacutelyezzuumlk a 2 gomb (1 kuumllső esemeacuteny) megszakiacutetaacutesaacutetRETI Visszateacuteruumlnk a megszakiacutetaacutesboacutelGOMB2 A 2 gomb aacuteltal kivaacuteltott megszakiacutetaacutes lekezeleacuteseCLR EX1 A 2 gomb megszakiacutetaacutesaacutenak letiltaacutesaSETB fut Foumllaacutelliacutetjuk a fut jelzőbitet SETB EX0 Engedeacutelyezzuumlk az 1 gomb (0 kuumllső esemeacuteny) megszakiacutetaacutesaacutetRETI Visszateacuteruumlnk a megszakiacutetaacutesboacutelMAIN A főprogram kezdeteSETB fut Foumllaacutelliacutetjuk a futaacutest jelző bitetMOV P211111110b Az első LED bekapcsolaacutesaCLR EX1 Az 1 kuumllső esemeacuteny (2 gomb) megszakiacutetaacutesaacutenak letiltaacutesa (A sor maga foumlloumlsleges mert amuacutegy is iacutegy indul az ADuC csak az eacuterthetőseacuteg kedveacuteeacutert tesszuumlk ideSETB EX0 A 0 kuumllső esemeacuteny (1 gomb) megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesfigyelJNB fut$ Ha fut=0 akkor helyben jaacuterunk Egyeacutebkeacutent csorog tovaacutebb a programMOV AP2RL A A LED-ek baacutejtjaacutenak balra forgataacutesaMOV P2AMOV A10 01 s vaacuterakozaacutes koumlvetkezikCALL DELAY Időhuacutezoacute rutin meghiacutevaacutesaJMP figyel Ugraacutes vissza a rsquofutrsquo bit figyeleacuteseacutehez

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

3 Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutesAz előző alfejezetben megismerkedtuumlnk a belső oacutera hasznaacutelataacuteval amit időintervallum-szaacutemlaacuteloacutenak is hiacutevnak (TIC) Most fog kideruumllni hogy mieacutert talaacuteloacute ez az elnevezeacutes Ennek eacuterdekeacuteben ismerkedjuumlnk meg az INTVAL SFR-el (laacutesd [Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei])

113 taacuteblaacutezat - Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei

SFR Angol neacutev Eacuterveacutenyes eacuterteacutekek Funkcioacute Default eacuterteacutek bekapcsolaacuteskor

INTVAL User Time Interval Select Register

0-255 A kiacutevaacutent időintervallum darabszaacutema felhasznaacuteloacutei programmal iacuterhatoacute a regiszterbe Amikor a 8-bites intervallum-szaacutemlaacuteloacute egyenlő lesz az INTVAL regiszterbe iacutert eacuterteacutekkel megszakiacutetaacutes leacutep fel amennyiben engedeacutelyezett

00h

Mire lesz joacute nekuumlnk az INTVAL regiszter Arra hogy a belső oacuteraacutera raacuteakasztunk meacuteg egy funkcioacutet amely keacutepes arra hogy meghataacuterozott darabszaacutemuacute előre roumlgziacutetett időintervallum eltelte utaacuten megszakiacutetaacutest vaacuteltson ki Ezzel leszuumlnk keacutepesek olyan koacutedokat iacuterni amelyek meghataacuterozott időnkeacutent periodikusan veacutegeznek valamilyen feladatot Ehhez azonban ki kell egeacutesziacutetenuumlnk a [A TIMECON SFR parameacuteterei]ot A TIMECON SFR műkoumldeacuteseacutenek szaacutemunkra szuumlkseacuteges reacuteszleteit a [A TIMECON SFR parameacuteterei reacuteszletesebben] tartalmazza Tovaacutebbi reacuteszletek talaacutelhatoacutek az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban [1 p 55 Table 24]

114 taacuteblaacutezat - A TIMECON SFR parameacuteterei reacuteszletesebben

TIMECON TIC Control Register

Az időintervallum-szaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Bit neve Jelenteacutes

7 - Foglalt

6 TFH 24-oacuteraacutes uumlzemmoacutedot beaacutelliacutetoacute bit Ha 1 akkor az oacutera szaacutemlaacuteloacuteja 0-toacutel 23-ig fut Ha 0 akkor 0-toacutel 255-ig

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

5 ITS1 Az intervallum időalapjaacutet beaacutelliacutetoacute bitek A koumlvetkező kombinaacutecioacutek aacutelliacutethatoacutek be az intervallum-szaacutemlaacuteloacute frissiacuteteacuteseacutehez

ITS1 ITS0 Időegyseacuteg

0 0 1128 maacutesodperc

0 1 1 maacutesodperc

1 0 1 perc

1 1 1 oacutera

4 ITS0

3 STI Egyszeri intervallumtuacutelleacutepeacutest engedeacutelyező bit (Nem taacutergyaljuk)

2 TII Az intervallum-szaacutemlaacuteloacute megszakiacutetaacutesi bitje (Nem taacutergyaljuk)

1 TIEN Az időintervallumokat engedeacutelyező bit Ha 1 engedeacutelyezzuumlk a 8-bites időintervallum-szaacutemlaacuteloacutet

0 TCEN Az oacutera engedeacutelyezőbitje Ha 1 indul az oacutera ha 0 leaacutell az oacutera A TIC regiszterei TCEN=0 eseteacuten iacuterhatoacutek

Amennyiben peacuteldaacuteul perc egyseacutegben adott megszakiacutetaacutesokat szeretneacutenk az ITS1 ill ITS0 biteket 1-re ill 0-ra kell aacutelliacutetanunk Ha maacutesodperc egyseacutegben adott megszakiacutetaacutesokat akkor 0-ra ill 1-re Ilyenkor az INTVAL regiszter tartalmazza a kivaacutelasztott időegyseacuteg darabszaacutemaacutet eacutes a megszakiacutetaacutes a darabszaacutem letelte utaacuten koumlvetkezik be Iacutegy lehet periodikusan megszakiacutetaacutest kivaacuteltani mondjuk 5 percenkeacutent 10 maacutesodpercenkeacutent stb

A [Az IE SFR parameacuteterei]ban felsoroltuk hogy melyik megszakiacutetaacutesok engedeacutelyezhetők az IE SFR-rel Csakhogy ebben a felsorlaacutesban nincsen benne az intervallumszaacutemlaacuteloacute De semmi baj a megszakiacutetaacutesokhoz egy maacutesodlagos SFR is tartozik amelyikben viszont maacuter benne lesz Ezt mutatja a [Az IEIP2 SFR parameacuteterei (reacuteszlet)] (a teljesseacuteg igeacutenye neacutelkuumll) Tovaacutebbi reacuteszletek a gyaacuteri leiacuteraacutesban olvashatoacutek [1 p 71 Table 37]

115 taacuteblaacutezat - Az IEIP2 SFR parameacuteterei (reacuteszlet)

IEIP2 Secondary Interrupt Enable Register

Maacutesodlagos megszakiacutetaacutesengedeacutelyező regiszter

Bekapcsolaacutes utaacuteni default eacuterteacutek A0h = 10100000b

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Jelenteacutes

7 - Foglalt

5 PPSM A taacutepellaacutetaacutest figyelő megszakiacutetaacutes prioritaacutesa (Nem taacutergyaljuk)

2 ET2 Az időintervallum-szaacutemlaacuteloacutehoz tartozoacute megszakiacutetaacutes engedeacutelyezeacutese (1) vagy letiltaacutesa (0)

A fentiek ismereteacuteben nekifuthatunk a koumlvetkező feladatnak

14 feladat

Az ADuC-panel LED-soraacutenak oumlsszes LED-je villanjon foumll roumlvid ideig minden egyes maacutesodpercben [Code21]

A feladat megoldaacutesa egeacuteszen egyszerű lesz folyamataacutebraacutet nem is igeacutenyel Azt fogjuk megvaloacutesiacutetani hogy az intervallum-szaacutemlaacuteloacute megfelelő beaacutelliacutetaacutesaival minden egyes maacutesodpercben kivaacuteltunk egy megszakiacutetaacutest A megszakiacutetaacutes felkapcsolja a LED-eket vaacuterakozik egy kicsit majd lekapcsolja a LED-eket eacutes visszateacuter a főprogramba Hogy meacuteg szebb legyen a megvaloacutesiacutetaacutes ugyanazt az időhuacutezoacute rutint fogjuk hasznaacutelni mint eddig de azt most nem a főprogram hanem a megszakiacutetaacutes hiacutevja meg Csak arra kell vigyaacuteznunk nehogy a megszakiacutetaacutesban toumlltoumltt idő toumlbb legyen mint a koumlvetkező kivaacuteltaacutesig eltelt idő mert akkor anomaacutelis programműkoumldeacutesre kell szaacutemiacutetanunk Jelen esetben a regiszterveacutedelemmel nem fogunk toumlrődni mert sem a megaszakiacutetaacutes sem a szubrutin nem baacutentjaacutek sem egymaacutes sem a főprogram vaacuteltozoacuteit Tovaacutebbaacute ne felejtsuumlk hogy az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutes vektora a 0053h ciacutemen helyezkedik el Az oacuteraacutenak nem is adunk most kezdeti eacuterteacuteket hiszen teljesen mindegy hogy honnan indul nekuumlnk csak a maacutesodpercek muacutelaacutesa szaacutemiacutet A koacuted meacuteg mindig egyszerűnek titulaacutelhatoacute A roumlvidseacuteg kedveacuteeacutert a megszokott eacutes vaacuteltozatlan formaacuteban aacutetvett DELAY szubrutinunkat most sem tuumlntetjuumlk foumll A bitenkeacutent nem ciacutemezhető SFR-eknek valoacute eacuterteacutekadaacuteskor sziacutenes kiemeleacutessel jeloumlljuumlk azokat a biteket amelyek kuumlloumlnoumls fontossaacuteggal biacuternak a koacuted szempontjaacuteboacutel

Code21asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdeteMAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL1 1 maacutesodpercenkeacutent kell kivaacuteltani a megszakiacutetaacutestORL TIMECON00010011b Folytonos intervallumszaacutemlaacutelaacutes Maacutesodperc alapuacute Ezt az 5 eacutes 4 bittel aacutelliacutetjuk be Az 1 bitaz intervallumszaacutemlaacuteloacutet indiacutetja a 0 bit magaacutet az oacuteraacutetORL IEIP200000100b Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes engedeacutelyezeacutese Ez a bit a maacutesodlagos engedeacutelyezőregiszterben van Ez a regiszter bitenkeacutent nem ciacutemezhető iacutegy logikai maszkolaacutest hasznaacutelhatunkSETB EA A megszakiacutetaacutesok globaacutelis engedeacutelyezeacuteseJMP $ Itt veacutegtelen ciklusba keruumll a program hiszen a főprogramnak nincs toumlbb dolgaTIKTAK Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutesMOV P20 LED-ek bekapcsolaacutesaMOV A10 01 s-ig fogunk vaacuterakozni

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

CALL DELAY A vaacuterakozoacute szubrutin meghiacutevaacutesaMOV P2255 LED-ek kikapcsolaacutesaRETI Visszateacutereacutes a megszakiacutetaacutesboacutel

4 A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesokEbben az alfejezetben olyan alkalmazaacutest mutatunk be amely kombinaacutelja a kuumllső esemeacutenyek (azaz a gombnyomaacutesok) eacutes az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesait A feladat ugyanis olyan lesz hogy a programot e keacutet megszakiacutetaacutestiacutepus neacutelkuumll csak kiacutenkeservesen lehetne megiacuterni Iacutegy viszont viszonylag egyszerűen

15 feladat

A LED-soron leacuteptessuumlnk a Knight Rider-eacutehez hasonloacute mintaacutezatot jobbra-balra Tegyuumlk ezt uacutegy hogy haacuterom egymaacutes melletti LED leacutepkedjen ide-oda de a LED-sor szeacuteleacutehez eacuterve a szeacutelső LED mindig leacutepjen is ki A nyomoacutegombokkal lehessen gyorsiacutetani eacutes lassiacutetani a mintaacutezat leacutepkedeacuteseacutet A prellegeacutest adott ideig toumlrteacutenő vaacuterakozaacutessal kuumlszoumlboumlljuumlk ki [Code22]

Előszoumlr is tisztaacutezzuk hogyan mikeacutent menjen a mintaacutezat Ezt mutatja az alaacutebi aacutebra amely az utolsoacute sor utaacuten uacutejrakezdhető

112 aacutebra - A [15 feladat]ban megkoumlvetelt LED-leacutepteteacutes

Ezt a Knight Rider-es leacutepteteacutest az olvasoacute bizonyaacutera maacuter oumlnaacutelloacutean is meg tudnaacute csinaacutelni A Code22-ben egy megoldaacutest fogunk mutatni melyben felhasznaacuteljuk az RRC A eacutes RLC A utasiacutetaacutesokat Leacutenyeges hogy kell egy kezdeti eacuterteacutek a mintaacutezathoz utaacutena viszont maacuter keacutet szabaacutelyos cikluson keresztuumll (7 leacutepeacutes jobbra majd 7 leacutepeacutes balra) a veacutegtelenseacutegig mehet a leacutepteteacutes

Enneacutel sokkal eacuterdekesebb lesz ahogy most a megszakiacutetaacutesokkal baacutenni fogunk A főprogram nem csinaacutel semmi egyebet mint a veacutegtelenseacutegig leacutepteti a mintaacutezatot jobbra-balra Minden egyes leacutepeacutes utaacuten betoumllti egy vaacuteltozoacuteboacutel (wait) az aktuaacutelis vaacuterakozaacutes idő egyseacutegeacutet majd meghiacutevja a joacute oumlreg DELAY szubrutinunkat Nyilvaacutenvaloacute hogy a keacutet nyomoacutegomb megszakiacutetaacutesainak a vaacuterakozaacutesi idő vaacuteltozoacutejaacutet (wait) kell manipulaacutelnia Az 1 nyomoacutegomb megszakiacutetaacutesa noumlveli wait eacuterteacutekeacutet a 2 nyomoacutegomb megszakiacutetaacutesa csoumlkkenti wait eacuterteacutekeacutet (Ezek az eacuterteacutekek Code22-ben 1 eacutes 30 koumlzoumlttiek lehetnek)

Most joumln a csel A nyomoacutegombok megszakiacutetaacutesa azonnal letiltja oumlnmagaacutet eacutes elindiacutetja az időintervallum-szaacutemlaacuteloacutet ami egy bizonyos előiacutert időeacuterteacutek (16128 s = 0125 s) lejaacuterta utaacuten kivaacuteltja a sajaacutet megszakiacutetaacutesaacutet Az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesa leaacutelliacutetja magaacutet az intervallumszaacutemlaacutelaacutest majd uacutejra engedeacutelyezi a nyomoacutegombok megszakiacutetaacutesaacutet eacutes ezzel veacuteget is eacuter Ezzel az elvvel egyreacuteszt kikuumlszoumlboumlljuumlk a prellegeacutest maacutesreacuteszt a gombok megszakiacutetaacutesa a főprogram futaacutesa koumlzben keacutepes olyan vaacuteltozoacutet manipulaacutelni amit a főprogram amuacutegy rendszeresen hasznaacutel Ezzel vaacutelik lehetőveacute a LED-ek leacutepteteacutese alatti azaz menet koumlzbeni sebesseacutegaacutelliacutetaacutes

A megoldaacutes koacutedja maacuter nem nevezhető pofonegyszerűnek ezeacutert csereacutebe viszont egeacuteszen laacutetvaacutenyos megjeleneacutest kiacutenaacutel eacutes kombinaacutelja az eddig megtanult keacutet megszakiacutetaacutestiacutepust Az olvasoacutet arra biztatjuk hogy elemezze a programot eacutes addig ne haladjon tovaacutebb amiacuteg teljes egeacuteszeacuteben meg nem eacutertette annak műkoumldeacuteseacutet A megeacuterteacutest elősegiacutető folyamataacutebra a [A (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute

Enneacutel a programnaacutel nagyon fontos lesz a regiszterveacutedelem hiszen a kuumllső esemeacutenyek (gombnyomaacutesok) megszakiacutetaacutesai nem csak az akkumulaacutetort hasznaacuteljaacutek hanem a C bitet is iacutegy ez utoacutebbit is el kell mentenuumlnk Ezt most uacutegy fogjuk megtenni hogy egy kuumlloumln bitvaacuteltozoacutet definiaacutelunk (savec) erre a ceacutelra

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

113 aacutebra - A [15 feladat] (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja

A koacutedot a tankoumlnyvben nem a legbővebb kommentezeacutessel ismertetjuumlk hosszabb vaacuteltozat aacutell rendelkezeacutesre a koacutedkoumlnyvtaacuterban Figyeljuumlk meg hogy az oacuteraacutet elindiacutetaacutes utaacuten soha toumlbbeacute nem aacutelliacutetjuk le csak az intervallumszaacutemlaacuteloacutet engedeacutelyezzuumlk vagy tiltjuk le

Code22asmCSEG A koacutedszegmens kezdetewait DATA 030h Baacutejtvaacuteltozoacute a moacutedosiacutethatoacute időhuacutezaacuteshozsavec BIT 00h Bitvaacuteltozoacute a Carry elmenteacuteseacutereORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB1 vektoraORG 0013h A 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB2 vektoraORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdete Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1PUSH ACC Regiszterveacutedelem

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

MOV savecC A Carry bit elmenteacuteseCLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaMOV Await Megvizsgaacuteljuk az időhuacutezaacutes vaacuteltozoacutejaacutetCJNE A30novel Ha (meacuteg) nem 30 akkor noumlvelhetjuumlkJMP tova1 Kuumlloumlnben maacuter nem noumlvelhetjuumlknovelINC wait Noumlveljuumlk wait eacuterteacutekeacutettova1 MOV Csavec A Carry bit visszatoumllteacutesePOP ACC Az elmentett eacuterteacutek kiszedeacutese a verembőlRETI A 2 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB2PUSH ACC RegiszterveacutedelemMOV savecC A Carry bit elmenteacuteseCLR EX1 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaMOV Await Megvizsgaacuteljuk az időhuacutezaacutes vaacuteltozoacutejaacutetCJNE A1csokkent Ha (meacuteg) nem 1 akkor csoumlkkenthetjuumlkJMP tova2 Kuumlloumlnben maacuter nem csoumlkkenthetjuumlkcsokkentDEC wait Csoumlkkentjuumlk wait eacuterteacutekeacutettova2 MOV Csavec A Carry bit visszatoumllteacutesePOP ACC Az elmentett eacuterteacutek kiszedeacutese a verembőlRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111101b Az intervallumszaacutemlaacuteloacute leaacutelliacutetaacutesaSETB EX0 Az 1 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EX1 A 2 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseRETI FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 0125 maacutesodpercenkeacutent kell kivaacuteltani a megszakiacutetaacutest Ennyi teljen el gombnyomaacutes utaacuten hogy ismeacutet eacuterzeacutekeny legyen a gombra a programMOV TIMECON00000001b Az oacutera elindiacutetaacutesa eacutes 1128 s az egyseacuteg az intervallumszaacutemlaacutelaacuteshozMOV IEIP200000100b Az intervallumszaacutemlaacuteloacute engedeacutelyezeacutese Ez a bit a maacutesodlagos engedeacutelyezőregiszterben vanSETB EX0 Az 1 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EX1 A 2 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesMOV wait15 Kezdeti eacuterteacutek az időhuacutezaacutes vaacuteltozoacutejaacutenakMOV P200111111b Kezdeti elrendezeacutes Kigyuacutejtunk keacutet LED-et a bal oldalon MOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAY Az időhuacutezoacute szubrutin meghiacutevaacutesaCLR C Toumlroumlljuumlk a Carry bitet hogy amikor jobbra beforgatjuk a LED-ek portjaacuteba akkor ott maacuter haacuterom LED vilaacutegiacutetsonujraMOV R47 Heacutetszer fogunk leacuteptetni jobbra a Carry-n keresztuumll

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

jobbraMOV AP2 A LED-ek portjaacutenakRRC A leacutepteteacutese jobbraMOV P2AMOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAYDJNZ R4jobbra A ciklusvaacuteltozoacute vizsgaacutelataMOV R47 Heacutetszer fogunk leacuteptetni balra a Carry-n keresztuumllbalraMOV AP2 LED-ek portjaacutenakRLC A leacutepteteacutese jobbraMOV P2AMOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAYDJNZ R4balra A ciklusvaacuteltozoacute vizsgaacutelataJMP ujra Folytatjuk a leacutepteteacutestEND

Mielőtt elbuacutecsuacuteznaacutenk ettől a programtoacutel meg kell jegyeznuumlnk hogy a C bit veacutedelmeacutet maacuteskeacutepp is megoldhatjuk Ehhez kuumlloumln bit definiaacutelaacutesa helyett az akkumulaacutetor utaacuten mentsuumlk el a verembe a PSW SFR tartalmaacutet hiszen a C bit ebben talaacutelhatoacute (vouml [A PSW SFR parameacuteterei])

PUSH ACCPUSH PSW

A visszaszedeacutes pedig figyelve a sorrendre iacutegy toumlrteacutenhet

POP PSW POP ACC

Created by XMLmind XSL-FO Converter

12 fejezet - Kuumllső aacuteramkoumlroumlk LED-ekkelAz előző fejezetek utaacuten eleacuterkezett az idő arra hogy veacutegre kuumllső aacuteramkoumlroumlket kapcsoljunk a mikrovezeacuterlőnkhoumlz A kuumllső aacuteramkoumlroumlk hasznaacutelata termeacuteszetesen meacuteg nagyon sok tudnivaloacutet fog megkoumlvetelni az ADuC 842-essel kapcsolatban de ezeket szeacutepen sorban amennyire csak lehet egymaacutesra eacutepiacutetve taacutergyaljuk

Melyek azok a jelzőberendezeacutesek amelyekkel az aacutetlagember a legtoumlbbszoumlr talaacutelkozik Valoacutesziacutenűleg a koumlzlekedeacutesi jelzőlaacutempaacutek Ebben a fejezetben ezeket fogjuk modellezni A fejezetben a koumlzlekedeacutesi jelzőlaacutempaacutek feacutenyeit LED-ek reprezentaacuteljaacutek a helyzetmeghataacuterozaacuteshoz pedig fotokapukat fogunk hasznaacutelni Innentől kezdve az egyes feladatok megoldaacutesaacutehoz mindig aacuteramkoumlri rajz is tartozik Az alkatreacuteszek oumlsszevaacutelogataacutesa termeacuteszetesen nem kizaacuteroacutelagos a tananyag elkeacutesziacuteteacuteseacutehez igyekeztuumlnk koumlnnyen eleacuterhető ill olcsoacute aacuteramkoumlri elemeket vaacutelasztani A LED-ek kiveacuteteleacutevel az alkalmazott alkatreacuteszek mindegyikeacutehez tartozik elektronikus leiacuteraacutes ezeket kuumlloumln koumlnyvtaacuter tartalmazza Megfelelő villamosmeacuternoumlki ismeretekkel baacutetran vaacutelaszthatunk maacutes tiacutepusuacute alkatreacuteszeket is legfeljebb kicsit aacutet kell alakiacutetanunk az aacuteramkoumlrt esetleg a koacutedot

1 Jelzőlaacutempa vezeacuterleacutese16 feladat

Modellezzuumlnk a haacuteromlencseacutes koumlzlekedeacutesi jelzőlaacutempa alapfunkcioacutejaacutet uacutegy hogy az egyes sziacutenek vaacuteltaacutesaacutet előre roumlgziacutetett időziacuteteacuteshez koumltjuumlk [Code23 Code24]

A feladat megoldaacutesa nagyon-nagyon egyszerű Bekapcsoljuk az adott LED-et vaacuterakozunk az ehhez a faacutezishoz tartozoacute ideig aztaacuten tovaacutebbleacutepuumlnk A vaacuterakozaacutes toumlrteacutenhetne a joacute oumlreg DELAY szubrutininkkal is de alkalmazzuk most inkaacutebb az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesaacutet Oldjuk meg a feladatot uacutegy hogy a LED-ek bekapcsolaacutesaacuteeacutert felelős bitmintaacutezatokat eacutes a vaacuterakozaacutesi időket előre megadjuk a koacutedmemoacuteriaacuteban adatkeacutent

A haacuteromlencseacutes jelzőlaacutempaacutet LED-ekkel modellező aacuteramkoumlr rajza a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute A LED-ek előteacutet-ellenaacutellaacutesait egeacuteszen szabadon megvaacutelaszthatjuk csak arra figyeljuumlnk hogy ne aacutelliacutetsunk elő tuacutel nagy aacuteramerősseacuteget az egyes aacutegakban Ennek eacuterteacuteke persze a LED-tiacutepusoktoacutel fuumlgg de 10-15 mA aacuteltalaacuteban bőven eleacuteg Az ADuC 842-es mikrovezeacuterlő portjai koumlzuumll most akaacuter a 0-at akaacuter a 2-at hasznaacutelhatnaacutenk Mivel eddig a 2 portot hasznaacuteltuk ndash hiszen arra vannak koumltve a panelra uumlltetett aproacute LED-ek ndash vaacutelasszuk most a nulladik portot Nagyon figyeljuumlnk azonban arra hogy a portok aktiacutev kimenetkeacutent nem hasznaacutelhatoacutek (kiemelve a [Fontos tudnivaloacute a portokkal kapcsolatban] aacutebraacuten) A portok laacutebaival viszont minden tovaacutebbi neacutelkuumll foumlldre huacutezhatjuk a raacutejuk koumltoumltt aacuteramkoumlri elemeket hiszen ez a foumlld a taacutepellaacutetaacutes foumlldje

121 aacutebra - Fontos tudnivaloacute a portokkal kapcsolatban

A 0-s port bitjeinek sajaacutetos kiosztaacutesa a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten azzal fuumlgg oumlssze hogy iacutegy toumlbb helyuumlnk marad a dugdosoacutes proacutebapanelon iacutezleacutesesen egymaacutes melleacute tenni az 5 mm-es tokozaacutesuacute LED-eket amennyiben ilyeneket hasznaacutelunk (Eacutes ebben a tankoumlnyvben ilyeneket hasznaacutelunk)

122 aacutebra - A [16 feladat] (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

A program műkoumldeacuteseacutenek leacutenyege az hogy az egyes laacutempafaacutezisokhoz tartozoacute bitmintaacutezatokat eacutes a faacutezisok időtartamaacutenak eacuterteacutekeit a koacutedmemoacuteriaacuteban helyezzuumlk el ahonnan azokat a [Adatok elhelyezeacutese a koacutedban] alfejezetben ismertetett moacutedon olvassuk ki Kuumlloumln toumlmbben aacutellnak a bitmintaacutezatok eacutes kuumlloumln toumlmbben a vaacuterakozaacutesi időeacuterteacutekek maacutesodperc egyseacutegben megadva Iacutegy menet koumlzben mindig a megfelelő toumlmbkezdetet kell majd az adatmutatoacuteba toumlltenuumlnk A vaacuterakozaacutest az időintervallum-szaacutemlaacuteloacute (TIC) megszakiacutetaacutesa valoacutesiacutetja meg melynek beaacutelliacutetaacutesa szinteacuten maacutesodperces kell hogy legyen A megszakiacutetaacutes az adott idő letelte utaacuten vaacuteltoacutedik ki eacutes a megszakiacutetaacutes programreacuteszeacuteben magasra aacutelliacutetoacutedik egy jelzőbit (tovabb) A főprogram az egyes laacutempafaacutezisok koumlzoumltt erre a bitre vaacuter eacutes ha azt a megszakiacutetaacutes magasra aacutelliacutetja akkor joumlhet a koumlvetkező laacutempafaacutezis Addig viszont a főprogram helyben jaacuter eacutes csak lesi hogy beaacutell-e a keacuterdeacuteses bit A megszakiacutetaacutes leaacutelliacutetja az intervallumszaacutemlaacuteloacutet eacutes az oacuteraacutet is hiszen a koumlvetkező laacutempafaacutezishoz elteacuterő vaacuterakozaacutesi idő tartozhat iacutegy moacutedosiacutetani kell az INTVAL regisztert Ez pedig csak leaacutelliacutetott oacuteraacuteval lehetseacuteges Az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet a főprogram indiacutetja ismeacutet az uacutej laacutempafaacutezis kezdeteacuten Most kell visszaemleacutekeznuumlnk a [A belső oacutera hasznaacutelata] fejezetben leiacutertakra Arra hogy az intervallumszaacutemlaacuteloacute regisztereinek foumlluumlliacuteraacutesakor elegendő időt kell biztosiacutetanunk a műveletre kuumlloumlnben a foumlluumlliacuteraacutes nem toumlrteacutenik meg Erre az INTVAL regiszter kuumlloumlnoumlsen eacuterzeacutekeny iacutegy a roumlvid kis vaacuterakozaacutes nem hiaacutenyozhat (Ha nem hiszi nyugodtan proacutebaacutelja ki a kedves olvasoacute hogy mi toumlrteacutenik akkor ha kiszedi a koacutedboacutel ezt a vaacuterakozoacute ciklust A laacutempafaacutezisok időziacuteteacutese nem fog az előiacutert moacutedon műkoumldni vagy egyaacuteltalaacuten nem fog műkoumldnihellip)

A megoldaacuteshoz most nem klasszikus folyamataacutebraacutet melleacutekeluumlnk hiszen a koacuted maga nem tuacutel bonyolult A műkoumldeacutest most olyan aacutellapot-aacutetmenetgraacuteffal szemleacuteltetjuumlk (laacutesd [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef] aacutebra) amelyben az aacutellapotokat a graacutef csuacutecsai jeloumllik Ezeket az egyes faacutezisokhoz tartozoacute sziacutenek angol kezdőbetűivel jeloumlljuumlk R ndash red piros RA ndash red-amber piros-saacuterga A ndash amber borostyaacutensaacuterga G ndash green zoumlld A csuacutecsokhoz folyamataacutebra-szerűen kapcsolunk blokkokat melyek az ott veacutegrehajtott leacutepeacuteseket mutatjaacutek termeacuteszetesen csak a műkoumldeacutes szempontjaacuteboacutel legfontosabbakat Az aacutellapotok koumlzoumltti aacutetmeneteket a graacutef eacutelei reprezentaacuteljaacutek melyekre az aacutetmenet felteacuteteleacutet iacuterjuk Ne felejtsuumlk hogy a felteacutetelekben szereplő tovabb bitvaacuteltozoacutet az intervallumszaacutemlaacuteloacutehoz koumltoumltt megszakiacutetaacutes aacutelliacutetja mindig 1-re Az egyes aacutellapotoknaacutel a TIC(Tn) jeloumlleacutes eacutertelme az hogy az intervallumszaacutemlaacuteloacutehoz (TIC-hez) tartozoacute megszakiacutetaacutest az n-edik faacutezishoz tartozoacute ideig tartoacute vaacuterakozaacutessal engedjuumlk uacutetjaacutera A megszakiacutetaacutest a graacuteftoacutel elkuumlloumlniacutetve aacutebraacutezoljuk (Enneacutel a blokknaacutel csak a jelzőbitre koncentraacutelunk)

123 aacutebra - A [16 feladat] megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef

Code23asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdete

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

tovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehoz Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111100b Az oacutera eacutes az intervallumszaacutemlaacuteloacute leaacutellSETB tovabb A tovaacutebbot jelző bit foumllaacutelliacutetaacutesaRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON00010000b Maacutesodperces uumlzemmoacuted beaacutelliacutetaacutesaORL IEIP200000100b Az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesujraMOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell a koacuted-indirektMOVC AA+DPTR ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-aacutes portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV INTVALA A soron koumlvetkező vaacuterakozaacutesi eacuterteacutek betoumllteacutese az INTVAL regiszterbeMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetORL TIMECON00000011b Indiacutetjuk az intervallumszaacutemlaacuteloacutetJNB tovabb$ Vaacuterunk hogy 1 legyen a tovabb bit Ezt az intervallumszaacutemlaacuteloacute megszakiacutetaacutesa inteacuteziCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP ujra Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozlampaDB 11111101b A piros LED bitmintaacutezataDB 11110101b A piros eacutes a saacuterga LED bitmintaacutezataDB 11011111b A zoumlld LED bitmintaacutezataDB 11110111b A saacuterga LED bitmintaacutezatavarDB 3121 Az egyes laacutempafaacutezisok vaacuterakozaacutesi ideje maacutesodpercben

Figyeljuumlk meg hogy az adatbaacutejtokat vesszővel elvaacutelasztva is iacuterhatjuk nem kell mindegyiket okvetlenuumll kuumlloumln sorba tennuumlnk

A koumlvetkező alfejezet koumlnnyebb eacuterthetőseacutege eacuterdekeacuteben előredolgozunk egy kicsit eacutes meacuteg egy megoldaacutest mutatunk a [16 feladat]hoz A megoldaacutesi elv gyakorlatilag ugyanaz lesz mint előbb csak nem maacutesodperces intervallumszaacutemlaacutelaacutest alkalmazunk hanem mondjuk 18 maacutesodpercet vaacutelasztunk egyseacutegnek Ezt a program elejeacuten mindjaacutert be is aacutelliacutetjuk eacutes toumlbbet nem nyuacutelunk hozzaacute Tesszuumlk ezt uacutegy hogy 1128 s alapuacute szaacutemlaacutelaacutest aacutelliacutetunk be a TIMECON SFR-rel az INTVAL regiszterbe pedig 16-ot toumlltuumlnk Iacutegy kapjuk meg a 16128 s = 18 s időszeletet Meacuteg egyszer hangsuacutelyozzuk hogy az intervallumszaacutemlaacutelaacutest nem vaacuteltoztatjuk a program futaacutesa koumlzben annak egyseacutege maacutes szoacuteval időszelete ez az 18 s lesz a teljes futaacutes soraacuten

Kell egy olyan vaacuteltozoacute amellyel a TIC megszakiacutetaacutes az eltelt időszeleteket szaacutemlaacutelja (szaml) Kell aztaacuten meacuteg egy vaacuteltozoacute is amelybe az egyes laacutempafaacutezisokhoz szuumlkseacuteges vaacuterakozaacutes eacuterteacutekeacutet adjuk meg termeacuteszetesen 18 s

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

egyseacutegben (tvar) Ezek utaacuten leacutenyegeacuteben minden ugyanuacutegy toumlrteacutenik mint az előző programban kiveacuteve a megszakiacutetaacutest lekezelő programreacuteszt Ez mindig 1-gyel noumlveli szaml eacuterteacutekeacutet eacutes megneacutezi hogy ennek eacuterteacuteke eleacuterte-e tvar eacuterteacutekeacutet Ha nem akkor szaml eacuterteacutekeacutet noumlveli 1-gyel Ha igen akkor rendben is vagyunk letelt a szuumlkseacuteges vaacuterakozaacutes oumlsszes kicsi időszelete eacutes magasra lehet aacutelliacutetani a tovabb bitet Figyeljuumlnk oda arra hogy a szaml vaacuteltozoacutet 1-ről indiacutetsuk hiszen amikor előszoumlr vaacuteltoacutedik ki a TIC megszakiacutetaacutesa akkor maacuter eltelt a beaacutelliacutetott időintervallum azaz jelen esetben 18 s A moacutedosiacutetott aacutellapot-aacutetmenetgraacutefot az alaacutebbi aacutebra mutatja

124 aacutebra - A [16 feladat] moacutedosiacutetott megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef

A fentebbi aacutebraacuten szemleacuteltetett megoldaacutesi elv koacutedja Code24 csak neacutehaacuteny sorban kuumlloumlnboumlzik Code23-toacutel iacutegy a tankoumlnyvben csak a leacutenyegi elteacutereacutesek sorait tuumlntetjuumlk foumll Fontos hogy Code24-ben csak a főprogram legelejeacuten kell az intervallumszaacutemlaacuteloacutet eacutes az oacuteraacutet inicializaacutelnunk Utaacutena toumlbbeacute nem kapcsoljuk le őket iacutegy uacutejraindiacutetaacutesukra sincs szuumlkseacuteg Emiatt az INTVAL-nak toumlrteacutenő eacuterteacutekadaacutes utaacuten most nem is kell vaacuterakoznunk A teljes koacuted megtalaacutelhatoacute a koacutedtaacuterban

Code24asmORG 0060h A teacutenyleges programkoacuted kezdetetovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehozszaml DATA 030h Az 18-ad maacutesodperces intervallumok szaacutemolaacutesaacutenak vaacuteltozoacutejatvar DATA 031h Az aktuaacutelisan szuumlkseacuteges vaacuterakozaacutes vaacuteltozoacuteja Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKMOV Aszaml Ha szaml eacuterteacuteke nem egyenlő tvar CJNE Atvarnovel eacuterteacutekeacutevel akkor noumlveljuumlk szaml eacuterteacutekeacutetSETB tovabb Kuumlloumlnben tovabb=1RETInovelINC szaml Noumlveljuumlk szaml eacuterteacutekeacutetRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 16-ot toumlltuumlnk INTVAL-ba mert 16128 s = 18 s lesz az alap-időosztaacutesunkMOV TIMECON00000011b 1128 maacutesodperces intervallumhossz beaacutelliacutetaacutesa eacutes az oacutera eacutes az intervallum- szaacutemlaacuteloacute elindiacutetaacutesaORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacutet

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV tvarA Betoumlltjuumlk tvar-ba a szuumlkseacuteges vaacuterakozaacutes időtartamaacutet Ennyiszer 18 s-et kell vaacuterakozniCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetMOV szaml1 Az 18 s-es időszeletek szaacutemlaacutelaacutesaacutenak vaacuteltozoacutejaacutet alapeacuterteacutekre aacutelliacutetjuk

2 Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedjaA bemutatott ciklusszervezeacutesi moacutedszerekneacutel ([Hat variaacutecioacute egy feladatra] alfejezet) minden esetben szuumlkseacuteg volt a ciklusvaacuteltozoacute vizsgaacutelataacutera Amennyiben az akkumulaacutetor nulla vagy eacuteppen nem nulla mivoltaacutera voltunk kiacutevaacutencsiak hasznaacutelhattuk a JZ vagy JNZ utasiacutetaacutesokat Enneacutel oumlsszetettebb volt de ugyanide lyukadt ki a DJNZ utasiacutetaacutes is csak az a vizsgaacutelat előtt meacuteg eggyel csoumlkkenti is az adott regiszter tartalmaacutet Szabadabb oumlsszehasonliacutetaacutest a CJNE utasiacutetaacutessal tudtunk megvaloacutesiacutetani amely akkor ugrat ha nem aacutell fenn egyenlőseacuteg Mindez rendben is van de egyvalami meacuteg faacutejdalmasan hiaacutenyzik Ez pedig annak kieacuterteacutekeleacutese hogy egy regiszter tartalma kisebb vagy nagyobb-e egy maacutesik regiszter tartalmaacutenaacutel Nos tovaacutebbi oumlsszehasonliacutetoacute utasiacutetaacutesaink nincsenek de az egyiket felhasznaacutelhatjuk ilyesfeacutele kieacuterteacutekeleacutesre

A CJNE utasiacutetaacutes mellett sok oumlsszefoglaloacuteban ezt laacutethatjuk

CJNE xyrel C = x lt y

Mit jelent ez A CJNE xyrel utasiacutetaacutes maacuter eacuterthető szaacutemunkra hiszen erről volt szoacute a [Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesok] alfejezetben A processzor oumlsszehasonliacutetja az x eacuterteacuteket y eacuterteacutekeacutevel eacutes relatiacutev ugraacutest valoacutesiacutet meg ha azok nem egyenlők De mit jelent a jobb oldali kifejezeacutes Ennek megeacuterteacutese most igen-igen fontos lesz mert ismeacutet csak hasznos eszkoumlz hullik az oumlluumlnkbe A C=xlty kifejezeacutes azt jelenti hogy a CJNE utasiacutetaacutes veacutegrehajtaacutesa utaacuten a Carry bit eacuterteacuteke 1 lesz ha igaz hogy xlty eacutes 0 lesz ha xy Ezek utaacuten pedig maacuter gond neacutelkuumll elaacutegaztathatjuk a programot a JC eacutes JNC utasiacutetaacutesokkal Iacutegy tudjuk koumlnnyen megfogalmazni azt hogy pl az akkumulaacutetor eacuterteacuteke keacutet adott eacuterteacutek koumlzeacute esik-e Csak arra kell figyelnuumlnk hogy a keacuterdeacuteses rendezett halmazunk keacutet szeacutelső eacuterteacuteke beleesik-e a kiacutevaacutent tartomaacutenyba vagy sem Ha az xy kifejezeacutesben az egyenlőseacuteg meacuteg mindig nem kiacutevaacutenatos akkor azt elinteacutezhetjuumlk egy erre iraacutenyuloacute vizsgaacutelattal

A koumlvetkező peacuteldaacuten az igen ciacutemkeacutehez keruumll a program vezeacuterleacutese ha az akkumulaacutetor tartalma 10 eacutes 20 koumlzoumltt van a hataacuterokat is beleeacutertve Ellenkező esetben a nem ciacutemkeacutere Figyeljuumlk meg hogy a C bit megfelelő beaacutellaacutesaacutenak kiaknaacutezaacutesa eacuterdekeacuteben a CJNE utasiacutetaacutes maga moumlgeacute ugrat mert itt nem az elaacutegazaacutes a ceacutel hanem az hogy a C bit adja meg a vaacutelaszt a most rendkiacutevuumlli fontossaacuteguacute talaacutenyra

CJNE A10relac1relac1JC nemCJNE A21relac2relac2

JNC nem

igen

nem

Előszoumlr oumlsszehasonliacutetjuk A eacuterteacutekeacutet 10-zel Ha ez utaacuten C=1 akkor maacuteris ugorhatunk a nemleges ciacutemkeacutere mert Alt10 Ha ez nem igaz azaz C=0 akkor a program fut tovaacutebb a maacutesodik oumlsszehasonliacutetaacuteshoz de legalaacutebb annyit maacuter tudunk hogy A10 Itt oumlsszehasonliacutetjuk A eacuterteacutekeacutet 21-gyel Azeacutert 21-gyel mert az maacuter nem joacute Azeacutert 21-gyel mert a fent bemutatott oumlsszehasonliacutetaacutes a bdquokisebb mintrdquo relaacutecioacutera van kihegyezve Ott tartottunk tehaacutet hogy oumlsszehasonliacutetjuk A eacuterteacutekeacutet 21-gyel Ha ez utaacuten C=0 akkor maacuteris ugorhatunk a nemleges ciacutemkeacutere mert A21 eacutes nekuumlnk 20-ig joacute Ha e keacutet oumlsszehasonliacutetaacuteson tuacuteljut a program akkor viszont A eacuterteacuteke garantaacuteltan 10 eacutes 20 koumlzeacute esik a hataacuterokat is beleeacutertve Ezeket a relaacutecioacutes truumlkkoumlket nagyon sokszor hasznaacutelhatjuk uumlgyesen a koacutedjainkban

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

3 Jelzőlaacutempa toumlbb uumlzemmoacuteddal17 feladat

Modellezzuumlnk egy haacuteromlencseacutes koumlzlekedeacutesi jelzőlaacutempaacutet uacutegy hogy az egyes sziacutenek vaacuteltaacutesaacutet előre roumlgziacutetett időziacuteteacuteshez koumltjuumlk A jelzőlaacutempaacutenak haacuterom uumlzemmoacutedja legyen normaacutel (R-RA-G-A) villogoacute saacuterga eacutes kikapcsolt Az egyes uumlzemmoacutedok koumlzoumltt nyomoacutegombbal leacutepkedhessuumlnk A prellegeacutest kuumlszoumlboumlljuumlk ki [Code25 Code26]

A feladat most is a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute aacuteramkoumlrhoumlz tartozik A megoldaacutesaacutehoz nagyon sok elemet aacutetveszuumlnk a [16 feladat] megoldaacutesaacuteboacutel időszelet nagysaacutega (16128 s = 18 s) időszeletek szaacutemlaacutelaacutesa (szaml) eacutes a vaacuterakozaacutesi idő kezeleacutese (tvar) A feladat megoldaacutesaacuteban ismeacutet kombinaacuteljuk az 1 gombhoz tartozoacute megszakiacutetaacutest eacutes az intervallumszaacutemlaacuteloacutehoz tartozoacute megszakiacutetaacutest mint a [15 feladat] megoldaacutesaacuteban (Code22) Az 1 gombhoz tartozoacute megszakiacutetaacutes semmi maacutest nem tesz mint letiltja oumlnmagaacutet eacutes beaacutelliacutet egy jelzőbitet (nyom) A TIC megszakiacutetaacutesa pontosan akkor aacutelliacutetja magasra a laacutempafaacutezisok vaacuteltaacutesaacutehoz szuumlkseacuteges jelzőbitet (tovabb) ha letelt az aktuaacutelisan megadott vaacuterakozaacutesi idő (tvar) Ez a megszakiacutetaacutes meacuteg arra is figyel hogy az 1 gomb megszakiacutetaacutesaacutet csak akkor engedeacutelyezi uacutejra ha eltelt 2times18 s azaz 14 s A koacutedban talaacutelhatoacute egy szubrutin (RESET128) amely lekapcsolja az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet lenullaacutezza a 128-ad maacutesodperceket vaacuter egy kicsit majd uacutejra bekapcsolja az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet Erre koumlzvetlenuumll az uumlzemmoacutedok koumlzoumltti ugraacutes utaacuten van szuumlkseacuteg hogy bdquotiszta lappalrdquo induljon uacutejra az idő meacutereacutese Eacutes azeacutert keruumllt mindez szubrutinba mert toumlbb helyen is szuumlkseacuteg van erre a reacuteszletre Maga a szubrutin iacutegy neacutez ki

A RESET128 szubrutin Code25asm-benRESET128 ANL TIMECON11111100b Az oacutera eacutes az intervallumszaacutemlaacuteloacute leaacutellMOV HTHSEC0 A 128-ad maacutesodpercek nullaacutezaacutesaMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelORL TIMECON00000011b Az oacutera eacutes az intervallumszaacutemlaacuteloacute indulRET

A megoldaacuteshoz aacutellapot-aacutetmenetgraacutefot melleacutekeluumlnk (laacutesd [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek] aacutebra) mert ez most maacuter sokkal informatiacutevabb mint amilyen egy tuacutelmeacuteretes folyamataacutebra lenne A laacutempafaacutezisokhoz tartozoacute aacutetmeneteket mint esemeacutenyeket ill az uumlzemmoacutedok vaacuteltaacutesaacutet kivaacuteltoacute gombnyomaacutesokat mint esemeacutenyeket elteacuterő sziacutennel jeloumlljuumlk előbbieket feketeacutevel utoacutebbiakat pirossal

125 aacutebra - A [17 feladat] megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek

A koacuted a fent bemutatott RESET128 szubrutin neacutelkuumll az alaacutebbiakban talaacutelhatoacute Ez a koacuted most maacuter egeacuteszen

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

oumlsszetett de az aacutellapot-aacutetmenet graacutef nagy segiacutetseacuteget nyuacutejthat ahhoz hogy ne teacutevedjuumlnk el benne Egyuacutettal megnyugtatjuk az olvasoacutet enneacutel hosszabb koacuted maacuter nem keruumll elő ebben a tankoumlnyvben A program elejeacuten az INTVAL regiszternek valoacute eacuterteacutekadaacutes utaacuten azeacutert nem szerepel roumlgtoumln a sokat emlegetett roumlvid vaacuterakozaacutes mert nem sokkal utaacutena amuacutegy is meghiacutevjuk a RESET128 szubrutint amely tartalmazza azt mindjaacutert a normaacutel uumlzemmoacuted első laacutempafaacutezisaacutenaacutel A koacuted veacutegeacuten nem reacuteszletezzuumlk az adatokat mert toumlkeacuteletesen megegyeznek a Code23-ban megadottakkal A koacutedban sziacutenes jeloumlleacuteseket hasznaacutelunk hogy joacutel elkuumlloumlniacutethetők legyenek az egyes uumlzemmoacutedokhoz tartozoacute reacuteszek

Code25asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB1 vektoraORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetetovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehoznyom BIT 01h A gomb lenyomaacutesaacutet jelző bitszaml DATA 030h Az 18-ad maacutesodperces intervallumok szaacutemolaacutesaacutenak vaacuteltozoacutejatvar DATA 031h Az aktuaacutelisan szuumlkseacuteges vaacuterakozaacutes vaacuteltozoacuteja Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1CLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetSETB nyom A nyom jelzőbit 1-re aacutelliacutetaacutesaRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKMOV Aszaml Megneacutezzuumlk hogy szamllt2 Iacutegy 216 s-igCJNE A2relac nem lesz hataacutesa a gombnyomaacutesnakrelacJC sima Ha igen ugrunk a koumlvetkező vizsgaacutelathozSETB EX0 Uacutejra engedeacutelyezzuumlk a gomb megszakiacutetaacutesaacutetsimaCJNE Atvarnovel Ha szaml nem eacuterte meacuteg el tvar-t akkor noumlveljuumlk szaml eacuterteacutekeacutetSETB tovabb Kuumlloumlnben tovabb=1 eacutesRETI visszateacuteruumlnknovelINC szaml Noumlveljuumlk szaml eacuterteacutekeacutetRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 16-ot toumlltuumlnk INTVAL-ba mert 16128 s = 18 s lesz az alap-időosztaacutesunkORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutetSETB EX0 Engedeacutelyezzuumlk az 1 gomb megszakiacutetaacutesaacutetSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesnormal | | | CLR nyom A nyom jelzőbit toumlrleacuteseCALL RESET128 Reset-eljuumlk a 128-ad maacutesodpercek eacuterteacutekeacutetMOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-s portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumll

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV tvarA Betoumlltjuumlk tvar-ba a szuumlkseacuteges vaacuterakozaacutes időtartamaacutet Ennyiszer 18 s-et kell vaacuterakozniCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetMOV szaml1 Az 18 s-es időszeletek szaacutemlaacutelaacutesaacutenak vaacuteltozoacutejaacutet alaphelyzetbe aacutelliacutetjukbitek1 Figyeljuumlk a jelzőbiteketJB tovabbvalt Ha tovabb=1 vaacutelthat a laacutempaJB nyomsarga Ha nyom=1 gombot nyomtunk Joumln a koumlvetkező uumlzemmoacutedJMP bitek1 Figyeljuumlk tovaacutebb a jelzőbiteketvaltCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP normal Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozsarga | CLR nyom A nyom jelzőbit toumlrleacuteseCALL RESET128 Reset-eljuumlk a 128-ad maacutesodpercek eacuterteacutekeacutetMOV tvar4 A villogaacutes feacutel-perioacutedusideje 05 s leszMOV P011111111b Kikapcsoljuk az oumlsszes LED-etvillogXRL P000001000b Invertaacuteljuk a saacuterga LED aacutellapotaacutetCLR tovabb Jelzőbit toumlrleacuteseMOV szaml1 Szaacutemlaacuteloacute alapaacutellaacutesabitek2 Figyeljuumlk a jelzőbiteketJB tovabbvillog Ha tovabb=1 mehet a villogaacutes tovaacutebbJB nyomkikapcs Koumlvetkező uumlzemmoacutedJMP bitek2 Figyeljuumlk tovaacutebb a jelzőbiteketkikapcs CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etCLR tovabb Jelzőbit toumlrleacuteseMOV szaml1 Szaacutemlaacuteloacute alapaacutellaacutesaJNB nyom$ Helyben aacutellunk amiacuteg 0 a gomb jelzőbitjeJMP normal Kezdjuumlk előroumll a normaacutel uumlzemmoacuteddal Adatok lampa var

A Code25 programban a megszakiacutetaacutesokkal valoacute baacutenaacutesmoacuted maacuter egeacuteszen kifinomult megoldaacutest jelent Előfordulhat azonban hogy ezt a bdquokicentizettrdquo stiacutelust az olvasoacute kisseacute nyomasztoacutenak talaacutelja Semmi baj mutatunk egy elteacuterő megoldaacutest a [17 feladat]ra A [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek] aacutebraacuten laacutethatoacute aacutellapot-aacutetmenetgraacutef vaacuteltozatlanul eacuterveacutenyben marad A megoldaacutes kulcsa most abban rejlik hogy ismeacutet előhuacutezzuk a joacute oumlreg DELAY szubrutint de azt moacutedosiacutetjuk egy kicsit Most ugyanis ez fogja inteacutezni az adott laacutempafaacutezisok aacuteltal megkiacutevaacutent vaacuterakozaacutest de beleeacutepiacutetjuumlk a gombnyomaacutes jelzőbitjeacutenek figyeleacuteseacutet Joacute meacutelyre a legbelső ciklusba hogy mineacutel gyakrabban megtoumlrteacutenjen a bit vizsgaacutelata Az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutenak feladatkoumlre most leszűkuumll a prellegeacutes kikuumlszoumlboumlleacuteseacutere Eacuteppen uacutegy mint a [15 feladat] megoldaacutesaacuteban (laacutesd Code22) A gombnyomaacutes megszakiacutetaacutesa Code25-houmlz keacutepest egyetlen sorral bővuumll az intervallumszaacutemlaacuteloacute elindiacutetaacutesaacuteval

Az időhuacutezoacute szubrutint uacutegy terveztuumlk meg hogy pontosan azokkal a vaacuterakozaacutesi időkkel lehessen meghiacutevni mint amelyeket Code24 eacutes Code25 is tartalmaz Ez azt jelenti hogy ha a meghiacutevaacuteskor az akkumulaacutetor tartalma 8 akkor fogunk 1 maacutesodpercet vaacuterakozni Neacutezzuumlk a moacutedosiacutetott szubrutint

GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R5150cik5

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV R4249cik4JB nyomvisszaDJNZ R4cik4DJNZ R5cik5DJNZ R6cik6visszaRET Visszateacutereacutes a szubrutinboacutel

Eacutes most ismeacutet kiszaacutemiacutetjuk hogy mennyi időt vesz igeacutenybe a szubrutin futaacutesa Az akkumulaacutetor eacuterteacutekeacutet vegyuumlk 8-nak A sima DELAY szubrutinba eacutepiacutetett NOP utasiacutetaacutes 1 oacuterajelciklust vesz igeacutenybe a GDELAY szubrutinba aacutegyazott JB bitrel utasiacutetaacutes viszont 4-et Iacutegy a teljes rutin most oumlsszesen

oacuterajelciklust igeacutenyel A default 2 097 152 Hz oacuterajellel szaacutemolva ez 10002 s-et jelent

A mostani megoldaacutes lelke az hogy az időhuacutezoacute szubrutin ha maacuter maacutest uacutegysem csinaacutel mint időt huacutez kivaacuteloacutean alkalmas arra hogy amilyen sokszor csak lehet megvizsgaacutelja hogy 1-re billent-e a gombnyomaacutest jelző bit (nyom) Ha igen azonnal veacuteget is eacuter futaacutesa megszakad A főprogramban a szubrutin meghiacutevaacutesa utaacuten azonnal megvizsgaacuteljuk immaacuteron maacutesodszor hogy mi a jelzőbit eacuterteacuteke Ha 1 akkor idő előtt teacutert vissza a vezeacuterleacutes a szubrutinboacutel Eacutes ez azt jelenti hogy ugorhatunk a koumlvetkező uumlzemmoacutedhoz Az alaacutebbiakban koumlzoumllt programban az időhuacutezoacute szubrutint maacuter nem tuumlntetjuumlk foumll ismeacutetelten A megszakiacutetaacutesok vektorait sem mert azok vaacuteltozatlanul maradnak

Code26asmORG 0060h A teacutenyleges programkoacuted kezdetenyom BIT 01h A gomb lenyomaacutesaacutet jelző bit Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1CLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaSETB nyom A nyom jelzőbit 1-re aacutelliacutetaacutesaRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111101b Az intervallumszaacutemlaacuteloacute leaacutelliacutetaacutesa Az oacuteraacutet nem aacutelliacutetjuk leSETB EX0 Uacutejra engedeacutelyezzuumlk a gomb megszakiacutetaacutesaacutetRETI visszateacuteruumlnk FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL32 32-t toumlltuumlnk INTVAL-ba mert 32128 s = 14 s lesz a gombnyomaacutesok eacuterzeacutekeleacutesei koumlzoumltt eltelt időMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelMOV TIMECON00000001b Az oacutera elindiacutetaacutesaORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutetSETB EX0 Engedeacutelyezzuumlk az 1 gomb megszakiacutetaacutesaacutetSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesnormal | | | CLR nyom A nyom jelzőbit toumlrleacutese

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-s portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesaJB nyomsarga Ha nyom=1 gombot nyomtunk Joumln a koumlvetkező uumlzemmoacutedCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP normal Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozsarga | CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etvillogXRL P000001000b Invertaacuteljuk a saacuterga LED aacutellapotaacutetMOV A4 A 48 s vaacuterakozaacutes beaacutelliacutetaacutesaCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesaJB nyomkikapcs Ha gombot nyomtunk joumln a koumlvetkező uumlzemmoacutedJMP villog A villogaacutes folytataacutesakikapcs CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesa (Az akkumulaacutetor nem vaacuteltozott)JNB nyomkikapcs Ha a rsquonyomrsquo jelzőbit 0 akkor ugrunk vissza a kikapcsolt uumlzemmoacuted elejeacutereJMP normal Kuumlloumlnben vissza a bdquonormaacutelrdquo uumlzemmoacutedhoz Adatok lampa var

Code25-oumlt eacutes Code26-ot oumlsszehasonliacutetva laacutethatjuk hogy az utoacutebbi kicsivel roumlvidebb eacutes kevesebb vaacuteltozoacutet igeacutenyel Mindkettő tanulsaacutegos megoldaacutest kiacutenaacutel de egeacuteszen elteacuterő stiacutelusban Az olvasoacutet arra biztatjuk hogy mindkettőt elemezze ki eacutes eacutertse meg maradeacutektalanul minden reacuteszleteacuteben Koumlnnyen előfordulhat hogy sokkal erősebb szimpaacutetiaacutet fog eacuterezni az egyik iraacutent mint a maacutesik iraacutent Azonban feladata vaacutelogatja hogy mikor melyik stiacutelussal eacuteruumlnk ceacutelt koumlnnyebben vagy eacuteppen elegaacutensabban Eacutes termeacuteszetesen az is előfordulhat hogy az olvasoacute harmadik a fenti kettőtől gyoumlkeresen elteacuterő oumltletet valoacutesiacutet majd meg eacutes tartja azt a legjobbnakhellip

Created by XMLmind XSL-FO Converter

13 fejezet - Kuumllső aacuteramkoumlr fotokapuvalAz előző fejezetben kuumllső aacuteramkoumlrbe koumltoumltt LED-eket kapcsolgattunk a mikrovezeacuterlővel Leacutepjuumlnk most tovaacutebb most vezeacuterlőjeleket ne csak kiadjunk hanem fogadjunk is

18 feladat

Keacutesziacutetsuumlnk behatolaacutesjelzőt fotokapuval Nyugalmi aacutellapotban egy zoumlld LED vilaacutegiacutet Behatolaacuteskor piros-keacutek villogoacute jelez Gombnyomaacutesra visszateacuteruumlnk a nyugalmi aacutellapothoz [Code27]

A feladat megoldaacutesaacutehoz fotokaput kell keacutesziacutetenuumlnk Ezt sokszor infradioacutedaacuteval eacutes infraacuteban eacuterzeacutekeny fototranzisztorral valoacutesiacutetjaacutek meg Tegyuumlk ezt mi is A kapcsolaacutesi rajzot a [A (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatjuk Fototranzisztorokről bővebben olvashatunk a [2] [3] [4] [5] eacutes [6] szakkoumlnyvekben

131 aacutebra - A [18 feladat] (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

A LED-ek műkoumldeacutese nem igeacutenyel bővebb magyaraacutezatot Az aacuteramkoumlri rajz alsoacute reacuteszeacuten laacutethatoacute dioacuteda az infravoumlroumls tartomaacutenyban sugaacuteroz a vele szemben elhelyezett fototranzisztor pedig ugyanebben a sziacutenkeacuteptartomaacutenyban eacuterzeacutekeny a laacutethatoacute tartomaacutenyban nem Ha az infradioacuteda sugaacuterzaacutest bocsaacutet ki akkor a fototranzisztor kinyit minek hataacutesaacutera a P21-es laacuteb foumlldpotenciaacutelra keruumll (Uacutegy is fogalmazhatunk hogy a fototranzisztor a P21-es laacutebat foumlldre huacutezza) Amennyiben a keacutet aacuteramkoumlri elem koumlzeacute olyan objektum keruumll amely elzaacuterja a dioacuteda aacuteltal kibocsaacutetott infravoumlroumls sugaacuterzaacutes uacutetjaacutet a tranzisztor lezaacuter eacutes iacutegy a P21-es laacuteb +5 V potenciaacutelon uumll Ez a keacutet aacutellapot pontosan megfelel a P21-es laacutebhoz tartozoacute bit alacsony ill magas aacutellapotaacutenak Iacutegy ha a programban ezt figyeljuumlk folyamatosan akkor detektaacutelhatjuk a bdquobehatolaacutestrdquo Ez azt jelenti hogy most nem adatot iacuterunk a P2-es portra hanem annak tartalmaacutet olvassuk peacuteldaacuteul

MOV AP2

Az infradioacuteda hasznaacutelataacutehoz egy kis truumlkkoumlt szeretneacutenk ismertetni Az infravoumlroumls sugaacuterzaacutes az emberi szem szaacutemaacutera laacutethatatlan Meacutegis koumlnnyen meg tudunk arroacutel győződni hogy műkoumldik-e az infradioacuteda bdquoNeacutezzuumlnk raacuterdquo digitaacutelis feacutenykeacutepezőgeacuteppel vagy mobiltelefon kameraacutejaacuteval eacutes maacuteris kideruumll be van-e kapcsolva ([Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel] aacutebra) Ez azeacutert van iacutegy mert a legtoumlbb digitaacutelis

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlr fotokapuval

keacuteproumlgziacutető eszkoumlz sziacutenkeacutepi eacuterzeacutekenyseacutege a koumlzeli infravoumlroumls tartomaacutenyban sem nulla iacutegy a tisztaacuten ilyen sugaacuterzaacutes hataacutesaacutera is kellően nagy jel keletkezik ahhoz hogy azt a kamera ndash igaz teljesen hamisan ndash laacutethatoacute informaacutecioacutenak tekintse

132 aacutebra - Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel

Az aacuteramkoumlrben alkalmazott BPV11F tiacutepusuacute fototranzisztornak a legtoumlbb fototranzisztorral ellenteacutetben nem kettő hanem haacuterom laacuteba van Ez termeacuteszetesen semmi egyebet nem jelent mint azt hogy a baacutezis is ki van vezetve iacutegy alkalmasint a munkapont-beaacutelliacutetaacutesroacutel is gondoskodhatunk Erre nekuumlnk most nem lesz szuumlkseacuteguumlnk eacutes tulajdonkeacuteppen be kell vallanunk hogy azeacutert esett a vaacutelasztaacutes erre a tiacutepusra mert ezt a hallgatoacutek nem keverik oumlssze keacutetlaacutebuacute dioacutedaacutekkalhellip A tranzisztor műkoumldeacuteseacuteről szinteacuten koumlnnyen meggyőződhetuumlnk a [A (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute aacuteramkoumlrnek az ADuC-panelre toumlrteacutenő raacutecsatlakoztataacutesa utaacuten Ha a tranzisztor kinyit akkor a leiacutertak szerint a P21 laacuteb foumlldpotenciaacutelra keruumll iacutegy az ennek megfelelő LED-nek vilaacutegiacutetania kell a LED-soron ([Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel] aacutebra)

133 aacutebra - A fototranzisztor foumlldre huacutezza a P21-es laacutebat iacutegy az arra koumltoumltt LED vilaacutegiacutet

Az olvasoacuteban mindezek utaacuten jogosan meruumll foumll a keacuterdeacutes hogy mi toumlrteacutenik akkor ha kiacutevuumllről raacutekeacutenyszeriacutetuumlnk valamilyen jelszintet a 2-es portra (input portkeacutent hasznaacuteljuk) de szoftveresen maacutes jelszintet iacuterunk ki raacute (outputkeacutent hasznaacuteljuk) A megnyugtatoacute vaacutelasz az hogy a mikrovezeacuterlőt nem fogjuk toumlnkretenni a 2-es port hardveres kialakiacutetaacutesa olyan hogy ilyenkor a kuumllső jel az erősebb eacutes annak eredmeacutenye olvashatoacute le szoftveresen baacutermit is iacutertunk ki raacute előzőleg A 2-es port keacutetiraacutenyuacute port belső felhuacutezoacute-ellenaacutellaacutesokkal [1 p 57-58] Keacutetiraacutenyuacute mivoltaacutet nagyon joacutel peacuteldaacutezza a mostani feladat hiszen 3 laacutebaacutet kimeneti laacutebkeacutent (a 3 LED-hez) egyik laacutebaacutet bemeneti laacutebkeacutent (a fototranzisztorhoz) hasznaacuteljuk

A [18 feladat] megoldaacutesaacutet jelentő program műkoumldeacutese egyszerűbb lesz mint azt elsőre hinneacutenk Előszoumlr bekapcsoljuk a zoumlld LED-et majd folyamatosan figyeljuumlk hogy mi a P21 laacutebhoz tartozoacute bit eacuterteacuteke Ha ez 1 lesz valamikor akkor riasztaacutes toumlrteacutenik azaz felvaacuteltva villogtatni kezdjuumlk a piros eacutes keacutek LED-et A LED-ek bekapcsolt eacutes kikapcsolt aacutellapotaacutet a villogtataacuteskor egyszerű időhuacutezoacute szubrutinnal oldjuk meg Ez ugyanolyan szerkezetű lesz mint a GDELAY az előző fejezetben de most aacutetrendezzuumlk az egymaacutesba aacutegyazott ciklusok veacutegrehajtaacutesi szaacutemaacutet hogy ismeacutet akkor vaacuterjon pontosan 1 maacutesodpercet a szubrutin ha azt A=100 eacuterteacutekkel hiacutevjuk meg mint ahogy a joacute oumlreg DELAY rutinunkat szoktuk A rutin veacutegrehajtaacutesaacutehoz szuumlkseacuteges oacuterajelek darabszaacutemaacutenak kiszaacutemiacutetaacutesaacutet (a vaacuterakozaacutesi idő ellenőrzeacuteseacutet) most maacuter az olvasoacutera biacutezzuk A moacutedosiacutetott GDELAY szubrutin koumlzvetlenuumll figyeli az 1 gomb bitjeacutet mert most nem alkalmazunk megszakiacutetaacutesokat Amennyiben vaacuterakozaacutes koumlzben baacutermikor gombnyomaacutest eacuteszlel a program azonnal visszateacuter a szubrutinboacutel amit a program legelejeacutere toumlrteacutenő visszaugraacutes koumlvet Eacutes kezdődik előroumll minden Jelen esetben a prellegeacutessel sem kell foglalkoznunk hiszen a gombnyomaacutesnak nem leacutepteteacutes a szerepe hanem pusztaacuten a vezeacuterleacutes visszaugrataacutesa a program legelejeacutere amineacutel eacuteszrevehetetlen marad ha ez egymaacutes utaacuten toumlbbszoumlr koumlvetkezik be

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlr fotokapuval

Code27asmORG 0060h A teacutenyleges programkoacuted kezdetebut1 BIT P32 Az 1 gomb bitjeacutenek elnevezeacuteseled1 BIT P23 A voumlroumls LED bitjeacutenek elnevezeacuteseled2 BIT P25 A keacutek LED bitjeacutenek elnevezeacuteseled3 BIT P27 A zoumlld LED bitjeacutenek elnevezeacutesetranzi BIT P21 A fototranzisztor bitjeacutenek elnevezeacutesenyom BIT 00h A gombnyomaacutes jelzőbitjeMAINCLR nyom A nyom jelzőbit toumlrleacuteseSETB led1 A voumlroumls LED kikapcsolaacutesaSETB led2 A keacutek LED kikapcsolaacutesaCLR led3 A zoumlld LED bekapcsolaacutesaMOV A6 A villogoacute frekvenciaacuteja (006 s)figyelMOV Ctranzi Pollozzuk a fototranzisztor jeleacutet Előszoumlr is a C-be toumlltjuumlkJNC figyel Ha nem szakiacutetja meg semmi a fotokapu infra sugaacuterzaacutesaacutet akkor a fototranzisztor a 21-es portbitet lehuacutezza foumlldre azaz 0 az eacuterteacuteke Ilyenkor pedig folytatjuk a figyeleacutest (pollozaacutest)SETB led3 Kikapcsoljuk a zoumlld LED-et mert bement valami a fotokapuba azaz joumln a riasztaacutesvillogMOV R74 Neacutegyszer villantjuk foumll a voumlroumls LED-etegyikCLR led1 Bekapcsoljuk a LED-etCALL GDELAY Vaacuterunk kicsit (006 s)JB nyomMAIN Ha volt gombnyomaacutes akkor kezdjuumlk előroumll a programotSETB led1 Kikapcsoljuk a LED-etCALL GDELAY Vaacuterunk kicsit (006 s)JB nyomMAIN Ha volt gombnyomaacutes akkor kezdjuumlk előroumll a programotDJNZ R7egyik Lekezeljuumlk az R7-es ciklusvaacuteltozoacutetMOV R74 Neacutegyszer villantjuk foumll a keacutek LED-etmasik A leiacuteraacutes toumlkeacuteletesen ugyanaz mint az előbb CLR led2 a voumlroumls LED-neacutel Csak most a keacuteketCALL GDELAY villogtatjukJB nyomMAINSETB led2CALL GDELAYJB nyomMAINDJNZ R7masikJMP villog Folytatoacutedik a villogtataacutes Időhuacutezoacute szubrutin amely az 1 gomb lenyomaacutesaacutet is figyeli GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R543cik5MOV R469cik4JNB but1armed Itt vizsgaacuteljuk meg a gomb bitjeacutet Elugrunk ha le van nyomva azaz 0DJNZ R4cik4DJNZ R5cik5DJNZ R6cik6RETarmed Ide ugrunk ha gombnyomaacutes voltSETB nyom Magasra aacutelliacutetjuk a jelzőbitetRET

Created by XMLmind XSL-FO Converter

14 fejezet - Heacutetszegmenses kijelző meghajtaacutesaAz előző keacutet fejezetben megtanultuk hogy hogyan adhatunk ill fogadhatunk egyszerű jeleket aacuteramkoumlroumlknek ill aacuteramkoumlroumlkről Ebben a fejezetben munkaacutera fogjuk az egyik legegyszerűbb de mind a mai napig igen sokszor neacutelkuumlloumlzhetetlen megjeleniacutetőeszkoumlzt a heacutetszegmenses kijelzőt Heacutetszegmenses kijelzőből toumlbb szaacutez gyaacutertoacute toumlbb ezer feacuteleacutet keacutesziacutet A kijelzők elteacuternek meacuteretben aacuteramfelveacutetelben laacutebelrendezeacutesben sziacutenben stb A heacutetszegmenses kijelzőkneacutel azonban van valami ami mindegyikuumlkneacutel megegyezik a szegmensek jeloumlleacutese (laacutesd [A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese] aacutebra) A DP szimboacutelum a Decimal Point angol kifejezeacutesből szaacutermazik eacutes tizedespontot jelent (Maacutes szoumlvegkoumlrnyezetben a DP egeacuteszen maacutest jelenthet de ennek taacutergyalaacutesa nem a mi feladatunkhellip)

A tankoumlnyvben eddig ha LED-eket kellett bekapcsolnunk mindig foumlldre huacuteztuk azokat iacutegy olyan heacutetszegmenses kijelzőt ceacutelszerű vaacutelasztanunk amely koumlzoumls anoacutedos Ettől eltekintve gyakorlatilag nincs megkoumlteacutes a tiacutepusra A tankoumlnyvben konkreacutetan az SA52-11 tiacutepusuacute heacutetszegmenses kijelzőt hasznaacuteljuk melynek laacutebkiosztaacutesa a [Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa] aacutebraacuten laacutethatoacute

141 aacutebra - A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese

142 aacutebra - Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa

A heacutetszegmenses kijelző meghajtaacutesa toumlrteacutenhet uacutegy hogy egy teljes portot foumllaacuteldozva koumlzvetlenuumll kapcsolgatjuk az egyes szegmenseket mint LED-eket Ez azt jelenti hogy uacutegy jaacuterunk el mintha a [Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa] aacutebraacuten laacutethatoacute laacutebkiosztaacutest egy-egy ellenaacutellaacutessal kibőviacuteteneacutenk eacutes azokat szeacutepen sorban raacutekapcsolnaacutenk a 0 vagy a 2 port laacutebaira Neacutemileg keacutenyelmesebb megoldaacutest jelent az ha alkalmazunk egy BCD-heacutetszegmenses dekoacutedert A koumlvetkezőkben bemutatott joacute neacutehaacuteny feladat megoldaacutesaacutenaacutel konkreacutetan az SN74LS47N tiacutepusuacute dekoacutedert hasznaacuteljuk A dekoacuteder-IC feleacutepiacuteteacuteseacutenek eacutes műkoumldeacuteseacutenek bemutataacutesa nem a tankoumlnyv feladata az adatlapot az olvasoacute kuumlloumln koumlnyvtaacuterban talaacutelja Annyit azeacutert elmondhatunk hogy a 7447-es dekoacuteder felhasznaacutelaacutesaacuteval csak 4 portbitet koumlt le a kijelző ciacutemzeacutese A szaacutemjegyeknek megfelelő binaacuteris eacuterteacutek előaacutelliacutetaacutesa eacutes kirakaacutesa a portra azutaacuten maacuter a mi feladatunk Illik meacuteg azt is megjegyeznuumlnk hogy a decimaacutelis ponttal a dekoacuteder-IC nem tud mit kezdeni Ha ezt hasznaacutelni szeretneacutenk akkor annak műkoumldteteacuteseacutehez kuumlloumln ellenaacutellaacutes eacutes szabad portbit szuumlkseacuteges A [Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel] aacutebraacuten laacutethatoacute aacuteramkoumlr a mikrovezeacuterlős kalandjaink soraacuten egy darabig elkiacuteseacuter bennuumlnket A megeacutepiacutetett aacuteramkoumlrben az egyes szegmensekhez tartozoacute ellenaacutellaacutesok eacuterteacutekeacutenek 390 Ω-ot vaacutelasztottunk heacutetszegmenses kijelzőnek pedig egy SA52-11GWA tiacutepusuacutet azaz zoumlldet

143 aacutebra - Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

Az olvasoacutenak felteacutetelezhetően maacuter viszketnek az ujjbegyei hogy megiacuterja első programjaacutet amellyel a heacutetszegmenses kijelzőt uumlzemeltetheti Fogalmazzuk meg haacutet koumlvetkező feladatunkat a [Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel] aacutebraacuten laacutethatoacute aacuteramkoumlrhoumlz

19 feladat

Leacuteptessuumlk a szaacutemokat a heacutetszegmenses kijelzőn 0-toacutel 9-ig 9 utaacuten ismeacutet 0-roacutel induljon a szaacutemlaacutelaacutes [Code28]

Enneacutel az egyszerű kis feladatnaacutel az aacuteramkoumlr oumlsszerakaacutesa tovaacutebb tart mint megiacuterni a programot annyira egyszerű lesz Folyamataacutebra vagy egyeacuteb szemleacutelteteacutes teljesen felesleges hozzaacute De meacuteg joacuteformaacuten bővebb magyaraacutezat is Egyszerűen leacutetrehozunk egy ciklust amely 0-toacutel 9-ig szaacutemol majd visszaugrunk a program elejeacutere A ciklus minden veacutegrehajtaacutesa soraacuten kitesszuumlk a P2-es portra a ciklusvaacuteltozoacute eacuterteacutekeacutet A programban a joacute oumlreg DELAY szubrutinunkat hasznaacuteljuk időhuacutezaacutesra Iacuteme az bdquoijesztően hosszuacuterdquo koacuted

Code28asmMAINMOV R40 R4 a ciklusvaacuteltozoacute 0 a kezdeti eacuterteacutekcountMOV P2R4 Kitesszuumlk a P2-es portra a ciklusvaacuteltozoacutetMOV A40 04 s időhuacutezaacutes leszCALL DELAY IdőhuacutezaacutesINC R4 A ciklusvaacuteltozoacute noumlveleacuteseCJNE R410count A ciklusvaacuteltozoacute felteacuteteleacutenek kieacuterteacutekeleacuteseJMP MAIN Kezdjuumlk előről az egeacuteszet

Oldjunk most meg veacutegre egy olyan feladatot is amely nem oumlnmagaacuteeacutert valoacute hanem akaacuter eacutertelmes alkalmazaacutesi koumlre is lehet Vonjuk be a nyomoacutegombokat is Meg meacuteg egy kuumllső LED-et is

20 feladat

Az egyik gombbal leacuteptessuumlk a szaacutemokat a heacutetszegmenses kijelzőn 1-toacutel 9-ig (9 utaacuten 1-ről induljon ismeacutet a szaacutemlaacutelaacutes) A maacutesik gomb megnyomaacutesaacutera egy kuumllső LED annyiszor villanjon foumll amennyit a kijelző mutat [Code29]

A kuumllső LED-hez maacuter nem rajzolunk kuumlloumln aacuteramkoumlrt Koumlssuumlk azt megfelelő ellenaacutellaacuteson keresztuumll a P27-es laacutebra Ez az olvasoacutenak a tankoumlnyvből megtanultak alapjaacuten veacutelhetően maacuter nem jelenthet probleacutemaacutethellip

Taacuteroljuk a kijelezendő eacuterteacuteket R3-ban a kuumllső LED villogtataacutesaacutenak ciklusvaacuteltozoacuteja pedig legyen R2 Az időhuacutezaacutesokhoz hasznaacuteljuk ismeacutet a joacute oumlreg DELAY szubrutint Mivel a programban roumlvidseacutege elleneacutere talaacuten meacutegis szokatlan megoldaacutesokat alkalmazunk folyamataacutebraacutet keacutesziacutetuumlnk amely a [A (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute A szokatlan megoldaacutes a kezdeti eacuterteacutek olyan megadaacutesa ami elő sem fordulhat hiszen R3 első legaacutelis eacuterteacuteke 1 A program kezdeteacuten R3-t meacutegis 0-nak vesszuumlk viszont utaacutena azonnal noumlveljuumlk is 1-gyel Ugyanez a megoldaacutes szerepel akkor is amikor megvizsgaacuteljuk hogy eleacuterte-e a 9-et A megoldaacutes eleganciaacuteja az hogy a kezdeti eacuterteacutek eacutes az alaphelyzet elrendezeacutese mindoumlsszesen egy sort igeacutenyel utaacutena mindjaacutert beugratjuk a vezeacuterleacutest az algoritmus bdquosziacuteveacuteberdquo hiszen onnantoacutel kezdve toumlkeacuteletesen rendben tud eacutes fog műkoumldni minden

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

144 aacutebra - A [20 feladat] (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja

A koacuted az elmondottak elleneacutere meglehetősen roumlvid A DELAY szubrutint most sem tuumlntetjuumlk foumll

Code29asmbut1 BIT P32 Az 1 gomb bitvaacuteltozoacutejabut2 BIT P33 A 2 gomb bitvaacuteltozoacutejaled BIT P27 A kuumllső LED bitvaacuteltozoacutejaMAINMOV R30 0-t teszuumlnk R3-ba mert utaacutena azonnal noumlveljuumlk majd 1-gyelJMP sima Ugrunk a noumlveleacuteshezgombokJNB but1lep Az 1 gombra leacuteptetjuumlk a kijelzett szaacutemeacuterteacuteketJNB but2villog A 2 gombra villogtatunkJMP gombok Tovaacutebb figyeljuumlk a gombokatlepCJNE R39sima Ha meacuteg nem eacutertuumlk el a 9-et nincs bajMOV R30 Ha eleacutertuumlk nullaacutezzuk R3-t hiszen azonnal noumlveljuumlk azt Iacutegy lesz 1 az aacutetfordulaacutes utaacuteni eacuterteacuteksimaINC R3 A kijelezendő eacuterteacutek noumlveleacuteseMOV AR3 R3-t A-ba tesszuumlk

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

ORL A11110000b A felső 4 bitet 1-re aacutelliacutetjuk hogy ne vilaacutegiacutetson minden LEDMOV P2A Kitesszuumlk a kapott eacuterteacuteket P2-reMOV A20 02 s vaacuterakozaacutes leszCALL DELAY Időhuacutezoacute szubrutinJMP gombok Ugrunk vissza a gombok figyeleacuteseacutehezvillogMOV AR3 R3 eacuterteacutekeacutet A-ne keresztuumll R2-be tesszuumlkMOV R2A Ez lesz a villogtataacutes ciklusvaacuteltozoacutejaMOV A30 03 s vaacuterakozaacutes lesz a villogtataacutesnaacutelvillCLR led Kuumllső LED bekapcsolaacutesaCALL DELAY Időhuacutezoacute szubrutinSETB led Kuumllső LED kikapcsolaacutesaCALL DELAY Időhuacutezoacute szubrutin DJNZ R2vill Az R2 ciklusvaacuteltozoacute lekezeleacuteseJMP gombok Ugraacutes vissza a gombok figyeleacuteseacutehez

Created by XMLmind XSL-FO Converter

15 fejezet - Kommunikaacutecioacute az UART-talA mai ember ha szaacutemiacutetoacutegeacutepes csatlakozaacutesi lehetőseacutegekre gondol eacutes az nem az Internet akkor az USB jut eszeacutebe Reacutegebben a PC-k csatlakozaacutesi lehetőseacutegeineacutel a soros portot eacutes a paacuterhuzamos portot szoktaacutek bemutatni Eacuterdekes moacutedon a paacuterhuzamos port mint csatlakozaacutesi feluumllet szerepe elsikkadt a soros port viszont tovaacutebbfejlődoumltt eacutes ebből lett az amit ma USB-nek hiacutevunk A betűszoacute az angol Universal Serial Bus kifejezeacutesből szaacutermazik eacutes univerzaacutelis soros buszt jelent Ma maacuter kisseacute lesajnaacuteljuk azokat a szaacutemiacutetoacutegeacutepeket amelyeken nincs legalaacutebb neacutegy USB-csatlakozoacute A mai kor (2013-at iacuterunk eacuteppen) perifeacuteriaacuteit eacutes egyeacuteb kuumltyuumlit a legtoumlbbszoumlr USB-porton keresztuumll csatlakoztathatjuk a szaacutemiacutetoacutegeacutepuumlnkhoumlz Kuumllső lemezegyseacutegeket kaacutertyaolvasoacutekat nyomtatoacutekat pen-drive-okat stb

Az USB fogalom valoacutejaacuteban egy ipari szabvaacutenyt jelent amely a buszhoz hasznaacutelt vezeteacutekeket csatlakozoacutekat protokollokat definiaacutelja szaacutemiacutetoacutegeacutepek eacutes elektronikus eszkoumlzoumlk kommunikaacutecioacutejaacutehoz csatlakoztataacutesaacutehoz eacutes taacutepellaacutetaacutesaacutehoz Ha szeacutetvaacutegunk egy USB-kaacutebelt akkor a [USB-kaacutebel belső vezeteacutekei] aacutebraacuten laacutethatoacute keacutep taacuterul szemuumlnk eleacute Az USB-kaacutebel tehaacutet neacutegy belső szigetelt vezeteacuteket eacutes aacuteltalaacuteban egy finom sodrott eacuterkoumlteget tartalmaz Ez utoacutebbinak kizaacuteroacutelag aacuternyeacutekolaacutesi ill mechanikai szerepe van A sziacutenes szigeteleacutesű vezeteacutekek funkcioacutejaacutet a [Az USB-kaacutebel vezeteacutekeinek funkcioacuteja] foglalja oumlssze

151 aacutebra - USB-kaacutebel belső vezeteacutekei

151 taacuteblaacutezat - Az USB-kaacutebel vezeteacutekeinek funkcioacuteja

piros VCC +5 V taacutep

feheacuter data ndash adat

ndash

zoumlld data + adat

+

fekete GND foumlld

Az UART betűszoacute aacuteltal takart fogalom szorosan kapcsoloacutedik az USB fogalmaacutehoz de vigyaacutezzunk mert nem ugyanazt jelenti Az UART betűszoacute az angol Universal Asynchonous ReceiverTransmitter kifejezeacutesből szaacutermazik ami univerzaacutelis aszinkron adoacutevevőt jelent Ez egyfajta hardverelem amely aacutetalakiacutetaacutest veacutegez soros eacutes paacuterhuzamos adatformaacutetumok koumlzoumltt Tehaacutet paacuterhuzamosan kezelt adatokat (mondjuk egy baacutejt bitjeit) elkuumlldhetuumlnk valamely eszkoumlzről egy UART hardverelem koumlzbeiktataacutesaacuteval az USB-n amit egy maacutesik eszkoumlz fog a sajaacutet UART-jaacuteval visszaalakiacutetani Iacutegy korrekt a fogalmazaacutes Vagyis egy baacutejtot az UART szeacutetszerel bitekre azokat elkuumlldoumlzgeti a soros buszon a kuumlldoumltt bitekből pedig a maacutesik eszkoumlz UART-ja szereli uacutejra oumlssze az elkuumlldoumltt baacutejtot Szerencseacutere az ADuC 842-es architektuacuteraacutejaacuteban a baacutejtok szeacutetszereleacuteseacutevel eacutes oumlsszerakaacutesaacuteval nekuumlnk egyaacuteltalaacuten nem kell foglalkoznunk ezt megteszi helyettuumlnk a mikrovezeacuterlő UART-ja Mi csak a baacutejtszintű kommunikaacutecioacutet fogjuk eacuterzeacutekelni csak azzal kell toumlrődnuumlnk Ha nekuumlnk kellene bitenkeacutent kuumlldoumlzgetnuumlnk az adatokat akkor igen csak megizzadnaacutenk mire oumlsszehoznaacutenk egy valamirevaloacute kommunikaacutecioacutethellip

1 Az UART soros interfeacuteszAz ADuC soros portja full duplex elven műkoumldik azaz egyidejűleg keacutepes adatokat kuumlldeni eacutes fogadni A fogadaacutesi csatorna pufferelt ami azt jelenti hogy egy baacutejt megeacuterkezeacutese utaacuten elkezdődhet a maacutesodik baacutejt fogadaacutesa meacuteg akkor is ha az elsőt meacuteg nem olvastuk ki a fogadaacutes regisztereacuteből Viszont ha ilyenkor a maacutesodik baacutejt teljes egeacuteszeacuteben megeacuterkezik akkor az elsőt elvesziacutetjuumlk Fizikailag a fogadaacuteseacutert a P30 (RxD) laacuteb a

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

kuumlldeacuteseacutert a P31 (TxD) laacuteb felelős A szoftveres alkalmazaacutesoknaacutel az SBUF eacutes SCON nevű SFR jaacutetszik rendkiacutevuumll fontos szerepet

A fogadaacutes eacutes a kuumlldeacutes regisztereit az SBUF SFR-en keresztuumll eacuterjuumlk el Az SBUF iacuteraacutesakor a kuumlldeacutes regisztereacutebe keruumll az adat az SBUF olvasaacutesakor a fogadaacutes regisztereacuteben leacutevő adatot eacuterjuumlk el Tudnunk kell hogy itt fizikailag keacutet kuumlloumlnaacutelloacute regiszterről van szoacute meacutegis mindkettőhoumlz az SBUF regisztert kell hasznaacutelnunk

Az SCON nevű SFR a soros porti kommunikaacutecioacute konfiguraacutelaacutesaacuteeacutert felel Ismerteteacuteseacutet a [Az SCON SFR parameacuteterei] tartalmazza Meg kell azonban jegyeznuumlnk hogy toumlbb bitet eacuteppen csak megnevezuumlnk vagy igen roumlviden jellemzuumlnk mert a tankoumlnyv alkalmazaacutesainaacutel messze nem hasznaacuteljuk mindegyiket A leiacuteraacutes a gyaacuteri ismertetőben teljes reacuteszletesseacuteggel megtalaacutelhatoacute [1]

152 taacuteblaacutezat - Az SCON SFR parameacuteterei

SCON Serial Port Control Register

A soros port vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek

00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg

igen

Bit Szimboacute-lum Angol neacutev Magyar neacutev Jelenteacutes

7 SM0 Serial Mode Select Bits Kommunikaacutecioacutes moacutedot kivaacutelasztoacute bitek

Laacutesd [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese]

6 SM1

5 SM2 Multiprocessor Communication Enable Bit

Toumlbbprocesszoros kommunikaacutecioacutet engedeacutelyező bit

Nem taacutergyaljuk

4 REN Receive Enable Bit Fogadaacutest engedeacutelyező bit

A soros port fogadaacutest engedeacutelyező (1) eacutes letiltoacute (0) bitje

3 TB8 Transmit Bit 8 (9 bit) Adaacutesi bit 8 (9 bit)

2 eacutes 3 moacutedban a 9 elkuumlldoumltt bit (Darabra Ha 0-toacutel sorszaacutemozzuk akkor a nyolcadik)

2 RB8 Receive Bit 8 (9 bit) Fogadaacutesi bit 8 (9 bit)

2 eacutes 3 moacutedban a 9 fogadott bit (Darabra Ha 0-

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

toacutel sorszaacutemozzuk akkor a nyolcadik) 1 moacutedban a stopbit keruumll ide

1 TI Transmit Interrupt Flag Adaacutesi megszakiacutetaacutest jelző bit

Kuumlldeacuteskor a 0 moacutedban a 8 bit (1-től kezdett sorszaacutemozaacutessal) veacutegeacuteneacutel hardveresen 1-re aacutell A toumlbbi moacutedban a stopbit elejeacuten aacutell 1-re Szoftveresen kell toumlroumllni

0 RI Receive Interrupt Flag Fogadaacutesi megszakiacutetaacutest jelző bit

Fogadaacuteskor a 0 moacutedban a 8 bit (1-től kezdett sorszaacutemozaacutessal) veacutegeacuteneacutel hardveresen 1-re aacutell A toumlbbi moacutedban a stopbit feleacuteneacutel aacutell 1-re Szoftveresen kell toumlroumllni

153 taacuteblaacutezat - Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese

SM0 SM1 Kivaacutelasztott moacuted

0 0 0 moacuted Leacuteptetőregiszter roumlgziacutetett baud-raacuteta (Core_Clk2)

0 1 1 moacuted 8-bites UART vaacuteltoztathatoacute baud-raacuteta

1 0 2 moacuted 9-bites UART roumlgziacutetett baud-raacuteta (Core_Clk32) vagy (Core_Clk16)

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

1 1 3 moacuted 9-bites UART vaacuteltoztathatoacute baud-raacuteta

A [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese] foglalja oumlssze a soros porti kommunikaacutecioacute moacutedjait Laacutethatoacute hogy az ADuC 842-es mikrovezeacuterlőt nagyjaacuteboacutel mindenre felkeacutesziacutetetteacutek ez uumlgyben A tankoumlnyvben kizaacuteroacutelag az 1 moacutedot fogjuk hasznaacutelni mert ez a legegyszerűbb eacutes legrugalmasabb hiszen nem kell jaacuteruleacutekos ellenőrzőbittel vacakolnunk viszont vaacuteltoztathatoacute a kommunikaacutecioacute sebesseacutege A szaacutemiacutetaacutestechnikaacuteban a kommunikaacutecioacute sebesseacutegeacutet bits-ban meacuterjuumlk Eacutemile Baudot feltalaacuteloacute tiszteleteacutere a bits meacuterteacutekegyseacuteget baudnak is nevezik jele Bd Magaacutet a kommunikaacutecioacutes sebesseacuteget szokaacutes baud-raacutetaacutenak is hiacutevni

Az ADuC 842-es mikrovezeacuterlő tulajdonsaacutegainak felsorlaacutesakor maacuter emliacutetettuumlk hogy az architektuacutera toumlbb időziacutetőtszaacutemlaacuteloacutet is tartalmaz Az a helyzet hogy egeacuteszen pontosan neacutegyet A sorszaacutemozaacutesuk persze a szaacutemiacutetaacutestechnikaacuteban megszokottak szerint 0 1 2 eacutes 3 A soros porti kommunikaacutecioacute jeleinek uumltemezeacuteseacutehez az 1 eacutes a 2 időziacutetőtszaacutemlaacuteloacutet is hasznaacutelhatjuk de a harmadikat kifejezetten erre a ceacutelra hoztaacutek leacutetre iacutegy a tankoumlnyvben mi mindig ezt fogjuk hasznaacutelni (A maacutesik haacuterom időziacutetőszaacutemlaacuteloacute joacute lesz meacuteg nekuumlnk maacutes ceacutelokrahellip) A 3 időziacutetőszaacutemlaacuteloacute konfiguraacutecioacuteja keacutet SFR-rel toumlrteacutenik T3CON eacutes T3FD Előszoumlr neacutezzuumlk meg mire valoacute a T3CON regiszter ([Az T3CON SFR parameacuteterei])

154 taacuteblaacutezat - Az T3CON SFR parameacuteterei

T3CON Timer 3 Control Register

A 3 időziacutetőszaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 T3BAUDEN Ha 1 akkor a baud-raacutetaacutet a 3 szaacutemlaacuteloacute generaacutelja A 0 eseteacutet nem taacutergyaljuk

6 - Foglalt

5 - Foglalt

4 - Foglalt

3 - Foglalt

2 DIV2 A binaacuteris osztoacute bitjei

DIV2 DIV1

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

DIV0

0 0 0

0 0 1

1 1 1

1 DIV1

0 DIV0

Az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban talaacutelhatoacute egy aacutebra amely azt mutatja hogy hogyan aacutell elő az oacuterajelből a soros porti kommunikaacutecioacute baud-raacutetaacuteja [1 p 68 Figure 74] Ezt az aacutebraacutet vaacuteltozatlan formaacuteban vesszuumlk aacutet (laacutesd [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebra)

152 aacutebra - A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten

A baud-raacuteta előaacutelliacutetaacutesaacutehoz tehaacutet az aktuaacutelis oacuterajel leosztaacutesa toumlbb leacutepcsőben toumlrteacutenik A gyaacuteri leiacuteraacutesban az eredeti aacutebra [1 p 68 Figure 74] utaacuten szereplő keacutepletek viszont azt sugalljaacutek hogy a legelső kettővel valoacute osztaacutest jelelő blokk veacutelhetően foumlloumlsleges Ennek igazolaacutesaacutera mi is levezetjuumlk a regiszterek eacuterteacutekeacutenek beaacutelliacutetaacutesaacutehoz szuumlkseacuteges keacutepleteket amelyek viszont egytől egyig meg fognak egyezni a gyaacuteri leiacuteraacutesban szereplőkkel A matematikaacuteban ugyan nem bdquoszabaacutelyosrdquo szimboacutelumvaacutelasztaacutesnak leszuumlnk tanuacutei de a mi levezeteacuteseinkben is oumlnaacutelloacute vaacuteltozoacutenak tekintjuumlk most a T3FD eacutes a DIV szimboacutelumokat Jeloumlljuumlk tovaacutebbaacute B-vel a kiacutevaacutent baud-raacutetaacutet

A [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebraacuten laacutethatoacute osztaacutesi leacutepcsők alapjaacuten (a legelsőt mellőzve) a koumlvetkező oumlsszefuumlggeacutest iacuterhatjuk fel

Ez a kifejezeacutes a koumlvetkező moacutedon alakiacutethatoacute tovaacutebb

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Ez a keacuteplet pedig pontosan ugyanaz mint a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 3 keacuteplete eltekintve az angolszaacutesz jeloumlleacutesmoacutedtoacutel A keacuteplet aacutetrendezeacuteseacutevel a koumlvetkezőket kapjuk

Ez az oumlsszefuumlggeacutes pedig azzal egyezik meg amelyik a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 2 keacuteplete

Most megmagyaraacutezzuk hogy egyaacuteltalaacuten mieacutert van szuumlkseacuteg a [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebraacuten laacutethatoacute (1+T3FD64) osztaacutesi fokozatra Tegyuumlk fel hogy e neacutelkuumll szeretneacutenk megkapni a baud-raacutetaacutet azaz

Ezt aacutetalakiacutetva kapjuk hogy

azaz

Eacutes ez az oumlsszefuumlggeacutes azzal egyezik meg amelyik a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 1 keacuteplete Maacutermost ha mindent ilyen szeacutepen le tudunk vezetni akkor ismeacutetelten mieacutert van szuumlkseacuteg az (1+T3FD64) osztaacutesi fokozatra A vaacutelasz erre az hogy azeacutert mert DIV eacuterteacuteke csakis termeacuteszetes szaacutem lehet Sőt kideruumll hogy ez az eacuterteacutek haacuterom biten aacutebraacutezolhatoacute DIV2 DIV1 DIV0 (laacutesd [Az T3CON SFR parameacuteterei]) Maacuterpedig ha ilyen fontos uumlgyben kerekiacuteteacutesi hibaacutek miatt elvesznek eacuterteacutekek az bizony nagyon kritikus koumlvetkezmeacutenyekkel jaacuterhat egy igazi meacuternoumlki alkalmazaacutesra neacutezve Iacutegy tehaacutet most maacuter eacuterthető mieacutert lesz szuumlkseacuteg a szoacute szerint brutaacutelis binaacuteris osztoacuten kiacutevuumll egy finomiacutetoacute fokozatra ami szintuacutegy egy osztoacuteleacutepcsőfokot jelent

A gyaacuteri leiacuteraacutesban a fenti levezeteacutesek nem talaacutelhatoacutek meg Az ott leiacutertak tuumlkreacuteben a koumlvetkező kiegeacutesziacuteteacuteseket fűzzuumlk a levezeteacutesekhez A DIV eacuterteacuteket a T3CON regiszter alsoacute haacuterom bitjeacuten kell beaacutelliacutetanunk Nagyon leacutenyeges hogy ehhez a kapott DIV eacuterteacuteket mindig lefeleacute kell egeacuteszre kerekiacutetenuumlnk A T3FD SFR eacuterteacutekeacutenek meghataacuterozaacutesaacutenaacutel a DIV maacuter szinteacuten a lefeleacute kerekiacutetett eacuterteacutek T3FD eacuterteacutekeacutere viszont a kerekiacuteteacutes szokvaacutenyos moacutedjaacutet kell alkalmaznunk Ezek utaacuten az aktuaacutelis baud-raacuteta a koumlvetkező formulaacuteval szaacutemiacutethatoacute

Peacutelda gyanaacutent hataacuterozzuk meg DIV eacutes T3FD eacuterteacutekeacutet amikor is a kiacutevaacutent kommunikaacutecioacutes sebesseacuteg 9 600 baud az oacuterajel pedig a default 2 097 152 Hz

A lefeleacute kerekiacuteteacutes előiacuteraacutesaacutenak megfelelően a veacutegső eacuterteacutek DIV = 3 lesz Ennek alapjaacuten a T3CON regiszter alsoacute

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

haacuterom bitjeacutet 011-re kell aacutelliacutetanunk A T3FD regiszterbe pedig a koumlvetkező eacuterteacuteket kell iacuternunk

Iacutegy a veacutegső eacuterteacutek T3DF = 45 = 2Dh lesz Ellenőrizzuumlk az aktuaacutelis baud-raacutetaacutet

ami az eleacuterni kiacutevaacutent 9 600-as eacuterteacutekhez keacutepest csupaacuten 02 -os elteacutereacutest jelent Ilyen csekeacutely elteacutereacutest pedig gond neacutelkuumll elvisel az UART egyseacuteg A [A soros porti kommunikaacutecioacute tipikus eacuterteacutekei] a default 2 097 152 Hz-es oacuterajel eseteacutere tartalmaz beaacutelliacutetaacutesi eacuterteacutekeket neacutehaacuteny tipikus kommunikaacutecioacutes sebesseacutegeacuterteacutekhez Maacutes oacuterajel-beaacutelliacutetaacuteshoz tartozoacute eacuterteacutekeket megtalaacutelunk a gyaacuteri leiacuteraacutesban [1 p 69 Table 34] A [A soros porti kommunikaacutecioacute tipikus eacuterteacutekei] T3CON fejleacutecű oszlopaacuteban maacuter konkreacutetan azok az eacuterteacutekek szerepelnek amelyeket teacutenylegesen ebbe a regiszterbe kell iacuternunk A bal oldali feacutelbaacutejt a 3 időziacutetőszaacutemlaacuteloacute engedeacutelyezeacuteseacutet jelenti (vouml [Az T3CON SFR parameacuteterei]) a jobb oldali feacutelbaacutejt pedig nyilvaacutenvaloacutean megegyezik DIV eacuterteacutekeacutevel

155 taacuteblaacutezat - A soros porti kommunikaacutecioacute tipikus eacuterteacutekei

Kommunikaacutecioacutes sebesseacuteg Bd

DIV T3CON T3FD Hiba

57 600 1 81h 9 = 09h 025

38 400 1 81h 45 = 2Dh 02

19 200 2 82h 45 = 2Dh 02

9 600 3 83h 45 = 2Dh 02

4 800 4 84h 45 = 2Dh 02

2 Baacutejtok fogadaacutesa eacutes kuumlldeacutese assemblybenAz előző alfejezetben leiacutert tudnivaloacutek utaacuten neacutezzuumlk meg hogy milyen utasiacutetaacutessorozattal kommunikaacutelhatunk a soros porton assembly nyelven iacutert programocskaacutekkal Itt valoacutejaacuteban baacutejtok fogadaacutesaacuteroacutel eacutes kuumlldeacuteseacuteről lesz szoacute hiszen minden maacutes ezen alapul A kicsinyiacutető keacutepző azeacutert lesz indokolt mert most csak paacuter soros koacutedreacuteszleteket ismertetuumlnk eacutes elemzuumlnk

Ha az elhataacuterozaacutesunknak megfelelően a 3 időziacutetőtszaacutemlaacuteloacutet szeretneacutenk hasznaacutelni akkor a soros porti kommunikaacutecioacute beaacutelliacutetaacutesait az SCON regiszterrel kezdjuumlk Mivel ez a leacutepeacutes eacutes ennek reacuteszletei rendkiacutevuumlli fontossaacuteguacuteak a tankoumlnyv tovaacutebbi alkalmazaacutesainaacutel hasznaacutelt beaacutelliacutetaacutesokat a [Az SCON SFR parameacuteterei] mintaacutejaacutera kellő reacuteszletesseacuteggel megmagyaraacutezzuk laacutesd [Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai] Ez utoacutebbi taacuteblaacutezatban sziacutenes jeloumlleacutest alkalmazunk a bitek szerepeacutenek elkuumlloumlniacuteteacuteseacutere amit a koacutedokban is hasznaacutelni fogunk a koumlnnyebb koumlvethetőseacuteg kedveacuteeacutert

156 taacuteblaacutezat - Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai

SCON Serial Port Control Register

A soros port vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek

00h

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacute-lum Magyar neacutev Jelenteacutes

7 SM0 Kommunikaacutecioacutes moacutedot kivaacutelasztoacute bitek

Mivel az 1 kommunikaacutecioacutes moacutedot fogjuk hasznaacutelni (laacutesd [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese]) ezeacutert SM0=0 eacutes SM1=1

6 SM1

5 SM2 Toumlbbprocesszoros kommunikaacutecioacutet engedeacutelyező bit

Nem hasznaacutelunk toumlbbprocesszoros uumlzemmoacutedot ezeacutert SM2=0

4 REN Fogadaacutest engedeacutelyező bit A mikrovezeacuterlőnek adatokat kell fogadnia a PC-ről ezeacutert termeacuteszetesen REN=1

3 TB8 Adaacutesi bit 8 (9 bit) Nem hasznaacutelunk jaacuteruleacutekos bitet iacutegy TB8=0

2 RB8 Fogadaacutesi bit 8 (9 bit) Nem hasznaacutelunk jaacuteruleacutekos bitet iacutegy RB8=0

1 TI Adaacutesi megszakiacutetaacutest jelző bit Ez a jelzőbit akkor aacutell 1-re hardveresen ha az ADuC elkuumlldoumltt egy karaktert a soros porton keresztuumll Kezdetben eacuterdemes 1-re aacutelliacutetanunk (Mintha elkuumlldtuumlnk volna maacuter egyet)

0 RI Fogadaacutesi megszakiacutetaacutest jelző bit

Fel kell keacutesziacutetenuumlnk az

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

ADuC-ot karakterek fogadaacutesaacutera Ez a bit akkor aacutell 1-re hardveresen ha eacuterkezett egy karakter Kezdetben eacuterdemes 0-ra aacutelliacutetanunk hogy joumlhessen valami

A [Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai]ban oumlsszefoglaltak szerint a soros port beaacutelliacutetaacutesa ceacutelszerűen a

MOV SCON01010010b

utasiacutetaacutessal kezdődik Ez utaacuten aacutelliacutethatjuk be a 3 időziacutetőszaacutemlaacuteloacute keacutet regisztereacutet Az előző alfejezetben leiacutertak alapjaacuten ha 9 600 baudos kommunikaacutecioacutet szeretneacutenk akkor iacutegy folytatjuk a koacutedot

MOV T3CON083hMOV T3FD02Dh

Ha karakter eacuterkezik valahonnan az ADuC-nak pontosabban fogalmazva az teljes egeacuteszeacuteben beeacuterkezik az SBUF nevű regiszterbe akkor az addig 0 eacuterteacutekű RI jelzőbit 1-re vaacutelt Ezt vagy folyamatosa lessuumlk a főprogramboacutel vagy megszakiacutetaacutesra biacutezzuk Akaacuter iacutegy akaacuter uacutegy a karakter fogadaacutesa utaacuten az RI bitet szoftveresen kell toumlroumllnuumlnk Magaacutet az eacuterkezett karaktert az SBUF regiszterből olvassuk ki Az RI jelzőbitnek ez utaacuteni toumlrleacutese mintegy bdquoelőkeacutesziacutetirdquo a terepet a koumlvetkező karakter eacuterkezeacuteseacutehez Iacutegy a most leiacutertak keacutet sort jelentenek assemblyben

MOV ASBUFCLR RI

Ha az ADuC karaktert kuumlld el pontosabban fogalmazva az teljes egeacuteszeacuteben kiuumlruumll az SBUF nevű regiszterből akkor az addig 0 eacuterteacutekű TI jelzőbit 1-re vaacutelt Ezt szintuacutegy vagy folyamatosa lessuumlk a főprogramboacutel vagy ezt is megszakiacutetaacutesra biacutezzuk Az utasiacutetaacutesokkal azonban fordiacutetott a helyzet Előszoumlr nullaacutezzuk a kuumlldeacutes jelzőbitjeacutet azaz TI-t a karaktert pedig csak ez utaacuten pakoljuk be az SBUF regiszterbe Aztaacuten ha az teacutenyleg elment akkor vaacutelt TI ismeacutet 1-re Ezeacutert kell TI-t a karakternek az SBUF regiszterbe valoacute beraacutemolaacutesa előtt nullaacuteznunk

CLR TIMOV ASBUF

3 Soros porti kommunikaacutecioacute pollozaacutessal21 feladat

Jelezzuumlk ki a heacutetszegmenses kijelzőn a PC-ről a soros porton eacuterkező szaacutemjegyeket Teacuteves karakterre valamilyen egyeacuteb jelet jelezzuumlnk ki A soros porti kommunikaacutecioacutet pollozaacutessal veacutegezzuumlk [Code30]

A feladat megoldaacutesa a soros porti kommunikaacutecioacuteroacutel eddig megtanultak alapjaacuten meglepően egyszerű lesz Ennek elleneacutere egy egyszerű folyamataacutebraacutet a biztonsaacuteg kedveacuteeacutert meacutegis melleacutekeluumlnk laacutesd [A (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja] aacutebra A folyamataacutebra utolsoacute blokkjaacuteba iacutert bdquofarkincardquo szoacute azt akarja jelenteni hogy teacuteves (tehaacutet nem szaacutemjegy) karakter eacuterkezeacutese eseteacuten valami erre utaloacute jelet szeretneacutenk kijelezni Mivel a heacutetszegmenses kijelzőt a 7447-es dekoacuteder hajtja meg tuacutel sok vaacutelasztaacutesi lehetőseacuteguumlnk nincs (laacutesd az IC adatlapja) Iacutegy jelzőkarakternek a 12-es eacuterteacutekhez tartozoacute a b f eacutes g szegmensekből alkotott jelet vaacutelasztottuk vouml [A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese] aacutebra Ezt a folyamataacutebraacuten bdquofarkincaacutenakrdquo nevezzuumlk

153 aacutebra - A [21 feladat] (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

A feladat uacutegy szoacutel hogy a soros porti kommunikaacutecioacutet pollozaacutessal valoacutesiacutetsuk meg Ez csakuacutegy mint a gombok figyeleacutese a [Nyomoacutegombok a panelon] fejezetben a főprogramban toumlrteacutenik eacutes azt jelenti hogy folyamatosan figyeljuumlk az esemeacutenyeket Itt az esemeacuteny karakter eacuterkezeacutese a soros porton keresztuumll Az előző alfejezetben leiacutertak szerint figyelnuumlnk kell hogy mikor aacutell 1-re az RI bit eacutes ennek megtoumlrteacutente utaacuten kuumlldhetuumlnk karaktert (kuumlldhetjuumlk a koumlvetkező karaktert) Mindez termeacuteszetesen az ADuC szemszoumlgeacuteből eacutertendő Az RI bit figyeleacutese a karakter beraacutemolaacutesa a pufferba eacutes a bit toumlrleacutese iacutegy neacutez ki assembly nyelven

JNB RI$MOV ASBUFCLR RI

Az uacutejdonsaacuteg ebben a haacuteromsoros kis reacuteszletben az első utasiacutetaacutes Az olvasoacute maacuter valoacutesziacutenűleg eacuterti hogy ez mit jelent Azt jelenti hogy addig jaacuter helyben a program amiacuteg RI 1 nem lesz Ez a helyben jaacuteraacutes persze bizonyos alkalmazaacutesoknaacutel nem engedhető meg de a [21 feladat] megoldaacutesaacutenaacutel nem jelent semmifeacutele probleacutemaacutet Karakter elkuumlldeacutese a TI bit figyeleacuteseacutevel hasonloacutean toumlrteacutenik csak az előző alfejezetben leiacutert sorrendi elteacutereacutesre kell figyelnuumlnk Előszoumlr megvaacuterjuk amiacuteg TI 1 nem lesz utaacutena mindjaacutert toumlroumlljuumlk is eacutes ez utaacuten helyezzuumlk a kuumlldendő karaktert a pufferba Aztaacuten majd ha elment a karakter akkor lesz TI ismeacutet 1 eacutes akkor kuumlldhetjuumlk a koumlvetkezőt A kuumlldeacutesre hasznaacutelhatoacute haacuterom sor iacutegy fest

JNB TI$CLR TIMOV ASBUF

Ez a keacutet haacuteromsoros ki programreacuteszlet joacutel foumllismerhető lesz a [21 feladat] megoldaacutesaacuteban

A soros porti kommunikaacutecioacutenaacutel oacutehatatlanul előkeruumll az ASCII karakterkeacuteszlet Amikor ugyanis karaktert kuumllduumlnk a soros porton az hallgatoacutelagosan ASCII karakterre vonatkozik Az ASCII koacutedtaacuteblaacutezat toumlrteacuteneteacutenek bemutataacutesa nem e tankoumlnyv feladata de annyit elmondhatunk hogy a betűszoacute az American Standard Code for Information Interchange kifejezeacutesből szaacutermazik ami szoacute szerint azt jelenti hogy Amerikai Szabvaacutenyos Koacuted Informaacutecioacutecsereacutehez de a veacutegeacuten az uumlzenetvaacuteltaacutes szoacute talaacuten szerencseacutesebb lenne Az ASCII koacutedtaacuteblaacutezatoknak toumlbb vaacuteltozatuk leacutetezik van 7-bites eacutes 8-bites verzioacute eacutes meacuteg speciaacutelis vaacuteltozatok is leacuteteznek Ennek elleneacutere a [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebraacuten szereplő a 7-bites vaacuteltozatnak megfelelő taacuteblaacutezat nagyjaacuteboacutel minden szaacutemiacutetoacutegeacutepen ugyanazt jelenti Amennyiben tehaacutet egy rsquo0rsquo karakter eacuterkezik valahonneacutet az ADuC mikrovezeacuterlőre

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

akkor az ASCII koacutedban eacuterkezik ezeacutert hexadecimaacutelisan 30h-t decimaacutelisan 48-at jelent Iacutegy tehaacutet ha a fogadaacutes utaacuten teacutenylegesen azzaacute a szaacutemeacuterteacutekkeacute szeretneacutenk alakiacutetani mint amit a szaacutemjegy (rsquo0rsquo) mutat akkor egyszerűen ki kell vonnunk belőle 48-at (vagy 30h-t) Eacutes keacutesz

154 aacutebra - Az ASCII karakterkeacuteszlet 32-től 126-ig

Az eacuterkezett karakterek intervallumba zaacuteraacutesaacutehoz joacute tudni hogy a rsquo9rsquo-es szaacutemjegy utaacuten az ASCII taacuteblaacutezatban a rsquorsquo karakter koumlvetkezik Iacutegy koumlnnyen tudjuk alkalmazni a [Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedja] fejezetben bemutatott oumltletet Erre a most koumlvetkező programban szuumlkseacuteguumlnk is lesz Annyit meacuteg illik megjegyeznuumlnk hogy a heacutetszegmenses kijelző a P2-es port bitjeiből oumlsszesen neacutegyet fog le Ha a maacutesik neacutegy bitet maacutes ceacutelokra akarjuk foumllhasznaacutelni akkor azokat nem szabad oumlssze-vissza aacutelliacutetgatnunk az esetleges soros porti műveletek soraacuten meg kell őket kiacutemeacutelnuumlnk Az alaacutebbi koacutedban erre uacutegy emleacutekeztetuumlnk hogy logikai művelettel mindig 1-re aacutelliacutetjuk ezeket a biteket Most egyeacutebkeacutent semmi szerepuumlk nem lesz de ha majd igen akkor tudni fogjuk hogy el kell kuumlloumlniacutetenuumlnk őket a heacutetszegmenses kijelzőnek szaacutent informaacutecioacutetoacutel Erre fog utalni a bdquofoumllaacutelliacutetjuk a felső 4 bitetrdquo megjegyzeacutes Az eacuterkező karaktert a program azonnal visszakuumlldi hogy megfelelő kommunikaacutecioacutes feluumllet eseteacuteben azonnal laacutethassuk hogy milyen karakter eacuterkezett az ADuC-nak Az ilyen jellegű visszakuumlldeacutest szoktaacutek ekhoacutezaacutesnak (angolul echo) nevezni

Code30asmbyte DATA 030h A P2-es portra kirakandoacute eacuterteacutek vaacuteltozoacutejaMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV P211111100b A 7447-es IC-neacutel a 12-es koacuted egy kis furcsa jelet produkaacutel Ez jelzi a keacuteszenleacutetetfogadJNB RI$ Karakter eacuterkezeacuteseacutere vaacuterunk Az RI flag ezt

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

jelziMOV ASBUF Kiolvassuk a pufferboacutel az eacuterkezett karaktertCLR RI Toumlroumlljuumlk az RI flag-etJNB TI$ Arra vaacuterunk hogy TI 1 legyen mert ez jelzi ha egy előző karakter teacutenylegesen elmentCLR TI Utaacutena toumlroumlljuumlk TI-tMOV SBUFA Betesszuumlk a pufferba A tartalmaacutetCJNE A0relac1 Ha az eacuterkezett karakter 0 előttrelac1 vagy 9 moumlgoumltt van akkor azJC nemjo eacuterveacutenytelen esetCJNE Arelac2 A 0lt=Alt=9 felteacutetel ekvivalens arelac2 0lt=Alt felteacutetellel 9 utaacuten ASCII-benJNC nemjo joumlnCLR C Toumlroumlljuumlk a C bitet egy kivonaacutes előttSUBB A0 A kivonaacutessal csinaacutelunk az ASCII eacuterteacutekből normaacutelis szaacutemeacuterteacuteketMOV byteA A byte vaacuteltozoacuteba beletesszuumlk a kijelezendő szaacutemeacuterteacuteketORL byte11110000b Foumllaacutelliacutetjuk a felső 4 bitetportMOV P2byte Kitesszuumlk az eacuterteacuteket a P2-es portraJMP fogad Kezdjuumlk előroumll a beolvasaacutestnemjoMOV byte11111100b A 12-es koacuteduacute szaacutemjegyet fogjuk kijelezniJMP port Ugraacutes a kirakaacuteshoz

4 Soros porti kommunikaacutecioacute megszakiacutetaacutessal22 feladat

Jelezzuumlk ki a heacutetszegmenses kijelzőn a PC-ről a soros porton eacuterkező szaacutemjegyeket Teacuteves karakterre valamilyen egyeacuteb jelet jelezzuumlnk ki A soros porti kommunikaacutecioacutet megszakiacutetaacutes veacutegezze [Code31]

Ez a feladat egyetlen reacuteszlettől eltekintve toumlkeacuteletesen megegyezik a [21 feladat]tal Ez a reacuteszlet azonban nagyon is fontos a soros porti kommunikaacutecioacute kezeleacuteseacutenek moacutedjaacuteroacutel van szoacute Az előző alfejezetben ez pollozaacutessal toumlrteacutent azaz a főprogram figyelte hogy eacuterkezett-e ill elment-e karakter Ehhez az RI ill TI bitek eacuterteacuteke nyuacutejtotta a fogoacutedzkodoacutet A helyzet az hogy az az esemeacuteny amikor ezek a bitek hardveresen 1-re billennek megszakiacutetaacutest is ki tud vaacuteltani Fontos hogy mindkeacutet bit eseteacuten Itt most tehaacutet nincs maacutes dolgunk mint engedeacutelyezni a soros portra vonatkozoacute megszakiacutetaacutest majd megfelelően lekezelni a keacutet kritikus bitet RI-t ill TI-t A megszakiacutetaacutesban kisseacute jobban elkuumlloumlnuumll egymaacutestoacutel karakter eacuterkezeacutese eacutes kuumlldeacutese Karakter eacuterkezeacuteseacutet gyakorlatilag ugyanuacutegy kezeljuumlk mint az előző alfejezetben A kuumlldeacutes is hasonloacutean toumlrteacutenik de amikor a TI bit 1-re aacutell akkor is kivaacuteltoacutedik a megszakiacutetaacutes Nos ebben az esetben nem csinaacutelunk semmit visszateacuteruumlnk a megszakiacutetaacutesboacutel eacutes keacutesz A soros porti megszakiacutetaacutes vektora a 0023h ciacutemen talaacutelhatoacute a megszakiacutetaacutes engedeacutelyezeacutese pedig az ES bittel toumlrteacutenik laacutesd [Az IE SFR parameacuteterei] Figyeljuumlk meg hogy milyen roumlvidre zsugorodik a főprogram A 3 időziacutetőszaacutemlaacuteloacute inicializaacutelaacutesaacuten eacutes a megszakiacutetaacutes engedeacutelyezeacuteseacuten kiacutevuumll leacutenyegeacuteben semmi egyebet nem csinaacutel Helyben jaacuter Az olvasoacutet arra biztatjuk hogy figyelmesen hasonliacutetsa oumlssze Code30-at Code31-gyel eacutes figyelje meg hogy hogyan oldja meg a megszakiacutetaacutes mindazt amit előző esetben a főprogram veacutegzett

Code31asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0023h A soros porti megszakiacutetaacutes vektoraJMP UARTORG 0060h A teacutenyleges programkoacuted kezdetebyte DATA 030h A P2-es portra kirakandoacute eacuterteacutek vaacuteltozoacuteja Karakter eacuterkezeacutese vagy elkuumlldeacutese aacuteltal kivaacuteltott megszakiacutetaacutes UARTJB RIfogad Ha karakter eacuterkezeacutese vaacuteltotta ki a megszakiacutetaacutest akkor azt fogadjuk eacutes lekezeljuumlkRETI Ha a maacutesik eset azaz karakter elkuumlldeacutese

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

akkor simaacuten visszateacuteruumlnk a megszakiacutetaacutesboacutelfogadMOV ASBUF Kiolvassuk a pufferboacutel az eacuterkezett karaktertCLR RI Toumlroumlljuumlk az RI flag-etCLR TI Kuumlldeacutes előtt toumlroumlljuumlk TI-tMOV SBUFA Betesszuumlk a pufferba A tartalmaacutetCJNE A0relac1 Ha az eacuterkezett karakter 0 előttrelac1JC nemjo vagy 9 moumlgoumltt van akkor az eacuterveacutenytelenCJNE Arelac2 esetrelac2 A 0lt=Alt=9 felteacutetel ekvivalens aJNC nemjo 0lt=Alt felteacutetellel 9 utaacuten ASCII-ben joumlnCLR C Toumlroumlljuumlk a C bitet egy kivonaacutes előttSUBB A0 A kivonaacutessal csinaacutelunk az ASCII eacuterteacutekből normaacutelis szaacutemeacuterteacuteketMOV byteA A byte vaacuteltozoacuteba beletesszuumlk a kijelezendő szaacutemeacuterteacuteketORL byte11110000b Foumllaacutelliacutetjuk a felső 4 bitetportMOV P2byte Kitesszuumlk az eacuterteacuteket a P2-es portraRETInemjoMOV byte11111100b A 12-es koacuteduacute szaacutemjegyet fogjuk kijelezniJMP port Ugraacutes a kirakaacuteshoz FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV P211111100b A 7447-es IC-neacutel a 12-es koacuted egy kis furcsa jelet produkaacutel Ez jelzi a keacuteszenleacutetetSETB ES A soros porti megszakiacutetaacutes engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesJMP $ Helyben jaacuter a program

5 Koacutedreacuteszletek beeacutepiacuteteacutese sajaacutet programunkbaAz előző keacutet alfejezetben megtaacutergyaltuk a soros port kezeleacuteseacutenek keacutet nagyon fontos moacutedjaacutet Keacutesziacutetsuumlnk most olyan alkalmazaacutest amely a szerencsejaacuteteacutekos teacuteveacuteműsorokban előforduloacutekra hasonliacutet

23 feladat

A heacutetszegmenses kijelzőn fussanak koumlrbe a szaacutemok nagyon gyorsan Az 1 gomb megnyomaacutesaacutera aacutelljon meg a futaacutes a mikrovezeacuterlő pedig kuumlldje el a PC-nek a kijelzőn laacutethatoacute szaacutemot A 2 gomb lenyomaacutesaacutera folytatoacutedjon a szaacutemok futaacutesa a mikrovezeacuterlő pedig kuumlldje a PC-nek a bdquoRunningrdquo szoacutet [Code32]

Mivel a program egeacuteszen egyszerű lesz nem keacutesziacutetuumlnk folyamataacutebraacutet Valoacute igaz csaknem minden eleme előkeruumllt maacuter valamikor a tankoumlnyvben Ami most tanulsaacutegos lesz az az ahogy karakterlaacutencot kuumllduumlnk a soros porton Ehhez fel fogunk hasznaacutelni egy előre megiacutert szubrutinkoumlnyvtaacuterat Ennek neve UARTIOASM A koumlnyvtaacuterban szaacutemos olyan szubrutin talaacutelhatoacute amelyekre sokszor van igeacuteny a soros porti kommunikaacutecioacute soraacuten A szubrutinkoumlnyvtaacuter az ADuC 842-es gyaacuteri CD-jeacuten talaacutelhatoacute Az olvasoacutet ara biztatjuk hogy baacutetran kukkantson bele eacutes neacutezze meg hogy milyen stiacutelusban programoznak profik Mi a szubrutinok koumlzuumll mindoumlsszesen haacutermat fogunk felhasznaacutelni a tankoumlnyvben az ezekkel kapcsolatos tudnivaloacutekat a [A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz] foglalja oumlssze A konkreacutet hasznaacutelatra Code32 mutat peacuteldaacutekat A szubrutinokat tartalmazoacute faacutejlt az

$INCLUDE(UARTIOASM)

fordiacutetoacutei direktiacutevaacuteval csatolhatjuk a sajaacutet koacutedunkhoz

157 taacuteblaacutezat - A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Rutin neve Parameacuteteraacutetadaacutes Megjegyzeacutes

SENDCHAR Akkumulaacutetor Karakter kuumlldeacutese A kuumlldeacutesre szaacutent karaktert a rutin meghiacutevaacutesa előtt helyezzuumlk az akkumulaacutetorba A szubrutin tartalma megegyezik a [Soros porti kommunikaacutecioacute pollozaacutessal] alfejezetben a kuumlldeacutesre alkotott haacuteromsoros reacuteszlettel

GETCHAR Akkumulaacutetor Karakter fogadaacutesa Az eacuterkezett karaktert a rutin meghiacutevaacutesa utaacuten az akkumulaacutetorba keruumll A szubrutin tartalma megegyezik a [Soros porti kommunikaacutecioacute pollozaacutessal] alfejezetben a karakter fogadaacutesaacutera alkotott haacuteromsoros reacuteszlettel

SENDSTRING Adatmutatoacute Karakterlaacutenc kuumlldeacutese A rutin meghiacutevaacutesa előtt toumlltsuumlk az adatmutatoacuteba az elkuumlldeni kiacutevaacutent karakterlaacutenc kezdőciacutemeacutet A karakterlaacutenc veacutegeacutet egy 00h baacutejtnak kell jeleznie

Most neacutezzuumlk meg a koacutedot utaacutena pedig meacuteg majd megmagyaraacutezunk egy-keacutet aproacutesaacutegot

Code32asmORG 0060h A teacutenyleges programkoacuted kezdete

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

but1 BIT P32 Az 1 gomb bitjebut2 BIT P33 A 2 gomb bitjenyom BIT 00h Bitvaacuteltozoacute a gombnyomaacuteshoz Időhuacutezoacute szubrutin amely az 1 gombot is figyeli GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R543cik5MOV R469cik4JNB but1pushed Itt vizsgaacuteljuk meg a gomb bitjeacutet Elugrunk ha le van nyomva a gomb azaz a bit 0DJNZ R4cik4DJNZ R5cik5DJNZ R6cik6RETpushed Ide ugrunk gombnyomaacuteskorSETB nyom Magasra aacutelliacutetjuk a jelzőbitetRET Visszateacutereacutes a szubrutinboacutel FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV DPTRtext A kuumlldeni valoacute karakterlaacutenc ciacuteme azCALL SENDSTRING adatmutatoacuteba keruumll Aztaacuten meghiacutevjuk a kuumlldő szubrutintujraMOV R30 Ciklusvaacuteltozoacute nullaacutezaacutesafutMOV P2R3 Ciklusvaacuteltozoacute eacuterteacuteke a P2-es portra keruumllCLR nyom A rsquonyomrsquo jelzőbit toumlrleacuteseMOV A5 005 s lesz a vaacuterakozaacutesCALL GDELAY Időhuacutezoacute rutin meghiacutevaacutesaJB nyomstop Ha volt gombnyomaacutes megaacutellunkfolytatINC R3 Ciklusvaacuteltozoacute noumlveleacuteseCJNE R310fut 9-ig mehenek a szaacutemjegyek iacutegy 10-zel hasonliacutetjuk oumlssze R3-t az utolsoacute noumlveleacutes utaacutenJMP ujra Kezdjuumlk előroumll a szaacutemlaacutelaacuteststopMOV AR3 R3 eacuterteacuteke az akkumulaacutetorba keruumllADD A0 Hozzaacuteadjuk az ASCII 0 eacuterteacutekeacutetCALL SENDCHAR Elkuumlldjuumlk a PC-nekMOV A13 Kocsi vissza kuumlldeacuteseCALL SENDCHARMOV A10 Soremeleacutes kuumlldeacuteseCALL SENDCHARJB but2$ Vaacuterunk a 2 gombraCALL SENDSTRING Uacutejra elkuumlldjuumlk a karakterlaacutencotJMP folytat Folytatoacutedik a futaacutestext DB Running10130$INCLUDE(UARTIOASM)

Amikor a kijelzett szaacutemjegyet akarjuk ASCII karakter formaacutejaacuteban elkuumlldeni a PC-nek a konkreacutet szaacutemeacuterteacutekhez hozzaacute kell adnunk 32-t hiszen a koacutedtaacuteblaacutezatban a szaacutemjegyek 32-vel kezdődnek (vouml [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebra) Most a fordiacutetottjaacutet veacutegezzuumlk annak mint amikor eacuterkezett szaacutemjegyeket dolgoztunk foumll

A [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebra 32-től 126-ig mutatja az ASCII koacutedokat Tudnunk kell azonban hogy a 32-es eacuterteacutek alatti koacutedok kuumlloumlnfeacutele vezeacuterlőjeleket reprezentaacutelnak Ezeket elsősorban sornyomtatoacutekhoz hasznaacuteltaacutek Nekuumlnk igazaacuteboacutel kettő lesz ezek koumlzuumll kulcsfontossaacuteguacute A 10-es koacuted a New line

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

vagy Line Feed parancs Magyarul uacutej sor vagy soremeleacutes Hataacutesaacutera a kurzor egy sorral lejjebb ugrik amennyiben megfelelő feluumlleten toumlrteacutenik a kommunikaacutecioacute A 13-as koacuted a Carriage Return parancsot jelenti Ez magyarul annyit tesz hogy kocsi vissza Hataacutesa az hogy a kurzor visszaugrik a sor elejeacutere Karakterek fogadaacutesakor a 13-as koacuted jelenti az ENTER billentyűt

Ami meacuteg szokatlan az az adatbaacutejt direktiacuteva (DB) utaacuten beiacutert karakterlaacutenc Laacutethatoacute hogy aposztroacutefok koumlzeacute iacuterhatjuk a szoumlveget amit minden tovaacutebbi neacutelkuumll folytathatunk baacutejtonkeacutent is vesszővel elvaacutelasztva az eacuterteacutekeket A rsquoRunningrsquo szoacutet tehaacutet koumlveti egy soremeleacutes eacutes egy kocsi vissza parancs a 0 pedig a karakterlaacutenc veacutegeacutet jelenti Ebből a 0-boacutel fogja tudni a SENDSTRING rutin hogy veacutege a karakterlaacutencnak

6 Az ADuC vezeacuterleacutese PC-velA tankoumlnyvben maacuter laacutettunk arra egyszerű peacuteldaacutekat hogy hogyan hajthat meg a mikrovezeacuterlő kuumllső aacuteramkoumlroumlket Most olyan alkalmazaacutest keacutesziacutetuumlnk amelyben az asztali szaacutemiacutetoacutegeacutepuumlnkkel vagy laptopunkkal vezeacutereljuumlk az ADuC-ot Az ADuC pedig termeacuteszetesen vezeacuterelheti a kuumllső aacuteramkoumlrt

24 feladat

A heacutetszegmenses kijelzőn leacuteptessuumlk előre ill haacutetra a szaacutemjegyeket Tegyuumlk ezt uacutegy hogy a szaacutemiacutetoacutegeacutep billentyűzeteacuten a + ill ndash gombokat nyomogatjuk Az ENTER billentyű leuumlteacuteseacutere villanjon annyit a kijelzett szaacutem amennyi a sajaacutet eacuterteacuteke [Code33]

A megoldaacutes ismeacutet egeacuteszen egyszerű Beolvasunk egy karaktert a soros portroacutel majd megneacutezzuumlk hogy az a rsquo+rsquo jel vagy rsquondashrsquo jel ASCII koacutedja-e vagy esetleg az ENTER gomb lenyomaacutesaacutenak hataacutesaacutera a 13-as koacuted Ennek alapjaacuten aacutegaztatjuk el a programot a megfelelő helyre A koacutedok eacuterteacutekeacutenek elemzeacuteseacutehez a SUBB utasiacutetaacutest hasznaacuteljuk majd egyezeacutes eseteacuten a JZ hataacutesaacutera toumlrteacutenik az ugraacutes A program ismeacutet a joacute oumlreg DELAY szubrutinunkat igeacutenyli iacutegy azt most sem csatoljuk a koacutedhoz

Code33asmORG 0060h A teacutenyleges programkoacuted kezdetechar DATA 030h Az eacuterkezett karakter vaacuteltozoacuteja FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV R41 R4 a kijelezendő szaacutemjegy vaacuteltozoacutejakijelezMOV P2R4 A szaacutemjegy kijelzeacutesefogadCALL GETCHAR Karakterre vaacuterunkMOV charA Ha + eacuterkezettCLR CSUBB A+JZ plusz ugrunk a noumlveleacuteshezMOV Achar Ha - eacuterkezettCLR CSUBB A-JZ minusz ugrunk a csoumlkkenteacuteshezMOV Achar Ha ENTERT nyomtunk akkorCLR CSUBB A13 13 eacuterkezikJZ enter Ugrunk a villogtataacuteshozJMP fogad Baacutermely maacutes esetben visszaugrunk uacutej karakter fogadaacutesaacutehozpluszCJNE R49novel R4 maacuter 9 Ha nem noumlvelhetjuumlkMOV R41 R4 uacutejra 1 leszJMP kijelez KijelezzuumlknovelINC R4 Noumlveljuumlk R4-etJMP kijelez KijelezzuumlkminuszCJNE R41csokkent R4 maacuter 1 Ha nem csoumlkkentjuumlkMOV R49 R4 uacutejra 9 lesz

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

JMP kijelez KijelezzuumlkcsokkentDEC R4 Csoumlkkentjuumlk R4-etJMP kijelez KijelezzuumlkenterMOV AR4 R4-et aacutetmaacutesoljuk R3-ba A villogaacuteshozMOV R3A R3 lesz a ciklusvaacuteltozoacuteMOV A10 01 s vaacuterakozaacutes lesz a villogaacuteshozvillogMOV P215 Kikapcsoljuk a kijelzőtCALL DELAY VaacuterunkMOV P2R4 Bekapcsoljuk a kijelzőtCALL DELAY VaacuterunkDJNZ R3villog Ciklusvaacuteltozoacute lekezeleacuteseJMP kijelez Ugraacutes vissza a kijelzeacuteshez$INCLUDE(UARTIOASM)

Created by XMLmind XSL-FO Converter

16 fejezet - Iacuteraacutes a memoacuteriaacutebaA [Bitvaacuteltozoacutek hasznaacutelata] eacutes [A teljes alsoacute RAM] alfejezetben maacuter elemeztuumlk az alsoacute RAM beosztaacutesaacutet eacutes műkoumldeacuteseacutet No rendben annak neacutehaacuteny reacuteszleteacutet eacutes sajaacutetossaacutegaacutet Eljoumltt az idő arra hogy megtanuljuk hogy hogyan iacuterhatunk a mikrovezeacuterlő memoacuteriaacutejaacuteba Ez a memoacuteria nyilvaacutenvaloacutean RAM lesz (a flash memoacuteriaacutet ezen a szinten meacuteg nem taacutergyaljuk) iacutegy az is biztos hogy nem a koacutedmemoacuteria Vessuumlnk egy pillantaacutest a memoacuteriateruumlleteket taglaloacute adatlapra ([Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebra)

161 aacutebra - Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese

Az alsoacute RAM-ot (lower RAM) maacuter vizsgaacuteltuk az emliacutetett alfejezetekben Az aacutebraacuten azt laacutetjuk hogy az alsoacute RAM-nak megfelelő kis dobozba odaiacutertaacutek hogy direct or indirect addressing Ez azt jelenti hogy direkt vagy indirekt ciacutemzeacutes Ez nagyon fontos lesz A direkt ciacutemzeacutest maacuter ismerjuumlk hasznaacuteltuk is sokszor Indirekt ciacutemzeacutest is hasznaacuteltunk de az a koacuted-indirekt ciacutemzeacutes volt Amire itt gondolni kell az viszont nem az Sima indirekt ciacutemzeacutesről van szoacute Most fogadjuk el hogy ezt iacutegy hiacutevjaacutek a koumlvetkező alfejezetben megtanuljuk hasznaacutelni Most az a leacutenyeg hogy az alsoacute RAM mind direkt mind indirekt ciacutemzeacutessel eleacuterhető Eacutes emleacutekeztessuumlk magunkat arra is hogy az alsoacute RAM 00h-toacutel 7Fh-ig tart A 80h-toacutel FFh-ig terjedő teruumlletet felső RAM-nak (upper RAM) hiacutevjaacutek Ez teljesen uumlres nyugodtan hasznaacutelhatjuk a sajaacutet baacutejtvaacuteltozoacuteink szaacutemaacutera csak arra figyeljuumlnk hogy a felső RAM kizaacuteroacutelag indirekt ciacutemzeacutessel eacuterhető el A [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten a felső RAM doboza mellett van egy zoumlldes doboz is Ez jelenti a speciaacutelis funkcioacutejuacute regiszterek (SFR-ek) teruumlleteacutet Oda meg azt iacutertaacutek hogy kizaacuteroacutelag direkt ciacutemzeacutes Neacutezzuumlk miről is van itt szoacute A felső RAM eacutes az SFR-ek teruumllete ugyanazt a ciacutemteruumlletet foglalja el Ez a teruumllet 80h-toacutel FFh-ig terjed Az eacuterdekesseacuteg az hogy e keacutet teruumllet bdquoegymaacutes alattrdquo helyezkedik el a memoacuteriaacuteban azonos ciacutemekkel eacutes a processzor eacuteppen azzal tudja megkuumlloumlnboumlztetni a kettőt egymaacutestoacutel hogy egyiket direkt a maacutesikat indirekt ciacutemzeacutessel eacuteri el Ha tehaacutet egy 80h eacutes FFh koumlzoumltti ciacutem szerepel valamely ciacutemzeacutesben akkor az akkor ceacutelozza a felső RAM-ot ha indirekt a ciacutemzeacutes eacutes akkor ceacutelozza valamely SFR-t ha direkt a ciacutemzeacutes Talaacuten most maacuter eacuterthető az uumlgy meacuteg ha elsőre szokatlannak is tűnthellip

A [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten a baracksziacutenű doboz 4 kilobaacutejtos flash-memoacuteriaacutet mutat Ez a memoacuteria az SFR-eken keresztuumll eacuterhető el Ebben a tankoumlnyvben nem taacutergyaljuk A jobb oldali nagyobb saacuterga doboz a belső adatmemoacuteriaacutet szemleacutelteti Ennek meacuterete 2 kilobaacutejt eacutes bdquoveacuteletlenuumllrdquo ehhez is tudnunk kell egy truumlkkoumlt Megfelelő beaacutelliacutetaacutes utaacuten ezt a teruumlletet a processzor bdquouacutegy laacutetjardquo mintha kuumllső adatmemoacuteria lenne eacutes iacutegy eacuteri el Kuumlloumln ciacutemzeacutes tartozik ehhez is ez lesz a kuumllső indirekt Ez akkor is iacutegy van ha

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

kuumllső memoacuteriaacutet egyaacuteltalaacuten nem kapcsoltunk a mikrovezeacuterlőhoumlz Ezt egyeacutebkeacutent megtehetneacutenk eacutes akaacuter 16 megabaacutejtot is meg tudnaacutenk ciacutemezni

A koumlvetkező alfejezetekben adatokat fogunk iacuterni mind az alsoacute RAM-ba mind a felső RAM-ba mind a belső adatmemoacuteriaacuteba Az olvasoacutet mindhaacuteromra megtaniacutetjuk eacutes arra baacutetoriacutetjuk hogy sajaacutet belaacutetaacutesa szerint vaacutelasszon a moacutedszerek koumlzuumll amikor majd oumlnaacutelloacutean keacutesziacutet alkalmazaacutesokat

1 Iacuteraacutes az alsoacute eacutes a felső RAM-baA [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten laacutethatoacute hogy az alsoacute RAM direkt eacutes indirekt moacutedon is ciacutemezhető Most az indirekt ciacutemzeacutest fogjuk vaacutelasztani Az indirekt ciacutemzeacuteshez szuumlkseacuteg lesz egy indexregiszterre ez akaacuter az R0 akaacuter az R1 regiszter lehet Leacutenyeges hogy a toumlbbi R regiszter viszont nem Az alaacutebbiakban előszoumlr is oumlsszeszedjuumlk azokat az utasiacutetaacutesokat melyeket maacutes ciacutemzeacutessel egyeacutebkeacutent maacuter joacutel ismeruumlnk Most viszont indirekt ciacutemzeacutest hasznaacutelunk

ADD ARiADDC ARiSUBB ARiINC RiDEC RiCJNE RidatarelMOV ARiMOV RiAMOV RidataANL ARiORL ARiXRL ARi

Az Ri szimboacutelum pontosan azt jelenti hogy az indirekt ciacutemzeacutesre csak az R0 vagy R1 regisztert hasznaacutelhatjuk (Akkor aacutellna Ri helyett Rn ha az oumlsszes R regiszterrel hasznaacutelhatnaacutenk a ciacutemzeacutest) Ennek a keacutet regiszternek egyetlen baacutejt a meacuterete Ez a baacutejt most egy memoacuteriaciacutemet fog jelenti eacuterteacutekeacutenek megfelelően a 00h-FFh memoacuteriateruumlleten azaz a nullaacutes lapon A fenti utasiacutetaacutesok iacutegy azt a ciacutemet eacuterik el amelyiket a hasznaacutelt regiszter (R0 vagy R1 ) eacuterteacuteke mutat

25 feladat

A mikrovezeacuterlő fogadjon a soros porton keresztuumll legfeljebb 10 szaacutemjegyet eacutes ezeket taacuterolja el A 10 karakter eleacutereacutesekor automatikusan jeleniacutetse meg sorban a 10 karaktert Illegaacutelis karakter (nem szaacutemjegy) eseteacuten speciaacutelis karaktert (farkincaacutet) jeleniacutetsen meg Ha meacuteg nem eacutertuumlk el geacutepeleacuteskor a 10 karaktert de ENTER-t uumltuumlnk akkor is kezdődjoumln meg az addig eltaacuterolt szaacutemjegyek megjeleniacuteteacutese [Code34 Code35 Code36]

A megoldaacutes maacuter nem teljesen elemi iacutegy folyamataacutebraacutet keacutesziacutetuumlnk a vezeacuterelvek alapjaacuten laacutesd [A (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja] aacutebra A folyamataacutebra az aproacute reacuteszleteket most nem tartalmazza Azt szemleacutelteti hogy mi toumlrteacutenik a 10 karakter eleacutereacutesekor ill az ENTER megnyomaacutesakor eacutes akkor ha egyaacuteltalaacuten nem eacuterkezett karakter addig amikor megnyomtaacutek az ENTER-t

162 aacutebra - A [25 feladat] (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

Az ENTER billentyűvel kapcsolatban tartozunk meacuteg egy reacuteszlettel ha a PC-n ENTER-t uumltuumlnk akkor az keacutet koacutedot generaacutel Eacuterkezik egy 13-as koacuted (kocsi vissza) aztaacuten egy 10-es (soremeleacutes) Iacutegy a 13-as eacuteszleleacutese utaacuten el kell nyeletnuumlnk a 10-est azaz ilyenkor meacuteg egy karakter beolvasunk Eacutes termeacuteszetesen semmit nem csinaacutelunk vele Csak nem maradhat ott a pufferban

A koacutedban a char vaacuteltozoacuteban fogjuk az aktuaacutelisan beeacuterkezett karaktert eltaacuterolni A number vaacuteltozoacute azt szaacutemolja hogy haacutenyadik karakterneacutel tartunk Az alsoacute RAM 032h-s memoacuteriaciacutemeacutehez pedig az array szimboacutelumot rendeljuumlk Ehhez uacutej fordiacutetoacutei direktiacutevaacutet tanulunk meg EQU Ez a direktiacuteva az adott ciacutemhez vagy eacuteppen konstanshoz rendeli a megadott szimboacutelumot

array EQU 032h

Az indirekt ciacutemzeacutesekkel ettől a memoacuteriaciacutemtől kezdve fogjuk elmenteni az eacuterkezett legfeljebb 10 karaktert Eacutes lejaacutetszaacuteskor ezzel a ciacutemmel kezdve olvassuk ki őket a memoacuteriaacuteboacutel A koacutedban most sem tuumlntetjuumlk foumll hűseacuteges DELAY szubrutinunkat

Code34asmORG 0060h A teacutenyleges programkoacuted helyechar DATA 030h A beeacuterkező karakter eltaacuterolaacutesaacutera szolgaacuteloacute baacutejtnumber DATA 031h Ennyi darab karakter eacuterkezettarray EQU 032h A menteacutesre hasznaacutelt toumlmb memoacuteriaciacutemeMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud lesznewMOV DPTRmesstart Az indiacutetaacutesi uumlzenet kiiacuteraacutesaCALL SENDSTRINGMOV P215 Erre a koacutedra a kijelzőn semmi sincsMOV R0array R0-ba toumlltjuumlk a memoacuteriatoumlmb kezdeteacutetMOV number0 A karakterek darabszaacutemaacutenak kezdeti eacuterteacuteke

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

fogadCALL GETCHAR Karaktert olvasunk beMOV charA Elmentjuumlk a char vaacuteltozoacutebaCALL SENDCHAR Visszakuumlldjuumlk a PC-nekCLR CSUBB A13 Megneacutezzuumlk hogy ENTER eacuterkezett-e azaz 13JZ enter Ha igen elungrunk lekezelniMOV Achar A-ba tesszuumlk a char-ba ideiglenesen betett a PC-ről eacuterkezett karaktertMOV R0A Indirekt ciacutemzeacutessel a memoacuteriaacuteba mentjuumlkINC number Noumlveljuumlk az elmentett karakterek darabszaacutemaacutetINC R0 Noumlveljuumlk az indirekt ciacutemzeacuteshez hasznaacutelt regiszter eacuterteacutekeacutetMOV Anumber Megneacutezzuumlk eleacutertuumlk-e aCLR CSUBB A10 10 karaktert Ha igenJZ kijelez ugrunk kijelezniJMP fogad Visszaugrunk a koumlvetkező karakter fogadaacutesaacutehozenterCALL GETCHAR ENTER eseteacuten a 13 utaacuten 10 is joumln Ezt kiolvassuk de a tovaacutebbiakban nem csinaacutelunk vele semmitMOV Anumber Amennyiben number eacuterteacuteke 0 azaz egyJZ new karakter sem eacuterkezett visszaugrunk uacutej karaktersort fogadnikijelezMOV DPTRmesrepeat A szaacutemok kijelzeacutese előtti uumlzenetCALL SENDSTRINGMOV R30 Ez a ciklus fogja egyeseacutevel kiolvasni a memoacuteriaacuteboacutel az elmentett karaktereket amiket aztaacuten kirak a kijelzőreMOV R0array R0-ba tesszuumlk a memoacuteriatoumlmb kezdeti ciacutemeacutetdisplayMOV A10 Roumlvid időt vaacuterakozunkCALL DELAYMOV AR0 A-ba tesszuumlk az indirekt ciacutemzeacutessel kiolvasott karaktertCJNE A0relac1 Ha az eltaacuterolt karakter nem 0 eacutes 9 koumlzeacuterelac1 esik akkor farkincaacutet fogunk kijelezniJC illegal megjeleniacuteteacuteskor Eacutes odaugrunkCJNE Arelac2 Az előbbi az Altrsquo0rsquo eset ez meg azrelac2JNC illegal Agtrsquo9rsquo (Agt=rsquorsquo) esetportMOV P2A Kirakjuk a P2-es portra MOV A50 Vaacuterunk kicsit a kijelzeacutes utaacuten 05 s-etCALL DELAYMOV P215 Kikapcsoljuk a kijelzőtMOV A5 Nagyon roumlvid ideig vaacuterunk 005 sCALL DELAYINC R3 Noumlveljuumlk a ciklusvaacuteltozoacutetMOV AR3 Megvizsgaacuteljuk a ciklusvaacuteltozoacutetCJNE Anumbereval R3 lt numberevalJNC new Ha R3 = number akkor visszaugrunk uacutej karaktersorozat beolvasaacutesaacutehozINC R0 Noumlveljuumlk R0-tJMP display Folytatjuk az elmentett szaacutemjegyek kijelzeacuteseacutetillegalMOV A12 A farkincaacutenak nevezett karakter koacutedjaJMP port Ugrunk a teacutenyleges kijelzeacuteshez Adatok (karakterfuumlzeacuterek) messtart DB 101013Enter some characters10130mesrepeat DB 10Watch the display10130$INCLUDE(UARTIOASM)

A fenti koacutedban az alsoacute RAM-ba iacutertunk adatokat Egyetlen sor moacutedosiacutetaacutesaacuteval a felső RAM-ba is iacuterhatunk Ehhez

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

raacuteadaacutesul teacutenylegesen kizaacuteroacutelag indirekt ciacutemzeacutessel feacuterhetuumlnk hozzaacute hiszen ha direkt ciacutemzeacutest hasznaacutelnaacutenk akkor az SFR-eket iacuternaacutenk foumlluumll ami toumlbbnyire azonnal eleacuteg massziacutev programhalaacutelhoz vezetne A megvaacuteltoztatni kiacutevaacutent sor a memoacuteriateruumllet kezdőciacuteme Legyen ez most a felső RAM kezdete azaz 80h

array EQU 080h

Ennyi Semmi toumlbb Ezzel a ciacutemmegadaacutessal az adatok a felső RAM-ba keruumllnek Ezt a vaacuteltozatot a koacutedkoumlnyvtaacuterban a teljesseacuteg kedveacuteeacutert Code35 testesiacuteti meg

2 Iacuteraacutes a belső adatmemoacuteriaacutebaA [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten laacutethatoacute belső adatmemoacuteria hasznaacutelata nem igeacutenyel tuacutel nagy erőfesziacuteteacutest de neacutehaacuteny dolgot meg kell eacutertenuumlnk hozzaacute Ahhoz hogy hasznaacutelni tudjuk 1-re kell aacutelliacutetanunk egy bizonyos bitet egy olyan SFR-ben ami az ADuC 842-es speciaacutelis lehetőseacutegeiről rendelkezik Ez a regiszter a CFG842 Reacuteszletes leiacuteraacutesa megtalaacutelhatoacute a gyaacuteri dokumentumban [1 p 36 Table 13] Ezzel a regiszterrel fontos beaacutelliacutetaacutesokat tehetuumlnk meg a kiterjesztett veremmutatoacuteval a PWM-jelek laacutebaival a DA-aacutetalakiacutetoacute puffereacutevel kuumllső oacuterajel-generaacutetorral az SPI-busszal kapcsolatban eacutes a belső adatmemoacuteria eleacutereacuteseacutevel kapcsolatban Nekuumlnk ebben a tankoumlnyvben kizaacuteroacutelag ez utoacutebbi a fontos Jegyezzuumlk meg hogy az ADuC 842-es belső adatmemoacuteriaacuteja akkor keacutepeződik le a kuumllső memoacuteria alsoacute 2 kilobaacutejtjaacutera ha CFG842 0 bitjeacutet 1-re aacutelliacutetjuk Ellenkező esetben a belső adatmemoacuteriaacutet nem tudjuk eleacuterni Ezt a bitet a maacuter megismert logikai maszkolaacutessal aacutelliacutethatjuk 1-re

ORL CFG84200000001b

A kuumllső adatmemoacuteria eleacutereacuteseacutehez uacutej ciacutemzeacutesmoacutedot kell megtanulnunk Ez a kuumllső indirekt ciacutemzeacutes Az utasiacutetaacutes mnemonikjaacuteban szereplő X betű az External angol szoacutera utal ami kuumllsőt jelent A ciacutemzeacuteshez eacuteppen uacutegy szuumlkseacuteg lesz az adatmutatoacutera mint a koacuted-indirekt ciacutemzeacutesneacutel

MOVX ADPTRMOVX DPTRA

A ciacutemzeacutesnek van egy maacutesik vaacuteltozata is ehhez az utasiacutetaacuteshoz

MOVX ARiMOVX RiA

Ez utoacutebbit viszont csak nagyon ritkaacuten hasznaacuteljaacutek a programozoacutek csak akkor amikor elegendő a ciacutemzeacuteshez az R0 vagy R1 regiszter Egyeacuteb esetekben az adatmutatoacutet hasznaacuteljuk az indirekt moacutedon megadott ciacutem megfogalmazaacutesaacutehoz

A Code34 eacutes Code35 programokban csak neacutehaacuteny vaacuteltoztataacutest kell megtennuumlnk eacutes maacuter műkoumldni is fog a kuumllső indirekt ciacutemzeacutes Ez lesz a Code36 program Az első vaacuteltoztataacutes a CFG842 regiszter 0 bitjeacutenek 1-re aacutelliacutetaacutesa ahogy azt fentebb bemutattuk A maacutesodik hogy a sima R0-val megfogalmazott indirekt ciacutemzeacutes helyett mindig a kuumllső indirekt ciacutemzeacutest hasznaacuteljuk Ehhez persze az adatmutatoacuteba mindig időben be kell toumlltenuumlnk a kuumllső memoacuteriakeacutent eacutertelmezet belső adatmemoacuteria megfelelő ciacutemeacutet ami legyen most naacutelunk mindjaacutert a teruumllet legeleje

MOV DPTR0000h

Ha az adatmutatoacutenak toumlrteacutenő eacuterteacutekadaacutest megtesszuumlk akkor maacuter csak az oumlsszes

MOV AR0

eacutes

MOV R0A

utasiacutetaacutest kell lecsereacutelnuumlnk a koumlvetkezőkre

MOVX ADPTR

eacutes

MOV DPTRA

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

A nagyon keveacutes vaacuteltoztataacutes elleneacutere Code36-ot meacutegis reacuteszletezzuumlk hiszen igen nagy fontossaacuteggal biacuter Az elteacutereacuteseket Code34-hez (eacutes Code35-houmlz) keacutepest saacuterga kiemeleacutessel jeloumlljuumlk

Code36asmORG 0060h A teacutenyleges programkoacuted helyechar DATA 030h A beeacuterkező karakter eltaacuterolaacutesaacutera szolgaacuteloacute baacutejtnumber DATA 031h Ennyi darab karakter eacuterkezettMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszORL CFG84200000001b A belső adatmemoacuteria lekeacutepezeacutese a kuumllső adatmemoacuteria alsoacute reacuteszeacuterenewMOV DPTRmesstart Az indiacutetaacutesi uumlzenet kiiacuteraacutesaCALL SENDSTRINGMOV P215 Erre a koacutedra a kijelzőn semmi sincsMOV DPTR0000h A ciacutem elhelyezeacutese az adatmutatoacutebaMOV R0array R0-ba toumlltjuumlk a memoacuteriatoumlmb kezdeteacutetMOV number0 A karakterek darabszaacutemaacutenak kezdeti eacuterteacutekefogadCALL GETCHAR Karaktert olvasunk beMOV charA Elmentjuumlk a char vaacuteltozoacutebaCALL SENDCHAR Visszakuumlldjuumlk a PC-nekCLR CSUBB A13 Megneacutezzuumlk hogy ENTER eacuterkezett-e azaz 13JZ enter Ha igen elungrunk lekezelniMOV Achar A-ba tesszuumlk a char-ba ideiglenesen betett a PC-ről eacuterkezett karaktertMOVX DPTRA Kuumllső indirekt ciacutemzeacutessel a memoacuteriaacuteba mentjuumlkINC number Noumlveljuumlk az elmentett karakterek darabszaacutemaacutetINC DPTR Noumlveljuumlk a kuumllső indirekt ciacutemzeacuteshez hasznaacutelt adatmutatoacute eacuterteacutekeacutetMOV Anumber Megneacutezzuumlk eleacutertuumlk-e aCLR CSUBB A10 10 karaktert Ha igenJZ kijelez ugrunk kijelezniJMP fogad Visszaugrunk a koumlvetkező karakter fogadaacutesaacutehozenterCALL GETCHAR ENTER eseteacuten a 13 utaacuten 10 is joumln Ezt kiolvassuk de a tovaacutebbiakban nem csinaacutelunk vele semmitMOV Anumber Amennyiben number eacuterteacuteke 0 azaz egyJZ new karakter sem eacuterkezett visszaugrunk uacutej karaktersort fogadnikijelezMOV DPTRmesrepeat A szaacutemok kijelzeacutese előtti uumlzenetCALL SENDSTRINGMOV R30 Ez a ciklus fogja egyeseacutevel kiolvasni a memoacuteriaacuteboacutel az elmentett karaktereket amiket aztaacuten kirak a kijelzőreMOV DPTR0000h DPTR-be tesszuumlk a memoacuteriatoumlmb kezdeti ciacutemeacutetdisplayMOV A10 Roumlvid időt vaacuterakozunkCALL DELAYMOVX ADPTR A-ba tesszuumlk a kuumllső indirekt ciacutemzeacutessel kiolvasott karaktertCJNE A0relac1 Ha az eltaacuterolt karakter nem 0 eacutes 9 koumlzeacuterelac1 esik akkor farkincaacutet fogunk kijelezniJC illegal megjeleniacuteteacuteskor Eacutes odaugrunkCJNE Arelac2 Az előbbi az Altrsquo0rsquo eset ez meg azrelac2JNC illegal Agtrsquo9rsquo (Agt=rsquorsquo) esetportMOV P2A Kirakjuk a P2-es portra MOV A50 Vaacuterunk kicsit a kijelzeacutes utaacuten 05 s-et

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

CALL DELAYMOV P215 Kikapcsoljuk a kijelzőtMOV A5 Nagyon roumlvid ideig vaacuterunk 005 sCALL DELAYINC R3 Noumlveljuumlk a ciklusvaacuteltozoacutetMOV AR3 Megvizsgaacuteljuk a ciklusvaacuteltozoacutetCJNE Anumbereval R3 lt numberevalJNC new Ha R3 = number akkor visszaugrunk uacutej karaktersorozat beolvasaacutesaacutehozINC DPTR Noumlveljuumlk DPTR-tJMP display Folytatjuk az elmentett szaacutemjegyek kijelzeacuteseacutetillegalMOV A12 A farkincaacutenak nevezett karakter koacutedjaJMP port Ugrunk a teacutenyleges kijelzeacuteshez Adatok (karakterfuumlzeacuterek) messtart DB 101013Enter some characters10130mesrepeat DB 10Watch the display10130$INCLUDE(UARTIOASM)

Felhiacutevjuk a figyelmet arra hogy mivel csak 10 karaktert kell elmentenuumlnk most pont lehetne hasznaacutelni a

MOVX ARiMOVX RiA

utasiacutetaacutespaacutert is Ekkor termeacuteszetesen az adatmutatoacute helyett a hasznaacutelt R regiszternek (R0 agy R1) kellene a megfelelő helyen eacuterteacuteket adnunk eacutes azt szintuacutegy a megfelelő helyen noumlvelnuumlnk laacutesd a saacuterga kiemeleacuteseket Code36-ban

Created by XMLmind XSL-FO Converter

17 fejezet - IdőziacutetőkszaacutemlaacuteloacutekA soros porti kommunikaacutecioacuteroacutel szoacuteloacute egyik alfejezetben ([Az UART soros interfeacutesz]) maacuter emliacutetettuumlk hogy az ADuC 842-esben neacutegy időziacutetőszaacutemlaacuteloacute talaacutelhatoacute A 3 sorszaacutemuacutet kifejezetten a soros porti kommunikaacutecioacutehoz tervezteacutek eacutes ennek műkoumldeacuteseacutet ott ismertettuumlk A maacutesik haacuterom időziacutetőszaacutemlaacuteloacute azaz a 0 1 eacutes 2 baacutermilyen olyan feladatra hasznaacutelhatoacute amit a nevuumlk is takar Ha időziacutetőkeacutent uumlzemeltetjuumlk őket akkor egy oacuterajel egy kettyeneacutest jelent (Ennek eacutertelmeacutet keacutesőbb tisztaacutezzuk) Ez az uumlzemmoacuted kivaacuteloacutean alkalmas arra hogy időziacuteteacutest hajtsunk veacutegre ezekkel az eszkoumlzoumlkkel A szaacutemlaacuteloacute uumlzemmoacuted kicsit maacutest jelent Ilyenkor a chip megfelelő laacutebaacuten mutatkozoacute 1-0-aacutetmenet ugratja eggyel a szaacutemlaacuteloacute eacuterteacutekeacutet Ezzel a lehetőseacuteggel azonban e tankoumlnyvben nem foglalkozunk

A tankoumlnyvben a 0 időziacutetőt fogjuk toumlbb peacuteldaacuteban felhasznaacutelni Innentől kezdve tehaacutet nem időziacutetőnekszaacutemlaacuteloacutenak nevezzuumlk hanem csak időziacutetőnek (Az olvasoacutet arra keacuterjuumlk hogy azt se vegye zokon ha neacuteha TIMER 0-t iacuterunk) Az 1 időziacutető egyeacutebkeacutent pontosan uacutegy műkoumldik mint a 0 időziacutető eacutes a 2 sorszaacutemuacute is toumlbb hasonloacutesaacutegot mutat az előzőekkel Annyiban mindhaacuterom megegyezik hogy 16 bit felbontaacutesuacuteak Ez az eacuterteacutek nyilvaacuten keacutet baacutejtot jelent melyek egy-egy SFR-ben talaacutelhatoacutek A 0 időziacutető eseteacuteben ezek a TH0 eacutes TL0 regiszterek A T betű a Timer (időziacutető) szoacuteboacutel szaacutermazik a 0 szaacutemjegy a 0 időziacutetőt jeloumlli A H betű a High azaz felső jelzőt takarja Ez lesz tehaacutet a 16-bites eacuterteacutek felső baacutejtja Az L betű maacuter sejthető moacutedon a Low azaz alsoacute jelzőből szaacutermazik Ez pedig a 16-bites eacuterteacutek alsoacute baacutejtja lesz Mindez akkor igaz ha teacutenylegesen 16-bites uumlzemmoacutedot hasznaacutelunk

A 0 eacutes 1 időziacutetőhoumlz minthogy feleacutepiacuteteacutesuumlkben pontosan megegyeznek toumlbb olyan regiszter tartozik melyek egyik fele az egyik maacutesik fele a maacutesik időziacutetőt konfiguraacutelja Ez a TMOD eacutes TCON regiszter A most koumlvetkező taacuteblaacutezatokban ([A TMOD SFR parameacuteterei] eacutes [A TCON SFR parameacuteterei]) csak a 0 időziacutetőre vonatkozoacute biteket taacutergyaljuk az 1 időziacutetőre vonatkozoacutek leiacuteraacutesa megegyezik ezekkel csak a hivatkozaacutesokat kell kicsereacutelnuumlnk 0-roacutel 1-re

171 taacuteblaacutezat - A TMOD SFR parameacuteterei

TMOD Control and configuration for Timers 0 and 1

A 0 eacutes 1 időziacutető vezeacuterlő- eacutes konfiguraacutecioacutes regisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 Gate Az 1 időziacutető vezeacuterlő- eacutes konfiguraacutecioacutes bitjei Hataacutesuk megegyezik a 0 időziacutetőre az alaacutebbiakban leiacutertakkal

6 CT

5 M1

4 M0

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

3 Gate Ha 0 akkor a 0 időziacutetőt minden esetben engedeacutelyezzuumlk amikor a TR0 vezeacuterlőbitet magasra aacutelliacutetjuk (laacutesd TCON regiszter) Az 1 esetet nem taacutergyaljuk

2 CT Ha 0 akkor időziacutető uumlzemmoacutedot aacutelliacutetunk be A szuumlkseacuteges jelet a belső oacuterajel jelenti Az 1 esetet nem taacutergyaljuk

1 M1 A 0 időziacutető uumlzemmoacutedjaacutenak bitje

0 M0 A 0 időziacutető uumlzemmoacutedjaacutenak bitje

M1 M0 Uumlzemmoacuted

0 0 TH0 8-bites időziacutetőkeacutent uumlzemel TL0 5-bites

előskaacutelaacutezoacutekeacutent tekintendő

0 1 16-bites időziacutető TH0 eacutes TL0 egyuumltt kezelendő

1 0 8-bites uacutejratoumlltős uumlzemmoacuted TH0 eacuterteacuteke mindig

betoumlltődik TL0-ba valahaacutenyszor az tuacutelcsordul

1 1 Nem taacutergyaljuk

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

A TMOD regiszterneacutel a gyaacuteri leiacuteraacutes szerint [1 p 60 Table 28] valoacutejaacuteban van egy aproacute kuumlloumlnbseacuteg a keacutet időziacutető 11-es uumlzemmoacutedjai koumlzoumltt de ezzel az uumlzemmoacuteddal ebben a tankoumlnyvben nem foglalkozunk A toumlbbi reacuteszlet a keacutet időziacutetőre viszont teacutenylegesen toumlkeacuteletesen megegyezik A TCON regiszternek csak 4 bitje vonatkozik az időziacutetőkreszaacutemlaacuteloacutekra A toumlbbi bit eacuterdekes moacutedon a megszakiacutetaacutest kivaacuteltani keacutepes kuumllső esemeacutenyekre vonatkozik Minthogy ezeket taacutergyaltuk a tankoumlnyvben (laacutesd [Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes] alfejezet) a taacuteblaacutezatboacutel sem hagyhatjuk ki a raacutejuk vonatkozoacute tovaacutebbi informaacutecioacutekat Ezeknek birtokaacuteban az olvasoacute tovaacutebb finomiacutethatja a gombnyomaacutesroacutel mint kuumllső esemeacutenyről szerzett tudaacutesaacutet

172 taacuteblaacutezat - A TCON SFR parameacuteterei

TCON TimerCounter 0 and 1 Control Register

A 0 eacutes 1 időziacutetőszaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Leiacuteraacutes

7 TF1 Az 1 időziacutető vezeacuterlő bitjei Hataacutesuk megegyezik a 0 időziacutetőre az alaacutebbiakban leiacutertakkal

6 TR1

5 TF0 A 0 időziacutető tuacutelcsordulaacutesi jelzőbitje Hardveresen aacutell 1-re tuacutelcsordulaacuteskor Hardveresen toumlrlődik ha a programszaacutemlaacuteloacute a megszakiacutetaacutesi rutinra aacutell

4 TR0 A 0 időziacutető futaacutesi vezeacuterlőbitje Ha 1-re aacutelliacutetjuk elindul az időziacutető Ha 0-ra aacutelliacutetjuk megaacutell az időziacutető

3 IE1 Az 1 kuumllső esemeacuteny kezeleacuteseacutenek bitjei Hataacutesuk megegyezik a 0 kuumllső esemeacutenyre

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

az alaacutebbiakban leiacutertakkal

2 IT1

1 IE0 A 0 kuumllső esemeacuteny megszakiacutetaacutesi jelzőbitje Az IT0 bittől fuumlggően hardveresen aacutell 1-re lefutoacute eacutelneacutel vagy nulla jelszintneacutel

0 IT0 A 0 kuumllső esemeacuteny megszakiacutetaacutesaacutenak aktivaacutelaacutesi tiacutepusa Ha 1-et aacutelliacutetunk be 1-0 aacutetmenetre vaacuteltoacutedik ki a megszakiacutetaacutes Ha 0-t aacutelliacutetunk be alacsony jelszintre vaacuteltoacutedik ki megszakiacutetaacutes

Az időziacutetők uacutegy műkoumldnek hogy az oacuterajeleket szaacutemlaacuteloacute regiszterbe vagy regiszterekbe (ez a kivaacutelasztott uumlzemmoacutedtoacutel fuumlgg) betoumlltjuumlk a kezdeti eacuterteacuteket 16-bites uumlzemmoacutednaacutel a keacutet regiszter TH0 eacutes TL0 egyuumltt eacutertelmezendő a kettő egyuumltt egy 16-bites eacuterteacuteket takar Minden egyes oacuterajelre a szaacutemlaacuteloacuteregiszter vagy regiszterek egyuumlttes eacuterteacuteke eggyel nő Amennyiben ez az eacuterteacutek eleacuteri a maximaacutelisan aacutebraacutezolhatoacute eacuterteacuteket majd a koumlvetkező oacuterajelneacutel bdquoaacutetfordulrdquo azaz ismeacutet nulla lesz bekoumlvetkezik a megszakiacutetaacutes Ennek vektora TIMER 0 eseteacuten a 000Bh ciacutem TIMER 1 eseteacuten pedig a 001Bh ciacutem

Megismeacuteteljuumlk az időziacutetők regisztere vagy regiszterei nem lefeleacute hanem eacuteppen hogy foumllfeleacute szaacutemolnak A megszakiacutetaacutes pedig ezek tuacutelcsordulaacutesakor koumlvetkezik be

A [Az IE SFR parameacuteterei]ban megtalaacuteljuk a megszakiacutetaacutesok egy reacuteszeacutenek engedeacutelyezőbitjeacutet Timer 0 eseteacuteben ez az ET0 Timer 1 eseteacuteben pedig az ET1 A 8-bites uumlzemmoacuted nagyon nagy frekvenciaacutejuacute műkoumldeacutest eredmeacutenyezne ezeacutert elsőkeacutent a 16-bites uumlzemmoacuteddal mutatunk be tanulsaacutegos alkalmazaacutesokat

1 Egyszerű időmeacutereacutes az időziacutetővelIdeacutezzuumlk foumll a [14 feladat]ot de tegyuumlnk hozzaacute egy koumlvetelmeacutenyt eacutes adjunk neki uacutej sorszaacutemot is

26 feladat

Az ADuC-panel LED-soraacutenak oumlsszes LED-je villanjon foumll roumlvid ideig minden egyes maacutesodpercben Hasznaacuteljuk ehhez a 0 időziacutetőt [Code37]

A kiacutevaacutenalmakat azeacutert taacutergyaljuk kuumlloumln feladatkeacutent mert teljesen maacutes struktuacuteraacutejuacute megoldaacutest kiacutevaacuten eacutes előremutat egy egeacuteszen kerek alkalmazaacutes iraacutenyaacuteba Ezt a feladatot most a 0 időziacutetővel fogjuk megoldani

Neacutezzuumlk most meg hogy hogyan kell kiszaacutemiacutetanunk a TH0 eacutes TL0 regiszterekbe toumlltendő kezdeti eacuterteacutekeket Azt maacuter tudjuk hogy a keacutet regiszter egyuumlttes 16-bites eacuterteacuteke minden egyes oacuterajel-ciklussal eggyel nő Fontos hogy az eacuterteacutek nő tehaacutet felfeleacute mozdul Keacuterdeacutes tehaacutet hogy mit toumlltsuumlnk a regiszterekbe kezdeti eacuterteacutek gyanaacutent ahhoz

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

hogy mondjuk 001 s teljen el keacutet tuacutelcsordulaacutes koumlzoumltt Ezt kiszaacutemiacutetanunk nem lesz neheacutez

A default beaacutelliacutetaacutes szerint az oacuterajel 2 097 152 Hz Ahhoz hogy 001 s teljen el 20 97152 darab oacuterajel-ciklusnak kell lefutnia Elmeacuteletileg Ez az eacuterteacutek csakis egeacutesz szaacutem lehet iacutegy kerekiacutetsuumlk azt 20 972 darabra Ez hexadecimaacutelisan 51ECh Na most ennyi ciklusnak kell tehaacutet lefutnia a tuacutelcsordulaacutesig Ezek szerint a kezdeti eacuterteacuteknek FFFFh ndash 51ECh = AE13h-nak kell lennie De biztos hogy ennyinek kell lennie Vigyaacutezzunk mert ha FFFFh-roacutel indul a szaacutemlaacuteloacute akkor a tuacutelcsordulaacutesig 1 ciklus meacuteg lefut Eacuteppen ezeacutert a kapott AE13h eacuterteacutekhez 1-et meacuteg hozzaacute kell adnunk (eacutes ha iacutegy szaacutemolunk akkor mindig) iacutegy a veacutegeredmeacuteny AE14h Alsoacute baacutejtkeacutent eacutes felső baacutejtkeacutent ezt iacutegy toumlltjuumlk TIMER 0 regisztereibe

MOV TH00AEhMOV TL0014h

Eacutes indiacutethatjuk a szaacutemlaacuteloacutet Ehhez magasra kell aacutelliacutetanunk a TR0 bitet vouml [A TCON SFR parameacuteterei]

A programban kuumlloumln vaacuteltozoacutet dedikaacutelunk a szaacutezadmaacutesodperceknek (s100) Ennek eacuterteacutekeacutet mindig eggyel noumlveljuumlk amennyiben bekoumlvetkezik egy megszakiacutetaacutes Eacutes minthogy a TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes 001 maacutesodpercenkeacutent koumlvetkezik be ezeacutert helyesen cselekszuumlnk A megszakiacutetaacutesban maacuter csak azt kell figyelnuumlnk hogy a szaacutezadmaacutesodpercek vaacuteltozoacuteja eleacuterte-e maacuter a 99-es eacuterteacuteket Ha igen akkor a koumlvetkező beavatkozaacutes nem a noumlveleacutese lesz hanem lenullaacutezzuk viszont magasra aacutelliacutetunk egy jelzőbitet (mp) amely tehaacutet az egeacutesz maacutesodpercek ugraacutesaacutet jelzi Ezt a jelzőbitet pedig a főprogram fogja figyelni eacutes ha 1-re billen foumllvillantja a LED-sort egy tized maacutesodperc erejeacuteig A megszakiacutetaacutest jelentő programreacuteszneacutel csak arra az egyre kell vigyaacuteznunk nehogy a veacutegrehajtaacutesa 001 s-naacutel hosszabb időt oumlleljen foumll Szerencseacutere ezt meg sem koumlzeliacutetjuumlk Ettől fuumlggetlenuumll a regiszterveacutedelem utaacuten roumlgtoumln azzal folytatjuk a megszakiacutetaacutest lekezelő programreacuteszt hogy megaacutelliacutetjuk az időziacutetőt uacutejra betoumlltjuumlk az időziacuteteacuteshez szuumlkseacuteges eacuterteacutekeket aztaacuten elindiacutetjuk az időziacutetőt Minden maacutessal csakis ez utaacuten toumlrőduumlnk

A most koumlvetkező koacutedban ismeacutet felhasznaacuteljuk eacutes hagyomaacutenyainkhoz hiacuteven most sem tuumlntetjuumlk foumll foumlloumlslegesen a DELAY szubrutinunkat Figyeljuumlk meg hogy a megszakiacutetaacutest lekezelő programreacuteszben most maacuter okvetlenuumll alkalmaznunk kell a koraacutebban megtanult regiszterveacutedelmet hiszen a programreacutesz hasznaacutelja az akkumulaacutetort A veacutedelem most elegendő erre az egy regiszterre hiszen maacutes nincs veszeacutelyben Arra is figyelnuumlnk kell hogy a verembe mentett eacuterteacuteket mindig kivegyuumlk mielőtt visszateacuteruumlnk a megszakiacutetaacutesboacutel

Code37asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 000Bh TIMER0 tuacutelcsordulaacutesaJMP TIMER0 aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetes100 DATA 030h A szaacutezadmaacutesodpercek vaacuteltozoacutejamp BIT 00h A maacutesodpercek ugraacutesaacutenak jelzőbitje A TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes TIMER0PUSH ACC RegiszterveacutedelemCLR TR0 TIMER0 leaacutelliacutetaacutesaMOV TH00AEh Az időziacutető kezdeti eacuterteacutekeinekMOV TL0014h uacutejboacuteli betoumllteacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV As100 Megvizsgaacuteljuk s100 tartalmaacutetCJNE A99novel100 Ha meacuteg nem 99 noumlvelhetjuumlkMOV s1000 Kuumlloumlnben nullaacutezzukSETB mp Eacutes 1-re aacutelliacutetjuk az mp jelzőbitet hiszen eltelt 1 maacutesodpercPOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETInovel100INC s100 Szaacutezadmaacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETI FŐPROGRAM MAINMOV TMOD00000001b TIMER0 16-bites uumlzemmoacutedban műkoumldik

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

MOV TH00AEh Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV TL0014h Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaCLR mp Az mp jelzőbit toumlrleacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesSETB ET0 Timer0 megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV A10 Az időhuacutezaacutes parameacutetere (01 s)lesJNB mp$ Vaacuterunk az mp jelzőbit bebillenteacuteseacutereCLR mp Azonnal toumltoumlljuumlk ha előzőleg bebillentMOV P20 LED-sor bekapcsolaacutesaCALL DELAY VaacuterakozaacutesMOV P20FFh LED-sor kikapcsolaacutesaJMP les Ugraacutes vissza figyelni az mp jelzőbitet

2 Stopperoacutera keacutet fotokapuvalAz előző alfejezetben elemi alkalmazaacutest laacutettunk arra hogy hogyan lehet időmeacuterő szerkezetet csinaacutelni az ADuC 842-esből az egyik időziacutető felhasznaacutelaacutesaacuteval A most koumlvetkező feladat maacuter olyan alkalmazaacutest fogalmaz meg amit bizonyaacutera sok helyen megtalaacutelhatunk a gyakorlatban is Iacutegy lassan-lassan kezdjuumlk elhagyni a tankoumlnyvbe illő de bdquotankoumlnyvszaguacuterdquo feladatokat eacutes veacutegre eleacuterkeztuumlnk egy olyanhoz amelynek maacuter szereacutenyen de meacuternoumlki moacutedon tudunk megfelelni

27 feladat

Keacutesziacutetsuumlnk időmeacuterő eszkoumlzt keacutet fotokapuval Amikor egy objektum aacutethalad az elsőn induljon el a stopper amikor aacutethalad a maacutesodikon aacutelljon meg a stopper A meacutert időt a mikrovezeacuterlő szaacutezadmaacutesodpercre pontosan kuumlldje el a PC-nek A stopper indulaacutesa előtt zoumlld LED vilaacutegiacutetson az aacuteramkoumlri panelon a stopper futaacutesa koumlzben piros Megaacutellaacuteskor ismeacutet zoumlld [Code38]

A [27 feladat] megoldaacutesaacutehoz egyszerű kis aacuteramkoumlr tartozik melynek elemeivel maacuter talaacutelkoztunk Az aacuteramkoumlr a [A (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute A keacutet fotokapu feleacutepiacuteteacutese azonos egyeacutebiraacutent megegyezik a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacuteeacuteval A keacutet LED-et azeacutert koumltjuumlk keacutet sorszaacutemaacuteban erősen elteacuterő laacutebra hogy keacutenyelmesebben elfeacuterjenek a proacutebapanelon A keacutet fototranzisztor vaacuteltozatlanul uacutegy műkoumldik hogy ha nincs semmilyen objektum a feacutenyuacutetban akkor a P20 ill P21 portbiteknek megfelelő laacutebakat foumlldre huacutezzaacutek Mindegyik termeacuteszetesen a neki megfelelőt Amennyiben elzaacuterja valami a feacutenyutat az ott leacutevő fototanzisztor lezaacuter ami azt vonja maga utaacuten hogy a P20 ill P21 portbiteknek megfelelő laacuteb kiuumll a taacutepfeszuumlltseacutegre A portbitek eacuterteacutekeacutet azutaacuten koumlnnyen olvashatjuk szoftveresen

171 aacutebra - A [27 feladat] (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

A koacuted most maacuter hosszuacutenak tűnik de ha jobban megneacutezzuumlk ez főkeacutent a soros porton elkuumlldoumltt jelek eacutes uumlzenetek adatai miatt van iacutegy Vaacuteltozoacutet is joacutecskaacuten toumlbbet hasznaacutelunk mint a koraacutebbi programokban Egy-egy bitvaacuteltozoacutet rendeluumlnk a keacutet LED-hez (green eacutes red) ill a fototranzisztorokra kapcsolt laacutebakhoz (gate1 eacutes gate2) Ezekre toumlbb szoacutet nem is eacuterdemes vesztegetni Sokkal eacuterdekesebb lesz a baacutejtvaacuteltozoacutek szerepe Az időziacutetőnek koumlszoumlnhetően a megszakiacutetaacutes 001 maacutesodpercenkeacutent koumlvetkezik be A szaacutezadmaacutesodperceket az s100 vaacuteltozoacute szaacutemolja Amennyiben ez maacuter eleacuterte a 9-et a koumlvetkező megszakiacutetaacuteskor uacutejra 0-t iacuterunk bele viszont tovaacutebb ugrunk a tizedmaacutesodpercek noumlveleacuteseacutehez Ezeknek s10-ben kumulaacuteloacutedik az eacuterteacuteke Ha az előzőekhez hasonloacutean ez is eleacuteri a 9-es eacuterteacuteket akkor ezt is nullaacutezzuk de tovaacutebb ugrunk a maacutesodpercek noumlveleacuteseacutehez A maacutesodperceket s1 gyűjti Ennek eacuterteacuteke azonban maacuter 59-ig mehet Ha eltelt egy perc akkor bdquonullaacutezoacutedikrdquo a stopperoacuteraacutenk időeacuterteacuteke eacutes uacutegy folytatoacutedik az időmeacutereacutes mintha akkor indult volna el Ennek a kis fogyateacutekossaacutegnak tehaacutet tudataacuteban kell lennuumlnk

A főprogram a soros port eacutes Timer 0 inicializaacutelaacutesa utaacuten bekapcsolja a zoumlld LED-et majd arra vaacuter hogy az első fotokapu bitje (gate1) magasra billenjen Meacuteg egyszer ez akkor koumlvetkezik be ha valamilyen objektum behatol a feacutenyuacutetba Ekkor elindiacutetjuk az időziacutetőt kikapcsoljuk a zoumlld LED-et eacutes bekapcsoljuk helyette a pirosat Ez utaacuten arra fogunk vaacuterni hogy az 1 fotokapun aacutethaladoacute objektum a 2 fotokapun is aacutethaladjon Ekkor megaacutelliacutetjuk az időziacutetőt azaz veacuteget eacuter az idő meacutereacutese Az eltelt idő eacuterteacutekeacutet a programnak maacuter csak aacutet kell alakiacutetania karakterekkeacute eacutes el kell kuumlldenie a PC-nek a koumlvetkező kiacuteseacuterőszoumlveggel eacutes formaacutetumban

Time elapsed 0123 s

A kiacuteseacuterőszoumlveg elkuumlldeacutese nem jelent probleacutemaacutet ilyesmit maacuter csinaacuteltunk a koraacutebbi koacutedokban A szaacutezadmaacutesodpercek ill tizedmaacutesodpercek eacuterteacuteke csak egy-egy baacutejt raacuteadaacutesul ezek szaacutemjegyek iacutegy csak ASCII karakterreacute kell őket alakiacutetunk (hozzaacuteadjuk a rsquo0rsquo karakter ASCII koacutedjaacutet azaz 30h-t) aztaacuten kuumlldhetjuumlk is a PC-nek Ez előtt azonban el kell kuumlldenuumlnk a maacutesodpercek eacuterteacutekeacutet Itt meg kell aacutellnunk egy pillanatra hiszen a maacutesodpercek eacuterteacuteke keacutetjegyű szaacutem is lehet (0-59) A keacutetjegyű szaacutemot keacutet egyjegyű szaacutemra kell bontanunk azaz kuumlloumln kell vaacutelasztanunk a tiacutezeseket eacutes az egyeseket Ehhez megtanulunk egy uacutej utasiacutetaacutest eacutes megtanuljuk annak paacuterjaacutet is

A 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben van keacutet komolyabb aritmetikai utasiacutetaacutes lehetőseacuteg van szorzaacutesra eacutes osztaacutesra is E keacutet utasiacutetaacutes az akkumulaacutetoron kiacutevuumll egy aritmetikai segeacutedregisztert is igeacutenyel ennek neve eacutes jele B A

MUL AB

utasiacutetaacutes megszorozza az akkumulaacutetor eacuterteacutekeacutet a B regiszterbe toumlltoumltt eacuterteacutekkel A mnemonik az angol Multiply Accumulator by B kifejezeacutesből szaacutermazik ami azt jelenti hogy akkumulaacutetor szorzaacutesa B-vel Az eredmeacuteny keacutetbaacutejtos eacuterteacutek lesz Az alsoacute baacutejt az akkumulaacutetorba keruumll a felső baacutejt a B regiszterbe A művelet hataacutessal van

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

toumlbb flag-re is melyek fontos informaacutecioacutet hordozhatnak A tuacutelcsordulaacutest jelző flag (OV laacutesd [A PSW SFR parameacuteterei]) eacuterteacuteke 1 lesz ha a szorzaacutes eredmeacutenye nagyobb mint 255 Kuumlloumlnben OV = 0 A C bit pedig eredmeacutenytől fuumlggetlenuumll mindig toumlrlődik

A szorzaacutes utasiacutetaacutesaacutet a programban most nem hasznaacuteljuk de ceacutelszerű egyuumltt taacutergyalni az osztaacutes műveleteacutevel ezeacutert keruumllt raacute most sor Amit viszont hasznaacutelni fogunk az az osztaacutes művelete

DIV AB

A mnemonik az angol Divide Accumulator by B kifejezeacutesből szaacutermazik ami azt jelenti hogy akkumulaacutetor osztaacutesa B-vel Tehaacutet A az osztandoacute B az osztoacute A művelet elveacutegzeacutese utaacuten a haacutenyados az akkumulaacutetorba a maradeacutek pedig a B regiszterbe keruumll Ha nullaacuteval akarnaacutenk osztani akkor a tuacutelcsordulaacutest jelző bit (OV laacutesd [A PSW SFR parameacuteterei]) 1-re billen kuumlloumlnben 0 marad A C bit eredmeacutenytől fuumlggetlenuumll enneacutel az utasiacutetaacutesaacutenaacutel is mindig toumlrlődik

Teacuterjuumlnk vissza a kiindulaacutesi probleacutemaacutenkhoz azaz bontsuk szaacutemjegyekre a maacutesodpercek eacuterteacutekeacutet (s1 vaacuteltozoacute) Mivel s1 eacuterteacuteke 0 eacutes 59 koumlzoumltt lehet pontosan azt fogjuk kapni amire most vaacutegyunk ha s1-et elosztjuk 10-zel Ekkor a tiacutezesek eacuterteacuteke lesz a haacutenyados eacutes ezt az akkumulaacutetorban talaacuteljuk Az egyesek eacuterteacuteke lesz a maradeacutek ezt pedig a B regiszterben talaacuteljuk Legyen peacuteldaacuteul s1=28 eacutes hajtsuk veacutegre a koumlvetkező utasiacutetaacutessort

MOV As1MOV B10DIV AB

Ennek eredmeacutenyekeacuteppen azt kapjuk hogy A=2 eacutes B=8 Eacutes ezeket az eacuterteacutekeket maacuter eacuteppen uacutegy kuumlldhetjuumlk a PC-nek mint baacutermilyen maacutes szaacutemjegyet A programban a tiacutezesek eacuterteacutekeacutet a tim10 vaacuteltozoacuteba miacuteg az egyesek eacuterteacutekeacutet a tim1 vaacuteltozoacuteba fogjuk elmenteni a keacutesőbbi feldolgozaacutes eacuterdekeacuteben Ezzel az oumlsszes felhasznaacutelt vaacuteltozoacutet ismertettuumlk eacutes a program műkoumldeacuteseacutenek leacutenyegi elemeit is oumlsszefoglaltuk

Code38asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 000Bh TIMER0 tuacutelcsordulaacutesaJMP TIMER0 aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetes100 DATA 030h A szaacutezadmaacutesodpercek vaacuteltozoacutejas10 DATA 031h A tizedmaacutesodpercek vaacuteltozoacutejas1 DATA 032h A maacutesodpercek vaacuteltozoacutejatim10 DATA 033h A kuumlldendő időeacuterteacutek maacutesodperceinek tiacutezeseitim1 DATA 034h A kuumlldendő időeacuterteacutek maacutesodperceinek egyeseigate1 BIT P20 Az első fotokapu bitjegate2 BIT P21 A maacutesodik fotokapu bitjegreen BIT P23 A zoumlld LED bitjered BIT P27 A piros LED bitje A TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes TIMER0PUSH ACC RegiszterveacutedelemCLR TR0 TIMER0 leaacutelliacutetaacutesaMOV TH00AEh Az időziacutető kezdeti eacuterteacutekeinekMOV TL0014h uacutejboacuteli betoumllteacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV As100 Megvizsgaacuteljuk s100 tartalmaacutetCJNE A9novel100 Ha meacuteg nem 9 noumlvelhetjuumlkMOV s1000 Kuumlloumlnben nullaacutezzukJMP tized s100 aacutetfordult Noumlveljuumlk s10-et isnovel100INC s100 Szaacutezadmaacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETItizedMOV As10 Megvizsgaacuteljuk s10 tartalmaacutetCJNE A9novel10 Ha meacuteg nem 9 noumlvelhetjuumlkMOV s100 Kuumlloumlnben nullaacutezzukJMP egesz s10 aacutetfordult Noumlveljuumlk s1-et isnovel10INC s10 Tizedmaacutesodpercek noumlveleacutese

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

POP ACC Akkumulaacutetor visszaveacutetele a verembőlRETIegeszMOV As1 Megvizsgaacuteljuk s1 tartalmaacutetCJNE A59novel1 Ha meacuteg nem 59 noumlvelhetjuumlkMOV s10 Kuumlloumlnben nullaacutezzukPOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETInovel1INC s1 Egeacutesz maacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETI FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV TMOD00000001b TIMER0 16-bites uumlzemmoacutedban műkoumldikMOV TH00AEh Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV TL0014h Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s100 A tizedmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s10 Az egeacutesz maacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesSETB ET0 Timer0 megszakiacutetaacutesaacutenak engedeacutelyezeacuteseCLR green Zoumlld LED bekapuJNB gate1$ Vaacuterunk az 1 fotokapu jeleacutereSETB TR0 Indiacutetjuk az időziacutetőt (stoppert)SETB green Zoumlld LED kiCLR red Piros LED beJNB gate2$ Vaacuterunk a 2 fotokapu jeleacutereCLR TR0 Megaacutelliacutetjuk az időziacutetőt (stoppert)SETB red Piros LED kiCLR green Zoumlld LED ismeacutet beMOV As1 Betoumlltjuumlk A-ba a maacutesodpercek eacuterteacutekeacutetMOV B10 El fogjuk osztani 10-zelDIV AB Az osztaacutes műveleteMOV tim10A Az egeacuteszek (eredmeacuteny) mennek tim10-beMOV tim1B A maradeacutek tim1-beMOV DPTRmes1 A Time elapsed sor elkuumlldeacuteseCALL SENDSTRINGMOV Atim10 Az eltelt maacutesodpercek tiacutezeseinekADD A0 elkuumlldeacutese Ehhez a szaacutemhoz hozzaacuteadjuk aCALL SENDCHAR 0 ASCII karaktert Eacutes keacutesőbb ugyaniacutegyMOV Atim1 Az eltelt maacutesodpercek egyeseinekADD A0 elkuumlldeacuteseCALL SENDCHARMOV A A tizedespont elkuumlldeacuteseCALL SENDCHARMOV As10 A tizedmaacutesodpercek elkuumlldeacuteseADD A0CALL SENDCHARMOV As100 A szaacutezadmaacutesodpercek elkuumlldeacuteseADD A0CALL SENDCHARMOV DPTRmes2 A jelenteacutest lezaacuteroacute karaktersor elkuumlldeacuteseCALL SENDSTRINGMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s100 A tizedmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s10 Az egeacutesz maacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaJMP kapu Joumlhet az uacutej meacutereacutes ADATOK - karakterfuumlzeacuterek ndash stringek mes1 DB Time elapsed 0 mes2 DB s101010130 $INCLUDE(UARTIOASM)

Created by XMLmind XSL-FO Converter

18 fejezet - PWM-jelekAki elektronikaacuteval foglalkozik előbb-utoacutebb talaacutelkozik azzal a betűszoacuteval hogy PWM Ismeacutet angol kifejezeacutes lapul a haacutetteacuterben Pulse Width Modulation jelenteacutese impulzusszeacutelesseacuteg-modulaacutecioacute A fogalom megeacuterteacutese nem igeacutenyel nagy erőfesziacuteteacutest tekintsuumlk a [Neacutegyszoumlgjel] aacutebraacutet Az aacutebraacuten neacutegyszoumlgjel laacutethatoacute A viacutezszintes tengely az időtengely a fuumlggőleges tengely pedig baacutermifeacutele mennyiseacuteget jeloumllhet az elektronikaacuteban azonban a legtoumlbb esetben feszuumlltseacuteg szokott A jeltiacutepust azeacutert hiacutevjuk neacutegyszoumlgjelnek mert ideaacutelis esetben konstans fuumlggveacutenyek darabjaiboacutel eacutepuumll foumll A kapott alakzatokra azt is mondhatnaacutenk hogy teacuteglalapok A magyar terminoloacutegiaacuteban meacutegis a neacutegyszoumlgjel elnevezeacutes honosodott meg A T parameacuteter jeloumlli a neacutegyszoumlgjel perioacutedusidejeacutet Nyilvaacuten ennek reciproka lesz a jel frekvenciaacuteja A τ parameacuteter azt mutatja hogy egy perioacuteduson beluumll mennyi ideig magas a jelszint Termeacuteszetesen 0 le τ le T A haacutenyadost kitoumllteacutesi teacutenyezőnek hiacutevjuk A fentiek alapjaacuten 0 le k le 1

181 aacutebra - Neacutegyszoumlgjel

A neacutegyszoumlgjelnek azt a reacuteszeacutet ami τ ideig van jelen impulzusnak is szoktaacutek hiacutevni Mondhatjuk tehaacutet hogy a τ parameacuteter fuumlggveacutenyeacuteben vaacuteltozik az impulzus hossza vagy szeacutelesseacutege Termeacuteszetesen a jel perioacutedusidejeacutehez keacutepest Ezzel viszont el is eacuterkeztuumlnk az impulzusszeacutelesseacuteg-modulaacutecioacute fogalomhoz Adott neacutegyszoumlgjel előaacutelliacutetaacutesa kibocsaacutetaacutesa tovaacutebbiacutetaacutesa stb soraacuten ugyanis az impulzusok hossza informaacutecioacutet hordozhat Ha tehaacutet a szoacuteban forgoacute neacutegyszoumlgjel kitoumllteacutesi teacutenyezője a tovaacutebbiacutetandoacute informaacutecioacutetoacutel fuumlgg akkor impulzusszeacutelesseacuteg-modulaacutecioacuteroacutel beszeacuteluumlnk

Azt is vilaacutegosan kell laacutetnunk hogy impulzusszeacutelesseacuteg-modulaacutecioacuteval (a tovaacutebbiakban PWM-mel) nem csak informaacutecioacuteaacutetvitelt valoacutesiacutethatunk meg hanem keacutenyelmes moacutedon aacutelliacutethatjuk peacuteldaacuteul egy feszuumlltseacutegforraacutes jeleacutenek effektiacutev eacuterteacutekeacutet amennyiben lehetőseacuteguumlnk van a kimeneteacuten PWM-jel előaacutelliacutetaacutesaacutera Ez azeacutert lesz rendkiacutevuumll iacutegeacuteretes lehetőseacuteg mert nagyon sok rendszerben pusztaacuten a kitoumllteacutesi teacutenyező variaacutelaacutesaacuteval valoacutesiacutethatunk meg jelszintvezeacuterleacutest vagy erre eacutepuumllően tovaacutebbi szabaacutelyozaacutesi leacutepeacuteseket

1 PWM-jel előaacutelliacutetaacutesa a mikrovezeacuterlő jelgeneraacutetoraacutevalAz ADuC 842-es architektuacuteraacuteja alkalmas PWM-jel hardveres előaacutelliacutetaacutesaacutera A PWM-jelgeneraacutetor rendkiacutevuumll rugalmasan illeszkedik a gyakorlati igeacutenyekhez hat uumlzemmoacuted koumlzuumll vaacutelaszthatunk Ezek koumlzuumll raacuteadaacutesul kettő digitaacutelndashanaloacuteg-jelaacutetalakiacutetaacuteshoz hasznaacutelhatoacute foumll A PWM-jelek előaacutelliacutetaacutesaacutehoz oumlt SFR-re lesz szuumlkseacuteguumlnk PWMCON PWM0H PWM0L PWM1H PWM1L A legelsőt kiveacuteve a regiszterek a PWM-jelek digitaacutelis felbontaacutesaacutet frekvenciaacutejaacutet fel- eacutes lefutaacutesi időpillanataacutet hataacuterozzaacutek meg Az uumlzemmoacuted beaacutelliacutetaacutesa a PWMCON regiszterrel toumlrteacutenik laacutesd [A PWMCON SFR parameacuteterei] A PWM-jeleket a mikrovezeacuterlő a P27 eacutes P26 laacutebakon aacutelliacutetja elő ami esetuumlnkben annyit jelent hogy PWM-jelek előaacutelliacutetaacutesaacutenaacutel a panelunk LED-soraacutenak akaacuter keacutet LED-je is eacuterintett Ezt azonban ne baacutenjuk mert legalaacutebb kuumllső aacuteramkoumlr neacutelkuumll is sokszor laacutethatoacute lesz hogy sikeruumllt-e a jel előaacutelliacutetaacutesa (A PWM-jeleket aacutettehetjuumlk a P34 eacutes P33 laacutebakra is a CFG842 SFR 6 bitjeacutenek magasra aacutelliacutetaacutesaacuteval de ebben a tankoumlnyvben nem teszuumlnk ilyet)

181 taacuteblaacutezat - A PWMCON SFR parameacuteterei

PWMCON PWM Control Register

Created by XMLmind XSL-FO Converter

PWM-jelek

A PWM vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 SNGL Kikapcsolja a PWM-generaacutelaacutest a P26 (vagy P34) laacutebon szabadon hagyva a laacutebat egyeacuteb IO-műveletekhez

6 MD2 A PWM-uumlzemmoacuted bitjei

MD2 MD1 MD0 Uumlzemmoacuted

0 0 0 0 moacuted PWM letiltva

0 0 1 1 moacuted Egyetlen vaacuteltoztathatoacute

felbontaacutesuacute PWM-jel P27-en (vagy

P33-on)

0 1 0 2 moacuted 8-bites iker-PWM-jel

0 1 1 3 moacuted 16-bites iker-PWM-jel

1 0 0 4 moacuted Duaacutelis NRZ 16-bites - DAC

1 0 1 5 moacuted Duaacutelis 8-bites PWM-jel

1 1 0 6 moacuted Duaacutelis RZ 16-bites - DAC

1 1 1 Foglalt

5 MD1

4 MD0

Created by XMLmind XSL-FO Converter

PWM-jelek

3 CDIV1 A PWM-generaacutetor oacuterajelosztoacutejaacutenak bitjei

CDIV1 CDIV0 Leiacuteraacutes

0 0 Kivaacutelasztott oacuterajel 1

0 1 Kivaacutelasztott oacuterajel 4

1 0 Kivaacutelasztott oacuterajel 16

1 1 Kivaacutelasztott oacuterajel 64

2 CDIV0

1 CSEL1 A PWM-generaacutetor oacuterajelforraacutesaacutenak bitjei

CSEL1 CSEL0 Leiacuteraacutes

0 0 Kuumllső oacuterajel 15

0 1 Kuumllső oacuterajel

1 0 Kuumllső bemenet P34T0-n

1 1 fvco = 16 777 216 Hz

0 CSEL0

Az 1 uumlzemmoacuted ismerteteacuteseacutehez vaacuteltozatlan formaacuteban vesszuumlk aacutet a szemleacuteltető aacutebraacutet a gyaacuteri leiacuteraacutesboacutel [1 p 43 Figure 48] Tekintsuumlk tehaacutet a [A PWM-generaacutetor 1 uumlzemmoacutedja] aacutebraacutet

182 aacutebra - A PWM-generaacutetor 1 uumlzemmoacutedja

A PWM-generaacutetorhoz tartozik egy szaacutemlaacuteloacute Ezt nevezik az aacutebraacuten PWM Counter-nek Nos amikor ez a

Created by XMLmind XSL-FO Converter

PWM-jelek

szaacutemlaacuteloacute elindul a P27-es laacutebon előaacutelloacute jel magas szintre vaacutelt Amikor a szaacutemlaacuteloacute eleacuteri a PWM0HPWM0L regiszterek aacuteltal meghataacuterozott 16-bitesnek tekintendő eacuterteacuteket akkor a jel alacsony szintre vaacutelt A szaacutemlaacuteloacute viszont ketyeg tovaacutebb Amikor eleacuteri a PWM1HPWM1L regiszterek aacuteltal meghataacuterozott 16-bites eacuterteacuteknek tekintendő eacuterteacuteket akkor fog kezdődni a PWM-jel koumlvetkező perioacutedusa eacutes ekkor a szaacutemlaacuteloacute uacutejraindul nullaacuteroacutel (A regiszterek megnevezeacuteseacuteben szereplő H ill L betűk itt is a felső baacutejt (H) eacutes alsoacute baacutejt (L) elrendezeacutesre utalnak) Az aacutebra alapjaacuten vilaacutegosnak kell lennie hogy a jel frekvenciaacutejaacutet a PWM1HPWM1L regiszterek hataacuterozzaacutek meg miacuteg a PWM0HPWM0L regiszterek eacuterteacuteke a kitoumllteacutesi teacutenyezőeacutert felelős

Az 1 uumlzemmoacuted ismerteteacutese utaacuten fogalmazzunk meg egy a PWM-jelekre vonatkozoacute egyszerű kis feladatot

28 feladat

PWM-jel felhasznaacutelaacutesaacuteval villogtassunk egy LED-et a LED-soron 3 Hz eacutes 6 Hz koumlzoumltti frekvenciaacuteval [Code39]

A frekvenciaacutet azeacutert vaacutelasztottuk ilyen kicsinek a feladatban hogy szabad szemmel is laacutessuk műkoumldeacutes koumlzben a PWM-jelet Az emberi szem tulajdonsaacutegai miatt 50 Hz foumlloumltt maacuter biztosan oumlsszefolyna egyetlen fokozattaacute a LED villoacutedzaacutesa 100 Hz foumlloumltt pedig maacuter akkor se nagyon detektaacutelhatnaacutenk a villoacutedzaacutest ha ide-oda raacuteznaacutenk a panelt

A PWMCON regisztert konfiguraacuteljuk az alaacutebbi moacutedon

MOV PWMCON00011111b

A [A PWMCON SFR parameacuteterei] alapjaacuten ez azt jelenti hogy az 1 uumlzemmoacutedot vaacutelasztjuk (zoumlld jelzeacutes) Mivel igen kis frekvenciaacutet szretneacutenk előaacutelliacutetani alkalmazzuk a lehető legnagyobb oacuterajelosztaacutest azaz 64-et Ezt mutatja a saacuterga jelzeacutes Iacuterjuk elő a sajaacutet belső oacuterajelkristaacutely hasznaacutelataacutet hiszen egyelőre eszuumlnk aacutegaacuteban sem volt kuumllső oacuterajelforraacutesokat csatlakoztatni a panelunkhoz Ez a vaacutelasztaacutes laacutethatoacute a tuumlrkiz mezőben Veacuteguumll meacuteg meg kell jegyeznuumlnk hogy a 7 bit jelen esetben eacuterdektelen hiszen csak egyetlen PWM-jeluumlnk lesz (szuumlrke mező)

A PWM1HPWM1L regiszterpaacuter eacuterteacutekeacutenek vaacutelasszunk valami kellőkeacuteppen nagy eacuterteacuteket legyen mondjuk F000h A PWM0HPWM0L regiszterpaacuter eacuterteacuteke legyen ennek pontosan a fele hogy a kitoumllteacutesi teacutenyezőnk pontosan 05 legyen 7800h

Szaacutemoljuk ki a fenti beaacutelliacutetaacutesaink mellett adoacutedoacute jelfrekvenciaacutet Az oacuterajelkristaacutely frekvenciaacuteja 16 777 216 Hz A szaacutemlaacuteloacute F000h = 61 440-ig kuacuteszik Ezzel az eacuterteacutekkel elosztva az oacuterajelkristaacutely frekvenciaacutejaacutet 27307 Hz-et kapunk Mivel 64-es oacuterajelosztaacutest fogunk beaacutelliacutetani ezt az eacuterteacuteket meacuteg 64-gyel el kell osztanunk A veacutegeredmeacuteny tehaacutet 427 Hz Eacutes ez az eacuterteacutek megfelel a feladat kiacutevaacutenalmainak A koacuted az uacutejdonsaacuteg tehaacutet a PWM hasznaacutelata elleneacutere rendkiacutevuumll roumlvid lesz paacuter sor az egeacutesz Leacutenyeges hogy a PWM-jel elindiacutetaacutesa utaacuten a főprogram olyan feladatot veacutegez amilyent csak akarunk a PWM-jel előaacutelliacutetaacutesa ugyanis teljes egeacuteszeacuteben hardveresen toumlrteacutenik Az alaacutebbi megoldaacutesnaacutel a főprogram feladata tovaacutebbi tennivaloacute hiaacutenyaacuteban a helyben jaacuteraacutes

Code39asmMOV PWM1H0F0h Az 1 uumlzemmoacutedban ez a keacutet baacutejt (alsoacute illMOV PWM1L000h felső) hataacuterozza meg az előaacutelliacutetandoacute PWM- jel frekvenciaacutejaacutet Itt a felső eacutes alsoacute baacutejt egyuumlttes eacuterteacuteke F000h = 61440 Az ADuC magjaacutenak oacuterajele 16 777 216 Hz iacutegy a PWM- jel frekvenciaacuteja 1677721661440 = 27307 Hz lesz (Ezt meacuteg leosztjuk majd hogy szemmel is laacutessunk valamit kuumlloumlnben nem tudunk oumlruumllni)MOV PWM0H078h Ez a keacutet baacutejt (szintuacutegy alsoacute eacutes felső baacutejtMOV PWM0L000h formaacuteban) a PWM-jel kitoumllteacutesi teacutenyezőjeacutet aacutelliacutetja beMOV PWMCON00011111b Ez a PWM-jelek legfontosabb konfiguraacutecioacutes regisztere Magyaraacutezat az eacuterteacutekekhez 7 bit - Az 1 uumlzemmoacutedban eacuterdektelen 6-5-4 bit - Uumlzemmoacuted kivaacutelasztaacutesa Naacutelunk 001 lesz ami az 1 uumlzemmoacutedot definiaacutelja 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa Naacutelunk 11 ami 64-gyel valoacute osztaacutest jelent Iacutegy lesz a PWM-jeluumlnk veacutegső frekvenciaacuteja 427 Hz 1-0 bit - Oacuterajel kivaacutelasztaacutesa Naacutelunk 11

Created by XMLmind XSL-FO Converter

PWM-jelek

ami a mag oacuterajeleacutet jelentiJMP $ Keacutesz Veacutegtelen ciklus

Egy nagyon gyakorlatias kis huacutezaacutes kedveacuteeacutert moacutedosiacutetsuk egy kicsit a [28 feladat]ot

29 feladat

PWM-jel felhasznaacutelaacutesaacuteval villogtassuk az oumlsszes LED-et a LED-soron 3 Hz eacutes 6 Hz koumlzoumltti frekvenciaacuteval [Code40]

E feladat megoldaacutesa a PWM-jel előaacutelliacutetaacutesaacuteig toumlkeacuteletesen megegyezik a [28 feladat]eacuteval A kuumlloumlnbseacuteg az hogy a PWM-jelet az oumlsszes LED-en meg kellene jeleniacutetenuumlnk Ezt uacutegy tesszuumlk hogy egy veacutegtelen ciklusban a P27-es bitet tehaacutet a PWM-jel szintjeit keacutepviselő bitet beraacutemoljuk a Carry bitbe majd ennek eacuterteacuteke alapjaacuten magasra vagy alacsonyra aacutelliacutetjuk az oumlsszes toumlbbi bitet a 2-es porton Tesszuumlk ezt logikai maszkolaacutessal Roumlvidseacutege miatt Code40-et teljes terjedelmeacuteben ismertetjuumlk de a PWM-jel beaacutelliacutetaacutesait most csak nagyon szűkszavuacutean kommentezzuumlk

Code40asmMOV PWM1H0F0h Az 1 uumlzemmoacutedban ez a keacutet baacutejt hataacuterozzaMOV PWM1L000h meg a PWM-jel frekvenciaacutejaacutet F000h = 61440 fvco = 16 777 216 Hz iacutegy a PWM-jel frekvenciaacuteja 1677721661440 = 27307 Hz lesz (Ezt meacuteg leosztjuk majd 64-gyelMOV PWM0H078h Ez a keacutet baacutejt a PWM-jel kitoumllteacutesiMOV PWM0L000h teacutenyezőjeacutet aacutelliacutetja beMOV PWMCON00011111b 6-5-4 bit - 1 uumlzemmoacuted 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa 64-gyel 1-0 bit - A mag oacuterajelebitekMOV CP27 A PWM-jelet keacutepviselő portbit eacuterteacutekeacutenek beraacutemolaacutesa a C bitbeJC magas Ha C=1 ugrunk inteacutezkedniANL P210000000b Ha C=0 toumlroumlljuumlk a P2-es port toumlbbi bitjeacutetJMP bitek Ugraacutes vissza a PWM-jel figyeleacuteseacutehezmagasORL P201111111b A P2-es port toumlbbi bitjeacutenek magasra aacutelliacutetaacutesaJMP bitek Ugraacutes vissza a PWM-jel figyeleacuteseacutehez

2 Pulzaacuteloacute LED-ekLED-ek digitaacutelis meghajtaacutesakor elő lehet olyan hataacutest ideacutezni amit a laikus aki csak azt tudja hogy egy LED vagy be van kapcsolva vagy ki van kapcsolva mindig varaacutezslatnak tart Ez a hataacutes a LED-ek pulzaacutelaacutesa azaz folytonos aacutetmenetűnek tűnő foumllizziacutetaacutesa eacutes elhalvaacutenyiacutetaacutesa Az ilyen eacutes ehhez hasonloacute megoldaacutesokhoz igazaacuten joacutel tudnak joumlnni a PWM-jelek Miről is van szoacute Pillantsunk vissza a [Neacutegyszoumlgjel] aacutebraacutera Ha neacutegyszoumlgjellel hajtunk meg egy LED-et akkor a LED bizonyos ideig be van kapcsolva bizonyos ideig meg ki Kis frekvenciaacutenaacutel a LED nyilvaacuten villogni fog Eacutes a helyzet az hogy nagy frekvenciaacutenaacutel is villogni fog de a szem időbeli felbontaacutesaacutenak korlaacutetai miatt neacutehaacutenyszor 10 Hz-es villogaacutest maacuter nem eacuteszleluumlnk Amit eacuteszleluumlnk az az hogy a LED vilaacutegiacutet de kicsit (vagy sokkal) halvaacutenyabban mintha aacutellandoacute egyenaacuterammal hajtanaacutenk meg 100 Hz koumlruumlli frekvenciaacutet maacuter a perifeacuterikus laacutetaacutesunkkal sem eacuteszleluumlnk bdquoLebukaacutesrdquo ilyenkor meacuteg előfordulhat ha valaki a PWM-jellel meghajtott LED-et tartalmazoacute panelt keacutezbe veszi eacutes joacutel megraacutezza (nem erősen csak gyorsan) akkor a villoacutedzaacutes meacuteg tetten eacuterhető 200 Hz-neacutel maacuter iacutegy sem nagyon Amennyiben tehaacutet adott egy megfelelően nagy frekvenciaacutejuacute neacutegyszoumlgjel akkor a kitoumllteacutesi teacutenyező variaacutelaacutesaacuteval ugyanazokkal a jelszintekkel laacutetszoacutelag kisebb vagy nagyobb feacutenyerősseacuteggel uumlzemeltethetuumlnk LED-eket Ha a kitoumllteacutesi teacutenyező variaacutelaacutesaacutera elegendően nagy felbontaacutest alkalmazunk (30-40 fokozat akaacuter eleacuteg is lehet) akkor a LED feacutenyerősseacutegeacutenek noumlveleacutese eacutes csoumlkkenteacutese folytonosnak fog tűnni Erről az oumltletről szoacutel a koumlvetkező feladatunk

30 feladat

PWM-jel felhasznaacutelaacutesaacuteval folytonosnak tűnő aacutetmenettel izziacutetsuk foumll eacutes halvaacutenyiacutetsuk el az oumlsszes LED-et a LED-soron azaz pulzaacuteljanak a LED-ek [Code41 Code42]

A koraacutebban elmondottak alapjaacuten a feladat megoldaacutesa a PWM-jel kitoumllteacutesi teacutenyezőjeacutenek leacutepeacutesenkeacutenti

Created by XMLmind XSL-FO Converter

PWM-jelek

vaacuteltoztataacutesa Arra azeacutert figyelnuumlnk kell hogy a vaacuteltozaacutes ne ugraacutesszerűnek tűnjoumln Aacutelliacutetsuk be tehaacutet a PWM-jel eacuterteacutekeit uacutegy hogy 32+1 fokozatunk legyen A +1 kuumlloumln feltuumlnteteacutese azeacutert indokolt mert a teljesen kikapcsolt aacutellapot is fokozatnak szaacutemiacutet ahogy azt hamarosan laacutetni fogjuk

Aacutelliacutetsuk be a PWM1HPWM1L regiszterpaacuter eacuterteacutekeacutet 2000h-ra Ez decimaacutelisan 8 192-t jelent iacutegy a jel frekvenciaacuteja 16 777 216 Hz 8 192 = 2 048 Hz lesz mindaddig ameddig tovaacutebbi beaacutelliacutetaacutessal nem osztjuk tovaacutebb Osztoacutenak a vaacuteltozatossaacuteg kedveacuteeacutert vaacutelasszuk most a 16-os eacuterteacuteket iacutegy a teacutenyleges jelfrekvenciaacutenk 2 048 16 = 128 Hz lesz ami egeacuteszen bdquoemberkoumlzelirdquo eacuterteacuteknek mondhatoacute (Tanulni azeacutert lehet belőle mert ezt maacuter a perifeacuterikus laacutetaacutesunkkal sem eacuteszleljuumlk viszont ha megraacutezzuk a panelt akkor a villoacutedzaacutes meacuteg tetten eacuterhető)

A kitoumllteacutesi teacutenyezőt a PWM0HPWM0L regiszterpaacuterral aacutelliacutetjuk be Mi most azt fogjuk tenni hogy a PWM0H regiszter eacuterteacutekeacutet 00h eacutes 20h koumlzoumltt noumlveljuumlk eacutes csoumlkkentjuumlk szisztematikusan Mivel 20h = 32 ezeacutert a kikapcsolt aacutellapottal oumlsszesen 32+1 = 33 fokozatunk lesz Azt azonban ne felejtsuumlk el hogy a panel LED-jei fordiacutetott logikaacuteval műkoumldnek iacutegy a kitoumllteacutesi teacutenyező noumlveleacutese fogja halvaacutenyiacutetani a LED-eket eacutes a csoumlkkenteacutese okoz erősoumldeacutest

Egy dolgot kell meacuteg megoldanunk a P27-es bit eacuterteacutekeacutet szeacutepen aacutet kell maacutesolgatnunk a toumlbbi portbitbe is Ezt megtehetneacutenk uacutegy is mint a [29 feladat]naacutel de kiveacutetelesen vaacutelasszuk a favaacutegoacute megoldaacutest eacutes maacutesolgassuk a P27-es bit eacuterteacutekeacutet egyeseacutevel a toumlbbi portbitbe Ezt uacutegyis egy időhuacutezoacute szubrutinba fogjuk aacutegyazni iacutegy meacuteg joacutel is joumln aacutettekinthető toumllteleacutek gyanaacutent az időhuacutezoacute programreacutesz legbelső ciklusmagjaacutehoz Az időhuacutezoacute szubrutin ciklusainak veacutegrehajtaacutesi szaacutemaacutet most uacutegy hataacuteroztuk meg hogy A=10 meghiacutevaacutessal 001 s a vaacuterakozaacutesi idő Ennek ellenőrzeacuteseacutet az olvasoacutera biacutezzuk A program elejeacuten az EQU fordiacutetoacutei direktiacutevaacutet arra fogjuk hasznaacutelni hogy eacuterteacuteket adjunk egy szimboacutelumnak (wait) Ezt a megoldaacutest azeacutert vaacutelasztottuk hogy amikor vaacuteltoztatni akarunk az időhuacutezaacutes meacuterteacutekeacuten ne kelljen azt toumlbb helyen is aacutetiacuternunk a koacuted uacutejrafordiacutetaacutesa előtt A szubrutint ugyanis a wait szimboacutelum eacuterteacutekeacutevel fogjuk meghiacutevni

MOV AwaitCALL SDELAY

A koacuted meacuteg a most alkalmazott időhuacutezoacute szubrutin feltuumlnteteacuteseacutevel sem lesz hosszuacute

Code41asmMOV PWM1H020h Az 1 uumlzemmoacutedban ez a keacutet baacutejt hataacuterozzaMOV PWM1L000h meg a PWM-jel frekvenciaacutejaacutet 2000h = 8192 fvco = 16 777 216 Hz iacutegy a PWM-jel frekvenciaacuteja 167772168192 = 2048 Hz lesz (Ezt meacuteg leosztjuk majd 16-tal)MOV PWM0H020h Ez a keacutet baacutejt a PWM-jel kitoumllteacutesiMOV PWM0L000h teacutenyezőjeacutet aacutelliacutetja be Mivel a LED-ek fordiacutetott logikaacuteval műkoumldnek ez a kikapcsolt aacutellapotMOV PWMCON00011011b 6-5-4 bit - 1 uumlzemmoacute 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa 16-tal 1-0 bit - A mag oacuterajelesignal1 MOV Await Konstans betoumllteacutese a vaacuterakozaacuteshozCALL SDELAY Vaacuterakozoacute eacutes bitteriacutető szubrutinMOV APWM0H PWM0H vizsgaacutelata koumlvetkezikCJNE A0down Eleacuterte maacuter a 0-tJMP signal2 Ha igen ugrunk a kitoumllteacutesi teacutenyező csoumlkkenteacuteseacutehezdownMOV PWMCON0 PWM-generaacutelaacutes lekapcsolaacutesaDEC PWM0H A kitoumllteacutesi teacutenyező regisztereacutenek csoumlkkenteacuteseMOV PWMCON00011011b PWM-generaacutelaacutes engedeacutelyezeacuteseJMP signal1 A felizziacutetaacutes folytataacutesasignal2MOV Await Konstans betoumllteacutese a vaacuterakozaacuteshozCALL SDELAY Vaacuterakozoacute eacutes bitteriacutető szubrutinMOV APWM0H PWM0H vizsgaacutelata koumlvetkezikCJNE A020hup Eleacuterte maacuter 20h-tJMP signal1 Ha igen ugrunk a kitoumllteacutesi teacutenyező noumlveleacuteseacutehez

Created by XMLmind XSL-FO Converter

PWM-jelek

upMOV PWMCON0 PWM-generaacutelaacutes lekapcsolaacutesaINC PWM0H A kitoumllteacutesi teacutenyező regisztereacutenek noumlveleacuteseMOV PWMCON00011011b PWM-generaacutelaacutes engedeacutelyezeacuteseJMP signal2 A halvaacutenyiacutetaacutes folytataacutesa Szubrutin SDELAY Parameacuteteraacutetadaacutes A Ha A=10 akkor 001 s a vaacuterakozaacutes SDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezik Ha A=10 akkor 001 s a vaacuterakozaacutescik7MOV R6111cik6MOV CP27 A PWM-jel eacuterteacutekeacutenek C-be toumllteacuteseMOV P26C Favaacutegoacute moacutedon szeacutetteriacutetjuumlk a P2-es portMOV P25C oumlsszes toumlbbi bitjeacutenMOV P24CMOV P23CMOV P22CMOV P21CMOV P20CDJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel

A figyelmes olvasoacutenak foumlltűnhet hogy a PWM0H regiszter eacuterteacutekeacutenek noumlveleacutese eacutes csoumlkkenteacutese előtt kikapcsoljuk a PWM-jelet majd utaacutena azonnal uacutejra elindiacutetjuk Erre valoacutejaacuteban nem lenne szuumlkseacuteg viszont az a tapasztalat hogy ha nem iacutegy jaacuterunk el akkor a LED-ek feacutenye a pulzaacutelaacutes koumlzben időnkeacutent bdquoraacutengatrdquo egy kicsit Ennek oka valoacutesziacutenűleg az lehet hogy a kitoumllteacutesi teacutenyező menet koumlzbeni vaacuteltoztataacutesaacuteval a PWM-hez tartozoacute szaacutemlaacuteloacute aloacutel a veacutegeacuterteacutekneacutel bdquokihuacutezzuk a talajtrdquo Hiszen ha meacuteg menne tovaacutebb a szaacutemlaacuteloacute de menet koumlzben csoumlkkentetjuumlk a veacutegeacuterteacuteket akkor keacutenytelen meacuteg egy koumlrt leszaacutemlaacutelni Ha viszont a koacutedban leiacutertakat alkalmazzuk semmi ilyesmi nem tapasztalhatoacute

Ha maacuter ilyen joacutel belejoumlttuumlnk a LED-ek pulzaacuteltataacutesaacuteba csavarjunk meacuteg egyet a dolgon Eacuterjuumlk most el azt hogy amiacuteg a LED-sor egyik fele foumllizzik a maacutesik fele eacuteppen elhalvaacutenyul Eacutes fordiacutetva Enneacutel a vaacuteltozatnaacutel maga a főprogram toumlkeacuteletesen megegyezik a [30 feladat] koacutedjaacuteban szereplő reacutesszel Az elteacutereacutes az időhuacutezoacute szubrutinban lesz Keacutet aproacute reacuteszlet Az egyik az hogy a LED-ek portbitjeinek feleacutere nem a PWM-jel C-bitbe toumlltoumltt eacuterteacutekeacutet tesszuumlk ki hanem annak az inverzeacutet Ez plusz egy utasiacutetaacutest jelent (CPL C) iacutegy az időhuacutezaacutes ciklusainak is moacutedosiacutetanunk kell az ismeacutetleacutesszaacutemaacutet (Az időhuacutezaacutes pontossaacutegaacutenak ellenőrzeacuteseacutet ismeacutet az olvasoacutera biacutezzuk) Mivel a vaacuteltozaacutesok csak az időhuacutezoacute szubrutint eacuterintik a most koumlvetkező vaacuteltozatnaacutel csak ezt ismertetjuumlk A keacutet elteacutereacutest sziacutenessel jeloumlljuumlk

Code42asmSDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezik Ha A=10 akkor 001 s a vaacuterakozaacutescik7MOV R6105cik6MOV CP27 A PWM-jel eacuterteacutekeacutenek C-be toumllteacuteseMOV P26C Favaacutegoacute moacutedon szeacutetteriacutetjuumlk a P2-es portMOV P25C oumlsszes toumlbbi bitjeacutenMOV P24CCPL C A C bit invertaacutelaacutesaMOV P23CMOV P22CMOV P21CMOV P20CDJNZ R6cik6DJNZ R7cik7

Created by XMLmind XSL-FO Converter

PWM-jelek

RET Visszateacutereacutes a szubrutinboacutel

Created by XMLmind XSL-FO Converter

19 fejezet - AD-aacutetalakiacutetaacutesA tankoumlnyvben eddig elemi feladatocskaacutek soraacuten keresztuumll megtanulhattuk hogy hogyan programozunk assemblyben hogyan adhatunk ki vezeacuterlőjeleket kuumllső aacuteramkoumlroumlk szaacutemaacutera hogyan fogadhatunk keacutetaacutellapotuacute kuumllső jeleket eacutes hogy hogyan generaacutelhatunk PWM-jeleket raacuteadaacutesul szinte tetszőleges felbontaacutesuacute eacutes frekvenciaacutejuacute PWM-jeleket melyekkel maacuter fokozatokat is megvaloacutesiacutethatunk Ez idaacuteig rendben is lenne de hiaacutenyzik meacuteg valami Nagyon hiaacutenyzik meacuteg valami Ez pedig kuumllső jelek keacutetaacutellapotuacutetoacutel elteacuterő eacutertelmezeacutese A valoacutesaacutegban ugyanis nem minden binaacuteris hiaacuteba reacutesze a mikrovezeacuterlő digitaacutelis vilaacutegunknak tehaacutet kuumllső jeleket (pl feszuumlltseacuteget) is megfelelő felbontaacutessal kell detektaacutelnunk rengeteg probleacutemaacutenaacutel Az ilyen elektronikai megoldaacutest hiacutevjaacutek analoacutegndashdigitaacutel-aacutetalakiacutetaacutesnak az eszkoumlzt pedig ami ezt meg tudja valoacutesiacutetani analoacutegndashdigitaacutel aacutetalakiacutetoacutenak

1 Az ADuC 842-es AD-aacutetalakiacutetoacutejaAz ADuC 842-es analoacutegndashdigitaacutel-aacutetalakiacutetoacutejaacutenak blokkja gyors 8-csatornaacutes 12 bit felbontaacutesuacute feacuteloldali taacutepellaacutetaacutesuacute (nem kell negatiacutev taacutep is) aacutetalakiacutetaacutest tesz lehetőveacute A profi felhasznaacuteloacutenak meacuteg kalibraacutelaacutesi lehetőseacutege is van Az AD-aacutetalakiacutetoacute a szukcessziacutev approximaacutecioacute elveacuten műkoumldik melynek haacutettere egy AD-aacutetalakiacutetaacutesra valoacute kondenzaacutetor Az aacutetalakiacutetaacutes lehet egyszeri (ez persze ismeacutetelhető) vagy folytonos uumlzemmoacuteduacute a referenciafeszuumlltseacuteg lehet belső vagy kuumllső jel Az AD-aacutetalakiacutetoacute az esetlegesen csatlakoztatott kuumllső memoacuteria eleacutereacuteseacuteben is szerepet jaacutetszik Az ADuC 842-es AD-aacutetalakiacutetoacuteja gyaacuterilag kalibraacutelt bekapcsolaacuteskor a kalibraacutecioacutes konstansok betoumlltődnek hogy optimaacutelis műkoumldeacutes legyen biztosiacutethatoacute

Az AD-aacutetalakiacutetoacute belső referenciafeszuumlltseacutege 25 V iacutegy a 12-bites felbontaacutessal (212 = 4 096) 061 mV pontossaacuteg eacuterhető el (25 4 095 = 061) Ez nagyon sok alkalmazaacutesnaacutel elegendő A digitalizaacutelt feszuumlltseacutegeacuterteacutekek ismeacutet csak egy kettős regiszterben eacuterhetők el (ADCDATAHADCDATAL) de figyeljuumlnk ara hogy az ADCDATAH regiszter felső 4 bitje csatornaazonosiacutetaacutesra szolgaacutel Ezt szemleacutelteti az alaacutebbi aacutebra

191 aacutebra - Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei

Az AD-aacutetalakiacutetaacuteshoz haacuterom konfiguraacutecioacutes regiszter tartozik ADCCON1 ADCCON2 eacutes ADCCON3 Ez utoacutebbi kizaacuteroacutelag a konverter kalibraacutecioacutejaacutenaacutel kap szerepet iacutegy ennek taacutergyalaacutesaacutetoacutel eltekintuumlnk mert a tankoumlnyvben csak neacutehaacuteny elemei megoldaacutest taacutergyalunk A keacutet maacutesik regiszter leiacuteraacutesaacutet a [Az ADCCON1 SFR parameacuteterei] eacutes a [Az ADCCON2 SFR parameacuteterei] tartalmazza

191 taacuteblaacutezat - Az ADCCON1 SFR parameacuteterei

ADCCON1 AD Conversion Control Register

Az AD-aacutetalakiacutetaacutes vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 40h = 0100 0000 b

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 MD1 1 ndash bekapcsoljuk

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

az AD-aacutetalakiacutetoacutet 0 ndash kikapcsoljuk az AD-aacutetalakiacutetoacutet

6 EXT_REF 1 ndash kuumllső referencia hasznaacutelata 0 ndash a belső referencia hasznaacutelata Nem taacutergyaljuk

5 CK1 Az oacuterajel osztoacuteeacuterteacutekeacutenek bitjei az AD-aacutetalakiacutetaacutes sajaacutet oacuterajeleacutehez Az AD-aacutetalakiacutetoacute hibamentes műkoumldeacuteseacutehez 838 MHz-es vagy annaacutel kisebb oacuterajel szuumlkseacuteges A tipikus AD-aacutetalakiacutetaacutes 16 AD-aacutetalakiacutetaacutesi oacuterajelet koumlvetel plusz a kivaacutelasztott adateleacutereacutesi idő Az osztaacutesi araacutenyt az alaacutebbiak koumlzuumll vaacutelaszthatjuk

CK1 CK0 Oacuterajelosztoacute

0 0 32

0 1 4 (Ne hasznaacuteljuk akkor ha az oacuterajel CD

osztoacutebitje 0)

1 0 8

1 1 2

4 CK0

3 AQ1 Az adateleacutereacutesi bitekkel

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

kivaacutelaszthatjuk azt az időt amely rendelkezeacutesre fog aacutellni a bemeneti koumlvető- eacutes tartoacuteerősiacutető szaacutemaacutera hogy lekeacuterdezze a bemeneti jelet Az adateleacutereacuteshez 3 vagy toumlbb AD-aacutetalakiacutetaacutesi oacuterajel javasolt

AQ1 AQ0 AD-aacutetalakiacutetaacutesi oacuterajelek szaacutema

0 0 1

0 1 2

1 0 3

1 1 4

2 AQ0

1 T2C Timer 2 hasznaacutelata Nem taacutergyaljuk

0 EXC Kuumllső triggerjel hasznaacutelata Nem taacutergyaljuk

192 taacuteblaacutezat - Az ADCCON2 SFR parameacuteterei

ADCCON2 AD Conversion Control Register 2

Az AD-aacutetalakiacutetaacutes 2 vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Leiacuteraacutes

7 ADCI Az AD-aacutetalakiacutetaacutes megszakiacutetaacutesaacutenak bitje

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

Aacutetalakiacutetaacutesi ciklus veacutegezteacutevel 1-re aacutell Ha a program megszakiacutetaacutesi rutinra ugrik a sajaacutet megszakiacutetaacutesi vektoraacuten keresztuumll hardveresen toumlrlődik Kuumlloumlnben a felhasznaacuteloacutenak kell toumlroumllnie

6 DMA A DMA-moacuted engedeacutelyezőbitje Nem taacutergyaljuk

5 CCONV A folytonos uumlzemmoacuted bitje 1-re aacutelliacutetva folyamatos AD-aacutetalakiacutetaacutes toumlrteacutenik azaz uacutej aacutetalakiacutetaacutesi ciklus indul az előző veacutegezteacutevel

4 SCONV Az egyszeri aacutetalakiacutetaacutes bitje Egyetlen aacutetalakiacutetaacutesi ciklus toumlrteacutenik eacutes annak veacutegeacuten a bit automatikusan 0-ra vaacutelt

3 CS3 Csatornakivaacutelasztoacute bitek

CS3 CS2 CS1 CS0 Csatorna szaacutemaegyeacuteb megjegyzeacutes

0 0 0 0 0

0 0 0 1 1

0 0 1 0 2

0 0 1 1 3

0 1 0 0 4

0 1 0 1 5

0 1 1 0 6

0 1 1 1 7

1 0 0 0 Hőmeacuterseacutekletmonitorozaacutes Nem

taacutergyaljuk

1 0 0 1 DAC0 Nem taacutergyaljuk

1 0 1 0 DAC1 Nem

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

taacutergyaljuk

1 0 1 1 AGND Nem taacutergyaljuk

1 1 0 0 VREF Nem taacutergyaljuk

1 1 1 1 DMA STOP Nem taacutergyaljuk

A toumlbbi kombinaacutecioacute foglalt

2 CS2

1 CS1

0 CS0

2 Egyszerű AD-aacutetalakiacutetaacutesEbben az alfejezetben AD-aacutetalakiacutetaacutest veacutegzuumlnk tetszőleges feszuumlltseacutegforraacuteson egyszeri aacutetalakiacutetaacutesi ciklusokat hasznaacutelva Nagyon leacutenyeges hogy az aacutetalakiacutetandoacute feszuumlltseacuteg ne legyen nagyobb +25 V-naacutel Erről egyeacutebkeacutent mindig a felhasznaacuteloacutenak kell gondoskodnia iacutegy ha sajaacutet alkalmazaacutest eacutes aacuteramkoumlrt keacutesziacutetuumlnk nagyon-nagyon figyeljuumlnk erre a szabaacutelyra eacutes ennek megfelelően tervezzuumlk aacuteramkoumlreinket Az ADuC 842-es chip egyeacutebkeacutent akkor sem megy toumlnkre ha kicsivel tuacutelleacutepjuumlk a +25 V feszuumlltseacutegkorlaacutetot kezdeni azonban a korlaacutetot meghaladoacute eacuterteacutekkel uacutegysem tudunk semmit mert ekkor az aacutetalakiacutetott eacuterteacutek maacuter reacuteg eleacuterte a maximumot A feszuumlltseacutegforraacutes polaritaacutesa meacuteg keacutenyesebb uumlgy ha azt veacuteletlenuumll foumllcsereacuteljuumlk amikor raacutekapcsoljuk az AD-aacutetalakiacutetoacute bemeneteacutere a feszuumlltseacuteget akkor bizony felszaacutell a meacuterőfuumlsthellip A [Az AD-aacutetalakiacutetaacutes szabaacutelyai] aacutebra az AD-aacutetalakiacutetaacuteshoz tartozoacute szabaacutelyokat ismeacutetli meg nagy betűkkel sziacutenesbenhellip

192 aacutebra - Az AD-aacutetalakiacutetaacutes szabaacutelyai

Mindezek utaacuten maacuter nekiveselkedhetuumlnk első AD-aacutetalakiacutetoacute alkalmazaacutesunknak

31 feladat

Meacuterjuumlnk feszuumlltseacuteget a mikrovezeacuterlővel a 0 V - +25 V tartomaacutenyban eacutes a meacutert eacuterteacuteket kuumlldjuumlk el a soros porton a PC-nek de az AD-aacutetalakiacutetoacutenak csak a legeacuterteacutekesebb 8 bitjeacutet hasznaacuteljuk [Code43]

Előszoumlr is gondoljuk veacutegig mit jelent az hogy az AD-aacutetalakiacutetoacute legeacuterteacutekesebb 8 bitje A [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei] aacutebra mutatja hogy mely regiszterekben eacutes azokon beluumll hol talaacuteljuk a digitalizaacutelt jelszint 12 bitjeacutet Nekuumlnk most a 8 legeacuterteacutekesebb kell azaz az alsoacute neacutegyet kihajiacutetjuk Kezdeti proacutebaacutelkozaacutesnak ez is bőven megfelel hiszen a felbontaacutesunk meacuteg iacutegy is 00098 V lesz A leacutenyeg az hogy a

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

szuumlkseacuteges bitjeink fele az ADCDATAH maacutesik fele az ADCDATAL regiszterben lapul A [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei] aacutebra mutatja hogy mely bitekre van szuumlkseacuteguumlnk

193 aacutebra - Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei

A keacutet regiszterből a 8 szuumlkseacuteges bit kihalaacuteszaacutesa egyszerűbb lesz mint gondolnaacutenk A 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben van egy erre igen alkalmas utasiacutetaacutes

SWAP A

Az utasiacutetaacutes egyszerűen felcsereacuteli az akkumulaacutetor keacutet feacutelbaacutejtjaacutet Maga a mnemonik iacutegy ahogy van toumlrteacutenetesen eacutertelmes szoacute angolul azt jelenti hogy kicsereacutel megcsereacutel Ha tehaacutet az akkumulaacutetor eacuterteacuteke mondjuk A=10010110 akkor a SWAP A utasiacutetaacutes veacutegrehajtaacutesa utaacuten A=01101001 aacutell elő Ennek ismereteacuteben azt fogjuk tenni hogy betoumlltjuumlk az akkumulaacutetorba az ADCDATAH regiszter tartalmaacutet lenullaacutezzuk annak felső neacutegy bitjeacutet megcsereacuteljuumlk a keacutet feacutelbaacutejtot majd a kapott eacuterteacuteket elmentjuumlk egy vaacuteltozoacuteba (voltage) Iacutegy a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 4 bitje (11-8) a helyeacutere keruumllt Ez utaacuten betoumlltjuumlk az akkumulaacutetorba az ADCDATAL regiszter tartalmaacutet kitoumlroumlljuumlk annak alsoacute neacutegy bitjeacutet megcsereacuteljuumlk a keacutet feacutelbaacutejtot majd a kapott eacuterteacutekhez hozzaacuteadjuk voltage tartalmaacutet eacutes maacuter elő is aacutellt az az eacuterteacutek amely helyieacuterteacutek szerint helyes sorrendben tartalmazza a digitalizaacutelt feszuumlltseacutegeacuterteacutek 11-4 bitjeacutet azaz a 8 legeacuterteacutekesebbet Eacutes ezt az eacuterteacuteket maacuter elmenthetjuumlk akaacuter vissza a voltage vaacuteltozoacuteba Mindez assembly nyelven iacutegy fest

MOV AADCDATAHANL A00001111bSWAP AMOV voltageAMOV AADCDATALANL A11110000bSWAP AADD AvoltageMOV voltageA

Ezek utaacuten tehaacutet megkaparintottuk a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfontosabb 8 bitjeacutet ami termeacuteszetesen vaacuteltozatlanul 0 V eacutes +25 V koumlzoumltti jelszintet reprezentaacutel csak kisebb felbontaacutessal annaacutel mintha 12 bituumlnk lenne Az a helyzet hogy a +25 V maximaacutelis feszuumlltseacutegszinttel egeacuteszen nagy szerencseacutenk van Egy 8 biten aacutebraacutezolt binaacuteris szaacutem legnagyobb eacuterteacuteke ugyanis 255 ami majdnem a szaacutezszorosa 25-nek Iacutegy nem koumlvetuumlnk el tuacutel nagy hibaacutet ha a feszuumlltseacutegszint gyanaacutent kapott 8-bites szaacutemot egyszerűen elosztjuk 100-zal eacutes azt tekintjuumlk a bdquomeacutertrdquo feszuumlltseacutegeacuterteacuteknek termeacuteszetesen voltban kifejezve A hiba amit elkoumlvetuumlnk 1ndash250255 = 00196 lt 2 ami sok alkalmazaacutesnaacutel meacuteg mindig bőven megfelelő (Mindez persze akkor igaz ha a mikrovezeacuterlő gyaacuteri kalibraacutecioacuteja megfelelően pontos)

Az egybaacutejtos eacuterteacutek elosztaacutesa 100-zal eacutes az eacuterteacutek tizedes jegyeinek elkuumlloumlniacuteteacutese nem nagy műveacuteszet Felhasznaacuteljuk a maacuter ismert DIV AB osztoacute utasiacutetaacutest meacuteghozzaacute sorozatban Előszoumlr is elosztjuk a voltage vaacuteltozoacutenk eacuterteacutekeacutet 100-zal Ekkor A-ban maacuteris előaacutell a szaacutezasok eacuterteacuteke A maradeacutek ugyebaacuter B-ben lesz Ezt aacutettesszuumlk A-ba majd elosztjuk 10-zel Ez utaacuten A-ban a tiacutezesek eacuterteacutekeacutet kapjuk meg B-ben pedig az egyesek maradnak Eacutes ennyi az egeacutesz A szaacutezasok tiacutezesek eacutes egyesek eacuterteacutekeacutet el kell mentenuumlnk egy-egy vaacuteltozoacuteba (value100 value10 eacutes value1) hiszen azokat el kell majd kuumlldenuumlnk a PC-nek A szaacutemeacuterteacutekeket termeacuteszetesen ASCII szaacutemjegy-karakterekkeacute kell majd alakiacutetanunk Eacutes azt se felejtsuumlk el hogy a szaacutezasok szaacutemjegye utaacuten kuumlldenuumlnk kell egy pontot is (rsquorsquo) hogy szeacutep legyen a formaacutetumunk Az egyesek utaacuten pedig meacuteg azt kuumlldjuumlk el hogy rsquo Vrsquo Az AD-aacutetalakiacutetaacutest a [31 feladat] megoldaacutesaacutenaacutel egyszeres uumlzemmoacutedban fogjuk hasznaacutelni az oacuterajelosztoacutet eacutes az adateleacutereacutesi időt pedig a lehető legnagyobbra vesszuumlk hiszen jelen esetben semmi sem suumlrgőshellip A kivaacutelasztott AD-csatorna a nullaacutes lesz Arra nagyon figyeljuumlnk hogy a panelon mely tuumlskeacuteket kell hasznaacutelnunk Hogy veacuteletlenuumll se nyuacuteljunk melleacute a [A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is)] aacutebraacutet szaacutenjuk uacutetmutatoacutenak

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

194 aacutebra - A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is)

Az AD-aacutetalakiacutetaacutesnaacutel az SCONV indiacutetoacutebitet fogjuk hasznaacutelni (laacutesd [Az ADCCON2 SFR parameacuteterei]) Ennek 1-re aacutelliacutetaacutesaacutenaacutel elindul az AD-aacutetalakiacutetaacutes eacutes ez a bit csak akkor vaacutelt vissza 0-ra ha az aacutetalakiacutetaacutesi ciklus veacuteget eacutert Iacutegy koumlnnyedeacuten tudunk erre vaacuterakozni a programban

SETB SCONVJB SCONV$

Ha a program ezen a keacutet soron (a koacutedban sziacutenessel kiemeljuumlk) tuacuteljut vidaacuteman kibaacutenyaacuteszhatjuk a digitalizaacutelt feszuumlltseacutegeacuterteacuteket az ADCDATAH eacutes ADCDATAL regiszterekből

A koacuted a soros porti kommunikaacutecioacute miatt nem nevezhető roumlvidnek de semmi csavar vagy bravuacuteros truumlkk sincsen benne A joacute oumlreg DELAY szubrutinunkat most sem tuumlntetjuumlk foumll A soros porti kommunikaacutecioacute

Code43asmvoltage DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejavalue100 DATA 031h A szaacutezasok eacuterteacutekedarabszaacutemavalue10 DATA 032h A tizesek eacuterteacutekedarabszaacutemavalue1 DATA 033h Az egyesek eacuterteacutekedarabszaacutemaMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutet az ADCCON1 regiszterrel Magyaraacutezat 7 bit 1 bekapcsoljuk az aacutetalakiacutetoacutet 6 bit 0 nem hasznaacutelunk kuumllső referenciaacutet 5-4 bit 00 a legnagyobb oacuterajel-osztoacutet hasznaacuteljuk (32) hogy biztosan legyen eleacuteg idő az aacutetalakiacutetaacutesra 3-2 bit 11 a lehető legtoumlbb időt hagyjuk az adatgyűjteacuteshez is 1-2 bit 00 nem hasznaacuteljuk a tovaacutebbi funkcioacutekatnextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutes Addig tehaacutet vaacuterakozunkMOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageA Elmentjuumlk az eddigi aacutellaacutestMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-etADD Avoltage Ehhez pedig csak hozzaacute kell adni voltage tartalmaacutet eacutes keacuteszen is vagyunkMOV voltageA Itt maacuter a kiacutevaacutent baacutejtot mentjuumlk elMOV Avoltage Elosztjuk a feszuumlltseacutegeacuterteacuteketMOV B100 100-zal Iacutegy előaacutell a szaacutezasokDIV AB szaacutemaMOV value100A Elmentjuumlk a szaacutezasokat

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

MOV AB A-ba tesszuumlk a 100-zal valoacute osztaacutes maradeacutekaacutetMOV B10 Most 10-zel osztunkDIV ABMOV value10A A-ban az eredmeacuteny azaz a tiacutezesek szaacutemaMOV value1B B-ben a maradeacutek azaz az egyesek szaacutemaMOV Avalue100 Elkuumlldjuumlk a PC-nek a szaacutezasokatADD A030h de ASCII karakterkeacutentCALL SENDCHARMOV A Megy utaacutena a tizedespontCALL SENDCHARMOV Avalue10 Aztaacuten a tiacutezesekADD A030hCALL SENDCHARMOV Avalue1 Aztaacuten az egyesekADD A030hCALL SENDCHARMOV DPTRfarok A kuumlldeni kiacutevaacutent szoumlvegreacutesz veacutegeacutenekCALL SENDSTRING elkuumlldeacutese karakterlaacutenckeacutentMOV A100 1 maacutesodpercig vaacuterakozunk hogy neCALL DELAY oumlmoumlljoumln a PC-nek tuacutel gyorsan a meacutert eacuterteacutekek sorozataJMP next Ugrunk vissza a koumlvetkező meacutereacuteshez A karakterlaacutenc veacutege farok DB V10130$INCLUDE(UARTIOASM)

A program műkoumldeacuteseacutet most nem videoacuteval hanem kicsit elteacuterő esettanulmaacutennyal mutatjuk be A [Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel] aacutebraacuten laacutethatoacute moacutedon ceruzaelemek feszuumlltseacutegeacutet meacuteregettuumlk mert az garantaacuteltan nem leacutepi tuacutel a +25 V-ot Keacutet ceruzaelemuumlnk volt digitaacutelis multimeacuteterrel meacuterve egyiknek 135 V maacutesiknak 083 V volt az uumlresjaacuteraacutesi feszuumlltseacutege A mikrovezeacuterlővel veacutegzett meacutereacutesek sorozata a [Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek] aacutebraacuten laacutethatoacute A pirossal bekeretezett adatok a keacutet ceruzaelemre vonatkoznak Laacutethatoacute hogy az elteacutereacutesek csak 2 koumlruumlliek ami pont oumlsszhangban van a tizedes toumlrt előaacutelliacutetaacutesakor kapott szisztematikus elteacutereacutessel

A keacutet bekeretezett adatsor koumlzoumltti eacuterteacutekek kisseacute zagyvaacutenak tűnnek de azonnal megadjuk a magyaraacutezatot Ekkor csereacuteltuumlk le a kezuumlnkben leacutevő ceruzaelemet eacutes a meacuterővezeteacutekek egyszerűen csak bdquoloacutegtak a levegőbenrdquo Ilyenkor neacutemi veacuteletlenszerű eacuterteacuteksorozat utaacuten a meacutert eacuterteacutek beaacutell a maximumra Ez laacutethatoacute a [Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek] aacutebraacuten is

195 aacutebra - Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel

196 aacutebra - Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

Veacuteguumll azt a megjegyzeacutest kiacutevaacutenjuk meacuteg hozzaacutefűzni az alfejezetben leiacutertakhoz hogy a pontos feszuumlltseacutegeacuterteacutek előaacutelliacutetaacutesaacutehoz vagy megiacuterjuk a bonyolult aritmetikai rutinokat assemblyben vagy a C nyelvhez fordulunk vagy a lebegőpontos szaacutemiacutetaacutest maacuter sokkal inkaacutebb a PC-n veacutegezzuumlk el alkalmas koumlrnyezetben Lebegőpontos műveletekbe vagy egyeacuteb nehezen eacuterthető matematikai truumlkkoumlk alkalmazaacutesaacuteba assemblyben ezen a szinten nem kiacutevaacutentunk belebonyoloacutedni

Created by XMLmind XSL-FO Converter

20 fejezet - AlkonykapcsoloacuteMegfigyeleacutesek alapjaacuten elmondhatoacute hogy az elektronika iraacutent eacuterdeklődni kezdő gyerekek eacutes tineacutedzserek előbb mindenaacuteron villogoacutekat keacutesőbb akusztikus erősiacutetőket akarnak eacutepiacuteteni Az előbbi nyilvaacuten egyszerűbb viszont szoacute szerint laacutetvaacutenyosabb Villogoacutet csinaacuteltunk maacuter eacuteppen eleget a tankoumlnyvben de maradjunk meacuteg egy kicsit az optoelektronika teruumlleteacuten eacutes keacutesziacutetsuumlnk olyan alkalmazaacutest amely sok optoelektronikai kurzusban az aacutellatorvosi loacute szerepeacutet jaacutetssza Ez az alkalmazaacutes az alkonykapcsoloacute Meg lehet valoacutesiacutetani tranzisztoros billenőkoumlroumlkkel műveleti erősiacutetős alapkapcsolaacutesokkal eacuterzeacutekelőkeacutent pedig felhasznaacutelhatunk fotoellenaacutellaacutest fotodioacutedaacutet eacutes fototranzisztort Vaacutelasszuk most ez utoacutebbit eacutes hasznaacuteljuk ki a mikrovezeacuterlőnk nyers erejeacutet azaz meacuterjuumlk az alkalmazaacuteshoz eacutepiacutetett aacuteramkoumlr valamely reacuteszeacuten a feszuumlltseacuteget majd ennek megfelelően kapcsoljuk be vagy ki a feacutenyforraacutest

A tankoumlnyvben az a ceacutelunk hogy mindig a lehető legegyszerűbb elektronikai megoldaacutest vaacutelasszuk Iacutegy műveleti erősiacutető elő sem keruumll Minden a tankoumlnyvben szereplő komolyabb alkalmazaacutest termeacuteszetesen sokkal igeacutenyesebben is meg lehetne tervezni uumlgyelve a linearitaacutesra jelkorlaacutetozaacutesra stb de a ceacutel eacuteppen a lehető legegyszerűbb elkeacutesziacutethetőseacuteg hogy csak egy mareacutek alkatreacuteszt kelljen felhasznaacutelnunk (eacutes legrosszabb esetben sajaacutet zsebből megvaacutesaacuterolnunk)

1 Besugaacuterzaacutesmeacutereacutes fototranzisztorralFototranzisztorokroacutel sok leacutenyeges ismeretet megtudhatunk a megfelelő elektronikai szakkoumlnyvekből [2] [3] [4] [5] [6] Itt most csupaacuten oumlsszefoglaloacute jelleggel emliacutetjuumlk meg főbb tulajdonsaacutegaikat ill az alkalmazaacuteshoz vaacutelasztott tiacutepus parameacutetereit

Fototranzisztoroknaacutel az eszkoumlz a baacutezisndashemitter aacutetmeneten a besugaacuterzaacutes hataacutesaacutera generaacuteloacutedoacute fotoaacuteramot erősiacuteti foumll Uacutegy is tekinthetuumlnk a fototranzisztorra mint egy szokvaacutenyos tranzisztorra csak a baacutezisaacuteramot a fotoaacuteram jelenti Eacuteppen ezeacutert a legtoumlbb fototranzisztor-tiacutepusnak csak az emittere eacutes a kollektora van kivezetve A baacutezist csak olyan tiacutepusoknaacutel vezetik ki amelyeket munkapont-beaacutelliacutetaacutesra szaacutennak A besugaacuterzaacutes aacuteltal generaacutelt fotoaacuteram szinte toumlkeacuteletes lineaacuteris araacutenyban van magaacuteval a besugaacuterzaacutessal A tranzisztorhataacutes pedig ezt a fotoaacuteramot erősiacuteti foumll Ha tehaacutet a kollektorndashemitter-aacutegba ellenaacutellaacutesokat koumltuumlnk akkor az azokon eső feszuumlltseacuteg meacutereacuteseacutevel figyelhetjuumlk a fototranzisztort eacuterő besugaacuterzaacutest Ilyenkor viszont a meacutert feszuumlltseacuteg maacuter nem lesz lineaacuterisan araacutenyos a besugaacuterzaacutessal attoacutel a tranzisztor jelleggoumlrbeacuteinek megfelelően kisebb-nagyobb meacuterteacutekben el fog teacuterni

Meg kell jegyeznuumlnk hogy a kataloacutegusok toumlbbnyire nem a besugaacuterzaacutes (Ee Wm2) fuumlggveacutenyeacuteben ismertetnek eszkoumlzkarakterisztikaacutekat hanem a megvilaacutegiacutetaacutes (Ev lx) fuumlggveacutenyeacuteben Ehhez azonban mindig illik megadni a karakterisztika felveacuteteleacuteneacutel hasznaacutelt feacutenyforraacutes sziacutenkeacutepeacutet vagy a felhasznaacutelt szabvaacutenyos megvilaacutegiacutetoacutet (pl CIE A) Igeacutenyes gyaacutertoacutek ezt megteszik A keacutet mennyiseacuteg nem ekvivalens hiszen a detektorok sziacutenkeacutepi eacuterzeacutekenyseacutege aacuteltalaacuteban nem egyezik meg a fotometriai mennyiseacutegek definiacutecioacutejaacutehoz szuumlkseacuteges laacutethatoacutesaacutegi fuumlggveacutennyel azaz V()-val [2] A koumlvetkező alkalmazaacuteshoz mi a TEPT4400 tiacutepusuacute fototranzisztort vaacutelasztottuk melynek sziacutenkeacutepi eacuterzeacutekenyseacutege a [A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege] aacutebraacuten laacutethatoacute (A diagram az adatlaproacutel szaacutermazik) Az aacutebraacutet tanulmaacutenyozva vilaacutegosnak kell lennie hogy a fototranzisztor a teljes laacutethatoacute sziacutenkeacuteptartomaacutenyban (380 nm - 780 nm) eacuterzeacutekeny de a koumlzeli infraacuteban is

201 aacutebra - A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

Tekintsuumlk most a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute rendkiacutevuumll egyszerű kis kapcsolaacutest A kollektor- ill emitteraacutegba koumltoumltt ellenaacutellaacutesok azonos meacuteretezeacuteseacuteből nyilvaacutenvaloacute hogy a meacuterendő UE feszuumlltseacuteg soha nem lehet nagyobb 25 V-naacutel Ha a mikrovezeacuterlővel UE-t figyeljuumlnk akkor a meacutert eacuterteacutek fuumlggveacutenyeacuteben ki-be kapcsolgathatunk egy laacutempaacutet eacutes maacuter keacuteszen is van az alkonykapcsoloacutenk Az az előnyuumlnk is meglesz hogy nagyon taacuteg tartomaacutenyban szoftveresen vaacutelaszthatjuk meg a kapcsolaacutesi jelszint eacuterteacutekeacutet Egyeacuteb esetekben a keacutet ellenaacutellaacuteseacuterteacutek araacutenyaacuteval jaacutetszhatunk de akkor figyelnuumlnk kell UE +25 V-os korlaacutetozaacutesaacutera

202 aacutebra - Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten

Eacutepiacutetsuumlk meg a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute egyszerű aacuteramkoumlrt de hagyjuk ki belőle a kondenzaacutetort Toumlltsuumlk le mikrovezeacuterlőnkre az egyszerű AD-aacutetalakiacutetaacutesra megiacutert Code43-at majd figyeljuumlk a kijelzett feszuumlltseacutegadatokat A vizsgaacutelatot a szerző otthoni aacutelloacutelaacutempaacuteja alatt veacutegezte amelybe egy spiraacutelis kompakt feacutenycső volt becsavarva Laacutethatoacute hogy a [Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt] aacutebraacuten bemutatott jelszint eleacuteg nagy ingadozaacutest mutat Keacuterdeacutes hogy mi ennek az oka Talaacuten nem hasznaacutelhatoacute az egyszerű kis kapcsolaacutesunk A vaacutelasz az hogy semmi baja a kapcsolaacutesnak az eacuterteacutekek azeacutert ugraacutelnak ennyire mert a kompakt feacutenycső toumlbb kilohertzes villoacutedzaacutesaacutet eacuterjuumlk tetten amit az emberi szem maacuter semmi esetre sem tud koumlvetni az AD-aacutetalakiacutetoacute viszont e szerint igenhellip Ennyire gyors az ADuC 842-es AD-aacutetalakiacutetoacuteja Ilyen esetekre gyoacutegyiacuter ha a meacuterőellenaacutellaacutessal paacuterhuzamosan bekoumltuumlnk egy megfelelően nagy kondenzaacutetort uacutegy 3-10 F kapacitaacutessal A tapasztalat szerint ez maacuter elegendő Ilyen nagy kapacitaacutesoknaacutel szinte kizaacuteroacutelag elektrolitkondenzaacutetort hasznaacutelhatunk de uumlgyeljuumlnk annak polaritaacutesaacutera mert fordiacutetott bekoumlteacutesneacutel az alkatreacutesz erősen foumllmelegedhet toumlnkremehet sőt foumll is robbanhat (Annyira azeacutert ez sem veszeacutelyes de szeacutethasad a tokozaacutes eacutes irtoacute buumldoumls lesz a helyiseacutegben) A kondenzaacutetor hataacutesaacutet (C = 10 F) a [Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben] aacutebra szemleacutelteti A feszuumlltseacutegingadozaacutes gyakorlatilag megszűnt

203 aacutebra - Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

204 aacutebra - Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben

2 Az alkonykapcsoloacute programjaA [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute kapcsolaacutes eacutes a kondenzaacutetor szerepeacutenek taacutergyalaacutesa utaacuten megfogalmazhatjuk a feladatot az alkonykapcsoloacutehoz

32 feladat

Keacutesziacutetsuumlnk alkonykapcsoloacutet amelyneacutel a detektor fototranzisztor a laacutempaacutet pedig a mikrovezeacuterlő valamely kimeneti bitje jelenti (A kapcsolaacutesi jelszint meghataacuterozaacutesa toumlrteacutenhet a koumlrnyezetnek megfelelően eacutes tapasztalati uacuteton) [Code44 Code45]

A feladat szoumlvegeacuteben az aacutell hogy a laacutempaacutet egy kimeneti bit fogja szimbolizaacutelni Ez a 2-es porton lesz majd (P20) eacutes az aacuteramkoumlr oumlsszeaacutelliacutetaacutesaacutenaacutel ide ceacutelszerűen egy LED-et fogunk koumltni a hozzaacute tartozoacute ellenaacutellaacutessal egyetemben Ezt a bitet azutaacuten maacuter komolyabb megvaloacutesiacutetaacutesnaacutel is fel tudjuk hasznaacutelni vezeacuterlőjel formaacutejaacuteban Ehhez a [TTL IC-k eacutes tranzisztorok a portokon] fejezetben talaacutelunk hasznos tanaacutecsokat

A koacuted egeacuteszen roumlvid lesz az aacuteramkoumlr műkoumldeacuteseacutehez pedig csak arra van szuumlkseacuteguumlnk hogy leaacuternyeacutekoljuk ill ne aacuternyeacutekoljuk le a fototranzisztort A kapcsolaacutesi szint megvaacutelasztaacutesa (a koacutedban sziacutenessel kiemelve) tapasztalati uacuteton toumlrteacutent előfordulhat hogy maacutes helyiseacutegben maacutes megvilaacutegiacutetaacutesi koumlruumllmeacutenyek koumlzoumltt joacutecskaacuten elteacuterő eacuterteacuteket eacuterdemes (kell) beaacutelliacutetanunk Az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa eacutes a regiszterek kezeleacutese eacuteppen uacutegy toumlrteacutenik mint a [31 feladat]naacutel Ennek reacuteszletes leiacuteraacutesa ott megtalaacutelhatoacute A koacutedban a hiszt ciacutemkeacutenek semmi szerep nincs ez csak viszonyiacutetaacutesi pontot jelent a koumlvetkező alfejezetben ismertetett Code45-houmlz

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

Code44asmMOV ADCCON110001100b Az AD-konverter konfiguraacutelaacutesanextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutes Addig tehaacutet vaacuterakozunkMOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageA Elmentjuumlk az eddigi aacutellaacutestMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-ethisztADD Avoltage Ehhez pedig csak hozzaacute kell adni voltage tartalmaacutet eacutes keacuteszen is vagyunk A-ban most maacuter a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 8 bitjeacutet talaacuteljukCJNE A30eval1 Ha Alt30 akkor bekapcsoljuk aeval1JC ledon vilaacutegiacutetaacutest Kuumlloumlnben kikapcsoljukSETB P20 LED kikapcsolaacutesaJMP nextledonCLR P20 LED bekapcsolaacutesaJMP next

A program ugyan ez egy kapcsolaacutesi szint moacutedszereacutenek megfelelő moacutedon műkoumldik de amikor az ember jaacutetszani kezd a műkoumldő aacuteramkoumlrrel hamar raacutejoumln hogy ez iacutegy nem biztos hogy joacute lesz nekuumlnk ugyanis ha a feszuumlltseacutegszint csak egy kicsit is ingadozik a kapcsolaacutesi eacuterteacutek koumlruumll a laacutempaacutenk aacutellandoacute jelleggel ki-be kapcsol Ez a LED-re neacutezve semmifeacutele koumlvetkezmeacutenyekkel nem jaacuter de a viselkedeacutes meacuteg ebben az esetben sem nevezhető szeacutepnek Ha maacutes tiacutepusuacute feacutenyforraacutest izzoacutelaacutempaacutet feacutenycsoumlvet stb kiacutevaacutenunk az alkonykapcsoloacuteval vezeacuterelni akkor viszont a gyakori ki-be kapcsolgataacutes kifejezetten kaacuteros lehet Ennek kikuumlszoumlboumlleacuteseacutere az alaacutebbi alfejezetben talaacutelunk megoldaacutest

3 HisztereacutezisA műszaki tudomaacutenyokban maacuter alapszinten talaacutelkozunk a hisztereacutezis fogalommal Ez azt jelenti hogy adott rendszer aacutellapotai koumlzoumltti aacutetmenet nem ugyanannaacutel a jelszinteacutel koumlvetkezik be egyik ill a maacutesik iraacutenyban A tovaacutebbi magyaraacutezathoz tekintsuumlk az [Hisztereacutezis keacutetaacutellapotuacute rendszerben] aacutebraacutet Ezen egy keacutetaacutellapotuacute rendszer aacutetmeneteihez tartozoacute hisztereacutezist szemleacuteltetjuumlk

205 aacutebra - Hisztereacutezis keacutetaacutellapotuacute rendszerben

A rendszernek keacutet aacutellapota van S1 eacutes S2 Az S1 aacutellapotboacutel az S2 aacutellapotba valoacute aacutetmenet az L mennyiseacuteg noumlvekedeacutesekor L2 szintneacutel koumlvetkezik be a fordiacutetott iraacutenyuacute aacutellapotvaacuteltaacutes viszont L1 szintneacutel Ezzel kikuumlszoumlboumllődik az a jelenseacuteg hogy a rendszer a keacutet aacutellapot koumlzoumltt vergődjoumln amikor is az aacutellapotok koumlzoumltti vaacuteltaacutes mindkeacutet iraacutenyban ugyanannaacutel a jelszinteacutel koumlvetkezik be Az L2 ndash L1 kuumlloumlnbseacuteget a hisztereacutezis szeacutelesseacutegeacutenek nevezzuumlk

Code44 minimaacutelis moacutedosiacutetaacutesaacuteval hisztereacutezist valoacutesiacutethatunk meg a programmal A betoldaacutest tartalmazoacute reacuteszt

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

maradeacutektalanul koumlzzeacutetesszuumlk a koacutedot azonban csak attoacutel a sortoacutel kezdve listaacutezzuk ahovaacute a hiszt ciacutemkeacutet helyeztuumlk A hisztereacutezist jelentő jelszintekre ugyanaz eacuterveacutenyes mint amit az előző alfejezetben is leiacutertunk tapasztalati uacuteton hataacuteroztuk meg őket eacutes maacutes koumlrnyezetben maacutes eacuterteacutekekre lehet (eacutes nagy valoacutesziacutenűseacuteggel lesz is) szuumlkseacuteg

Code45asmhisztADD Avoltage A-ban most maacuter a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 8 bitjeacutet talaacuteljukCJNE A20eval1 Ha A lt 20 akkor bekapcsoljuk aeval1JC ledon vilaacutegiacutetaacutestCJNE A40eval2 Ha A gt= 40 akkor kikapcsoljuk aeval2JNC ledoff vilaacutegiacutetaacutestJMP next Ugraacutes vissza meacuterniledonCLR P20 LED bekapcsolaacutesaJMP next Ugraacutes vissza meacuterniledoffSETB P20 LED kikapcsolaacutesaJMP next Ugraacutes vissza meacuterni

Az aacuteramkoumlruumlnk ezzel a programmal maacuter szebben műkoumldik a hisztereacutezis aacuteldaacutesos hataacutesa joacutel megfigyelhető az aacutellapotok koumlzoumltti vergődeacutes megszűnik (Laacutesd az alkalmazaacuteshoz tartozoacute videoacutet)

Created by XMLmind XSL-FO Converter

21 fejezet - TTL IC-k eacutes tranzisztorok a portokonAmennyiben valaki koumlzeacutepiskolai vagy egyetemi tanulmaacutenyai esetleg elektronikai hobbiteveacutekenyseacutege soraacuten foglalkozott logikai aacuteramkoumlroumlkkel valoacutesziacutenűleg ismeri a Texas TTL receptkoumlnyveacutet [7] Ha nem akkor tiszta sziacutevvel ajaacutenljuk mert nagyszerű munka (Antikvaacuteriumokban eacutes internetes piactereken meacuteg beszerezhető A szerző is ez utoacutebbi moacutedon tett szert raacute) Nos akaacuter iacutegy akaacuter uacutegy aacutell a helyzet a mikrovezeacuterlőhoumlz előbb-utoacutebb nem csak LED-ekből eacutes fototranzisztorokboacutel aacutelloacute aacuteramkoumlroumlket szeretneacutenk csatlakoztatni hanem ezekneacutel sokkal komolyabbakat is termeacuteszetesen akaacuter nagyobb teljesiacutetmeacutennyel Ilyenkor koumlzbuumllső fokozatokra meghajtoacutefokozatokra lesz szuumlkseacuteguumlnk Ezek a fokozatok jelenthetnek erre a ceacutelra tervezett TTL IC-ket eacutes kapcsoloacuteuumlzemben műkoumldtetett tranzisztorokat esetleg Darlington-kapcsolaacutesokat optocsatoloacutekat vagy releacuteket

Ebben a fejezetben elsősorban arra szeretneacutenk raacutemutatni hogy az eddig csupaacuten LED-ek meghajtaacutesaacutera hasznaacutelt P0-s eacutes P2-es portok koumlzoumltt van egy igen leacutenyeges kuumlloumlnbseacuteg Azt is meacuteg egyszer hangsuacutelyozni szeretneacutenk hogy aktiacutev kimenetkeacutent egyiket sem eacuterdemes hasznaacutelnunk A portok laacutebait foumlldre gond neacutelkuumll huacutezhatjuk szoftveresen abboacutel nem lesz baj Ilyenkor joacuteformaacuten csak a taacutepellaacutetaacutes (soros port) terhelhetőseacutege szab korlaacutetot az aacuteramerősseacutegnek 150-200 mA koumlruumlli aacuteramerősseacuteg eseteacuten maacuter eacuterdemes kuumllső taacutepegyseacuteget hasznaacutelnunk A keacutesőbbiekben erre is laacutetunk majd peacuteldaacutet Szeretneacutenk tovaacutebbaacute visszanyuacutelni a tranzisztorokhoz is eacutes megmutatni hogy milyen egyszerűen lehet veluumlk kuumllső egyseacutegeket kapcsolgatni

1 A felhuacutezoacute-ellenaacutellaacutesok szerepeA tankoumlnyvben LED-eket (termeacuteszetesen az előteacutet-ellenaacutellaacutesokat is mindig ide kell eacuterteni) kapcsolgattunk mind a P0-s mind a P2-es port bitjeivel Ilyenkor a LED akkor vilaacutegiacutetott ha a portok megfelelő laacutebaacutet foumlldre huacuteztuk azaz a LED katoacutedja neacutezett a port megfelelő laacuteba feleacute Hasznaacuteljuk most a portokat arra hogy TTL IC-knek adunk veluumlk bemeneti jelszinteket (Ki fog deruumllni hogy meacuteg a TTL IC-k bemenetei koumlzoumltt is akad kuumlloumlnbseacuteg) A peacuteldaacutekban ismeacutet csak LED-ekkel fogjuk jelezni az adott meghajtoacutefokozat műkoumldeacuteseacutet de innentől maacuter baacutetran mereacuteszkedhetuumlnk tovaacutebb is kijjebb ishellip

33 feladat

Kapcsolgassunk egy LED-et az SN74541-es vonalmeghajtoacuten keresztuumll Hasznaacuteljuk ehhez a mikrovezeacuterlő keacutet gombjaacutet [Code46]

A vaacutelasztaacutes azeacutert esett pont erre az IC-re mert ennek nem open collector-os kimenetei vannak hanem a kimenetei aktiacutev kimenetkeacutent hasznaacutelhatoacutek Akaacuter egy heacutetszegmenses kijelzőt is meghajthatunk veluumlk de uacutegy hogy ezek adjaacutek a kijelzőnek az aacuteramot Az ADuC 842-es P0-s eacutes P2-es portjaacuteval eacutes az IC bemeneteivel kapcsolatban irtoacute fontos tanulsaacuteggal fogunk szembesuumllni Előszoumlr is tekintsuumlk az [Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel] aacutebraacuten laacutethatoacute aacuteramkoumlrt

A TI74LS541-es IC tulajdonkeacuteppen 8 puffert vagy maacutes neacuteven vonalmeghajtoacutet tartalmaz Mi most ezek koumlzuumll egyetlen egyet fogunk hasznaacutelni A LED-nek az IC Y1-es kimenete ad aacuteramot amennyiben az A1-es bemenetnek magas logikai jelszintet adunk

211 aacutebra - Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

Mivel most az aacuteramkoumlr a leacutenyeges a koacutedot nagyon roumlvidre iacutertuk Az 1 gombbal bekapcsoljuk a 2 gombbal kikapcsoljuk a LED-et Most nem inverz logikaacuteroacutel van szoacute iacutegy a kimeneti bit magasra aacutelliacutetaacutesa jelenti a LED bekapcsolaacutesaacutet A koacutedban egyszerre kezeljuumlk a P20-s eacutes a P00-s biteket hogy ugyanazt a koacutedot hasznaacutelhassuk a koumlvetkezőkben bemutatandoacute elemzeacutesekhez

Code46asmORG 0060h A program helye a memoacuteriaacutebanbut1 BIT P32 Elnevezzuumlk az 1 gomb bitjeacutetbut2 BIT P33 Elnevezzuumlk a 2 gomb bitjeacutetout2 BIT P20 Az out2 bit definiaacutelaacutesaout0 BIT P00 Az out0 bit definiaacutelaacutesaMAINCLR out2 A kimeneti bitek toumlrleacuteseCLR out0waitJNB but1egy Ugrunk ha az 1 gomb le van nyomvaJNB but2nulla Ugrunk ha a 2 gomb le van nyomvaJMP wait Uacutejra gombnyomaacutesra vaacuterunknullaCLR out2 A kimeneti bitek toumlrleacuteseCLR out0JMP waitegySETB out2 A kimeneti bitek felaacutelliacutetaacutesaSETB out0JMP wait

Amennyiben az [Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel] aacutebraacuten laacutethatoacute moacutedon a vonalmeghajtoacute A1-es bemeneteacutet a P20-s laacutebra koumltjuumlk a mikrovezeacuterlő gombjaival egeacuteszseacuteges moacutedon kapcsolgathatoacute a LED Most joumln a meglepeteacutes Koumlssuumlk aacutet az A1-es bemenetet a P00-s laacutebra Azt fogjuk tapasztalni hogy hiaacuteba nyomogatjuk a gombokat a LED bizony meg se nyekken (nem vilaacutegiacutet) Eacutes most eacuterkeztuumlnk el a keacutet port koumlzoumltti igen leacutenyeges kuumlloumlnbseacuteghez Ez a kuumlloumlnbseacuteg az hogy a P2-es port tartalmaz felhuacutezoacute-ellenaacutellaacutesokat a P0-s viszont nem Ez utoacutebbinak a kimenete stabil magas jelszint helyett lebeg ami nem teszi lehetőveacute a 74541-es IC bemeneteacutenek magas jelszintre huacutezaacutesaacutet Erre van gyoacutegyiacuter hasznaacuteljunk kuumllső felhuacutezoacute-ellenaacutellaacutest ha maacuter a portba nincsen gyaacuterilag beeacutepiacutetve laacutesd [Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten] aacutebra A felhuacutezoacute-ellenaacutellaacutesok eacuterteacuteke 10 kΩ koumlruumlli legyen ezzel messze 1 mA alatt maradunk eacutes nem leacutepjuumlk aacutet a port terhelhetőseacutegeacutet Baj termeacuteszetesen akkor sem toumlrteacutenik ha P2-es port laacutebaira is felhuacutezoacute-ellenaacutellaacutesokat koumltuumlnk de erre a belső felhuacutezoacute-ellenaacutellaacutesok miatt nincs szuumlkseacuteg

Ha P00-s laacutebra az [Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten] aacutebraacuten laacutethatoacute moacutedon raacutekoumltjuumlk a felhuacutezoacute-ellenaacutellaacutest (legyen ez most 10 kΩ-os) a LED-uumlnk ismeacutet egeacuteszseacutegesen kapcsolgathatoacute a gombokkal A felhuacutezoacute-ellenaacutellaacutes műkoumldeacutese a koumlvetkező amennyiben a P00-s laacutebat foumlldre huacutezzuk foumlldpotenciaacutelra keruumll a vonalmeghajtoacute A1-es bemenete is a port laacutebaacuten pedig 05 mA folyik keresztuumll Amennyiben a P00-s laacuteb

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

jelszintjeacutet magasra aacutelliacutetjuk nem lebegni fog hanem az ellenaacutellaacuteson keresztuumll kiuumll stabil +5 V potenciaacutelra Eacutes ez a szint jelenik meg a vonalmeghajtoacute A1-es bementeacuten is

212 aacutebra - Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten

Eacuterdekes moacutedon nem mindegyik 74-es sorozatuacute IC bemeneteacutenek ilyen a kialakiacutetaacutesa mint a fent bemutatotteacute Ha vonalmeghajtoacutenak a 7406-os vagy 7407-es IC-t hasznaacuteltuk volna akkor azok vezeacuterleacutese felhuacutezoacute-ellenaacutellaacutes hasznaacutelata neacutelkuumll is ment volna a P0-s portroacutel Ennek okaacutenak taacutergyalaacutesa azonban maacuter tuacutelmutat e tankoumlnyv keretein A tanulsaacuteg az hogy taacutejeacutekozoacutedjuk a hasznaacutelni kiacutevaacutent vonalmeghajtoacutek bemeneteiről eacutes ha kell baacutetran hasznaacuteljunk felhuacutezoacute-ellenaacutellaacutesokat

2 Tranzisztorok mint kapcsoloacutekKuumllső aacuteramkoumlroumlk egyes reacuteszeinek meghajtaacutesaacutehoz tranzisztorokat is alkalmazhatunk Az előző alfejezetben koumlzreadott Code46-ot felhasznaacutelva egy-egy peacuteldaacutet mutatunk be npn- ill pnp-tranzisztor mint kapcsoloacuteelem hasznaacutelataacutera Mindkeacutet port eseteacuten

Tekintsuumlk az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel] aacutebraacutet Legyen most U = +5 V Ez egyaacuteltalaacuten nem kellene hogy iacutegy legyen hiszen akaacuter maacutes feszuumlltseacutegeacuterteacutekű taacutepellaacutetaacutest is hasznaacutelhatnaacutenk az aacuteramkoumlrhoumlz +12 V-ot +24 V-ot stb de az egyszerűseacuteg kedveacuteeacutert most ez is legyen +5 V Legyen a baacutezisellenaacutellaacutes eacuterteacuteke a tranzisztor erősiacuteteacutesi teacutenyezőjeacutenek megfelelően (A asymp 300) most R = 10 kΩ (RD eacuterteacuteke lehet baacutermi amit egy LED-hez adott U feszuumlltseacuteg eseteacuten hasznaacutelhatunk) Ekkor ha P20 magas jelszinten van (+5 V) akkor a tranzisztor teljesen kivezeacuterlődik iacutegy vilaacutegiacutetani fog a LED Ha P20-t foumlldpotenciaacutelra huacutezzuk akkor a tranzisztor lezaacuter eacutes a LED kialszik

213 aacutebra - Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

Az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel] aacutebraacuten laacutethatoacute aacuteramkoumlr a P00 laacuteb hasznaacutelataacuteval ebben az esetben sem műkoumldik Ennek megint csak a port laacuteba jelszintjeacutenek lebegeacutese az oka Felhuacutezoacute-ellenaacutellaacutes uumlgyes alkalmazaacutesaacuteval azonban ezen a helyzeten is segiacutethetuumlnk Figyeljuumlk meg az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal] aacutebraacuten laacutethatoacute aacuteramkoumlrt Amennyiben U = +5 V R1 eacutes R2 eacuterteacutekeacutet vaacutelaszthatjuk R2-nek azaz jelen esetben 5 kΩ-nak (56 kΩ eseteacuten sem lesz aacutem semmi kuumlloumlnbseacuteg a veacutegeredmeacutenyben) Ebben az esetben a P00-s laacuteb maacuter uacutegy tudja vezeacuterelni a tranzisztort ahogy azt az elejeacuten elterveztuumlk Ha U eacuterteacuteke nagyobb +5 V-naacutel akkor R1 eacutes R2 eacuterteacutekeacutenek meghataacuterozaacutesa csak nagyon keveacutessel igeacutenyel toumlbb figyelmesseacuteget

214 aacutebra - Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal

Ha pnp-tranzisztort akarunk hasznaacutelni akkor vessuumlnk egy pillantaacutest az [Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese] aacutebraacutera Ebben esetben nem lesz szuumlkseacuteguumlnk felhuacutezoacute-ellenaacutellaacutesra meacuteg akkor sem ha a P0-s portot hasznaacuteljuk a vezeacuterleacutesre Viszont most az U feszuumlltseacuteg maacuter nem lehet akaacutermilyen nagy hiszen ha az csak egy kicsivel is nagyobb 5 V-naacutel akkor a tranzisztor mindenkeacuteppen kinyit iacutegy elvesziacuteti kapcsoloacute jellegeacutet Ha azonban U = +5 V ebben az esetben is akkor azeacutert előnyoumls pnp-tranzisztor vaacutelasztaacutesa mert semmikor sem kell felhuacutezoacuteellenaacutellaacutest hasznaacutelnunk Mivel pnp-tranzisztort hasznaacutelunk az akkor nyit ki ha a vezeacuterleacuteseacutere hasznaacutelt portlaacutebat foumlldre huacutezzuk eacutes akkor zaacuter le amikor a vezeacuterlőlaacuteb jelszintje magas (+5 V)

215 aacutebra - Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

A BC182-es eacutes BC212-es univerzaacutelis jelerősiacutető-tranzisztorok kollektoraacuterama folytonos uumlzemmoacutedban 100 mA lehet Ha enneacutel is nagyobb aacuteramuacute eszkoumlzt kiacutevaacutenunk hasznaacutelni akkor maacuter valoacuteban indokolt a toumlbbfokozatuacute meghajtaacutes melyre tankoumlnyvi peacutelda szokott lenni a Darlington-kapcsolaacutes [4] [5] [6] Eacutes ahogy maacuter iacutertuk 100-200 mA aacuteramfelveacutetel eseteacuten maacuter kuumllső taacutepot hasznaacuteljunk hogy ne terheljuumlk tuacutel az USB-portot

Created by XMLmind XSL-FO Converter

22 fejezet - Hőmeacuterseacuteklet-meacutereacutesHisztereacutezises alkonykapcsoloacutet maacuter keacutesziacutetettuumlnk a [Alkonykapcsoloacute] fejezetben Maacuter az az alkalmazaacutes is olyan volt ami a gyakorlatban is minden tovaacutebbi neacutelkuumll hasznosiacutethatoacute tehaacutet maacuter nem tankoumlnyviacutezű gyermeteg peacuteldaacuteroacutel volt szoacute Most neacutezzuumlnk egy maacutesik olyan alkalmazaacutest amelyre szinteacuten sokszor lehet igeacuteny a gyakorlatban ez pedig a hőmeacuterseacuteklet-meacutereacutes Ezuacutettal nyilvaacuten valamilyen hőmeacuterseacuteklet-szenzorra lesz szuumlkseacuteguumlnk

1 TermisztorokHőmeacuterseacuteklet eacuterzeacutekeleacuteseacutere szaacutemtalan feacutele szenzort vaacutesaacuterolhatunk Az alkatreacutesz aacutera sok prameacutetertől fuumlgg elsődlegesen a pontossaacutegtoacutel eacutes a linearitaacutestoacutel Szeretneacutenk hűek maradni a tankoumlnyvben megfogalmazott elveinkhez iacutegy a legegyszerűbb legolcsoacutebb megoldaacutest vaacutelasztjuk azaz nem preciacutezioacutes eszkoumlzt de meacuteg csak nem is Pt100-ast fogunk hasznaacutelni hanem egy nagyon egyszerű kis termisztort A termisztorok hőmeacuterseacutekletfuumlggő ellenaacutellaacutesnak tekinthetők Vannak koumlzoumlttuumlk pozitiacutev ill negatiacutev hőfokteacutenyezőjű tiacutepusok Az előbbi azt jelenti hogy a hőmeacuterseacuteklet noumlvekedeacuteseacutevel noumlvekszik az eszkoumlz ellenaacutellaacutesa miacuteg az utoacutebbinaacutel ez pont fordiacutetva van

Hőmeacuterseacutekletmeacutereacutesre mi a KTY81-120 termisztort vaacutelasztottuk Az eszkoumlz olcsoacute koumlnnyen beszerezhető pozitiacutev hőfokteacutenyezőjű viszont karakterisztikaacuteja nem toumlkeacuteletesen lineaacuteris laacutesd [A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja] aacutebra No de semmi baj ebből meacuteg talaacuten tőkeacutet is kovaacutecsolhatunk ha uumlgyesek vagyunkhellip

221 aacutebra - A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja

Az eszkoumlz karakterisztikaacutejaacutet az adatlap 10 Celsius-fokonkeacutent tartalmazza hellyel-koumlzzel 5 fokonkeacutent Ez az adatsor iacutegy eleacuteggeacute heacutezagos ezeacutert interpolaacutecioacutet hajtunk veacutegre rajta A harmadfokuacute termeacuteszetes spline-interpolaacutecioacutet vaacutelasztjuk melyneacutel az alappontrendszert a 10-zel oszthatoacute hőmeacuterseacutekleteacuterteacutekek jelentik hogy az interpolaacutecioacutenaacutel a nagyon keacutenyelmesen megoldhatoacute ekvidisztaacutens esetet kapjuk Ekkor ugyan eacuteppen a kuumlloumlnleges jelentőseacutegű 25 degC-hoz tartozoacute eacuterteacuteket hagyjuk ki (elvileg pont itt 1 000 Ω a termisztor ellenaacutellaacutesa) de laacutetni fogjuk hogy ezzel hibaacutet gyakorlatilag nem veacutetuumlnk Az interpolaacutelt karakterisztikaacutet az [A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja] aacutebra mutatja Az interpolaacutecioacutes fuumlggveacuteny a T = 25 degC helyen 1 00011 Ω-ot vesz foumll ami az 1 000 Ω-hoz keacutepest csak 0011 -os elteacutereacutest jelent Mivel maga az adatlap 2 -os toleranciasaacutevot ad meg az ellenaacutellaacuteseacuterteacutekekhez ekkora kis hibaacuteval egyaacuteltalaacuten nem kell foglalkoznunk

222 aacutebra - A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Itt aacutelljunk meg egy pillanatra eacutes neacutezzuumlk meg hogy tudjuk-e korrigaacutelni a karakterisztikaacutet ha az esetleg arra szorulna Multimeacuteterrel raacutemeacuterve a szerző asztalaacuten oacuteraacutek oacuteta pihenő termisztorra 990 Ω-os ellenaacutellaacutes-eacuterteacutek volt meacuterhető 22 degC-os hőmeacuterseacutekletet felteacutetelezve az interpolaacutecioacutes fuumlggveacuteny ehhez az eacuterteacutekhez 9765 Ω-ot ad A keacutet eacuterteacutek haacutenyadosa 9909765 asymp 10138 iacutegy ezzel az eacuterteacutekkel szorozhatjuk a teljes interpolaacutecioacutes fuumlggveacutenyt a nagyobb pontossaacuteg eacuterdekeacuteben Az 10138 haacutenyadost kalibraacutecioacutes egyuumltthatoacutenak nevezzuumlk

A termisztoron aacutetfolyoacute aacuteram erősseacutegeacutet a gyakorlati alkalmazaacutesok soraacuten ceacutelszerű 1-2 mA alatt tartani Ha nem akarunk aacuteramgeneraacutetort keacutesziacuteteni ez megoldhatoacute uacutegy hogy a termisztorral sorosan koumltuumlnk egy maacutesik ellenaacutellaacutest a hőmeacuterseacuteklet megaacutellapiacutetaacutesaacutehoz pedig a termisztoron eső feszuumlltseacuteget meacuterjuumlk laacutesd alaacutebbi aacutebra

223 aacutebra - A termisztor soros kapcsolaacutesban

A soros ellenaacutellaacutes-paacuterra foumlliacutert feszuumlltseacutegosztoacute szerint

Vaacutelasszuk az U feszuumlltseacuteget 49 V-nak (A szerző oumlreg asztali szaacutemiacutetoacutegeacutepeacuten ennyit tudott nyuacutejtani az USB port) Tegyuumlk fel tovaacutebbaacute hogy a 0 degC - 60 degC tartomaacutenyban kell hőmeacuterseacutekletet meacuternuumlnk Kiacutevaacutencsisaacutegboacutel vizsgaacuteljuk meg hogy hogyan fog kineacutezni a hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika ha az RS ellenaacutellaacutes eacuterteacutekeacutet egyszer 500 Ω-nak ([A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal] aacutebra) maacutesszor 10 kΩ-nak ([A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal] aacutebra) vesszuumlk Szabad szemmel is laacutethatoacute hogy egyik karakterisztika sem toumlkeacuteletesen lineaacuteris ill hogy az egyik konkaacutev a maacutesik konvex fuumlggveacuteny Az egyeacutebkeacutent is probleacutemaacutet jelentene hogy RS = 500 Ω eseteacuten a termisztor feszuumlltseacutege joacutecskaacuten 25 V foumlloumltt van iacutegy a mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutet nem is hasznaacutelhatnaacutenk tovaacutebbi jelkondicionaacutelaacutes neacutelkuumll

224 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

225 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal

Proacutebaacuteljuk most RS eacuterteacutekeacutet megvaacutelasztani uacutegy hogy a fuumlggveacuteny a saacutergaacuteval jeloumllt darabja a lehető legnagyobb meacuterteacutekben megkoumlzeliacutetse a lineaacuteris alakot Tovaacutebbi reacuteszletezeacutes neacutelkuumll ehhez joacute oumltletnek tűnik ha a karakterisztika első derivaacuteltjaacutet numerikusan kiszaacutemoljuk azaz veacuteges differenciaacutekkal koumlzeliacutetjuumlk Ha most ezeknek a differenciaeacuterteacutekeknek vesszuumlk a szoacuteraacutesaacutet akkor az joacutel kifejezi a lineaacuteris alaktoacutel valoacute globaacutelis elteacutereacutest Mindezt persze csak akkor ha ezt a szoacuteraacuteseacuterteacuteket elosztjuk a differenciaeacuterteacutekek aacutetlagaacuteval ugyanis iacutegy tesszuumlk invariaacutenssaacute az ily moacutedon feleacutepiacutetett ceacutelfuumlggveacutenyuumlnket a fuumlggveacuteny amplituacutedoacutejaacuteval szemben Numerikus szeacutelsőeacuterteacutek-kereseacutest alkalmazva RS eacuterteacutekeacutere 2 385 Ω adoacutedik optimumkeacutent Ennek eseteacutet mutatja a [A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel] aacutebra Az optimummal meacuteg a feszuumlltseacutegeacuterteacutekre neacutezve is szerencseacutenk van a termisztor feszuumlltseacutege az előiraacutenyzott hőmeacuterseacuteklet-tartomaacutenyban bőven 25 V alatt marad A saacutergaacuteval jeloumllt fuumlggveacutenydarab gyakorlatilag lineaacuterisnak tekinthető

Amennyiben a saacutergaacuteval rajzolt fuumlggveacutenydarabot lineaacuteris fuumlggveacutennyel akarjuk helyettesiacuteteni meg kell hataacuteroznunk annak meredekseacutegeacutet (m) eacutes fuumlggőleges eltolaacutesaacutet (b) az

oumlsszefuumlggeacuteshez Az m meredekseacuteget keacutepezhetjuumlk uacutegy hogy vesszuumlk a numerikusan szaacutemolt differenciaeacuterteacutekek aacutetlagaacutet b-nek pedig egyszerűen a 0 degC-naacutel foumllvett eacuterteacuteket tekintjuumlk A [A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel] aacutebraacuten laacutethatoacute veacutekony fekete szakasz ezt a lineaacuteris fuumlggveacutenyt mutatja

226 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Az olvasoacutet megnyugtatjuk semmilyen fontos szaacutemiacutetaacutesroacutel nem maradt le az alfejezetben taacutergyalt oumlsszes szaacutemiacutetaacutesi reacuteszlet megtalaacutelhatoacute a KTY81-120xls faacutejlban azzal mindent reprodukaacutelni tud

2 HőmeacuterőAz előző alfejezetben eleacuteg reacuteszletesen foglalkoztunk a termisztor karakterisztikaacuteival iacutegy veacutegre megfogalmazhatunk egy hőmeacuterseacuteklet-meacutereacutesi feladatot

34 feladat

Meacuterjuumlk a mikrovezeacuterlővel 02 degC felbontaacutessal a szobaacutenk hőmeacuterseacutekleteacutet a 20 degC - 30 degC tartomaacutenyban A meacutert hőmeacuterseacuteklet-eacuterteacuteket kuumlldjuumlk el a soros porton a PC-nek A tartomaacutenyon kiacutevuumlli hőmeacuterseacuteklethez kuumlloumln uumlzenetet kuumlldjuumlnk [Code47]

Az előző alfejezetben is hivatkozott KTY81-120xls faacutejlban meghataacuteroztuk hogy az U = 49 V feszuumlltseacuteg eacutes az optimaacutelis RS = 2 385 Ω mellett mekkora termisztorfeszuumlltseacuteg tartozik adott hőmeacuterseacuteklethez A

feszuumlltseacutegeacuterteacutekekhez koumlnnyen meghataacuterozhatjuk a digitaacutelis aacutetalakiacutetaacutes eacuterteacutekeit a formulaacuteval Az előiacutert hőmeacuterseacuteklet-tartomaacuteny elejeacutet eacutes veacutegeacutet mutatja a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] feszuumlltseacutegeacuterteacutekkel AD-eacuterteacutekkel egyetemben Ez utoacutebbit decimaacutelisan eacutes hexadecimaacutelisan is

221 taacuteblaacutezat - A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata

T degC UR(T) V D dec D hex

200 14215 2328 918

202 14231 2331 91B

204 14247 2334 91E

206 14263 2336 920

208 14279 2339 923

hellip hellip hellip hellip

292 14955 2450 992

294 14971 2452 994

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

296 14987 2455 997

298 15003 2457 999

300 15019 2460 99C

Ha szemuumlgyre vesszuumlk a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] utolsoacute oszlopaacuteban leacutevő eacuterteacutekeket akkor foumll kell tűnnie annak a teacutenynek hogy valamennyi hexadecimaacutelis szaacutem első szaacutemjegye 9-es Ez most oacuteriaacutesi ajaacutendeacutek nekuumlnk az AD-aacutetalakiacutetaacutesnaacutel ugyanis a 12 bitből csak az alsoacute 8-ra lesz szuumlkseacuteguumlnk Tizenhatos szaacutemrendszerben ugyanis egy szaacutemjegy 4 bitet igeacutenyel ha aacutetiacuterjuk kettes szaacutemrendszerbe Ha tehaacutet tizenhatos szaacutemrendszerben foumlliacutert haacuteromjegyű szaacutemok helyett csak keacutetjegyűekre lesz szuumlkseacuteguumlnk akkor az mindig csak 8 bitet igeacutenyel kettes szaacutemrendszerben Ez pedig azt jelenti hogy egy az egyben hasznaacutelhatjuk az AD-aacutetalakiacutetoacute ADCDATAL regisztereacutet eacutes hogy az ADCDATAH regiszterre nem is lesz szuumlkseacuteguumlnk hiszen abban az aacutetalakiacutetott eacuterteacutek felső 4 bitje van (vouml [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei] aacutebra)

A tapasztalat azt mutatja hogy az AD-aacutetalakiacutetaacutes soraacuten kapott 12-bites eacuterteacutek alsoacute egy-keacutet bitje meacuteg nagyon stabil feszuumlltseacuteg mellett is eleacuteggeacute ingadozhat Ennek koumlvetkezteacuteben a kijelzett hőmeacuterseacuteklet-eacuterteacutek is kisebb-nagyobb ingadozaacutest mutat laacutesd [Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll] aacutebra Ezen oknaacutel fogva nem egy-egy meacutereacutes eredmeacutenye alapjaacuten eacuterdemes kiiacuteratnunk a hőmeacuterseacutekletet hanem toumlbb meacutereacutes eacuterteacuteket lenne joacute aacutetlagolnunk

227 aacutebra - Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll

Az aacutetlagolaacuteshoz toumlbbnyire maacuter lebegőpontos műveletekre lenne szuumlkseacuteguumlnk aminek megiacuteraacutesa assemblyben nem eacuteppen leaacutenyaacutelom Megtehetjuumlk hogy C fordiacutetoacuteeacutert sikoltunk de inkaacutebb gondolkodjunk egy kicsit Ha az ADCDATAL regiszterből kiemelt eacuterteacuteket nem egyedileg elszigetelten kezeljuumlk hanem tovaacutebbi vaacuteltozoacutek bevezeteacuteseacutevel toumlbb ilyet oumlsszeadunk majd a veacutegeacuten az oumlsszeget a meacutereacutesek darabszaacutemaacuteval elosztjuk akkor megvaloacutesiacutethatjuk az aacutetlagolaacutest Ehhez hasznaacuteljunk egy keacutetbaacutejtos vaacuteltozoacutet melynek lesz ugyebaacuter egy felső baacutejtja (datah) eacutes egy alsoacute baacutejtja (datal) E keacutet vaacuteltozoacute aacuteltal reprezentaacutelt 16-bites eacuterteacuteket nullaacutezzuk le majd adjuk hozzaacute a fuumlggetlen meacutereacutesek 8-baacutejtos eacuterteacutekeit de nagyon leacutenyeges hogy a hozzaacuteadaacutesok darabszaacutema kettő hatvaacutenya legyen Ennek a koumlvetelmeacutenyek a magyaraacutezataacutera hamarosan feacuteny deruumll Adjunk oumlssze peacuteldaacuteul 32 meacutereacutesi eacuterteacuteket Amikor a keacutetbaacutejtos regiszteruumlnk alsoacute baacutejtjaacutehoz hozzaacuteadjuk az aktuaacutelisan meacutert 8-bites eacuterteacuteket akkor mindig lehet aacutetvitel A felső baacutejthoz adjunk hozzaacute nullaacutet plusz az aacutetvitelt Menet koumlzben mentsuumlk mindig el a moacutedosult alsoacute ill felső baacutejtot iacutegy az eljaacuteraacutes veacutegeacutere kapunk egy 16-bites eacuterteacuteket amely 32 db 8-bites meacutereacutesi adat oumlsszegeacutet hordozza Assemblyben mindez iacutegy fest

MOV datal0 Nullaacutezzuk a datahdatalMOV datah0 regiszterpaacutertMOV R432 32-szoumlr meacuteruumlnk ebből keacutepezzuumlk az aacutetlagotmeasureSETB SCONV Egyszeri AD-konverzioacutetJB SCONV$ keacuteruumlnkMOV jelADCDATAL Kiolvassuk az ADCDATAL regisztertMOV Adatal Hozzaacuteadjuk datal-hez az aktuaacutelis

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

ADD Ajel kiolvasott eacuterteacuteketMOV datalA Elmentjuumlk a kapott alsoacute baacutejtotMOV Adatah Az aacutetviteli bittel egyuumltt 0-t adunkADDC A0 rsquodatahrsquo-hozMOV datahA Elmentjuumlk a kapott felső baacutejtotDJNZ R4measure Folytatjuk a meacutereacutest

A fenti koacutedreacuteszlet tehaacutet 32 meacutereacutesi adatot ad oumlssze az eredmeacuteny pedig a 16-bitesnek tekintendő datahdatal regiszterpaacuterban van Most joumln a kettő hatvaacutenyaacutera megfogalmazott igeacuteny magyaraacutezata A datahdatal regiszterpaacuter eacuterteacutekeacutet el kellene osztanunk 32-vel Szedjuumlk elő mindazt amit a kettes szaacutemrendszerről tudunk Ha egy akaacuterhaacutenybites eacuterteacuteket egy bittel balra leacuteptetuumlnk az uumlres helyre pedig nullaacutet iacuterunk akkor kettővel szorozzuk a szaacutemeacuterteacuteket Ha egy bittel jobbra leacuteptetuumlnk akkor kettővel osztunk eacutes egyuacutettal keacutepezzuumlk az egeacutesz reacuteszt Ha keacutet bittel leacuteptetuumlnk jobbra akkor 4-gyel osztunk eacutes keacutepezzuumlk az egeacutesz reacuteszt Iacutegy aztaacuten mivel 32 = 25 ezeacutert a keacutet regiszter tartalmaacutet egyuumlttesen 5 bittel kell jobbra leacuteptetnuumlnk

Vegyuumlnk egy peacuteldaacutet a fent leiacutert leacutepteteacutesre de az egyszerűseacuteg kedveacuteeacutert most csak 4 db 8-bites szaacutemot adunk oumlssze (eacutes iacutegy majd keacutet bittel leacuteptetuumlnk jobbra) Ezek decimaacutelis eacuterteacuteke legyen rendre 77 76 79 81 iacutegy az oumlsszeguumlk 313 Az oumlsszegzeacutest kettes szaacutemrendszerben iacutegy szemleacuteltetjuumlk

01001101 01001100 01001111 + 01010001 ---------- 100111001

Az eredmeacuteny maacuter keacutet baacutejtot igeacutenyel Egymaacutes mellett elteacuterő sziacutennel feltuumlntetve az eredmeacuteny felső eacutes alsoacute baacutejtjaacutet ezt kapjuk

datahdatal

00000001 00111001

Ha most keacutet bittel jobbra leacuteptetjuumlk a regiszterpaacuter egyuumlttes eacuterteacutekeacutet akkor ezt kapjuk

datahdatal hulladeacutek

xx000000 01001110 01

A fenti műveletneacutel a keacutet bdquoxrdquo azt akarja szimbolizaacutelni hogy teljesen mindegy milyen bitek joumlnnek be oda balroacutel hiszen a felső baacutejtra nem lesz a tovaacutebbiakban szuumlkseacuteguumlnk A bdquohulladeacutekrdquo szoacute pedig arra utal hogy az alsoacute baacutejtboacutel keacutet bitet elvesziacutetuumlnk de emiatt ne keseregjuumlnk hiszen ez jelenti az egeacutesz reacutesz keacutepzeacuteseacutet Ami most az alsoacute baacutejtban előaacutellt az 01001110 binaacuterisan ami decimaacutelisan 78 Ha pedig elosztjuk a neacutegy eredeti szaacutem oumlsszegeacutet 4-gyel akkor 3134 = 7825-oumlt kapunk aminek egeacutesz reacutesze 78 Imiacutegyen assemblyben tudtunk egyfajta aacutetlagolaacutest veacutegezni eacutes most maacuter eacuterthető hogy mieacutert volt fontos hogy az aacutetlagolni kiacutevaacutent adatok darabszaacutema kettő hatvaacutenya legyen

A leacutepteteacutesi művelethez azokat a bitforgatoacute utasiacutetaacutesokat hasznaacuteljuk amelyek C-n keresztuumll leacuteptetnek Iacutegy tudjuk megoldani azt hogy a felső baacutejtboacutel jobbra kinyomott bit megőrződjeacutek C-ben majd onnan beszippanthassuk balroacutel az alsoacute baacutejtba Ez assemblyben nem is olyan bonyolult

MOV R45 5-szoumlr leacuteptetuumlnk jobbraleptetMOV Adatah A-ba toumlltjuumlk a felső baacutejtot RRC A Jobbra forgatjuk Iacutegy legalsoacute bitje C-be keruumll Hogy mi leacutep be balroacutel az eacuterdektelenMOV datahA A moacutedosult felső baacutejtot elmentjuumlk MOV Adatal A-ba toumlltjuumlk az alsoacute baacutejtotRRC A Jobbra forgatjuk ezt is Balroacutel beleacutep a C-ben aacutelloacute bit Jobbra taacutevozik a foumlloumlslegesseacute vaacutelt legalsoacute bit C-be leacutep de ennek maacuter nincs jelentőseacutegeMOV datalA A moacutedosult alsoacute baacutejtot elmentjuumlkDJNZ R4leptet Folytatoacutedik a leacutepteteacutes ciklusa

A [Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal] aacutebra az aacutetlagolaacutes kellemes hataacutesaacutet a mutatja Az itt laacutetottakat eacuterdemes oumlsszehasonliacutetani a [Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll] aacutebraacuteval

228 aacutebra - Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

A [34 feladat] megoldaacutesaacutehoz meacuteg egy nagyon fontos momentumot tisztaacuteznunk kell Az aacutetlagolaacutest ugyan meguacutesztuk lebegőpontos műveletek neacutelkuumll de a hőmeacuterseacuteklet-eacuterteacutekek kiszaacutemiacutetaacutesaacutet a meacutert feszuumlltseacutegből maacuteshogy maacuter nem tudnaacutenk megoldani Ez akkor van iacutegy ha szaacutemolni akarjuk a hőmeacuterseacuteklet-eacuterteacutekeket Ha azonban maacutes megoldaacutest vaacutelasztunk akkor nem lesz szuumlkseacuteguumlnk szaacutemiacutetaacutesokra Ez a bdquomaacutes megoldaacutesrdquo az uacuten look-up table hasznaacutelata A look-up table olyan taacuteblaacutezatot jelent amelyben minden teacutetelesen benne van amire csak szuumlkseacuteguumlnk lehet Look-up table-t hasznaacutelni assemblyben egyeacutebkeacutent nem is akkora bdquoeacutegeacutesrdquo mint amekkoraacutenak elsőre hinneacutenk Sokszor meg lehet veluumlk keruumllni bonyolult szaacutemiacutetaacutesokat melyeket assemblyben gyoumltrelmes lenne megiacuterni Majdnem olyan ez mint a klasszikus eacutertelemben vett fuumlggveacutenytaacuteblaacutezat Ha visszatekintuumlnk a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata]ra akkor koumlnnyű meggondolni hogy a feladat megoldaacutesaacutera alkalmazott uacutej taacuteblaacutezatban csak a keacutetjegyűre csupasziacutetott hexadecimaacutelis szaacutemokra (hiszen a harmadik jegy mindig 9 lenne) eacutes a hőmeacuterseacuteklet szoumlveges eacuterteacutekeacutere lesz szuumlkseacuteguumlnk Valahogy ilyenformaacuten

DB 018h2000DB 01Bh2020DB 01Eh2040DB 020h2060DB 023h2080DB DB

Az adatbaacutejtokkeacutent megadott adathalmaz alkotja a programhoz szuumlkseacuteges look-up table-t Valamely sor első eleme első baacutejtja a felismerendő lecsupasziacutetott feszuumlltseacutegeacuterteacutek (laacutesd [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] 4 oszlop) Ez utaacuten minden sorban tovaacutebbi 5 baacutejt koumlvetkezik 4 baacutejtboacutel aacutell az első elemhez tartozoacute szoumlveges hőmeacuterseacuteklet-eacuterteacutek az oumltoumldik baacutejt pedig a karakterlaacutencot lezaacuteroacute 0 Ezek utaacuten semmi maacutesra nincs szuumlkseacuteguumlnk mint az előaacutelloacute aacutetlagolt meacutereacutesi adatot megkeresni a taacuteblaacutezatban majd kijelezni a hozzaacute tartozoacute hőmeacuterseacuteklet-eacuterteacuteket Hogy meglepeteacutes ne eacuterjen bennuumlnket ceacutelszerű megvizsgaacutelnunk hogy az aacutetlagolt eacuterteacutek egyaacuteltalaacuten szerepel-e a taacuteblaacutezatban Vagyis ha tuacutel alacsony vagy tuacutel magas a hőmeacuterseacuteklet akkor azt kuumlloumln kell jeleznuumlnk Ha ez nem aacutell fenn akkor kereshetuumlnk a taacuteblaacutezatban A kereseacutes koacuted-indirekt ciacutemzeacutessel toumlrteacutenik eacutes az aacutetlagolt meacutereacutesi adat ill a taacuteblaacutezat soraiban szereplő első elemek oumlsszehasonliacutetaacutesaacuteval Ha valamely sorban az első elem eacuterteacuteke nagyobb vagy egyenlő az aacutetlagolt meacutereacutesi adattal akkor az abban a sorban szereplő eacuterteacuteket jelezzuumlk ki Mivel a taacuteblaacutezat sorai rendezettek az első elemre neacutezve mindig egyeacutertelműen megtalaacuteljuk a helyes hőmeacuterseacuteklet-eacuterteacuteket Ehhez persze szuumlkseacuteg van a taacuteblaacutezatba foglaltakon kiacutevuumll eső hőmeacuterseacuteklet felismereacuteseacutere eacutes kuumlloumln kezeleacuteseacutere

Az adatmutatoacute kezeleacutese most kuumlloumlnoumls figyelmet igeacutenyel Tegyuumlk fel hogy ez most a taacuteblaacutezat valamely soraacutenak első elemeacutere mutat Ezt az elemet onneacutet ezek szerint gond neacutelkuumll kiolvashatjuk koacuted-indirekt ciacutemzeacutessel Amennyiben ezt az eacuterteacuteket kerestuumlk 1-gyel megnoumlveljuumlk az adatmutatoacute eacuterteacutekeacutet amely iacutegy a megfelelő hőmeacuterseacuteklet-eacuterteacutekre mint szoumlvegdarabra mutat majd meghiacutevhatjuk a szoumlvegkuumlldő szubrutint A koumlvetkező sor első elemeacutehez azonban nem 1-gyel hanem 6-tal kell megnoumlvelnuumlnk az adatmutatoacute eacuterteacutekeacutet hiszen 5 baacutejtot kell aacutetugranunk (a hőmeacuterseacuteklet-eacuterteacuteket eacutes a szoumlvegzaacuteroacute nullaacutet)

A [34 feladat] megoldaacutesaacutet jelentő koacuted maacuter nem lesz roumlvid de meacuteg mindig nem kell megijednuumlnk tőle A joacute oumlreg DELAY szubrutint most is kihagyjuk a tankoumlnyvbe beemelt reacuteszből A soros porti kommunikaacutecioacute eacutes az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa uacutegy toumlrteacutenik mint a koraacutebbi alkalmazaacutesokban ezeacutert azokat maacuter nem magyaraacutezzuk A

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

look-up table-nek a helytakareacutekossaacuteg veacutegett csak kis reacuteszleteacutet koumlzoumlljuumlk A koacuted teljes egeacuteszeacuteben eacutes reacuteszletes magyaraacutezatokkal egyetemben megtalaacutelhatoacute a koacutedkoumlnyvtaacuterban

A tankoumlnyv ezen pontjaacuten a 80518052-es processzormagoknak maacuter majdnem az oumlsszes geacutepi utasiacutetaacutesaacutet ismerjuumlk Az egyik ami meacuteg hiaacutenyzik a koumlvetkező

CLR A

Ez ekvivalens a

MOV A0

utasiacutetaacutessal csak fele olyan hosszuacute (egybaacutejtos) eacutes fele annyi oacuterajelciklust (egyet) igeacutenyel A mnemonikot maacuter eacutertjuumlk hiszen ilyennel a bitműveletek utasiacutetaacutesainaacutel maacuter talaacutelkoztunk eacutes pontosan ugyanazt jelenti (Clear ndash toumlroumll) Ez az uacutej utasiacutetaacutest a demonstraacutecioacute kedveacuteeacutert felbukkan a koacutedban is

Code47asmjel DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejadatah DATA 031h Az oumlsszeg vaacuteltozoacutejaacutenak felső baacutejtjadatal DATA 032h Az oumlsszeg vaacuteltozoacutejaacutenak alsoacute baacutejtjakorr EQU 12 A korrekcioacutes eacuterteacutek Tapasztalai uacuteton hataacuterozhatoacute megMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutetnextMOV datah0 Nullaacutezzuk az aacutetlagolaacutes vaacuteltozoacutejaacutenakMOV datal0 mindkeacutet baacutejtjaacutetMOV R432 Ennyiszer meacuteruumlnk ebből keacutepezzuumlk az aacutetlagotmeasureSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutesMOV jelADCDATAL A sajaacutetos hőmeacuterseacuteklettartomaacuteny miatt nekuumlnk most az aacutetalakiacutetott eacuterteacutek alsoacute 8 bitje kell csakMOV Adatal Hozzaacuteadjuk datal-hez az aktuaacutelisADD Ajel AD-eacuterteacuteketMOV datalA Elmentjuumlk a kapott alsoacute baacutejtotMOV Adatah Az aacutetviteli bittel egyuumltt 0-t adunkADDC A0 rsquodatahrsquo-hozMOV datahA Elmentjuumlk a kapott felső baacutejtotDJNZ R4measure Folytatjuk a meacutereacutest az aacutetlaghozMOV R45 Ennyiszer jobbra leacuteptetjuumlk aleptet datahdatal 16-bites eacuterteacuteket azazMOV Adatah tulajdonkeacuteppen 2-az-ennyiediken-nelRRC A osztjuk vagyis aacutetlagot keacutepezuumlnk a meacutereacutesiMOV datahA adatokboacutel A felső baacutejtboacutel a C bit segiacutetseacutegeacutevel aacutetleacuteptetjuumlkMOV Adatal a biteket az alsoacute baacutejtba Annak alsoacute bitjeiRRC A elvesznek de ne sirassuk őket A veacutegeacutenMOV datalA datal-ben az aacutetlageacuterteacutek szerepelDJNZ R4leptet Folytatjuk a bitek leacutepteteacuteseacutetMOV Adatal Korrigaacuteljuk a kapott aacutetlageacuterteacuteket aCLR C tapasztalati uacuteton meghataacuterozott korrekcioacutesSUBB Akorr konstanssalMOV datalA Elmentjuumlk a korrigaacutelt eacuterteacuteketMOV Adatal Ha 20 C-naacutel kisebb a meacutert hőmeacuterseacutekletCJNE A016hrelac1 akkor erről uumlzenetet kuumllduumlnk a PC-nekrelac1JC alacsonyCJNE A09Ehrelac2 Ha 30 C-naacutel nagyobb a meacutert hőmeacuterseacutekletrelac2 akkor erről uumlzenetet kuumllduumlnk a PC-nekJNC magasMOV DPTRlookup A look-up table ketdőciacutemeacutenek betoumllteacutese az adatmutatoacutebakeres

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

CLR A A-t nullaacutezukMOVC AA+DPTR Betoumlltjuumlk A-ba a look-up table adott soraacutenak hőmeacuterseacutekleteacuterteacutekeacutet jelentő szaacutemotCJNE Adatalrelac3 Oumlsszehasonliacutetjuk a meacutert aacutetlageacuterteacutekkelrelac3JNC kijelez Ha a taacuteblaacutezat eacuterteacuteke nagyobb vagy egyenlő az aacutetlageacuterteacutekneacutel akkor eleacutertuumlnk a kiiacuterandoacute hőmeacuterseacuteklethezINC DPTR Kuumlloumlnben a koumlvetkező sor joumln a taacuteblaacutezatbanINC DPTR de a koumlvetkező eacuterteacutekhez 6-szor meg kellINC DPTR noumlvelnuumlnk az adatmutatoacutet hiszen a 200INC DPTR stiacutelusuacute adat 4 baacutejt a szoumlvegzaacuteroacute 0 pedigINC DPTR az oumltoumldik Iacutegy a hatodik lesz a koumlvetkezőINC DPTR sor szaacutemadata a koumlvetkező vizsgaacutelathozJMP keres Folytatjuk a look-up table-ben valoacute kereseacutestkijelezINC DPTR Ha joacute sorban voltunk csak 1-gyel kellCALL SENDSTRING noumlvelni az adatmutatoacuten eacutes mehet is a hőmeacuterseacuteklet-eacuterteacutek a PC-nekMOV DPTRfok A kuumlldeni kiacutevaacutent szoumlvegreacutesz veacutegeacutenekCALL SENDSTRING elkuumlldeacutese karakterlaacutenckeacutentidohuzas MOV A100 1 maacutesodpercig vaacuterakozunk hogy neCALL DELAY oumlmoumlljoumln a PC-nek tuacutel gyorsan a meacutert eacuterteacutekek sorozataJMP next Ugrunk vissza a koumlvetkező meacutereacutesi blokkhozalacsonyMOV DPTRhideg A 20 C alatti hőmeacuterseacutekletre vonatkozoacuteCALL SENDSTRING uumlzenet elkuumlldeacutese a PC-nekJMP idohuzasmagasMOV DPTRmeleg A 30 C foumlloumltti hőmeacuterseacutekletre vonatkozoacuteCALL SENDSTRING uumlzenet elkuumlldeacutese a PC-nekJMP idohuzas Az uumlzenetek eacutes a look-up table fok DB C10130hideg DB Tlt198 C10130meleg DB Tgt30 C10130lookupDB 018h2000DB 01Bh2020DB 01Eh2040DB 020h2060DB 023h2080DB DB 092h2920DB 094h2940DB 097h2960DB 099h2980DB 09Ch3000$INCLUDE(UARTIOASM)

Vegyuumlk eacuteszre hogy a tuacutel alacsony ill tuacutel magas hőmeacuterseacutekletek megaacutellapiacutetaacutesaacutenaacutel hagytunk egy kis reacutest a look-up table első eacutes utolsoacute eacuterteacutekeacutehez keacutepest Ennek abban van szerepe hogy mindig biztosan sikeres legyen a look-up table-ben valoacute kereseacutes ill minden eacuterteacutek szerephez is tudjon jutni Ezek a kis reacutesek egyeacutebkeacutent kb 02 degC-t jelentenek a look-up table-ben szereplő eacuterteacutekek leacutepeacuteskoumlze alapjaacuten A koacutedban a reacuteseket jelentő eacuterteacutekeket saacutergaacuteval kiemeltuumlk

A koacuted tartalmaz egy korr nevű korrekcioacutes konstanst (zoumllddel kiemelve) eacutes neacutegy erre vonatkozoacute sort a bitleacutepteteacutes művelete utaacuten (sziacutenessel jeloumllve) Nos az optimaacutelisnak meghataacuterozott ellenaacutellaacutes 2 385 Ω az aacuteramkoumlri panelra viszont csak 2 374 Ω-ot tudtunk foumlltűzni azt is csak keacutet ellenaacutellaacutes kombinaacutecioacutejaacuteval Ez maacuter neacutemi elteacutereacutest eredmeacutenyez a szaacutemolt eacuterteacutekekhez keacutepest Sokkal nagyobb baj azonban az hogy uacutegy tűnik a szaacutemiacutetaacutesnaacutel felteacutetelezett 22 degC nem volt igaz sokkal inkaacutebb lehetett 23-24 degC a szaacutemiacutetoacutegeacutep asztalaacuten amikor megmeacutertuumlk a termisztor ellenaacutellaacutesaacutet Iacutegy amikor előszoumlr bdquoszoacutelalt megrdquo a hőmeacuterőnk kicsit toumlbbet mutatott mint egy bdquorendesrdquo hőmeacuterő amit ellenőrzeacutesi ceacutellal helyeztuumlnk keacutesőbb az asztalra Keacutenyszermegoldaacuteskeacutent vezettuumlk be a korr nevű korrekcioacutes konstanst viszont ezzel a kijelzett hőmeacuterseacuteklet-eacuterteacutekek szinkronizaacutelhatoacutevaacute vaacuteltak az asztalra

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

helyezett bdquorendesrdquo hőmeacuterő eacuterteacutekeivel Tanulsaacuteg legkoumlzelebb előszoumlr a gyakorlatban hozzaacutefeacuterhető ellenaacutellaacutest hataacuterozzuk meg eacutes annak eacuterteacutekeacutevel szaacutemoljunk illetve meacutereacutesek eacutes ne felteacutetelezeacutesek alapjaacuten kalibraacuteljuk a termisztorunkat eacutes akkor nem a veacutegeacuten kell korrigaacutelnunk A tankoumlnyvben meacutegis szaacutendeacutekosan hagytuk benne ezt a kis malőrt hiszen ilyen baacuterkivel előfordulhat akaacuter ceacuteges munka soraacuten is eacutes ilyenkor bizony azt kell neacuteznuumlnk hogy hogyan lehet korrigaacutelni az amuacutegy joacutel megalkotott bdquorendszertrdquo (Gondoljunk csak arra hogy mi toumlrteacutent akkor amikor a Hubble űrteleszkoacutep optikai elemeit tervezteacutek eacutes hogy hogyan hoztaacutek azt helyre)

3 Hőmeacuterseacuteklet-szabaacutelyozaacutesAz előző alfejezetben peacuteldaacutet laacutethattunk arra hogy hogyan meacuterhetuumlnk hőmeacuterseacutekletet a mikrovezeacuterlővel ha termisztort vaacutelasztunk szenzornak Most tűzzuumlnk ki olyan feladatot amely sokkal egyszerűbben megoldhatoacute eacutes tulajdonkeacuteppen sokkal laacutetvaacutenyosabb is lesz (Ennek fejeacuteben persze itt preciacutezkedeacutesről keveacutesbeacute beszeacutelhetuumlnk)

35 feladat

Keacutesziacutetsuumlnk hűtőventilaacutetoros hőmeacuterseacutekletszabaacutelyozoacutet a koumlvetkező moacutedon ha egy adott teacuterreacutesz hőmeacuterseacuteklete (termisztorral meacuterjuumlk) eleacuteri vagy meghaladja a 33 degC-ot akkor ezt a teacuterreacuteszt kezdje el hűteni a hűtőventilaacutetor Ha a hőmeacuterseacuteklet 28 degC alaacute csoumlkken akkor kapcsoljon ki a ventilaacutetor de ne azonnal hanem paacuter maacutesodperc keacuteslelteteacutessel A hőmeacuterseacuteklet 28 degC alatti mivoltaacutet egy zoumlld LED 33 degC feletti mivoltaacutet piros LED a koumlztes tartomaacutenyt narancssaacuterga LED jelezze [Code48]

A feladat szoumlvegeacuteből azonnal koumlvetkezik hogy a szabaacutelyozaacutes szempontjaacuteboacutel itt is hisztereacutezises keacutetaacutellapotuacute megoldaacutest kell megvaloacutesiacutetanunk Ez maacuter nem jelent kihiacutevaacutest hiszen az alkonykapcsoloacutenaacutel sikeresen kezeltuumlk ezt a probleacutemaacutet (laacutesd [32 feladat] [Hisztereacutezis] alfejezet Code45) Ami most eacuterdekesebb lesz az az a teacuteny hogy egy ventilaacutetort illesztuumlnk az aacuteramkoumlruumlnkbe eacutes azt iraacutenyiacutetjuk a termisztorra Ez fogja jelenteni a feladatban előiacutert bdquoteacuterreacuteszrdquo hőmeacuterseacutekleteacutenek befolyaacutesolaacutesaacutet

Ventilaacutetornak baacutetran vaacutelaszthatunk egy leselejtezett asztali PC taacutepegyseacutegeacuteből kioperaacutelt peacuteldaacutenyt ([Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor] aacutebra) Az ilyen ventilaacutetorok aacuteltalaacuteban 12 V taacutepfeszuumlltseacuteget igeacutenyelnek de a toumlbbseacuteguumlk 5 V taacutepfeszuumlltseacuteggel is szeacutepen muzsikaacutel A szerző kezeacutebe keruumllt ventilaacutetoron a koumlvetkező adatok vannak foumlltuumlntetve bdquoDC12V ndash 012Ardquo Nyilvaacutenvaloacutean 012 A 120 mA-t jelent Tűzzuumlk ki a feladatban előiacutertak melleacute most meacuteg azt a ceacutelt is hogy a ventilaacutetort maacuter kuumlloumln taacutepegyseacuteggel hajtsuk meg hogy lehetőleg ne terheljuumlk agyon a szaacutemiacutetoacutegeacutepuumlnk USB portjaacutet Az internetes forraacutesok zoumlme 500 mA terhelhetőseacuteget ad meg egyetlen USB portra Ebbe meacuteg belefeacuterne a mikrovezeacuterlő a haacuterom LED eacutes a ventilaacutetor aacuteramfelveacutetele is de meacutegis hasznaacuteljunk kuumllső taacutepegyseacuteget Veacuteguumll is eljoumltt az ideje ennek ishellip A tapasztalat amuacutegy is azt mutatja hogy ha a mikrovezeacuterlőt ugyanaz az USB port laacutetja el taacutepfeszuumlltseacuteggel mint amelyik a kuumllső aacuteramkoumlrt akkor a kuumllső aacuteramkoumlrnek maacuter 150-200 mA-es aacuteramfelveacuteteleacuteneacutel a mikrovezeacuterlő egyszerűen elaacutejul vagy egyeacuteb anomaacutelis műkoumldeacutesbe kezd Iacutegy LED-ek villogtataacutesaacuten eacutes egy-keacutet fotokapun tuacutel iraacuteny a kuumllső taacutepellaacutetaacutes

229 aacutebra - Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor

Baacuter a ventilaacutetor 12 V-ot igeacutenyelne mi most az emliacutetettek alapjaacuten kuumllső taacutepegyseacutegkeacutent meacutegis +5 V-ot szolgaacuteltatoacute kis egyseacuteget fogunk felhasznaacutelni Hasznaacutelhatnaacutenk teacutenylegesen +12 V-ot adoacute taacutepot is de előkotorhatnaacutenk fioacutekjaink meacutelyeacuteről a reacutegi mobiltelefonjaink mind a mai napig műkoumldő toumlltőtaacutepegyseacutegeit is De megproacutebaacuteljuk a legolcsoacutebban meguacuteszni Olyan megoldaacutessal amit maacutes logikai aacuteramkoumlroumlkhoumlz is minden tovaacutebbi neacutelkuumll

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

hasznaacutelhatunkhellip

Kereskedelmi forgalomban kaphatoacute olyan haacuteloacutezati feszuumlltseacuteggel műkoumldő adapter amely USB csatlakozoacuteval van felszerelve (laacutesd [USB csatlakozoacutes haacuteloacutezati adapter] aacutebra) Hasznaacuteljunk most ilyet Ezt olyan kaacutebellal kapcsolhatjuk a proacutebapanelra amelyet mi magunk fabrikaacutelunk Szerezzuumlnk egy USB-s nyomtatoacutekaacutebelt vagy vaacutegjunk le egyet egy bdquodoumlgloumltt egeacuterrőlrdquo vagy egyeacuteb toumlnkrement eszkoumlzről A kaacutebel szuumlkseacutegtelenneacute vaacutelt veacutegeacutet hasiacutetsuk foumll eacutes a piros (+5 V) eacutes fekete (GND) belső eacuterre (vouml [USB-kaacutebel belső vezeteacutekei] aacutebra) forrasszunk egy-egy tuumlskeacutet eacutes maacuter keacuteszen is vagyunk A pozitiacutev polaritaacutesuacute tuumlske oldalaacutet eacuterdemes megjeloumllnuumlnk nehogy bajt okozzunk a taacutep eacutes a foumlld figyelmetlenseacutegből eredő felcsereacuteleacuteseacutevel (A nyomtatoacutekaacutebel preparaacutelaacutesaacutenaacutel azeacutert legyuumlnk oacutevatosak Taacutevol-keleti gyaacutertmaacutenyoknaacutel ugyanis maacuter laacutettak olyat hogy szegeacuteny agyondolgoztatott meloacutesok felcsereacutelteacutek a vezeteacutekeket eacutes pont a fekete szigeteleacutesű volt a +5 V-os Ezeacutert multimeacuteterrel mindig taacutejeacutekozoacutedjunk)

2210 aacutebra - USB csatlakozoacutes haacuteloacutezati adapter

A kuumllső taacutepellaacutetaacutessal tehaacutet megvolnaacutenk Soha ne felejtsuumlk azonban minden esetben oumlsszefoumlldelni a kuumllső taacutepot eacutes a mikrovezeacuterlőt ([Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera] aacutebra) E neacutelkuumll a leacutepeacutes neacutelkuumll ugyanis aacuteltalaacuteban nem fognak műkoumldni az alkalmazaacutesaink

2211 aacutebra - Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera

A ventilaacutetort tartalmazoacute aacuteramkoumlr a [A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr] aacutebraacuten laacutethatoacute A taacutepfeszuumlltseacuteg sziacutenes jeloumlleacutese a kuumllső taacutepegyseacutegre utal Az aacuteramkoumlr műkoumldeacutese roppant egyszerű A [Tranzisztorok mint kapcsoloacutek] alfejezetben leiacutertak eacutertelmeacuteben a P0-s port laacutebaival felhuacutezoacute-ellenaacutellaacutes neacutelkuumll is vezeacuterelhetuumlnk pnp-tranzisztorokat Ha meggyőződtuumlnk arroacutel hogy a ventilaacutetor aacuteramfelveacutetele 100 mA-neacutel kevesebb akkor baacutetran hasznaacutelhatjuk a BC212-es univerzaacutelis jelerősiacutető tranzisztort (Esetuumlnkben ez a helyzet aacutell fenn) Nagyobb aacuteramfelveacutetelneacutel teljesiacutetmeacutenytranzisztoros Darlington-kapcsolaacutes vagy egyeacuteb erősiacutetőfokozat ajaacutenlhatoacute

2212 aacutebra - A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

A P00-s laacuteb foumlldre huacutezaacutesaacuteval nyitjuk a tranzisztort amely ilyenkor aacuteramot ad a ventilaacutetor motorjaacutenak Tanuljuk meg hogy minden esetben amikor tekercset tartalmazoacute eszkoumlzt vezeacuterluumlnk feacutelvezetőkkel veacutedődioacutedaacutet vagy veacutedődioacutedaacutekat kell alkalmaznunk ([Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera] aacutebra) Ennek oka az hogy amikor a tekercs elenged akkor az egy az addigi aacuteramiraacutennyal ellenteacutetes iraacutenyuacute feszuumlltseacutegimpulzust generaacutel az aacuteramkoumlrben (Ezt egyeacutebkeacutent Laplace-transzformaacutecioacuteval nagy eacutelvezet kiszaacutemolni) A veacutedődioacuteda szerepe az hogy ezt az impulzust levezesse Ennek hiaacutenyaacuteban szaacutemiacutetanunk kell a zaacuteroacuteiraacutenyuacute feacutelvezető-alkatreacutesz vagy -alkatreacuteszek aacutetuumlteacuteseacutere Veacutedődioacutedaacutenak gyengeaacuteramuacute haacuteloacutezatokban gyakorlatilag baacutermilyen dioacutedaacutet vaacutelaszthatunk Ha azonban igen gyors műkoumldeacutesre van szuumlkseacuteg mert peacuteldaacuteul nagy frekvenciaacuteval műkoumldtetuumlnk leacuteptetőmotorokat akkor Schottky-dioacutedaacutek hasznaacutelata javasolt

2213 aacutebra - Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera

Az asztali PC taacutepegyseacutegeacuteből kiműtoumltt ventilaacutetor egyeacutebkeacutent nem igeacutenyel veacutedődioacutedaacutet mert elektromosan kommutaacutelt megoldaacutest tartalmaz De ha ilyen reacuteszleteket nem tudunk az egyseacutegről akkor a dioacutedaacutet soha ne hagyjuk el Aacutertani semmikeacuteppen sem aacutertunk vele az aacuteramkoumlrnek hiaacutenya viszont nagy kaacutert okozhat

A hőmeacuterseacuteklet meacutereacuteseacutere ismeacutet a KTY81-120-as termisztort hasznaacuteljuk Pont uacutegy ahogy az az [A termisztor soros kapcsolaacutesban] aacutebraacuten laacutethatoacute Az aacuteramkoumlri panelunkon ugyanazt a 2 374 Ω-os ellenaacutellaacutes-kombinaacutecioacutet hasznaacuteljuk mint az előző alfejezetben A mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutet (0 csatorna) ismeacutet a termisztorra kapcsoljuk Digitaacutelis multimeacuteterrel a haacuteloacutezati USB-s adapter kimeneti egyenfeszuumlltseacutegeacutet 505 V-nak meacutertuumlk A jelszintek szaacutemiacutetaacutesaacutera keacutesziacutetett KTY81-120xls faacutejlban is ezt aacutelliacutetottuk be a feszuumlltseacutegosztoacute parameacutetereineacutel Ezekkel az adatokkal a [A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek]ban bemutatott eredmeacutenyeket kapjuk

222 taacuteblaacutezat - A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek

T degC UR(T) V D dec D hex D felső 8 bitje hex

28 1522 2 493 9BD 9B

33 1563 2 560 A00 A0

Az AD-aacutetalakiacutetaacutes most is uacutegy fog toumlrteacutenni mint az alkonykapcsoloacutenaacutel ([Egyszerű AD-aacutetalakiacutetaacutes] alfejezet [31 feladat] Code43) azaz a 12-bites eacuterteacuteknek csak a felső 8 bitjeacutet hasznaacuteljuk foumll mert ezekben is adoacutedik akkora

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

kuumlloumlnbseacuteg ami azonosiacutethatoacutevaacute teszi a hőmeacuterseacuteklet-eacuterteacutekekhez tartozoacute feszuumlltseacutegszinteket A koacutedban a koraacutebban maacuter ismertetett megoldaacutes miatt az AD-aacutetalakiacutetoacute konfiguraacutecioacutejaacutet itt maacuter nem magyaraacutezzuk A koacutedkoumlnyvtaacuterban viszont teljes reacuteszletesseacuteggel szerepelnek a kommentek

A hőmeacuterseacuteklet-tartomaacutenyok jeloumlleacuteseacutere 3 LED-et hasznaacutelunk ezeket a keacutenyelmesebb helykihasznaacutelaacutes eacuterdekeacuteben a P2-es port 1 3 eacutes 5 laacutebaacutera koumltjuumlk termeacuteszetesen a megfelelő előteacutet-ellenaacutellaacutessal Ehhez a leacutepeacuteshez maacuter nem eacutereztuumlk szuumlkseacutegesnek kuumlloumln aacuteramkoumlri rajz keacutesziacuteteacuteseacutet hiszen a tankoumlnyvben eddig leiacutertak alapjaacuten a LED-ek bekoumlteacuteseacutenek maacuter magaacutetoacutel eacutertetődőnek kell lennie

A hardveres uumlgyletek taacutergyalaacutesa utaacuten joumljjenek most a szoftveres finomsaacutegok A LED-es kijelzeacutes kuumlloumln kezelhető ez haacuteromaacutellapotuacute rendszert jelent de fuumlggetlen lesz a ventilaacutetor kapcsolgataacutesaacutetoacutel A ventilaacutetor bekapcsolt aacutellapotaacutehoz kuumlloumln jelzőbitet rendeluumlnk (forog) hogy teljesiacuteteni tudjuk a keacutesleltetett kikapcsolaacutest a visszahűteacutes utaacuten Az alsoacute hőmeacuterseacutekletszinthez a [A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek]ban a 9B hexadecimaacutelis eacuterteacutek tartozik A programban majd enneacutel 1-gyel nagyobb eacuterteacuteket adunk meg hataacuternak mert a kisebb relaacutecioacutet hasznaacuteljuk az oumlsszehasonliacutetaacuteskor (Veacuteletlenuumll uacutegy joumltt ki a leacutepeacutes hogy 1 degC kuumlloumlnbseacuteg igen joacute koumlzeliacuteteacutessel egyseacutegnyi elteacutereacutest jelent a 8 biten aacutebraacutezolt eacuterteacutekek koumlzoumltt) A hőmeacuterseacuteklet-szabaacutelyozaacuteshoz melleacutekeluumlnk folyamataacutebraacutet de abban csak a hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacuteseacutet taglaljuk A LED-ek kapcsolgataacutesaacutet sajaacutetos moacutedon de egyeacutertelműen jeloumlljuumlk laacutesd [A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese] aacutebra

2214 aacutebra - A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Az alkalmazaacutes laacutetvaacutenyossaacutega elleneacutere a koacuted roumlvidnek nevezhető A joacute oumlreg DELAY szubrutinunkat most sem tuumlntetjuumlk foumll

Code48asmORG 0060hvoltage DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejagreen BIT P25 A zoumlld LED bitjeorange BIT P23 A narancssaacuterga LED bitjered BIT P21 A piros LED bitjefan BIT P00 A ventilaacutetor kapcsoloacutebitje (0=ON 1=OFF)hideg EQU 09Ch Az alsoacute hőmeacuterseacuteklet-hataacuternaacutel (28 C) 1-gyel nagyobb eacuterteacutek (Majd a kisebb (lt) relaacutecioacutera jaacutetszunkmeleg EQU 0A0h A felső hőmeacuterseacuteklet-hataacuter (33 C) eacuterteacutekeforog BIT 00h A ventilaacutetor bekapcsolt aacutellapotaacutet őrző jelzőbit

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

MAINMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutetCLR forog A ventilaacutetor nem forognextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnkJB SCONV$MOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageAMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-etADD Avoltage A-ban maacuter a helyes feszuumlltseacutegeacuterteacutek lesz az oumlsszeadaacutes utaacutenCJNE Ahidegeval1 Kisebb a hőmeacuterseacuteklet mint az alsoacute hataacutereval1JC cold Ha igen ugrunk a hideg helyzet kezeleacuteseacutehezCJNE Amelegeval2 Nagyobbegyenlő a hőmeacuterseacuteklet mint a felső hataacutereval2JNC warm Ha igen ugrunk a meleg helyzetet kezelniSETB green Ide a koumlztes esetben csorog a programSETB red Zoumlld eacutes piros LED-ek OFFCLR orange Narancs LED ONMOV A50 05 s vaacuterakozaacutesCALL DELAYJMP next Ugraacutes vissza meacuterniwarm A meleg helyzet kezeleacuteseSETB orange Narancs eacutes zoumlld LED OFFSETB greenCLR red Piros LED ONJNB forogbekapcs Ha meacuteg nem forog a ventilaacutetor akkor bekapcsoljukMOV A50 Kuumlloumlnben 05 sCALL DELAY vaacuterakozaacutes eacutesJMP next iraacuteny vissza meacuternibekapcsCLR fan Bekapcsoljuk a ventilaacutetortSETB forog Beaacutelliacutetjuk a bekapcsolt aacutellapot jelzőbitjeacutetMOV A200 2 s vaacuterakozaacutesCALL DELAYJMP next Iraacuteny vissza meacuternicold A hideg helyzet kezeleacuteseSETB orange Narancs eacutesSETB red piros LED-ek OFFCLR green Zoumlld LED ONJB forogfujmeg Ha be van kapcsolva a ventilaacutetor akkor nem kapcsoljuk ki azonnal Kis vaacuterakozaacutes joumlnMOV A50 Kuumlloumlnben 05 sCALL DELAY vaacuterakozaacutes majdJMP next Iraacuteny vissza meacuternifujmegMOV A200 4 x 2 s vaacuterakozaacutes majdCALL DELAYCALL DELAYCALL DELAYCALL DELAYSETB fan a ventilaacutetor kikapcsolaacutesaCLR forog A kikapcsolt aacutellapot beaacutelliacutetaacutesaJMP next Iraacuteny vissza meacuterni

Az alkalmazaacutes gyakorlati kiproacutebaacutelaacutesa soraacuten azt tapasztaltuk hogy amikor a ventilaacutetor lehűti a termisztort eacutes a hőmeacuterseacuteklet uacutejra eleacuteri az alsoacute hataacutert akkor a ventilaacutetor tovaacutebbi 8 maacutesodperces uumlzeme utaacuten meacuteg előfordul hogy a hőmeacuterseacuteklet uacutejra foumllkuacuteszik az aacutetmeneti tartomaacutenyba de utaacutena maacuter szeacutepen stabilizaacuteloacutedik az alacsony hőmeacuterseacuteklet Ezt a zoumlld eacutes narancssaacuterga LED-ek ki-be kapcsoloacutedaacutesa mutatja Olyan is előfordult hogy a narancssaacuterga LED meacuteg keacutetszer-haacuteromszor is foumllvillant egyre roumlvidebb ideig mire a zoumlld LED feacutenye aacutellandoacutesult

Created by XMLmind XSL-FO Converter

23 fejezet - MegvilaacutegiacutetaacutesszabaacutelyozoacuteA [Alkonykapcsoloacute] fejezetben alkonykapcsoloacutet keacutesziacutetettuumlnk Maacuter az is szabaacutelyozaacutes volt raacuteadaacutesul hisztereacutezissel de meacuteg nem bdquovolt az igazirdquo Ezeket a szavakat azeacutert hasznaacuteljuk mert keacutet jelszintneacutel billent a rendszer ide vagy oda aztaacuten ezzel el is inteacuteztuumlk a szabaacutelyozaacutest Igaz pontosan ez volt a feladat ([32 feladat]) iacutegy szoacute nem eacuterheti a haacutez elejeacutet Amit viszont most fogunk alkotni az maacuter sokkal kifinomultabb lesz Folyamatos feszuumlltseacutegkoumlvető szabaacutelyozaacutest fogunk megvaloacutesiacutetani Elvileg mindent tudunk is hozzaacute hardveres uacutejdonsaacuteg nem lesz Az algoritmus lesz az eddigiektől elteacuterő

36 feladat

Keacutesziacutetsuumlnk folytonos uumlzemmoacuteduacute megvilaacutegiacutetaacutesszabaacutelyozoacutet A feacutenyforraacutes 3 feheacuter LED-ből aacutelljon melyek egy feacutenyeacuterzeacutekelőre iraacutenyulnak A 3 LED-del tartsuk aacutellandoacute szinten a megvilaacutegiacutetaacutest a szenzor poziacutecioacutejaacuteban (a fizikailag lehetseacuteges hataacuterokon beluumll) [Code49]

A szenzor aacuteramkoumlre pontosan ugyanaz lesz mint amit a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten bemutattunk azzal a kuumlloumlnbseacuteggel hogy most nem lesz szuumlkseacuteguumlnk az emitter-ellenaacutellaacutessal paacuterhuzamosan kapcsolt kondenzaacutetorra Ennek oka eacuteppen a gyors feszuumlltseacutegkoumlveteacutesben keresendő a kondenzaacutetor keacuteslelteteacutest okozna jel stabilizaacuteloacutedaacutesaacuteban ami feacutelrevinneacute a szabaacutelyozaacutesunkat A haacuterom LED-hez kuumlloumln aacuteramkoumlri rajz megadaacutesaacutet most is foumlloumlslegesnek tartjuk ezt az olvasoacute maacuter maga is foumll tudja eacutepiacuteteni az eddigiek utaacuten A feszuumlltseacuteg meacutereacutese az emitter-ellenaacutellaacuteson pontosan ugyanuacutegy toumlrteacutenik mint Code44-ben eacutes Code45-ben Ami most izgalmasabb lesz az az algoritmus Az bdquoizgalmasrdquo szoacute persze relatiacutev annyit mindenesetre elmondhatunk hogy ebben a tankoumlnyvben ilyet meacuteg nem csinaacuteltunk Műkoumldjoumln ugyanis az alkalmazaacutes uacutegy hogy ha a szenzor besugaacuterzaacutesa adott szint alaacute csoumlkken akkor fokozzuk a LED-ek feacutenyerősseacutegeacutet Mindaddig amiacuteg el nem eacuterjuumlk a kiacutevaacutent besugaacuterzaacutesi szintet Ha a koumlrnyezeti feacutenyviszonyok miatt a szenzor besugaacuterzaacutesa emelkedik akkor a LED-ek feacutenyerősseacutegeacutet csoumlkkentjuumlk Mindaddig amiacuteg el nem eacuterjuumlk a kiacutevaacutent szintet Egy nagyon keskeny hisztereacutezisnek helyet hagyunk a szoftverben haacutetha a gyakorlati tesztek soraacuten szuumlkseacutegesseacute vaacutelik A noumlveleacutes eacutes a csoumlkkenteacutes leacutepeacutesről leacutepeacutesre toumlrteacutenik eacutes ez lesz a fő kuumlloumlnbseacuteg a mostani megoldaacutes eacutes az egyszerű alkonykapcsoloacute koumlzoumltt A LED-ek feacutenyerősseacutegeacutenek vaacuteltoztathatoacutesaacutegaacutet PWM-jellel oldjuk meg

A gyakorlati megvaloacutesiacutetaacutes soraacuten a LED-ek a proacutebapanelon kb 6 cm-re helyezkedtek el a fototranzisztortoacutel (tokozaacutes homlokpontjaacutetoacutel tokozaacutes homlokpontjaacuteig laacutesd [A LED-ek elhelyezkedeacutese a fototranzisztorral szemben] aacutebra) Mindhaacuterom LED-et a fototranzisztorra iraacutenyiacutetottuk A LED-ek aacutellandoacute bekapcsolt aacutellapotaacuteban a Code43 programmal meacutertuumlk a fototranzisztor emitter-ellenaacutellaacutesaacuten a feszuumlltseacuteget (Code43-ba eacuteppen csak a LED-ek bekapcsolaacutesaacutenak soraacutet szuacutertuk be) Azt tapasztaltuk hogy ha a LED-ek ellenaacutellaacutesaacutet 1 kΩ-nak vaacutelasztjuk akkor a meacutert feszuumlltseacuteg 24 V Ezzel az eacuterteacutekkel eleacutegedettek lehettuumlnk mert nem eacuteri el a maximaacutelis eacuterteacuteket de koumlzel aacutell ahhoz

231 aacutebra - A LED-ek elhelyezkedeacutese a fototranzisztorral szemben

A PWM-jel beaacutelliacutetaacutesainaacutel nagyobb frekvenciaacutet vaacutelasztunk mint a [PWM-jelek] fejezetben bemutatott megoldaacutesoknaacutel Vessuumlnk uacutejra egy pillantaacutest a [A PWMCON SFR parameacuteterei]ra eacutes a [A PWM-generaacutetor 1 uumlzemmoacutedja] aacutebraacutera A

MOV PWMCON00010011b

beaacutelliacutetaacutes a sziacutenes teacutetelek sorrendjeacuteben azt jelenti hogy (eacuterdektelen bit) 1 PWM-uumlzemmoacuted nincs tovaacutebbi frekvenciaosztaacutes a mag oacuterajeleacutet hasznaacuteljuk Legyen a PWM1HPWM1L regiszterpaacuter eacuterteacuteke 0800h Ez decimaacutelisan 2 048-at jelent A jel frekvenciaacuteja ezek szerint 16 777 216 Hz 2 048 = 8 192 Hz lesz eacutes ez is marad mert nem alkalmazunk tovaacutebbi frekvenciaosztoacutet A LED-ek feacutenyerősseacutegeacutet pedig nem maacutessal mint a PWM-jel kitoumllteacutesi eacuterteacutekeacutevel fogjuk szabaacutelyozni (Ne felejtsuumlk hogy alacsony jelszint eseteacuten vilaacutegiacutetanak a LED-

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

ek) A kitoumllteacutesi teacutenyezőhoumlz 129 fokozatot rendeluumlnk A PWM0HPWM0L regiszterpaacuter eacuterteacutekeacutet oly moacutedon fogjuk aacutelliacutetani hogy az a koumlvetkező eacuterteacutekeket vegye foumll 0000h 0010h 0020h hellip 07F0h 0800h Vegyuumlk eacuteszre hogy ezeknek a neacutegyjegyű hexadecimaacutelis szaacutemoknak csak a keacutet koumlzeacutepső szaacutemjegyeacutet eacuterinti a fokozatok aacutelliacutetaacutesa (zoumllddel kiemelve) iacutegy ez az elkuumlloumlniacutetett eacuterteacutek egy baacutejton taacuterolhatoacute sőt csak 0-toacutel 80h-ig azaz 128-ig terjed A kitoumllteacutesi teacutenyező ilyeteacuten beaacutelliacutetaacutesaacutet hasonloacutean fogjuk megoldani mint az AD-jel feacutelbaacutejtjainak kiemeleacuteseacutet eacutes azokboacutel uacutejabb baacutejt oumlsszeszereleacuteseacutet A [A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese] aacutebra erre mutat peacuteldaacutet konkreacutet eacuterteacutekkel (6Ah) ahol a kitoumllteacutesi teacutenyező vaacuteltozoacutejaacutet a funkcioacutejaacutenak megfelelően lumint-nak neveztuumlk el (Luminous Intensity magyarul feacutenyerősseacuteg)

232 aacutebra - A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese

A kitoumllteacutesi teacutenyező beaacutelliacutetaacutesaacutet roumlgtoumln komplett szubrutinkeacutent (PWMVALUE) mutatjuk be az alaacutebbiakban

A PWM-jel kitoumllteacutesi teacutenyezőjeacutet beaacutelliacutetoacute szubrutin PWMVALUEMOV PWMCON0 A PWM-jel leaacutellMOV Alumint A-ba toumlltjuumlk lumint eacuterteacutekeacutetANL A11110000b Megtartjuk a felső feacutelbaacutejtot toumlroumlljuumlk az alsoacutetSWAP A Megcsereacuteljuumlk a keacutet feacutelbaacutejtotMOV PWM0HA A kapott eacuterteacuteket betesszuumlk a PWM0H regiszterbeMOV Alumint Ismeacutet A-ba toumlltjuumlk lumint eacuterteacutekeacutetANL A00001111b Megtartjuk az alsoacute feacutelbaacutejtot toumlroumlljuumlk a felsőtSWAP A Megcsereacuteljuumlk a keacutet feacutelbaacutejtotMOV PWM0LA A kapott eacuterteacuteket betesszuumlk a PWM0L regiszterbeMOV PWMCON00010011b Bekapcsoljuk a PWM-jeletRET

A PWM-jel kitoumllteacutesi teacutenyezőjeacutenek szubrutinkeacutent valoacute alkalmazaacutesa javiacutetja a főprogram aacutettekinthetőseacutegeacutet A koacuted e neacutelkuumll sem lenne bonyolult vagy zavaros de eacuteppen ideje a bdquostrukturaacutelt assemblyrdquo iraacutenyaacuteba mutatoacute programiacuteraacutes feleacute mozdulnunk

Ha maacuter ilyen nagy kedvet kaptunk a szubrutinokhoz iacuterjuk meg ilyen formaacuteban az AD-aacutetalakiacutetaacutesi reacuteszt is A koacutedreacuteszlet nagyon-nagyon hasonliacutet a [Egyszerű AD-aacutetalakiacutetaacutes] alfejezetben megadott a 12-bites eacuterteacutekből a felső 8 bitet levaacutelasztoacute reacuteszhez de a rend kedveacuteeacutert teljes terjedelmeacuteben koumlzoumlljuumlk magaacutet a szubrutint legfoumlljebb a kommenteket fogjuk roumlvidebbre Az AD-eacuterteacutek felső 8 bitje visszateacutereacuteskor az akkumulaacutetorban talaacutelhatoacute ez lesz a parameacuteteraacutetadaacutes a rutin eacutes főprogram koumlzoumltt

AD-aacutetalakiacutetaacutes eacutes a jeleacuterteacutek felső 8 bitjeacutenek betoumllteacutese az akkumulaacutetorba MEASURESETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnkJB SCONV$ MOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageAMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felső

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

SWAP A 4-etADD Avoltage A-ban most maacuter a kiacutevaacutent jeleacuterteacutek leszRET

A [36 feladat] megoldaacutesaacutet jelentő koacuted a keacutet szubrutinnal maacuter rendkiacutevuumll toumlmoumlrnek fog hatni Az eleacuterni kiacutevaacutent megvilaacutegiacutetaacutesi szint megadaacutesaacutehoz a koacutedban az EQU fordiacutetoacutei direktiacutevaacutet hasznaacuteljuk a keacutet eacuterteacutek pedig a level1 eacutes level2 neacutevre fog hallgatni Egymaacuteshoz keacutepesti elteacutereacutesuumlk jelenti a hisztereacutezist Ha kuumlloumlnbseacuteguumlk pontosan 1 akkor level1 eacuterteacuteke jelenti az eleacuterni kiacutevaacutent szintet A P27-es laacutebon megjelenő PWM-jelet a C bit segiacutetseacutegeacutevel maacutesoljuk aacutet a haacuterom vilaacutegiacutetaacutesra hasznaacutelt feheacuter LED-nek megfelelő portbitre (Ezeknek a biteknek a szaacutemozaacutesa most is a keacutenyelmesebb helykihasznaacutelaacutes eacuterdekeacuteben alakult uacutegy ahogy az az alaacutebbiakban laacutethatoacute)

Code49asmORG 0060h A teacutenyleges programkoacuted kezdetelumint DATA 030h A feacutenyerősseacuteg vaacuteltozoacutejavoltage DATA 031h A meacutert feszuumlltseacuteglevel1 EQU 80 Az eleacuterni kiacutevaacutent feszuumlltseacutegszint Ha enneacutel kisebbet meacuteruumlnk noumlveljuumlk a LED-ek feacutenyerősseacutegeacutetlevel2 EQU 81 Ha ezt a feszuumlltseacutegszintet eleacutertuumlk (vagy enneacutel nagyobbat) csoumlkkentjuumlk a LED-ek feacutenyerősseacutegeacutetMAINMOV ADCCON110001100b Az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa Bekapcsolaacutes eacutes 4 oacuterajelciklus hagyaacutesa az aacutetalakiacutetaacutesra 0 csatornaMOV PWM1H008h A PWM-generaacutetor konfiguraacutelaacutesaMOV PWM1L000h Az alapfrekvencia meghataacuterozaacutesa 0800h = = 2048 azaz f = 167772162048 Hz = = 8192 HzMOV lumint64 Kezdeti PWM-eacuterteacutek (0-toacutel 128-ig mehet)CALL PWMVALUE A PWM-jelhez szuumlkseacuteges eacuterteacutekek beiacuteraacutesa a regiszterekbe SzubrutinsignalMOV CP27 A PWM-jel leemeleacutese a P27 bitrőlMOV P21C Ennek az eacuterteacuteknek a kirakaacutesa a haacuteromMOV P23C LED portbitjeacutereMOV P25CCALL MEASURE Feszuumlltseacutegmeacutereacutes AD-aacutetalakiacutetaacutessalCJNE Alevel1eval3 Ha a jelszint level1 alatt van akkoreval3JC lighten noumlveljuumlk a feacutenyerőtCJNE Alevel2eval4 Ha a jelszint level2 vagy annaacutel nagyobbeval4JNC darken csoumlkkentjuumlk a feacutenyerőtJMP signal Uacutejra meacuteruumlnkdarkenMOV Alumint Soumlteacutetiacutetuumlnk a LED-enCJNE A128eval1 Eleacutert maacuter a maximumot a kitoumllteacutesi teacutenyezőeval1JNC signal Ha igen visszaugrunkINC lumint Ha nem noumlveljuumlk a kitoumllteacutesi teacutenyezőt azaz csoumlkkentjuumlk a LED-ek feacutenyerősseacutegeacutetCALL PWMVALUE A PWM-jel beaacutelliacutetaacutesaacutenak rutinja koumlvetkezikJMP signal Ugraacutes vissza meacuternilightenMOV Alumint Vilaacutegosiacutetunk a LED-enCJNE A1eval2 Eleacuterte maacuter a minimumot a kitoumllteacutesi teacutenyezőeval2JC signal Ha igen (0lt1) akkor visszaugrunkDEC lumint Ha nem akkor csoumlkkentjuumlk a kitoumllteacutesi teacutenyezőt azaz noumlveljuumlk a LED-ek feacutenyerősseacutegeacutetCALL PWMVALUE A PWM-jel beaacutelliacutetaacutesaacutenak rutinja koumlvetkezikJMP signal Ugraacutes vissza meacuterni

Lehet hogy első laacutetaacutesra nem tűnik biztosnak az hogy a PWM-jel frekvenciaacutejaacutet tartani tudja a főprogram a bitek maacutesolgataacutesaacuteval eacutes a szubrutinok hiacutevogataacutesaacuteval de a gyakorlati proacuteba azonnal megadja a vaacutelaszt A program

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

meglehetősen gyorsan fut iacutegy semmifeacutele perioacutedusveszteacutes vagy elcsuacuteszaacutes nem fog bekoumlvetkezni A PWM-jel 8 192 Hz-es frekvenciaacuteja eltoumlrpuumll az ADuC 842-es default 2 097 152 Hz-es oacuterajele mellett iacutegy mindenre jut idő Leacutenyegesen hosszabb főprogram termeacuteszetesen maacuter okozhatna probleacutemaacutet a frekvencia tartaacutesaacuteban

Created by XMLmind XSL-FO Converter

24 fejezet - Leacuteptetőmotor vezeacuterleacuteseA leacuteptetőmotorok nagy aacuteltalaacutenossaacutegban olyan egyenaacuteramuacute villamos motorok melyek fő feladata nem a folyamatos forgaacutes hanem meghataacuterozott szoumlgelfordulaacutessal jaacuteroacute leacutepeacutesek veacutegrehajtaacutesa Haacuterom fő tiacutepusukat szokaacutes megkuumlloumlnboumlztetni vaacuteltozoacute reluktanciaacutejuacute (tipikusan 75deg 15deg leacutepeacuteskoumlzzel) aacutellandoacute maacutegnesű (tipikusan 18deg 75deg 15deg 30deg leacutepeacuteskoumlzzel) eacutes hibrid leacuteptetőmotorok (tipikusan 09deg eacutes 18deg leacutepeacuteskoumlzzel) A leacuteptetőmotorok feleacutepiacuteteacuteseacutenek taacutergyalaacutesa nem ennek a tankoumlnyvnek a feladat sokkal inkaacutebb azok vezeacuterleacutese lesz az A leacuteptetőmotorok tiacutepusainak feleacutepiacuteteacuteseacutenek uumlzemmoacutedjaacutenak eacutes vezeacuterleacuteseacutenek hatalmas szakirodalma van Roumlvid oumlsszefoglaloacutet talaacutelunk peacuteldaacuteul a [8] eacutes [9] szakkoumlnyvben eacutes szeacutep illusztraacutecioacutekkal ellaacutetott magyaraacutezatokat a [10] weboldalon

A leacuteptetőmotor forgoacutereacuteszeacutet az aacutelloacutereacuteszre telepiacutetett jellemzően egyenaacuteramuacute tekercsekkel veszik koumlrbe A tekercsek megfelelő sorrendű be- eacutes kikapcsolaacutesaacuteval eleacuterhető hogy a forgoacutereacutesz mindig meghataacuterozott meacuterteacutekű elfordulaacutest veacutegezzen Ezekben a motorokban kefeacutere nincsen szuumlkseacuteg Egy-egy meghataacuterozott poziacutecioacuteba valoacute beaacutellaacuteskor alakul ki a maacuter emliacutetett szakszoacuteval a minimaacutelis maacutegneses reluktancia Ilyenkor a legroumlvidebbek a maacutegneses erővonalak

A leacuteptetőmotorokat előszeretettel hasznaacuteljaacutek mechatronikai alkalmazaacutesokban robotkarokban olvasoacutefejek iacuteroacutefejek mozgataacutesaacutenaacutel nyomtatoacutekban rajzgeacutepekben aacuteramkoumlrmaroacute geacutepekben preciacutezioacutes esztergaacutekban stb Preciacutezioacutes alkalmazaacutesokhoz jellemzően hibrid leacuteptetőmotorokat hasznaacutelnak Ezekre igaz az az aacutelliacutetaacutes hogy ha a motor aacutelloacutereacuteszeacuten n faacutezis (tekercspaacuter vagy ketteacuteosztott tekercs) a forgoacutereacuteszeacuten pedig m fog talaacutelhatoacute akkor a teljes koumlrbefordulaacutes nm leacutepeacutesből aacutell

Ebben a tankoumlnyvben keacutet szaacutemunkra fontos elvi tiacutepus roumlvid leiacuteraacutesaacutet adjuk meg hasznaacutelni pedig bipolaacuteris leacuteptetőmotort fogunk

1 Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorokAz aacuteramiraacuteny szempontjaacuteboacutel a leacuteptetőmotorok keacutet nagy osztaacutelyaacutet keacutepezik az unipolaacuteris eacutes a bipolaacuteris leacuteptetőmotorok Az unipolaacuteris szoacute azt jelenti hogy baacutermely tekercsről legyen is szoacute abban uumlzem koumlzben az aacuteram iraacutenya nem vaacuteltozik meg Ki- eacutes bekapcsolaacutes termeacuteszetesen toumlrteacutenhet eacutes toumlrteacutenik is A [Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra unipolaacuteris leacuteptetőmotor veacutegtelenuumll leegyszerűsiacutetett szemleacuteleteacutet mutatja A forgoacutereacuteszt jelkeacutepező nyilat itt aacutellandoacute maacutegneskeacutent kell eacutertelmeznuumlnk Az egyes vezeacuterlőjelek (1a 1b 2a 2b) alacsony feszuumlltseacutegszintre (foumlldre) toumlrteacutenő aacutelliacutetaacutesaacuteval mindig egyetlen tekercsben indul meg az aacuteram azaz egyetlen tekercs műkoumldik elektromaacutegneskeacutent A toumlbbi vezeacuterlőjel ekoumlzben magas feszuumlltseacutegszinten uumll Az aacutebraacuten a nyiacutellal jelkeacutepezett forgoacutereacutesz egyszeri koumlrbefordiacutetaacutesaacutehoz a koumlvetkező jelsorozatra van szuumlkseacuteg (a nevezett jel mindig foumlldpotenciaacutelt jelent) 1a 2a 1b 2b A jelsorozat ismeacutetleacuteseacutenek kezdeteacuten a koumlrbefordulaacutes megtoumlrteacutent

241 aacutebra - Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

Ha mindig csak egyetlen tekercs műkoumldik elektromaacutegneskeacutent akkor egeacuteszleacutepeacuteses uumlzemmoacutedroacutel beszeacuteluumlnk Ha ellenben keacutet szomszeacutedos tekercs is elektromaacutegneskeacutent uumlzemel akkor a forgoacutereacutesz a kettő koumlzeacute fog beaacutellni eacutes feacutelleacutepeacuteses uumlzemmoacuted valoacutesul meg A szemleacuteltetőaacutebraacuten az ehhez szuumlkseacuteges jelsorozat 1a 1a-2a 2a 2a-1b 1b 1b-2b 2b 2b-1a A jelsorozat ismeacutetleacuteseacutenek első elemeacuteneacutel lesz a koumlrbefordulaacutes teljes

Unipolaacuteris leacuteptetőmotort olcsoacuten beszerezni (esetleg toumlnkrement heacutetkoumlznapi eszkoumlzből kioperaacutelni) meglehetősen neheacutezkes Eacuterdekes moacutedon ritkaacuten fordul elő otthoni eszkoumlzeinkben Bipolaacuteris leacuteptetőmotort azonban igen joacute eseacutellyel talaacutelunk reacutegebbi CD-iacuteroacutekban eacutes tintasugaras nyomtatoacutekban Mindkeacutet eszkoumlzben a fej mozgataacutesaacutehoz hasznaacuteljaacutek (Ezekben esetben preciacutezioacutes alkalmazaacutesroacutel van szoacute iacutegy gyaniacutethatoacutean hibrid leacuteptetőmotorokkal talaacutelkozunk)

A [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra bipolaacuteris leacuteptetőmotor leegyszerűsiacutetett modelljeacutet mutatja A forgoacutereacuteszt jelkeacutepező nyilat itt is aacutellandoacute maacutegneskeacutent kell eacutertelmeznuumlnk Enneacutel az elrendezeacutesneacutel nincsen szuumlkseacuteg kuumlloumln taacutepvezeteacutekre viszont az aacuteramiraacuteny műkoumldeacutes koumlzben vaacuteltozni fog a tekercsekben Iacutegy aacutellandoacute aacuteramerősseacuteget felteacutetelezve haacuterom eset aacutellhat elő egyik iraacutenyba folyik az aacuteram maacutesik iraacutenyba folyik az aacuteram nem folyik aacuteram A [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten bemutatott modell szerint a teljes koumlrbefordulaacuteshoz egeacuteszleacutepeacuteses uumlzemmoacutedban a koumlvetkező jelszintek szuumlkseacutegesek (a toumlbbi nulla szinten uumll) (ndash1a +1b) (ndash2a +2b) (+1a ndash1b) (+2a ndash2b) Feacutelleacutepeacuteses uumlzemmoacuted itt is megvaloacutesiacutethatoacute (ndash1a +1b)

(ndash1a +1b ndash2a +2b) (ndash2a +2b) (ndash2a +2b +1a ndash1b) (+1a ndash1b) (+1a ndash1b +2a ndash2b) (+2a ndash2b) (+2a ndash2b ndash1a +1b) Az előbbi keacutet jelsorozatnaacutel a negatiacutev előjel csak hangsuacutelyozza a polaritaacutest a negatiacutev jelet kiveacutetelesen azonosiacutethatjuk a foumlldpotenciaacutellal (GND) is Figyeljuumlk meg a [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten hogy keacutet-keacutet tekercs nem fuumlggetlen egymaacutestoacutel iacutegy ezekneacutel sokkal inkaacutebb indokolt a tekercspaacuter megnevezeacutes

242 aacutebra - Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve

Leacuteptetőmotorok parameacutetereineacutel talaacutelkozunk meacuteg a keacutetfaacutezisuacute haacuteromfaacutezisuacute stb szakszavakkal is Ez azt jelenti hogy haacuteny fuumlggetlen tekercset (vagy tekercspaacutert) tartalmaz a motor Ennek eacutertelmeacuteben a [Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten laacutethatoacute seacutema neacutegyfaacutezisuacute (de unipolaacuteris) leacuteptetőmotort a [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten laacutethatoacute seacutema viszont csak keacutetfaacutezisuacute (de bipolaacuteris) leacuteptetőmotort szemleacuteltet

2 Bipolaacuteris leacuteptetőmotorok vezeacuterleacuteseA bipolaacuteris leacuteptetőmotorok tekercsein mindkeacutet iraacutenyban folyhat aacuteram Ennek biztosiacutetaacutesa nem magaacutetoacutel eacutertetődő de valakinek egyszer kipattant az agyaacuteboacutel az a megoldaacutes amit ma H-hiacutednak nevezuumlnk A [H-hiacuted] aacutebraacuten a H-hiacuted leacutenyegi vaacutezlata laacutethatoacute baacutermifeacutele ellenaacutellaacutesok neacutelkuumll A H-hiacuteddal egyetlen tekercsen tudjuk vaacuteltoztatni az aacuteram iraacutenyaacutet Ha az A jelszint alacsony eacutes a B magas akkor a bal felső eacutes a jobb alsoacute tranzisztor kinyit a maacutesik kettő lezaacuter Ekkor a tekercsen az aacutebra szerinti elrendezeacutesben jobbra folyik az aacuteram Amennyiben a keacutet jelszintet megcsereacuteljuumlk A-n eacutes B-n akkor az aacuteram a tekercsen balra folyik Azonos jelszintneacutel nem folyik aacuteram a tekercsen Nagyon fontos hogy veacutedődioacutedaacutek alkalmazaacutesaacutera itt is szuumlkseacuteg van Ezek hiaacutenyaacuteban a tekercs aacuteramaacutenak kikapcsolaacutesakor vagy eacuteppen iraacutenyaacutenak megvaacuteltoztataacutesakor a keletkező feszuumlltseacutegimpulzus aacutetuumltheti a tranzisztorokat

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

243 aacutebra - H-hiacuted

Annyi megjegyzeacutest meacuteg szeretneacutenk a H-hiacutedhoz hozzaacutefűzni hogy ha ilyen elvi kapcsolaacutes utaacuten kutakodunk a neten akkor igen gyakran azt a megoldaacutest talaacuteljuk amikor mind a neacutegy tranzisztor npn (vagy eacuteppen fordiacutetva pnp) tiacutepusuacute a tranzisztorok baacutezisai pedig nincsenek oumlsszekoumltve Aki azonban rakott maacuter oumlssze tranzisztorokboacutel H-hidat az garantaacuteltan belefutott abba a probleacutemaacuteba hogy neacutegy azonos tranzisztor eseteacuten elteacuterő baacutezisellenaacutellaacutesokat kell vaacutelasztanunk a bdquofelsőrdquo ill bdquoalsoacuterdquo tranzisztorokhoz eacutes meacuteg iacutegy sem tudjuk teljes aacuterammal hajtani a motort a koumlzbuumllső feszuumlltseacutegeseacutesek miatt Eacuterthetetlen de a keacutet npn eacutes keacutet pnp tranzisztort tartalmazoacute aacuteramkoumlri rajzok sokkal kisebb araacutenyban fordulnak elő Pedig enneacutel megszűnnek a neacutegy azonos tranzisztorboacutel eacutepiacutetett aacuteramkoumlrneacutel foumllmeruumllő probleacutemaacutek A duaacutelis tranzisztorpaacuterok baacutezisainak (termeacuteszetesen az ellenaacutellaacutes a gyakorlati kapcsolaacutesoknaacutel nem hagyhatoacute el) oumlsszekoumlteacutese akkor nyuacutejt keacutenyelmes műkoumldteteacutest ha ugyanakkora a motor taacutepfeszuumlltseacutege mint a vezeacuterlőjelekeacute A [H-hiacuted] aacutebraacuten ez azt jelenti hogy az A eacutes B vezeacuterlőjelek is +U vagy GND szintet vehetnek foumll

H-hidat oumlsszerakni olyasmi mint kaacutertyavaacuterat eacutepiacuteteni Előszoumlr szoacuterakoztatoacute de valoacutesziacutenűleg hamar leszokunk roacutela Ez iacutegy is van joacutel hiszen bipolaacuteris leacuteptetőmotorok vezeacuterleacuteseacutere szaacutemos ceacutel-IC kaphatoacute ilyen peacuteldaacuteul a tankoumlnyvben foumllhasznaacutelt L293D Ebben eleve benne vannak a veacutedődioacutedaacutek iacutegy nagyon keveacutes alkatreacutesszel tudjuk vezeacuterelni a leacuteptetőmotorunkat Keacutet tekercshez raacuteadaacutesul keacutet komplett H-hiacuted szuumlkseacuteges eacutes a

ceacutel-IC-k jellemzően eacuteppen ennyit tartalmaznak Nem veacuteletlenuumll

A fentebb leiacutertak utaacuten eleacuterkeztuumlnk ahhoz a ponthoz hogy szerezzuumlnk magunknak leacuteptetőmotort Ha főkeacutent hobbiceacutelokra eacutes gyakorlaacutesra gyakorlatozaacutesra gondolunk akkor a szerző tapasztalata alapjaacuten a legegyszerűbb eset az ha keriacutetuumlnk magunknak egy reacutegebbi szaacutemiacutetoacutegeacutephez hasznaacutelt CD-olvasoacutet Ezekbe annak idejeacuten joacutel kezelhető leacuteptetőmotort eacutepiacutetettek laacutesd [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebra (A beszerzeacuteshez javasolhatoacute leselejtezett geacutepek megkaparintaacutesa szervizes haverok bdquokoumlnyvjutalombanrdquo valoacute reacuteszesiacuteteacutese vagy lomis piacok intenziacutev laacutetogataacutesahellip) A reacutegebbi tiacutepusok hangsuacutelyozaacutesa azeacutert indokolt mert az uacutejabbakban jellemzően DC-motorokat hasznaacutelnak eacutes csaloacutedni fogunk A motor tiacutepusa sajnos kiacutevuumllről nem laacutetszik az egyseacutegen Tovaacutebbi lehetőseacuteg lehet meacuteg toumlnkrement tintasugaras nyomtatoacutekboacutel kiszerelni a fejmozgatoacute leacuteptetőmotort

244 aacutebra - CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

A [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebraacuten laacutethatoacute CD-olvasoacuteboacutel kiszerelt egyseacuteg leacuteptetőmotorja tehaacutet bipolaacuteris Erre a teacutenyre a neacutegy kivezeteacutes utal vouml [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra Az aacutebra felső reacuteszeacuten laacutethatoacute sziacutenes bevonatuacute vezeteacutekneacutegyes maacuter utoacutelagos forrasztaacutes eredmeacutenye A tovaacutebbiakra neacutezve nagyon fontos adat lesz szaacutemunkra hogy a motor tekercseinek ellenaacutellaacutesa 10 Ω ami 5 V-os taacutepfeszuumlltseacuteg eseteacuten tekercsenkeacutent 500 mA-es aacuteramfelveacutetelt jelenthet Az USB-port terhelhetőseacutegeacutet ez maacuter joacutecskaacuten meghaladja

3 A motor leacutepteteacuteseAz előző alfejezetek utaacuten eleacuterkezett az idő a tankoumlnyv utolsoacute feladatainak megfogalmazaacutesaacutera Most maacuter nem csak villogtatunk kijelezuumlnk adatokat fogadunk eacutes kuumlldoumlzgetuumlnk kapcsolgatunk szabaacutelyozunk hanem mozgatunk

37 feladat

Mozgassunk az ADuC-panel keacutet nyomoacutegombjaacuteval egyik ill maacutesik iraacutenyban leacuteptetőmotort egeacuteszleacutepeacuteses uumlzemmoacutedban [Code50]

A feladat megoldaacutesaacutenaacutel maradunk a [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebraacuten laacutethatoacute eszkoumlzneacutel a reacutegebbi tiacutepusuacute CD-olvasoacute egyseacutegből kiszerelt taacutelcaacutenaacutel amelyen nem csak a leacuteptetőmotor tanyaacutezik hanem az annak tengelyeacutere tapadoacute viacutezszintesen mozgathatoacute olvasoacutefej is Ez utoacutebbi naacutelunk funkcioacutejaacutet veszti csak abban fogunk gyoumlnyoumlrkoumldni hogy ide-oda tovaacutebbiacutetjuk a fejet eacutes raacuteuumlltetuumlnk egy LEGO-figuraacutet

Az L293D IC laacutebkiosztaacutesaacutet eacutes a motor tekercseinek bekoumlteacuteseacutet a [A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese] aacutebra mutatja A C1 eacutes C2 jelű tekercs a leacuteptetőmotor keacutet tekercseacutet (vagy tekercspaacuterjaacutet) szimbolizaacutelja A VS szimboacutelum az adatlappal oumlsszhangban a motor taacutepfeszuumlltseacutegeacutet jelenti Naacutelunk ez is +5 V nem csak a logikai jelek jelszintje

245 aacutebra - A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

A motorboacutel kijoumlvő neacutegy vezeteacutek szerepeacutenek meghataacuterozaacutesa sokszor egyedi taacutejeacutekozoacutedaacutest igeacutenyel Multimeacuteterrel azt koumlnnyen megaacutellapiacutethatjuk hogy melyik keacutet vezeteacutek tartozik egy tekercshez (vagy tekercspaacuterhoz) hiszen ezeken meacuterhetuumlnk veacutegesen kicsiny ellenaacutellaacutest Ha nem egymaacuteshoz tartozoacute keacutet vezeteacuteket markolunk foumll akkor azok nyilvaacuten szakadaacuteskeacutent viselkednek A leacutepteteacutesi szekvencia meghataacuterozaacutesaacutera sokszor az a legjobb moacuted ha a motor kivezeteacuteseit vezeacuterlő-IC-neacutelkuumll keacutezzel dugiszaacuteljuk a proacutebapanelon a taacutepra eacutes a foumlldre Hibaacutes szekvenciaacutenaacutel a motor csak előre-haacutetra fog cincogni miacuteg ha eltalaacuteljuk a helyes sorrendet akkor egyeacutertelműen foumllismerhető moacutedon elindul az egyik iraacutenyba A biztonsaacuteg kedveacuteeacutert fordiacutetott sorrendben is jaacutetsszuk le a jeleket hogy minden rendben lesz-e az ellenkező iacuteraacutenyuacute leacutepteteacuteseacuteneacutel is A joacutenak tűnő sorrendet jegyezzuumlk foumll eacutes uumlltessuumlk be a programunkba

Az előző alfejezetben emliacutetettuumlk hogy a leacuteptetőmotor tekercseinek ellenaacutellaacutesa 10 Ω ami +5 V-os taacutepfeszuumlltseacuteg eseteacuten 500 mA-es aacuteramfelveacutetelt jelent Keacutet tekercsneacutel ez 1 A iacutegy egy mezei PC USB portja ezt maacuter nem biacuterja el hiszen az aacuteltalaacuteban csak 500 mA-rel terhelhető De semmi baj a [USB csatlakozoacutes haacuteloacutezati adapter] aacutebraacuten laacutethatoacute adapter terhelhetőseacutege 12 A ami nekuumlnk toumlkeacuteletesen megfelel Maga az elrendezeacutes a [A leacuteptetőmotoros alkalmazaacutes elrendezeacutese] aacutebraacuten laacutethatoacute

246 aacutebra - A leacuteptetőmotoros alkalmazaacutes elrendezeacutese

A program a kivezeteacutesekhez aktuaacutelis sorrendjeacutehez tartozoacute leacutepteteacutesi szekvencia megaacutellapiacutetaacutesa utaacuten maacuter szinte semmiseacuteg Keacutet gombnyomaacutes koumlzoumltt szuumlkseacutegszerűen eltelő időt az EQU direktiacutevaacuteval a var szimboacutelumhoz rendeljuumlk hogy ha moacutedosiacutetani akarunk a leacutepteteacutes frekvenciaacutejaacuten akkor azt csak egyszer kelljen megtennuumlnk az uacutejrafordiacutetaacuteshoz Az SDELAY szubrutint most uacutegy moacutedosiacutetottuk hogy ha azt az A=100 eacuterteacutekkel hiacutevjuk meg akkor toumlrteacutenik 01 s vaacuterakozaacutes Ami itt eacuterdekes az az ahogyan a koacutedmemoacuteriaacuteboacutel toumlrteacutenő ciklikus olvasaacutest megoldjuk Neacutegyfeacutele bemeneti jelkombinaacutecioacutet kell adnunk a vezeacuterlő-IC-nek egy ciklusban (laacutesd [Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorok] alfejezet) Ezt kihasznaacuteljuk eacutes a koumlvetkező truumlkkoumlt alkalmazzuk ha egy regiszter eacuterteacutekeacutet (a koacutedban ez az R2) folyamatosan noumlveljuumlk de minden noumlveleacutes utaacuten csak az alsoacute keacutet bitjeacutet tartjuk meg a toumlbbit kihajiacutetjuk akkor a regiszter eacuterteacuteke koumlrbe-koumlrbe jaacuter 0 eacutes 3 koumlzoumltt A programban konkreacutetan 1 2 3 0 1 2 3 0 hellip Ez affeacutele moduloacutearitmetika A maacutesik iraacutenyban toumlrteacutenő leacutepteteacuteskor a regisztert folyamatosan csoumlkkentetni kell de az alsoacute keacutet bit kimaszkolaacutesa eacuteppen iacutegy műkoumldik a hataacutes ugyanez A koacutedban a koumlvetkező alkalmazaacutes roumlvid taacutergyalhatoacutesaacutega eacuterdekeacuteben keacutet sort sziacutenessel kiemeluumlnk A koacutedkoumlnyvtaacuterban talaacutelhatoacute videoacutefelveacutetelek koumlzoumltt az alkalmazaacutesok műkoumldeacuteseacutet eleacuteg nagy (var=10 200 Hz) frekvenciaacuteval mutatjuk be Ezt a frekvenciaacutet sokkal nagyobbra maacuter nem lehet venni mert a motor elkezdi teacuteveszteni a leacutepeacuteseket eacutes csak zuumlmmoumlg oumlssze-visszahellip

Code50asmORG 0060hgomb1 BIT P32 Elnevezzuumlk az 1 gomb bitjeacutetgomb2 BIT P33 Elnevezzuumlk a 2 gomb bitjeacutetvar EQU 200 A fordiacutetoacute szaacutemaacutera eacuterteacuteket rendeluumlnk a var szimboacutelumhozMAINMOV DPTRphase Betoumlltjuumlk az adatmutatoacuteba a phase ciacutemke ciacutemeacutetMOV R20 R2-be 0-t toumlltuumlnkwaitJNB gomb1forward Ugrunk ha az 1 gombot nyomtuk megJNB gomb2backward Ugrunk ha a 2 gombot nyomtuk meg

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

JMP waitforward Leacutepteteacutes az egyik iraacutenybaINC R2 Noumlveljuumlk R2-eacuterteacutekeacutetMOV AR2 A-ba tesszuumlkANL A00000011b Kimaszkoljuk az alsoacute keacutet bitetMOV R2A Visszaiacuterjuk a degradaacutelt eacuterteacuteket R2 iacutegy gyakorlatilag moduloacutearitmetikaacuteval megy 1230 1230 MOVC AA+DPTR Koacuted-indirekt ciacutemzeacutessel betoumlltjuumlk a vezeacuterlő-IC-nek szoacuteloacute bitmintaacutezatotMOV P2A Kitesszuumlk a P2 portraMOV AvarCALL SDELAY var eacuterteacutekeacutenek megfelelő vaacuterakozaacutes koumlvetkezikJMP wait Ugraacutes vissza a gombok figyeleacuteseacutehezbackward Leacutepteteacutes az egyik iraacutenybaDEC R2 Csoumlkkentjuumlk R2-eacuterteacutekeacutetMOV AR2 A-ba tesszuumlkANL A00000011b Kimaszkoljuk az alsoacute keacutet bitetMOV R2A Visszaiacuterjuk a degradaacutelt eacuterteacuteket R2 iacutegy gyakorlatilag moduloacutearitmetikaacuteval megy 3210 3210 MOVC AA+DPTR Koacuted-indirekt ciacutemzeacutessel betoumlltjuumlk a vezeacuterlő-IC-nek szoacuteloacute bitmintaacutezatotMOV P2A Kitesszuumlk a P2 portraMOV AvarCALL SDELAY var eacuterteacutekeacutenek megfelelő vaacuterakozaacutes koumlvetkezikJMP wait Ugraacutes vissza a gombok figyeleacuteseacutehez Szubrutin SDELAY Parameacuteteraacutetadaacutes A Ha A=100 akkor 01 s a vaacuterakozaacutesi idő SDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik7MOV R620cik6MOV R525cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel A vezeacuterlő-IC-nek (L293D) szoacuteloacute jelek a koacutedmemoacuteriaacuteban phaseDB 00010000bDB 00000100bDB 00001000bDB 00000010b

Az egeacuteszleacutepeacuteses uumlzemmoacuted utaacuten azonnal adoacutedik a koumlvetkező feladat

38 feladat

Mozgassunk az ADuC-panel keacutet nyomoacutegombjaacuteval egyik ill maacutesik iraacutenyban leacuteptetőmotort feacutelleacutepeacuteses uumlzemmoacutedban [Code51]

A [37 feladat]hoz keacutepest egyetlen elteacutereacutes lesz csupaacuten de ezt kihangsuacutelyozzuk feacutelleacutepeacuteses uumlzemmoacutedban hajtjuk meg a motort A helyzet az hogy itt 4 helyett 8 eleme lesz a leacutepteteacutesi szekvenciaacutenak hiszen a feles leacutepeacutesekben mindkeacutet tekercspaacuter aacuteram alatt van Ez a koacutedmemoacuteriaacuteban roumlgziacutetett bitmintaacutezatok szempontjaacuteboacutel az alaacutebbi listaacutet eredmeacutenyezi (eacutes ez a Code51 nevű programban talaacutelhatoacute meg)

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

phaseDB 00010000bDB 00010100bDB 00000100bDB 00001100bDB 00001000bDB 00001010bDB 00000010bDB 00010010b

Figyeljuumlk meg hogy minden maacutesodik sor a keacutet szomszeacutedos elem unioacuteja Sőt inkaacutebb a VAGY művelettel előaacutelloacute eacuterteacutek Mivel most 8 elemuumlnk van a koacuted a fentieken tuacutel mindoumlsszesen keacutet soraacuteban moacutedosul Amit Code50-ben saacutergaacuteval kiemeltuumlnk azt most erre kell aacutetiacuternunk

ANL A00000111b Kimaszkoljuk az alsoacute haacuterom bitet

Eacutes keacutesz hiszen az alsoacute haacuterom biten 0-toacutel 7-ig aacutebraacutezolhatunk szaacutemokat eacutes jelen esetben pont erre van szuumlkseacuteg A motor mozgataacutesa műkoumldik meacuteghozzaacute kifogaacutestalanul műkoumldik Eacutes ezt most maacuter baacutermikor nagyjaacuteboacutel baacutermilyen leacuteptetőmotorral meg tudjuk oldanihellip

Created by XMLmind XSL-FO Converter

25 fejezet - UtoacuteszoacuteA szerző tarsolyaacuteban szaacutemtalan oumltlet szaacutemtalan finomiacutetaacutesi lehetőseacuteg maradt meacuteg Azonban a tankoumlnyv maacuter iacutegy is tuacuteldagadt a szerződeacutesben meghataacuterozott karakterleuumlteacutesi szaacutemon Szaacutemiacutetaacutestechnikai koumlnyvet befejezni nem lehet csak abbahagyni Egy azonban biztos ha azok akiknek a szerző a tankoumlnyvet szaacutenta pozitiacutev visszacsatolaacutest indiacutetanak akkor lehet folytataacutesa Ha ismeacutet lesz TAacuteMOP paacutelyaacutezati lehetőseacuteg eacutes a szerző taacutemogataacutest kap lesz is folytataacutesa Az majd kideruumll hogy milyen tiacutepusuacute mikrovezeacuterlővel milyen programozaacutesi nyelven milyen alkalmazaacutesokkalhellip

Az olvasoacute ha teacutenyleg figyelmesen veacutegigkoumlvetett mindent maacuter uacutegy eacuterezheti hogy egy kicsit eacutert a dolgokhoz Megaacutellni itt persze nem eacuterdemes eacutes nem is szabad Hiszen nagyjaacuteboacutel most kezd laacutetszani az hogy meacuteg egy kis energiabefekteteacutes eacutes mindent bdquomegprogramozunkrdquo magunk koumlruumllhellip A szerző arra biztat mindenkit hogy folytassa az utat ha kell haacutet egyeduumll mert meg fogja eacuterni

A tankoumlnyv nyilvaacuten nem lett toumlkeacuteletes Lehet hogy ha meacuteg egyszer meg kellene iacuterni maacuter kicsit maacuteskeacuteppen alakulna Veacutelemeacutenyeket kunstruktiacutev kritikaacutekat a szerző mindenesetre sziacutevesen fogad hiszen az eacutelet oumlroumlk tanulaacutes Mindenkinek Ha a tankoumlnyv meacutegis a javaacutera vaacutelt a kedves olvasoacutenak akkor a szerzőnek csak annyi koumlzlendője maradt hogy kedves egeacuteszseacutegeacutere eacutes most neacutezzen koumlruumll a koumlrnyezeteacuteben hogy mire lehetne egy joacute kis mikrovezeacuterlős alkalmazaacutest keacutesziacuteteni

VEacuteGE

Created by XMLmind XSL-FO Converter

26 fejezet - Az Analog Devices hozzaacutejaacuterulaacutesaA tankoumlnyv iacuteraacutesaacutenak finiseacuteben a szerző levelet vaacuteltott az Analog Devices ceacuteggel hogy hozzaacutejaacuterulaacutesukat keacuterje neacutehaacuteny a ceacuteg aacuteltal forgalmazott oktatoacutekeacuteszletekhez tartozoacute

CD-n szereplő koacuted felhasznaacutelaacutesaacutehoz eacutes a tankoumlnyvbe valoacute integraacutelaacutesaacutehoz Az Analog Devices az engedeacutelyt megadta Kiacutevaacutensaacutegukra melleacutekeljuumlk a mintakoacutedokhoz tartozoacute aacutellaacutesfoglalaacutesukat

All ADuC842 code provided by ADI including this file is provided AS IS without warranty of any kind either expressed or implied You assume any and all risk from the use of this code It is the responsibility of the person integrating this code into an application to ensure that the resulting application performs as required and is safe

Ennek magyar fordiacutetaacutesa eacutertelmeacutet tekintve koumlvetkező

Az Analog Devices Reacuteszveacutenytaacutersasaacuteg (ADI Analog Devices Incorporated) aacuteltal koumlzzeacutetett valamennyi ADuC842-es koacuted uacutegy tekintendő ahogyan azt koumlzzeacutetetteacutek Ezekre semmifeacutele garancia sem koumlzvetlen sem koumlzvetett nem vonatkozik Ezen koacuted hasznaacutelataacutenak baacuterminemű eacutes valamennyi felelősseacutegeacutet annak felhasznaacuteloacuteja viseli A koacutedot baacutermifeacutele alkalmazaacutesba beeacutepiacutető szemeacutely felelősseacutege annak biztosiacutetaacutesa hogy az eredmeacutenykeacutent előaacutelloacute alkalmazaacutes az azzal szemben taacutemasztott koumlvetelmeacutenyeknek megfelelően eacutes biztonsaacutegosan műkoumldjoumln

Az ilyesfeacutele jogi megfogalmazaacutesok időnkeacutent ijesztők de itt ezt koumltelesseacuteguumlnk volt koumlzoumllni A fentiek mindoumlsszesen egyetlen szubrutinlistaacutera eacutes a 842-es architektuacuteraacutehoz tartozoacute szimboacutelumlistaacutera vonatkoznak UARTIOASM eacutes MOD842 A ceacuteg engedeacutelyeacutevel ezeket csatolhattuk a tankoumlnyvhoumlz

Created by XMLmind XSL-FO Converter

27 fejezet - KoumlszoumlnetnyilvaacuteniacutetaacutesA műszaki tankoumlnyvhoumlz illő jobbaacutera taacutergyilagos stiacutelust feacutelreteacuteve szeretneacutem felsorolni azoknak az embereknek a neveacutet akiknek nagyon sokat koumlszoumlnhettem a programozaacutesi eacutes elektronikai szaacuternyproacutebaacutelgataacutesaim soraacuten

Koumlszoumlnoumlm Bőczeacuten Csabaacutenak eacutes Bőczeacuten Laacuteszloacutenak mindazt amit tőluumlk a szaacutemiacutetaacutestechnikai nyaacuteri TIT-taacuteborban aacuteltalaacutenos iskolaacutes koromban megtanultam Koumlszoumlnoumlm Koltay Peacuteternek (kezdetben annaacutel a ceacutegneacutel a Keriparnaacutel volt programozoacute ahol eacutedesapaacutem is dolgozott) azt az eacuteveken aacutet tartoacute biztataacutest eacutes terelgeteacutest ami igen csak a hasznomra vaacutelt a keacutesőbbiekben Koumlszoumlnoumlm Kispitye Attilaacutenak hogy nagyon sokat aacutetadott nekem a maacuter akkor is kaacutepraacutezatos programozoacutei tudaacutesaacuteboacutel eacutes megtaniacutetott a Commodore 64 assembly nyelvű programozaacutesaacutenak rengeteg forteacutelyaacutera Koumlszoumlnoumlm Matisz Attilaacutenak a koumlzeacutepiskolaacutes fizikatanaacuteromnak hogy az aacuteltala vezetett szakkoumlroumln megismerkedhettem a Pascal nyelvvel eacutes olyasmivel is amire keacutesőbb ismertem csak raacute hogy nahaacutet hiszen az maacuter numerikus matematika volt csak meacuteg nem uacutegy hiacutevtuk

Az egyetemi eacutevek alatti eacutelmeacutenyekeacutert eacutes az akkor megszerzett tudaacuteseacutert a legőszinteacutebb koumlszoumlnetemet szeretneacutem kifejezni Jamniczky Aacuterpaacuted tanaacuter uacuternak Aki tőle tanulta a villanytant annak baacuterhol baacutermikor joumlhetett a meacutely viacutez Horvaacuteth Laacuteszloacute eacutes Szeacutekely Saacutendor analiacutezis tanaacuteraim neacutelkuumll pedig eseacutelyem se lett volna uacutegy megtanulni a matematikaacutet hogy Laplace-trafoacuteval toumlbbnyire meacuteg mindig gond neacutelkuumll tudjam aacuteramkoumlroumlk viselkedeacuteseacutet szaacutemolni De uacutegy hogy eacutertsem is amit csinaacutelok Sok segiacutetseacuteget eacutes oumltletet kaptam Csizmadia Ferenctől eacutes Bognaacuter Endreacutetől a gyakorlati elektronikaacuteba tett kalandjaim soraacuten A mechatronika iraacutenyaacuteba indiacutetoacute bogarat pedig Szalai Istvaacuten tette a fuumllembe Ezen az uacuteton joacutel joumltt Gurin Peacuteter logikai aacuteramkoumlroumlk oacuteraacuteja eacutes bizony sokszor nem boldogultam volna Molnaacuter Gergely tapasztalata eacutes segiacutetseacutege neacutelkuumll

Kedves tanaacuteraim kolleacutegaacuteim Haacutelaacutes vagyok Nektek minden aproacutesaacutegeacutert is

Kuumlloumln koumlszoumlnet illeti Molnaacuter Gergőt eacutes Szalai Istvaacutent neacutehaacuteny speciaacutelis teacutemakoumlr aacutetneacutezeacuteseacuteeacutert Burgundi Daacutevidot az ADuC-panel dokumentaacutelaacutesaacuteeacutert eacutes Koumlrmendy Gaacutebort a tankoumlnyv kritikus aacutetolvasaacutesaacuteeacutert

Veacuteguumll koumlszoumlnetet kell mondanom feleseacutegemnek Eacutevaacutenak eacutes a kis Babadeacuteknak Attila Benceacutenek azeacutert hogy tuumlrelmesen kivaacutertaacutek amiacuteg elkeacutesziacutetem a tankoumlnyvet eacutes deacutelutaacutenonkeacutent esteacutenkeacutent bizony kevesebb időt tudtam raacutejuk szaacutenni mint amennyit megeacuterdemeltek volna

Created by XMLmind XSL-FO Converter

28 fejezet - Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei paneljaEbben a fuumlggeleacutekben aacuteramkoumlri ill beuumllteteacutesi rajzokkal alkatreacuteszlistaacuteval kiacutevaacutenunk segiacuteteni annak aki konkreacutetan a tankoumlnyvhoumlz hasznaacutelt mikrovezeacuterlős panelt oacutehajtja megeacutepiacuteteni vagy legyaacutertatni ilyen megrendeleacuteseket vaacutellaloacute ceacuteggel A tankoumlnyvhoumlz melleacutekeljuumlk a gyaacutertaacuteshoz szuumlkseacuteges uacuten Gerber-faacutejlokat eacutes a Drill-faacutejlokat Ettől a kezdő olvasoacute nem lesz sokkal boldogabb iacutegy az alaacutebbiakban tovaacutebbi segiacutetseacuteget adunk a panel elkeacutesziacuteteacuteseacutehez

Letoumllthető melleacutekletek toumlmoumlriacutetett formaacutetumban(telepiacutetők forraacuteskoacutedok rajzok stb) Mellekletzip

A [A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből] eacutes [A hallgatoacutei panel NYAacuteK-terve alulneacutezetből] aacutebra a tankoumlnyvben hasznaacutelt panel nyomtatott aacuteramkoumlri (NYAacuteK-) terveacutet mutatja mind feluumll- mind alulneacutezetből A [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] eacutes [A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza] aacutebraacuten a panel beuumllteteacutesi rajza laacutethatoacute a keacutet neacutezetből Ezek a rajzok akkor nyuacutejtanak oacuteriaacutesi segiacutetseacuteget amikor megrendeljuumlk az alkatreacuteszeket eacutes magunk akarjuk őket raacuteforrasztani a panelra Meg kell jegyeznuumlnk hogy neacutehaacuteny poziacutecioacute a tankoumlnyvben hasznaacutelt panelon uumlresen maradt Ilyen a [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] aacutebra jobb felső traktusaacuteban laacutethatoacute U8 jelű eacutes a kuumllső taacutepellaacutetaacutes biztosiacutetaacutesaacutera szolgaacuteloacute alkatreacuteszek C2 C5 IC2 eacutes X1 jelű poziacutecioacuteja A panel a tankoumlnyvben bemutatott alkalmazaacutesokban ezek uumlresen hagyaacutesaacuteval is toumlkeacuteletesen műkoumldoumltt

Joacutetanaacutecskeacutent azt javasoljuk az olvasoacutenak hogy ha nincs kellő gyakorlata az aproacute alkatreacuteszek forrasztaacutesaacuteban akkor ezt a műveletet ne az ADuC 842-es chip laacutebaival kezdje Ugyanez igaz az FT232-es USB-soros aacutetalakiacutetoacute-IC-re is A toumlbbi alkatreacutesz maacuter koumlnnyebben kezelhető

Az alkatreacuteszlistaacutet a [A hallgatoacutei panel alkatreacuteszlistaacuteja] tartalmazza A keacutet kritikus teacutetel maga az ADuC 842-es chip ill a MAX4478ASD tiacutepusjelű műveleti erősiacutető Ez utoacutebbi veacutedelmi feladatot laacutet el befeleacute neacutezve vedi a mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutenak első keacutet csatornaacutejaacutet (a toumlbbit nem) kifeleacute neacutezve puffert testesiacutet meg a DA-aacutetalakiacutetaacuteshoz (szintuacutegy annak első keacutet csatornaacutejaacutehoz) E keacutet teacutetel neacutelkuumll az alkatreacuteszlista oumlsszes eleme a legkedvezőbb aacuterakkal dolgozoacute hazai mikroelektronikai csomagkuumlldő szolgaacutelatok tarifaacuteit figyelembe veacuteve 2013 tavaszaacuten 5 000 - 6 000 Ft-eacutert beszerezhető volt A MAX4478ASD műveleti erősiacutető keveacutes hazai ceacutegneacutel kaphatoacute viszont nem tuacutelsaacutegosan draacutega kb 1 000 Ft Az ADuC 842-es chip maacuter borsosabb aacuteron kaphatoacute ha uacutegy akarjuk megvenni aacutera kb 6 500 Ft Viszont e keacutet kritikus alkatreacutesz beszerzeacuteseacutet megoldhatjuk oly moacutedon is hogy ingyenes mintaacutet rendeluumlnk a ceacutegtől Ennek az eljaacuteraacutesnak a bemutataacutesa azonban maacuter nem ennek a tankoumlnyvnek a feladata Akaacuterhogyan is szerezzuumlk be a 842-es mikrovezeacuterlőt figyeljuumlnk oda a tiacutepusmegjeloumlleacutesre A tankoumlnyvben hasznaacutelt panelon az ADUC842BSZ62-5 tiacutepusuacute mikrovezeacuterlő foglalt helyet A BSZ jeloumlleacutes a tokozaacutest azonosiacutetja ennek 52 laacuteba van Magaacutera a tokozaacutesra az MQFP betűszoacutet hasznaacuteljaacutek Ez a Metric Quad Flat Package (metrikus neacutegyszoumlgletű lapos tokozaacutes) kifejezeacutesből szaacutermazik A 62-es szaacutem a 62 kbyte koacutedmemoacuteriaacutera utal az 5-oumls szaacutemjegy pedig a taacutepfeszuumlltseacutegre (+5 V) Az MQFP tokozaacutes rajzaacutet a [Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők] aacutebraacuten laacutethatjuk az adatok millimeacuteterben eacutertendők Maga a rajz az Analog Devices aacuteltal koumlzzeacutetett faacutejlboacutel szaacutermazik

A [A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel] eacutes [A keacutesz panel alulneacutezetben] aacutebraacuten a keacutesz panel laacutethatoacute feluumll- eacutes alulneacutezetből immaacuteron nem tervrajzkeacutent hanem lefeacutenykeacutepezve Az eacuterintkezőtuumlskeacutek funkcionaacutelis leiacuteraacutesaacutehoz a [A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel] aacutebraacuten a [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] aacutebra szaacutemozaacutesaacuteval oumlsszhangban megszaacutemoztuk a tuumlskeacuteket Ezek leiacuteraacutesaacutet a [A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja]ban talaacuteljuk

A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesaacutet a [A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra] aacutebra eacutes a [A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa] mutatja Ezen a csatlakozoacuten keresztuumll kapcsolhatjuk a mikrovezeacuterlő paneljaacutet proacutebapanelokhoz vagy baacutermihez amihez csak akarjuk Konkreacutet szalagkaacutebel elkeacutesziacuteteacuteseacutet azonban maacuter az olvasoacutera biacutezzuk A Fuumlggeleacutekben leiacutertak alapjaacuten ez maacuter nem fog neheacutezseacuteget okozni

281 aacutebra - A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

281 taacuteblaacutezat - A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa

Szalagkaacutebel-csatlakozoacute laacuteba Hozzaacuterendeleacutes az ADuC 842-esen (laacutebsorszaacutem)

1 +5 V

2 GND

3 P07 (52 laacuteb)

4 P06 (51 laacuteb)

5 P05 (50 laacuteb)

6 P04 (49 laacuteb)

7 P03 (46 laacuteb)

8 P02 (45 laacuteb)

9 P01 (44 laacuteb)

10 P00 (43 laacuteb)

11 P27 (39 laacuteb)

12 P26 (38 laacuteb)

13 P25 (37 laacuteb)

14 P24 (36 laacuteb)

15 P23 (31 laacuteb)

16 P22 (30 laacuteb)

17 P21 (29 laacuteb)

18 P20 (28 laacuteb)

19 P37 (25 laacuteb)

20 P36 (24 laacuteb)

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

282 aacutebra - A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből

283 aacutebra - A hallgatoacutei panel NYAacuteK-terve alulneacutezetből

284 aacutebra - Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők

285 aacutebra - A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

286 aacutebra - A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza

287 aacutebra - A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

288 aacutebra - A keacutesz panel alulneacutezetben

282 taacuteblaacutezat - A hallgatoacutei panel alkatreacuteszlistaacuteja

Mennyiseacuteg EacuterteacutekTiacutepus Tokozaacutes Poziacutecioacuteszaacutemok

2 47u E35-10 C2 C5

2 22p C0603 C11 C12

1 10n C0805 C32

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

7 100n C0805 C1 C6 C10 C13 C16 C30 C31

2 100n C1206 C7 C8

6 100R R0805 R5 R6 R9 R10 R13 R16

3 1k R0805 R1 R2 R3

2 1R R0805 R15 L2

2 47k R0805 R14 R17

1 1R R1206 R4

1 47K ellenaacutellaacutes-haacuteloacute SIL9 RN2

1 32768 kHz-es oacuterakvarc

TC26V Q1

4 nyomoacutegombok B3F-10XX 6x6 tact S5 S6 S7 S8

1 20-poacutelusuacute 90deg-os aljzat

ML20L SV1

1 taacutepcsatlakozoacute 733989-5 X1

1 USB-B aljzat USB-B-SMT X2

1 LM7805 stabilizaacutetor-IC

TO220 IC2

1 ADuC 842 PQFP52 IC1

1 MAX4478ASD SO14 IC3

1 FT232RL SSOP28 IC4

9 LED18MM 18 mm LED1 ndash LED9

4 JUMPER 254 mm 6 mm JP1-9

1 Tuumlskesor 254 mm 63 JP

283 taacuteblaacutezat - A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja

Tuumlske Leiacuteraacutes

1B +5 V

1J RESET (15 laacuteb)

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

2B (41 laacuteb)

2J 1 kΩ-os ellenaacutellaacuteson keresztuumll foumlldre koumltve ha esetleg kuumllső aacuteramkoumlrrel szaacutendeacutekozunk letoumllteacutesi funkcioacutekat megvaloacutesiacutetani

3B GND

3J P32 (18 laacuteb) 47 kΩ-os felhuacutezoacute-ellenaacutellaacutessal taacutepra koumltve

4 A USB-soros konverter-IC oumlsszekoumlteacutese az ADuC 842-es mikrovezeacuterlővel Amennyiben kuumllső taacutepot akarunk hasznaacutelni akkor a 6-os blokkra keruumll keacutet jumper de akkor a 4-es blokk valamennyi jumpereacutet le kell vennuumlnk

5B GND

5J P33 (19 laacuteb) 47 kΩ-os felhuacutezoacute-ellenaacutellaacutessal taacutepra koumltve

61B Kuumllső taacutep eseteacuten e keacutet tuumlskeacutere kell jumpert tenni Ekkor a 4-es blokk valamennyi jumpereacutet el kell taacutevoliacutetani

61J

62B Kuumllső taacutep eseteacuten e keacutet tuumlskeacutere kell jumpert tenni Ekkor a 4-es blokk valamennyi jumpereacutet el kell taacutevoliacutetani

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

62J

71B GND

71J +5 V

72B ADC 7 (14 laacuteb)

72J ADC 6 (13 laacuteb)

73B ADC 5 (12 laacuteb)

73J ADC 4 (11 laacuteb)

74B ADC 3 (4 laacuteb)

74J ADC 2 (3 laacuteb)

75B ADC 1 erősiacutetővel pufferelt AD-csatorna Nem koumlzvetlenuumll kapcsoloacutedik a 2 laacutebhoz

75J ADC 0 erősiacutetővel pufferelt AD-csatorna Nem koumlzvetlenuumll kapcsoloacutedik az 1 laacutebhoz

81B GND

81J +5 V

82B Ezek a tuumlskeacutek semmihez sincsenek koumltve Nincs funkcioacutejuk

82J

83B

83J

84B

84J

85B DAC 1 pufferelve az erősiacutetővel Nem koumlzvetlenuumll kapcsoloacutedik az 10 laacutebhoz

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

85J DAC 0 pufferelve az erősiacutetővel Nem koumlzvetlenuumll kapcsoloacutedik a 9 laacutebhoz

9B P35 (23 laacuteb)

9J P34 (22 laacuteb)

Created by XMLmind XSL-FO Converter

Irodalomjegyzeacutek[1] Analog Devices MicroConverterreg 12-Bit ADCs and DACs with Embedded High Speed 62-kB Flash MCU

ADuC841ADuC842ADuC843 p 65 Table 32

[2] Szentiday Klaacutera Feacutelvezető fotodetektorok Műszaki Koumlnyvkiadoacute Budapest 1977 ISBN 963 10 1742 7

[3] Texas Optoelektronikai receptek Műszaki Koumlnyvkiadoacute Budapest 1979 ISBN 963 10 2683 2

[4] Tietze U Schenk Ch Analoacuteg eacutes digitaacutelis aacuteramkoumlroumlk Műszaki koumlnyvkiadoacute Budapest 5 javiacutetott kiadaacutes 1993 ISBN 963 16 0010 6

[5] Beuth K Beuth O Az elektronika alapjai ndash II Feacutelvezetők Műszaki koumlnyvkiadoacute Budapest 1994 ISBN 963 16 0427 6

[6] Kovaacutecs Csongor Elektronikus aacuteramkoumlroumlk General Press Budapest 1997 ISBN 978 963 9076 32 7

[7] Texas TTL receptek Műszaki Koumlnyvkiadoacute Budapest 1978 ISBN 963 10 2491 1

[8] Bolton W Mechatronics Pearson Harlow England 5th edition 2011 Chapter 97 ISBN 978 0 273 74286 9

[9] Chapman S J Electric Machinery Fundamentals WCBMcGraw-Hill Boston 3rd edition 1999 p 640-644 ISBN 0 07 011950 3

[10] wwwstepperworldcom

Created by XMLmind XSL-FO Converter

Page 2: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és

Mikrovezeacuterlők mechatronikai alkalmazaacutesaiiacuterta Dr Kraacutenicz Balaacutezs eacutes Dr Halas Jaacutenos

Publication date 2014Szerzői jog copy 2014 Pannon Egyetem

A tananyag a TAacuteMOP-412A1-111-2011-0042 azonosiacutetoacute szaacutemuacute bdquoMechatronikai meacuternoumlk MSc tananyagfejleszteacutesrdquo projekt kereteacuteben keacuteszuumllt A tananyagfejleszteacutes az Euroacutepai Unioacute taacutemogataacutesaacuteval eacutes az Euroacutepai Szociaacutelis Alap taacutersfinansziacuterozaacutesaacuteval valoacutesult meg

Keacutezirat lezaacuterva 2014 februaacuter

Lektoraacutelta Dr Hidveacutegi Timoacutet

A kiadaacuteseacutert felel a(z) Pannon Egyetem

Felelős szerkesztő Pannon Egyetem

Created by XMLmind XSL-FO Converter

Tartalom1 Előszoacute eacutes ars poetica 12 Ismerkedeacutes az assembly programozaacutesi nyelvvel 4

1 Az assembly nyelvről aacuteltalaacuteban 42 Memoacuteria 53 Regiszterek 54 Koumlzvetlen ciacutemzeacutes 65 Direkt ciacutemzeacutes 66 Oumlsszehasonliacutetaacutesok eacutes ugraacutesok 7

3 Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr 94 Első programunk villogtassuk a panel LED-jeit 11

1 Portok eacutes funkcioacuteregiszterek 112 Egyszerű ciklusszervezeacutes 113 Szubrutinok 124 Ugraacutes a koacutedon beluumll 135 Oacuterajel veacutegrehajtaacutesi idő 136 Az első alkalmazaacutes koacutedja 14

5 Csiacutek a LED-eken 161 Bitek sorszaacutemozaacutesa 162 Logikai eacutes aritmetikai utasiacutetaacutesok 163 Parameacuteteraacutetadaacutes szubrutinnak 174 A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkel 18

6 Csiacutek a LED-eken toumlmoumlren Error Reference source not found1 A Carry bit 222 Bitforgataacutes C-n keresztuumll 22

7 Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel 241 Az adatmutatoacute 242 Eacuterteacutekek noumlveleacutese eacutes csoumlkkenteacutese 243 A koacuted-indirekt ciacutemzeacutes 254 Adatok elhelyezeacutese a koacutedban 265 Az adatmutatoacute automatikus noumlveleacutese 27

8 Felteacutetelek kezeleacutese 301 Oumlsszeadaacutes eacutes kivonaacutes 302 Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesok 313 Hat variaacutecioacute egy feladatra 31

9 Nyomoacutegombok a panelon 381 Gombnyomaacutes detektaacutelaacutesa 382 Logikai műveletek bitekkel 383 Elaacutegazaacutesok bitek alapjaacuten 404 Logikai műveletek baacutejtokkal 405 Bitek moacutedosiacutetaacutesa baacutejton beluumll 416 Gombnyomaacutesok vizsgaacutelata 427 Leacutepteteacutes nyomoacutegombbal 438 Bitvaacuteltozoacutek hasznaacutelata 449 A prellegeacutes kikuumlszoumlboumlleacutese vaacuterakozaacutessal 4710 A teljes alsoacute RAM 48

10 A belső oacutera hasznaacutelata 5111 Megszakiacutetaacutesok 55

Created by XMLmind XSL-FO Converter

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

1 Az ADuC 842 megszakiacutetaacutesai 552 Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes 573 Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutes 604 A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok 63

12 Kuumllső aacuteramkoumlroumlk LED-ekkel 671 Jelzőlaacutempa vezeacuterleacutese 672 Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedja 713 Jelzőlaacutempa toumlbb uumlzemmoacuteddal 72

13 Kuumllső aacuteramkoumlr fotokapuval 7714 Heacutetszegmenses kijelző meghajtaacutesa 8015 Kommunikaacutecioacute az UART-tal 84

1 Az UART soros interfeacutesz 842 Baacutejtok fogadaacutesa eacutes kuumlldeacutese assemblyben 903 Soros porti kommunikaacutecioacute pollozaacutessal 924 Soros porti kommunikaacutecioacute megszakiacutetaacutessal 955 Koacutedreacuteszletek beeacutepiacuteteacutese sajaacutet programunkba 966 Az ADuC vezeacuterleacutese PC-vel 99

16 Iacuteraacutes a memoacuteriaacuteba 1011 Iacuteraacutes az alsoacute eacutes a felső RAM-ba 1022 Iacuteraacutes a belső adatmemoacuteriaacuteba 105

17 Időziacutetőkszaacutemlaacuteloacutek 1081 Egyszerű időmeacutereacutes az időziacutetővel 1112 Stopperoacutera keacutet fotokapuval 113

18 PWM-jelek 1171 PWM-jel előaacutelliacutetaacutesa a mikrovezeacuterlő jelgeneraacutetoraacuteval 1172 Pulzaacuteloacute LED-ek 121

19 AD-aacutetalakiacutetaacutes 1251 Az ADuC 842-es AD-aacutetalakiacutetoacuteja 1252 Egyszerű AD-aacutetalakiacutetaacutes 129

20 Alkonykapcsoloacute 1341 Besugaacuterzaacutesmeacutereacutes fototranzisztorral 1342 Az alkonykapcsoloacute programja 1363 Hisztereacutezis 137

21 TTL IC-k eacutes tranzisztorok a portokon 1391 A felhuacutezoacute-ellenaacutellaacutesok szerepe 1392 Tranzisztorok mint kapcsoloacutek 141

22 Hőmeacuterseacuteklet-meacutereacutes 1441 Termisztorok 1442 Hőmeacuterő 1473 Hőmeacuterseacuteklet-szabaacutelyozaacutes 153

23 Megvilaacutegiacutetaacutesszabaacutelyozoacute 15924 Leacuteptetőmotor vezeacuterleacutese 163

1 Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorok 1632 Bipolaacuteris leacuteptetőmotorok vezeacuterleacutese 1643 A motor leacutepteteacutese 166

25 Utoacuteszoacute 17026 Az Analog Devices hozzaacutejaacuterulaacutesa 17127 Koumlszoumlnetnyilvaacuteniacutetaacutes 17228 Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja 173Irodalomjegyzeacutek Error Reference source not found

Created by XMLmind XSL-FO Converter

Az aacutebraacutek listaacuteja11 A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll 112 A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek 231 A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll 932 Az Analog Devices soros porti letoumlltőprogramjaacutenak feluumllete 933 A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete 1051 Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire 1761 Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor bitjeire 2281 Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval 3282 Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel 3283 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő 3384 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő 3485 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk 3586 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk 3691 A 8 feladat (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja 4392 A Lower RAM bitenkeacutent ciacutemezhető teruumllete 4493 A 9 feladat (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja 4594 Az alsoacute RAM neacutegy regiszterbankja 4895 Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete 49101 A 12 feladat (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja 53111 A 13 feladat (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja 58112 A 15 feladatban megkoumlvetelt LED-leacutepteteacutes 63113 A 15 feladat (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja 64121 Fontos tudnivaloacute a portokkal kapcsolatban 67122 A 16 feladat (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 67123 A 16 feladat megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef 68124 A 16 feladat moacutedosiacutetott megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef 70125 A 17 feladat megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek 72131 A 18 feladat (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 77132 Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel 78133 A fototranzisztor foumlldre huacutezza a P21-es laacutebat iacutegy az arra koumltoumltt LED vilaacutegiacutet 78141 A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese 80142 Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa 80143 Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel 80144 A 20 feladat (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja 82151 USB-kaacutebel belső vezeteacutekei 84152 A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten 88153 A 21 feladat (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja 92154 Az ASCII karakterkeacuteszlet 32-től 126-ig 94161 Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese 101162 A 25 feladat (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja 102171 A 27 feladat (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 113181 Neacutegyszoumlgjel 117

Created by XMLmind XSL-FO Converter

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

182 A PWM-generaacutetor 1 uumlzemmoacutedja 119191 Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei 125192 Az AD-aacutetalakiacutetaacutes szabaacutelyai 129193 Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei 130194 A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is) 131195 Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel 132196 Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek 132201 A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege 134202 Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten 135203 Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt 135204 Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben 136205 Hisztereacutezis keacutetaacutellapotuacute rendszerben 137211 Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel 139212 Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten 141213 Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel 141214 Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal 142215 Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese 142221 A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja 144222 A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja 144223 A termisztor soros kapcsolaacutesban 145224 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal 145225 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal 146226 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel 146227 Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll 148228 Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal 149229 Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor 1532210 USB csatlakozoacutes haacuteloacutezati adapter 1542211 Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera 1542212 A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr 1542213 Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera 1552214 A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese 156231 A LED-ek elhelyezkedeacutese a fototranzisztorral szemben 159232 A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese 160241 Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve 163242 Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve 164243 H-hiacuted 165244 CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral 165245 A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese 166246 A leacuteptetőmotoros alkalmazaacutes elrendezeacutese 167281 A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra 173282 A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből 175283 A hallgatoacutei panel NYAacuteK-terve alulneacutezetből 175284 Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők 175285 A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza 175286 A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza 176287 A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel 176288 A keacutesz panel alulneacutezetben 177

Created by XMLmind XSL-FO Converter

A taacuteblaacutezatok listaacuteja21 A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese 451 Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll 1652 Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten 2071 Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese 2472 A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese 2573 A DPCON SFR taacutergyalt bitjei 2791 Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata 3992 A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata 3993 A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata 3994 A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata 4195 A PSW SFR parameacuteterei 49101 Az időegyseacutegek SFR-jeinek parameacuteterei 51102 A TIMECON SFR parameacuteterei 52111 A kuumllső megszakiacutetaacutesok jellemzői 57112 Az IE SFR parameacuteterei 57113 Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei 60114 A TIMECON SFR parameacuteterei reacuteszletesebben 60115 Az IEIP2 SFR parameacuteterei (reacuteszlet) 61151 Az USB-kaacutebel vezeteacutekeinek funkcioacuteja 84152 Az SCON SFR parameacuteterei 85153 Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese 86154 Az T3CON SFR parameacuteterei 87155 A soros porti kommunikaacutecioacute tipikus eacuterteacutekei 90156 Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai 90157 A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz 96171 A TMOD SFR parameacuteterei 108172 A TCON SFR parameacuteterei 110181 A PWMCON SFR parameacuteterei 117191 Az ADCCON1 SFR parameacuteterei 125192 Az ADCCON2 SFR parameacuteterei 127221 A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata 147222 A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek 155281 A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa 174282 A hallgatoacutei panel alkatreacuteszlistaacuteja 177283 A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja 178

Created by XMLmind XSL-FO Converter

1 fejezet - Előszoacute eacutes ars poeticaE tankoumlnyv szerzője jelen fejezet elkezdeacuteseacutenek pillanataacuteban 38 eacuteves eacutes 298 napos Toumlrteacutent az hogy az aacuteltalaacutenos iskola 7 osztaacutelyaacutenak elveacutegzeacutese utaacuten a nyaacuteri szuumlnetben szuumllei beiacuterattaacutek szaacutemiacutetoacutegeacutepes TIT-tanfolyamra ahol a meacuteltaacuten legendaacutevaacute vaacutelt Commodore szaacutemiacutetoacutegeacutepek BASIC nyelvű programozaacutesaacuteval ismerkedhetett Deacutelelőttoumlnkeacutent Deacutelutaacutenonkeacutent aztaacuten ment a jaacuteteacutek amiacuteg ki nem dobtaacutek a csoportot hogy bdquomost maacuter joacute lenne haza mennirdquohellip

Innentől kezdve nem volt megaacutellaacutes egy joacute darabig Szaacutemiacutetoacutegeacutepes szakkoumlr nyolcadikban (BASIC) sajaacutet Commodore 64-es (laacutesd [A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll] aacutebra) vaacutesaacuterlaacutesa Ausztriaacuteban az assembly nyelvű programozaacutes elsajaacutetiacutetaacutesa szaacutemiacutetoacutegeacutepes szakkoumlr gimnaacuteziumban (ott maacuter egy idő utaacuten XT eacutes Pascal) veacuteguumll az akkori Veszpreacutemi Egyetem Műszaki Informatika szakja (eljoumltt a C ideje)

11 aacutebra - A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll

A szerző egyetemi tanulmaacutenyai utaacuten ott maradt az egyetemen megszerezte a PhD fokozatot taniacutetott a Műszaki Informatika Karon majd a Meacuternoumlki Kar Fizika eacutes Mechatronika Inteacutezeteacuteben koumltoumltt ki Ott nagy lelkesedeacutessel uumllt be egyik kolleacutegaacuteja Mikrovezeacuterlők oacuteraacutejaacutera eacutes roppant moacuted eacutelvezte hogy uacutejra assemblyben programozhat eacutes sok-sok hardverkoumlzeli eacutelmeacutenye lehet Ezt a kurzust keacutesőbb a kolleacutega versenyszfeacuteraacuteba toumlrteacutenő taacutevozaacutesa utaacuten legnagyobb oumlroumlmeacutere meg is oumlroumlkoumllte 2012-ben eljoumltt az idő hogy a TAacuteMOP paacutelyaacutezatcsalaacuted kereteacuteben elektronikus tankoumlnyvet keacutesziacutethessen a mikrovezeacuterlők mechatronikai alkalmazaacutesaacuteroacutel

Egyetemi jegyzetet tankoumlnyvet iacuterni nem is olyan koumlnnyű Előszoumlr a szerzőnek el kell doumlntenie hogy kikből aacutell a ceacutelcsoport majd azt hogy mely konkreacutet hardveren eacutes milyen alkalmazaacutesokon keresztuumll igyekszik bemutatni a mikrovezeacuterlők programozaacutesaacutet Ez a tankoumlnyv ugyanis nem aacuteltalaacutenossaacutegban kiacutevaacuten foglalkozni a mikrovezeacuterlők mechatronikai alkalmazaacutesaacuteval hanem a koumlvetkező haacuterom ceacutelkitűzeacutest proacutebaacutelja megvaloacutesiacutetani

bull Az ADuC 842-es mikrovezeacuterlő lehetőseacutegeinek megismereacutese

bull Az assembly nyelv alapjainak elsajaacutetiacutetaacutesa

bull Elemi aacuteramkoumlri kapcsolaacutesokkal egyszerű mechatronikai alkalmazaacutesok megoldaacutesa

A fenti haacuterom ponthoz kieleacutegiacutető magyaraacutezat kiacutevaacutenkozik Vegyuumlk haacutet őket sorba

A vaacutelasztaacutes azeacutert esett az Analog Devices ADuC 842-es mikrovezeacuterlőjeacutere (wwwanalogcom) mert a Pannon Egyetem Fizika eacutes Mechatronika Inteacutezeteacuteben ilyen tiacutepusuacute eszkoumlzoumlkkel toumlrteacutent a Mikrovezeacuterlők taacutergy oktataacutesa maacuter a szerző csatlakozaacutesa előtt A mikrovezeacuterlőkhoumlz Kaacutentor Zoltaacuten docens uacuter tervezett univerzaacutelisan hasznaacutelhatoacute sok feladat megoldaacutesaacutera alkalmas oktataacutesi ceacutelokra remekuumll hasznaacutelhatoacute panelt Aztaacuten taacutevozott a versenyszfeacuteraacuteba

Előfordulhat hogy az ADuC 842-es mikrovezeacuterlőt sokan maacuter elavultnak tartjaacutek azonban szeretneacutenk megnyugtatni a keacutetkedőket az eszkoumlz kivaacuteloacutean alkalmas arra hogy az egyetemi hallgatoacutek megfelelő szakmai ismereteket szerezzenek a mikrovezeacuterlők lelkivilaacutegaacuteroacutel A megleacutevő bdquogeacutepparkotrdquo iacutegy nagy veacutetek lenne egyszerűen kihajiacutetani Az elektronikus tankoumlnyv aacuteltal szolgaacuteltatott bdquokurzusrdquo elveacutegezeacutese utaacuten baacuterki koumlnnyedeacuten aacutetnyergelhet maacutes tiacutepusuacute mikrovezeacuterlőre Olyan ez mintha megfelelő neacutemet nyelvtudaacutes utaacuten arra keacutenyszeruumllneacutenk esetleg oumlnkeacutent doumlnteneacutenk uacutegy hogy paacuter hoacutenapon beluumll eacutertelmesen kommunikaacuteljunk hollandul vagy eacuteppen sveacuteduumll Higgyeacutek el menni fog Oumltoumldannyi erőfesziacuteteacutessel mint az első nyelvneacutel

Az assembly nyelv emlegeteacutese sokakban kellemetlen eacuterzeacuteseket leneacutezeacutest vagy eacuteppen paacutenikreakcioacutet vaacutelt ki Valoacute igaz ceacuteges koumlrnyezetben ritkaacuten hasznaacuteljaacutek sokkal inkaacutebb koumlvetelik meg a C nyelv vagy tovaacutebbi script-nyelvek

Created by XMLmind XSL-FO Converter

Előszoacute eacutes ars poetica

ismereteacutet Ennek nyilvaacuten megvan a maga oka A szerző viszont uacutegy gondolja hogy ha maacuter egyszer mikrovezeacuterlővel fogunk egyszerű kis aacuteramkoumlroumlket szenzorokat eacutes leacuteptetőmotort műkoumldtetni mindenkeacuteppen eacuterdemes az assembly nyelvvel kezdeni Ezen keresztuumll eacutertjuumlk meg ugyanis igazaacuten a hardverkoumlzeli programozaacutes leacutenyegeacutet eacutes eacutelhetjuumlk aacutet azt az eacutelmeacutenyt amikor joacuteformaacuten keacutet ujjunk koumlzeacute csippenthetjuumlk a biteket Termeacuteszetesen koumlnnyen belefuthatunk olyan probleacutema melynek megoldaacutesa sokkal keacutenyelmesebb C nyelven iacutert programmal de a mikrovezeacuterlőkkel toumlrteacutenő ismerkedeacutesneacutel maradunk az assemblyvel nyelvneacutel

A mikrovezeacuterlő mechatronikai alkalmazaacutesaacutehoz kuumllső aacuteramkoumlroumlkre lesz szuumlkseacuteg Ebben a tananyagban nem taacutergyalunk bonyolult bdquopoacutekhaacuteloacutekatrdquo az aacuteramkoumlroumlk egeacuteszen csekeacutely villamossaacutegtani elektronikai ismeretek alapjaacuten koumlnnyen aacutetlaacutethatoacutek lesznek műkoumldeacutesuumlk koumlnnyen megeacuterthető lesz

A tankoumlnyv termeacuteszetesen nem lesz teljes Egyetlen szaacutemiacutetaacutestechnikai jegyzet vagy koumlnyv sem lehet teljes Viszont toumlrekedni fogunk arra hogy az ADuC 842-es mikrovezeacuterlő csaknem valamennyi utasiacutetaacutesaacutet ciacutemzeacutesmoacutedjaacutet hasznaacuteljuk ill lehetőseacutegeinek nagyjaacuteboacutel a feleacutere műkoumldő programot alkalmazaacutest ismertessuumlnk A tananyag feleacutepiacuteteacutese iteratiacutev jellegű lesz Ez azt jelenti hogy nem kimeriacutető moacutedon ismertetuumlnk egy-egy teacutemakoumlrt (pl portokat megszakiacutetaacutesokat vagy időziacutetőket) hanem mindig csak olyan meacuterteacutekben ahogyan azt az adott reacutesz megkiacutevaacutenja Aztaacuten a koumlvetkező feladatnaacutel meacutelyebben Aztaacuten meacuteg meacutelyebbenhellip

Lassan az előszoacute veacutegeacutehez eacuteruumlnk A szerző szeretne meacuteltoacute emleacuteket aacutelliacutetani neacutehaacuteny szakkoumlnyvnek (laacutesd [A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek] aacutebra) melyek neacutelkuumll nem sokra ment volna a joacute oumlreg Commodore 64-es programozaacutesaacuteval eacutes a nagyon egyszerű LED-ek villogtataacutesaacutera alkalmas kuumllső aacuteramkoumlr barkaacutecsolaacutesaacuteval gimnazista koraacuteban Ezek a koumlnyvek feleacutepiacuteteacutesuumlk egyes reacuteszeik peacuteldakeacutent aacutellnak a szerző előtt A mai kor hallgatoacutei maacuter nem biztos hogy foumllismerik őket de idősebb csalaacutedtagjaik baraacutetaik koumlzoumltt bizonyaacutera akadnak ilyenek

12 aacutebra - A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek

A szerző őszinteacuten remeacuteli hogy elektronikus tankoumlnyveacutet eacuterdeklődeacutessel eacutes haszonnal fogjaacutek forgatni (goumlrgetni) mechatronikus hallgatoacutek villamosmeacuternoumlk hallgatoacutek informatikus hallgatoacutek de akaacuter eacuterdeklődő koumlzeacutepiskolaacutesok is

Ez a tankoumlnyv nem szakkoumlnyv Nem szakembereknek keacuteszuumllt Egyetemi hallgatoacuteknak keacuteszuumllt akik a tankoumlnyvben leiacutertak elsajaacutetiacutetaacutesa utaacuten joacute eseacutellyel a szakember-jeloumllt szinten talaacuteljaacutek majd magukat Eacutes ha lesz hozzaacute erejuumlk eacutes kitartaacutesuk akkor nem is olyan sokkal keacutesőbb igazi szakemberek lesznek

Joacute tanulaacutest programozaacutest aacuteramkoumlreacutepiacuteteacutest eacutes meacuteg toumlbb oumlnaacutelloacute megvaloacutesiacutetott oumltletet kiacutevaacutenva

Kraacutenicz Balaacutezs

Created by XMLmind XSL-FO Converter

Előszoacute eacutes ars poetica

szerző

Veszpreacutem 2013 aacuteprilisa

Created by XMLmind XSL-FO Converter

2 fejezet - Ismerkedeacutes az assembly programozaacutesi nyelvvel1 Az assembly nyelvről aacuteltalaacutebanSzaacutemiacutetoacutegeacutepek programozaacutesaacutera szaacutemos programnyelvet fejlesztettek ki a hőskor oacuteta A legalacsonyabb szintű programozaacutesi nyelv a geacutepi koacuted Ez a nyelv a programot alkotoacute binaacuteris utasiacutetaacutesok azaz puszta szaacutemeacuterteacutekek sorozataacuteboacutel aacutell A geacutepi koacutedban valoacute programozaacutes meglehetősen neheacutezkes lenne (a hőskorban viszont egy ideig teacutenylegesen iacutegy csinaacuteltaacutek) ezeacutert egy-egy roumlvidiacuteteacutest uacutegynevezett mnemonikot rendelnek minden egyes utasiacutetaacuteshoz A mnemonik aacuteltalaacuteban az utasiacutetaacutes jelenteacuteseacutet leiacuteroacute toumlmoumlr toumlbbnyire angol kifejezeacutesből alkotott betűszoacute Ezeket a mnemonikokat oumlnmagukban szokaacutes assembly utasiacutetaacutesoknak nevezni Az ADuC 842-es mikrovezeacuterlő 8052-es tiacutepusuacute magjaacutenak keacuteszleteacuteből neacutehaacuteny utasiacutetaacutest az [A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese] mutat be melyben a hexadecimaacutelis szaacutemokat a szaacutem utaacuten iacutert h-val jeloumlljuumlk

21 taacuteblaacutezat - A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese

Geacutepi koacuted Assembly mnemonik Angol kifejezeacutes Magyar jelenteacutes

14h DEC A Decrement Accumulator Az akkumulaacutetor eacuterteacutekeacutenek csoumlkkenteacutese eggyel

74h MOV Adata Move Data to Accumulator A data eacuterteacutekű adatbaacutejt (be)mozgataacutesa az akkumulaacutetorba

23h RL A Rotate Accumulator Left Az akkumulaacutetor elforgataacutesa egy bittel balra

Az [A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese] alapjaacuten magaacutetoacutel eacutertetődő hogy assembly nyelven koumlnnyebb programozni mint geacutepi koacutedban Geacutepi koacutedban ugyanis teacutenylegesen puszta szaacutemokat kellene iacuterogatnunk egymaacutes utaacuten program gyanaacutent A keacutet kifejezeacutest egyeacutebkeacutent eacuterdekes moacutedon sokszor sok helyen oumlsszekeverik Uumlgyeljuumlnk tehaacutet a helyes megnevezeacutesre mi assembly nyelven fogunk programokat iacuterni

A fentiek utaacuten baacuterki megkeacuterdezheti hogy hogyan lesz az assembly utasiacutetaacutesokboacutel teacutenylegesen geacutepi koacuted amit maacuter meg lehet etetni a processzorral Nos erre valoacute a fordiacutetoacuteprogram azaz az assembler Az assembler teacutenylegesen geacutepi koacutedot aacutelliacutet elő amit aztaacuten alkalmas letoumlltőprogrammal raacutetoumllthetuumlnk a mikrovezeacuterlőre eacutes futtathatjuk azt Iacutegy kel tehaacutet eacuteletre az assembly nyelven iacutert programunk

Az assembly nyelvű programozaacutesroacutel azt lehet mondani hogy olyan ez mint amikor egy haacutezat az utolsoacute teacuteglaacuteig eacutes csavarig mi aacutelliacutetunk oumlssze miacuteg magas szintű programozaacutesi nyelvekneacutel keacuteszen kapjuk a falakat esetleg az egeacutesz helyiseacutegeket Az assembly nyelvvel baacutermelyik memoacuteriaciacutemet eleacuterhetjuumlk eacutes kizaacuteroacutelag tőluumlnk fuumlgg hogy annak tartalmaacutet mikeacutent eacutertelmezzuumlk mire hasznaacuteljuk Nincsenek tehaacutet kuumlloumlnfeacutele vaacuteltozoacutetiacutepusaink egyaacuteltalaacuten vaacuteltozoacuteink sincsenek csak memoacuteriarekeszeink Ez furcsaacuten hangozhat annak aki maacuter tanult valamilyen magas szintű programozaacutesi nyelvet (BASIC PASCAL C) de ez az igazsaacuteg Mindenesetre ettől nem kell megijedni

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

assembly nyelven is minden megoldhatoacute eacutes bizonyos probleacutemakoumlrre mint peacuteldaacuteul erősen hardverkoumlzeli uumlgyek kezeleacuteseacutere sokszor alkalmasabb mint a magas szintű nyelvek

2 MemoacuteriaAzt a hardverelemet vagy modult amely keacutepes adatok taacuterolaacutesaacutera memoacuteriaacutenak nevezzuumlk Tulajdonkeacuteppen akaacuter egyetlen kondenzaacutetort is memoacuteriaacutenak nevezhetuumlnk egy aacuteramkoumlrben hiszen taacuteroloacuteroacutel van szoacute A digitaacutelis szaacutemiacutetaacutestechnika vilaacutegaacuteban enneacutel persze sokkal toumlbbre van szuumlkseacuteg Ebben az esetben memoacuteriaacutenak azt a hardveregyseacuteget nevezzuumlk amelyik toumlbbnyire azonos meacuteretű digitaacutelis informaacutecioacuteegyseacutegeket keacutepes rendezett moacutedon taacuterolni A legegyszerűbb esetben ez az informaacutecioacuteegyseacuteg egy baacutejt ami nyolc bitből aacutell A memoacuteriaegyseacuteg meacutereteacutet a szerint adjuk meg hogy az haacuteny darabot keacutepes taacuterolni a vaacutelasztott informaacutecioacuteegyseacutegből jelen esetben a baacutejtboacutel A memoacuteriaegyseacutegeket aacuteltalaacuteban uacutegy tervezik hogy a teljes meacuteret a kettő valamely hatvaacutenyaacuteval egyezzen meg A memoacuteria meacutereteacutenek megadaacutesakor az SI-prefixumokat hasznaacuteljaacutek ami persze nem teljesen korrekt hiszen peacuteldaacuteul az 1 kilobaacutejt a szaacutemiacutetaacutestechnikaacuteban szigoruacutean 1 024 baacutejtot jelent a kilo (k) SI-prefixum viszont 103 = 1 000-rel egyenlő Volt proacutebaacutelkozaacutes ide passzoloacute prefixumok bevezeteacuteseacutere (kibi = 210 = 1 024 mebi = 220 = 1 048 576 gibi = 230 stb) csak ez valamieacutert egyelőre nem tudott elterjedni

A memoacuteria rendezett mivolta azt jelenti hogy a memoacuteriarekeszek egyeacutertelműen azonosiacutethatoacutek toumlbbnyire sorszaacutem alapjaacuten Ezt a sorszaacutemot hiacutevjuk egyszerűen memoacuteriaciacutemnek Aacuteltalaacutenos iskolaacutes szakkoumlroumlkoumln ezt a megszaacutemozott fioacutekok metaforaacutejaacuteval szoktaacutek szemleacuteltetni eacutes valljuk be ez a szeacutep analoacutegia egyetemi szinten is kifogaacutestalanul megaacutellja a helyeacutet

Az ADuC mikrovezeacuterlők memoacuteriaszervezeacutese egeacuteszen sajaacutetos Ennek taacutergyalaacutesa az iteratiacutev feleacutepiacuteteacutesuumlnknek megfelelően a keacutesőbbi fejezetekben toumlrteacutenik Ha maacuter a memoacuteriaacuteknaacutel tartunk emliacutetsuumlk meg hogy keacutet sajaacutetos memoacuteriafeleacutepiacuteteacutes terjedt el a szaacutemiacutetaacutestechnikaacuteban Az egyiket Neumann-architektuacuteraacutenak hiacutevjaacutek a Magyarorszaacutegon szuumlletett zsidoacute szaacutermazaacutesuacute elkeacutepesztően briliaacutens elmeacutejű matematikus tiszteleteacutere Enneacutel az architektuacuteraacutenaacutel koumlzoumls memoacuteriaacuteban taacuteroljuk a programkoacutedot eacutes az adatokat is Iacutegy tehaacutet egy koacuted minden tovaacutebbi neacutelkuumll aacutetiacuterhatja sajaacutet magaacutet A maacutesik tiacutepus a Harvard-architektuacutera Enneacutel az architektuacuteraacutenaacutel kuumlloumln memoacuteria szolgaacutel a programkoacuted eacutes az adatok taacuterolaacutesaacutera A mikrovezeacuterlőkneacutel sokkal inkaacutebb ez utoacutebbi megoldaacutes terjedt el Ilyen a mieacutenk is

3 RegiszterekAz assembly nyelvről szoacuteloacute aacuteltalaacutenos leiacuteraacutesban azt a hasonlatot hasznaacuteltuk hogy olyan ez mintha az utolsoacute teacuteglaacuteig eacutes csavarig mi magunk raknaacutenk oumlssze egy haacutezat Ehhez nyilvaacuten kell betonkeverő talicska vakoloacutekanaacutel kalapaacutecs eacutes meacuteg sok minden maacutes Baacutermilyen alacsony szintű program veacutegrehajtaacutesaacutenaacutel is segeacutedeszkoumlzoumlkre van szuumlkseacuteguumlnk hiszen magaacuteval az assembly nyelvvel oumlnmagaacuteban nem tudnaacutenk mivel műveleteket veacutegrehajtani Ezek a segeacutedeszkoumlzoumlk a mikroprocesszoroknaacutel elsősorban a memoacuteriarekeszek a regiszterek eacutes a jelzőbitek vagy flag-ek Ez utoacutebbiakroacutel keacutesőbb lesz majd szoacute

A memoacuteriarekeszek koumlzvetlen eacutes gyors eleacutereacutese az assembly nyelv nagy előnye Egy-egy mikroprocesszor architektuacuteraacutejaacutenaacutel toumlbbfeacutele memoacuteriaciacutemnek lehet kituumlntetett szerepe hiszen a memoacuteriarekeszek tartalmaacuteval aacuteltalaacuteban kezdeni akarunk valamit meg akarjuk vizsgaacutelni eacuterteacutekuumlket logikai vagy algebrai műveletet akarunk veacutegrehajtani rajtuk el akarjuk menteni tartalmukat stb Az ilyesfeacutele műveletek megkoumlnnyiacuteteacuteseacutere eacutes a lehető leggyorsabb veacutegrehajtaacutesaacutera a mikroprocesszorok kituumlntetett memoacuteriarekeszekkel biacuternak ezek megnevezeacutese a regiszter

Baacuter ezt a fejezetet meacuteg mindig eleacuteggeacute aacuteltalaacutenos leiacuteraacutesnak szaacutenjuk a konkreacutet peacuteldaacutek bemutataacutesa maacuter a 80518052-es processzormag utasiacutetaacuteskeacuteszleteacutevel toumlrteacutenik Jegyezzuumlk meg hogy valamennyi memoacuteriarekesz ill

regiszter egybaacutejtos azaz eacuterteacuteke a legegyszerűbb eacutertelmezeacutes szerint a halmazboacutel szaacutermazik Olyan eset azonban előfordulhat hogy keacutet egybaacutejtos regiszter oumlsszetartozik eacutes inkaacutebb azt mondjuk hogy keacutetbaacutejtos regiszterről van szoacute

Aacuteltalaacutenossaacutegban elmondhatoacute hogy a mikroprocesszoroknak van egy elsődleges fontossaacuteguacute regiszteruumlk amit akkumulaacutetornak hiacutevnak Az assembly nyelvek erre szinte minden esetben az A szimboacutelummal hivatkoznak Egyszerűbb mikroprocesszorok eseteacuteben az akkumulaacutetor meacuterete mindoumlsszesen egyetlen baacutejt azaz nyolc bit A program veacutegrehajtaacutesa soraacuten joacuteformaacuten minden szaacutemiacutetaacutes eacutes művelet az akkumulaacutetorban toumlrteacutenik eacutes ide keruumll vissza a szaacutemiacutetaacutes vagy művelet veacutegeredmeacutenye is

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

A 80518052-es processzormagnak az akkumulaacutetoron kiacutevuumll van meacuteg heacutet darab kiemelt fontossaacuteguacute regisztere R0 R1 R7 Ezeket nagyon sok feladatra alkalmazhatjuk ahogy azt majd a keacutesőbbiekben laacutetni fogjuk

4 Koumlzvetlen ciacutemzeacutesCiacutemzeacutesmoacutedon azt a moacutedot eacutertjuumlk ahogyan egy memoacuteriarekesz tartalmaacutet eleacuterjuumlk Az assembly nyelveknek minden olyan ciacutemzeacutesmoacutedot tartalmazniuk kell melyekkel meacuteg a legbonyolultabb probleacutema is megoldhatoacute Az persze maacuter maacutes keacuterdeacutes hogy ez mekkora erőfesziacuteteacutest ill programbonyolultsaacutegot jelent A gyaacutertoacutek azonban sokszor keacutenyelmesebbeacute teszik a programozoacute eacuteleteacutet eacutes olyan ciacutemzeacutesmoacutedot is megvaloacutesiacutetanak amelyre tulajdonkeacuteppen nem is lenne okvetlenuumll szuumlkseacuteg de felhasznaacutelaacutesaacuteval szaacutemos probleacutema esetleg sokkal gyorsabban eacutes koumlnnyebben oldhatoacute meg

Az előző alfejezet utaacuten maacuter mutathatunk peacuteldaacutet arra az esetre amikor az akkumulaacutetorba egy a programozoacute aacuteltal roumlgziacutetett eacuterteacuteket mondjuk 28-at kell betoumllteni Ehhez megtanuljuk azt az utasiacutetaacutest amellyel adatokat lehet mozgatni Ennek mnemonikja MOV a mnemonik pedig az angol Move (mozgat) szoacuteboacutel szaacutermazik Az utasiacutetaacutes szintaxisaacutenaacutel nagyon fontos hogy előszoumlr azt a memoacuteriarekeszt nevezzuumlk meg amelyikbe az adatot mozgatni akarjuk maacutesodikkeacutent pedig azt a memoacuteriarekeszt amelyikből mozgatni akarjuk az adatot A fenti feladat tehaacutet iacutegy oldhatoacute meg

MOV A75

Ezt a ciacutemzeacutesmoacutedot koumlzvetlen ciacutemzeacutesnek (angolul Immediate Addressing) nevezzuumlk Azeacutert koumlzvetlen a ciacutemzeacutes mert az akkumulaacutetorba vagy aacuteltalaacutenosan a kijeloumllt helyre toumlrteacutenő adatmozgataacuteshoz nem kell eleacuterni semmilyen maacutes memoacuteriarekeszt hiszen az adatot koumlzvetlenuumll mozgatjuk a kijeloumllt helyre Ezt mindig a kettős kereszt () szimboacutelummal jeloumlljuumlk Ezt az assemblernek fel kell ismernie eacutes helyesen kell lefordiacutetania a programkoacutedot Geacutepi koacutedban az utasiacutetaacutest koacutedoloacute szaacutemeacuterteacutek eacutes a konkreacutet adat egymaacutest koumlvető memoacuteriarekeszekben helyezkedik el vagyis az adat koumlzvetlenuumll az utasiacutetaacutes koacutedjaacutet koumlveti

Ha maacuter itt tartunk tanuljuk meg hogy koumlzvetlen ciacutemzeacutesekneacutel hogyan hasznaacutelhatunk binaacuteris hexadecimaacutelis vagy akaacuter karakteres eacuterteacutekmegadaacutest Az alaacutebbi koumlzvetlen ciacutemzeacutesek mind szinonimaacutek a 80518052-es processzormagok assembly nyelven toumlrteacutenő programozaacutesaacutehoz hasznaacutelhatoacute assemblerekneacutel

MOV A75 MOV A04Bh MOV A01001011b MOV ArsquoKrsquo

Jegyezzuumlk meg a szintaxist Decimaacutelis eacuterteacuteket a felhasznaacutelt szaacutemjegyek szaacutemaacutetoacutel fuumlggetlenuumll mindenfeacutele egyeacuteb jeloumlleacutes neacutelkuumll iacuterunk a kettős kereszt utaacuten A hexadecimaacutelis eacuterteacutekek megadaacutesa mindig egy 0-val kezdődik majd az azt koumlvető teacutenylegesen a hexadecimaacutelis szaacutemot jeloumllő keacutet karakter (hexadecimaacutelis szaacutemjegy) utaacuten egy h betűt iacuterunk Binaacuteris eacuterteacutekmegadaacutesnaacutel a nyolc szaacutemjegyet (1-et vagy 0-t) egy b betű koumlveti ASCII koacuted megadaacutesaacutenaacutel pedig nyugodtan hasznaacutelhatjuk magaacutet a karaktert csak tegyuumlk aposztroacutefok koumlzeacute A koumlzvetlen ciacutemzeacutes szerencseacutere az Rn regiszterekre is műkoumldik

MOV RnrsquoKrsquo

Itt az n betű indexkeacutent eacutertelmezendő csak a programkoacutedok stiacutelusa szerint nem suumlllyesztett betűtiacutepussal iacuterjuk Az előző alfejezet utolsoacute bekezdeacuteseacuteben bemutatott R regiszterek darabszaacutema szerint n eacuterteacuteke 0 eacutes 7 koumlzoumltti egeacutesz szaacutem lehet

5 Direkt ciacutemzeacutesKeacutepzeljuumlnk el egy olyan memoacuteriamodult melynek meacuterete mindoumlsszesen 256 baacutejt (Azeacutert ilyet keacutepzeljuumlnk el mert az ADuC 842-es architektuacuteraacutejaacutenaacutel ez meacuteg sokszor vissza fog koumlszoumlnni ugyanis pontosan ilyen modulokboacutel eacutepuumll foumll a memoacuteria) A memoacuteriarekeszek ciacutemei ezek szerint 0-toacutel 255-ig terjednek hexadecimaacutelisan iacuterva 00h-toacutel FFh-ig Ha valamelyik speciaacutelis regiszterbe szeretneacutenk betoumllteni valamelyik memoacuteriaciacutemen talaacutelhatoacute eacuterteacuteket akkor direkt ciacutemzeacutest (angolul Direct Addressing) hasznaacutelunk

Neacutezzuumlk a koumlvetkező peacuteldaacutet

MOV A030h

Ennek veacutegrehajtaacutesa utaacuten az akkumulaacutetorba az az eacuterteacutek keruumll amelyik a 30h-s ciacutemen talaacutelhatoacute A 30h-s ciacutemen talaacutelhatoacute eacuterteacutek ettől szerencseacutere nem vaacuteltozik meg

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

Az adatmozgataacutes sorrendje fordiacutetott is lehet termeacuteszetesen

MOV 030hR2

Ennek veacutegrehajtaacutesa utaacuten a 30h memoacuteriaciacutemre az az eacuterteacutek keruumll amelyik az R2-es regiszterben talaacutelhatoacute Ekkor az R2-es regiszter tartalma szintuacutegy vaacuteltozatlanul marad

Direkt ciacutemzeacutessel az akkumulaacutetor eacutes az R0 R1 R7 regiszterek valamelyike koumlzoumltt is koumlnnyen bonyoliacutethatoacute az adatmaacutesolaacutes peacuteldaacuteul

MOV AR5

vagy

MOV R6A

Jegyezzuumlk azonban meg hogy ha az egyik R regiszter tartalmaacutet akarjuk a maacutesikba toumllteni akkor erre a műveletre nincsen elegaacutens utasiacutetaacutes Ha tehaacutet mondjuk R0 tartalmaacutet akarjuk R7-be maacutesolni akkor segiacutetseacuteguumll hiacutevhatjuk peacuteldaacuteul az akkumulaacutetort

MOV AR0MOV R7A

Direkt ciacutemzeacutessel egyik memoacuteriarekesz tartalmaacutet aacutetmaacutesolhatjuk a maacutesik memoacuteriarekeszbe

MOV 03Eh03Ah

Ennek veacutegrehajtaacutesa utaacuten a 3Ah ciacutemen talaacutelhatoacute eacuterteacutek a 3Eh ciacutemre maacutesoloacutedik A direkt ciacutemzeacutest tartalmazoacute adatmozgataacutest az utasiacutetaacuteskeacuteszlet leiacuteraacutesai toumlbbnyire a

MOV AdirectMOV directAMOV RndirectMOV directRnMOV directdirect

teacutetelekkel illetik a leacutenyeg hogy szerepel bennuumlk a direct utalaacutes

A maacuter sokat hasznaacutelt MOV utasiacutetaacutesnak van olyan variaacutensa is amelyben keveredik a direkt eacutes a koumlzvetlen ciacutemzeacutes

MOV 032h125

Ennek veacutegrehajtaacutesa utaacuten a decimaacutelisan 125-oumlt jelentő eacuterteacutek keruumll a 32h ciacutemre Aacuteltalaacutenos hivatkozaacutesa a koumlvetkező

MOV directdata

6 Oumlsszehasonliacutetaacutesok eacutes ugraacutesokMinden assembly nyelvben lennie kell olyan utasiacutetaacutesoknak melyek lehetőveacute teszik regiszterek vagy memoacuteriarekeszek tartalmaacutenak oumlsszehasonliacutetaacutesaacutet Ha ez nem iacutegy lenne nem lehetne programelaacutegazaacutest csinaacutelni eacutes csak primitiacutev koacutedokat tudnaacutenk iacuterni Ha maacuter szoacuteba keruumllt az elaacutegazaacutes akkor nyilvaacutenvaloacutean olyan utasiacutetaacutesokra is szuumlkseacuteg van amelyekkel a program vezeacuterleacuteseacutet a veacutegrehajtandoacute reacuteszekhez lehet ugratni Aki magas szintű programozaacutesi nyelvekkel kezdte a programozaacutes alapjait annak ez most nagyon idegen lesz de assemblyben mesteri moacutedon lehet oumlssze-vissza ugraacuteltatni a program veacutegrehajtaacutesaacutet eacutes mindezt uacutegy hogy annak meacuteg eacutertelme is legyen

Az oumlsszehasonliacutetaacutesok eredmeacutenyeacuteről sokszor uacutegy eacutertesuumlluumlnk hogy egy speciaacutelis regiszter valamely kituumlntetett bitje vagy bitjei adott jelenteacutes szerint aacutellnak be 0-ra vagy 1-re Az ilyen jelzőbiteket szoktaacutek angolul flag-nek nevezni Talaacutelkozni fogunk majd olyan jelzőbittel amelyik egy eacuterteacutek-oumlsszehasonliacutetaacutesnaacutel 1-re aacutell be ha az egyik eacuterteacutek kisebb mint a maacutesik eacutes 0-ra aacutell be ha ez nem iacutegy van azaz nagyobb vagy egyenlő Ezek utaacuten egy arra alkalmas utasiacutetaacutessal elugrathatjuk a programot akkor ha a jelzőbit eacuterteacuteke 1 kuumlloumlnben a program veacutegrehajtaacutesa szeacutepen csorog tovaacutebb Ez az elugrataacutes aacuteltalaacuteban a jelzőbit 0 eacuterteacutekeacutere is megfogalmazhatoacute Lesznek azutaacuten olyan utasiacutetaacutesok is amelyek egymagukban veacutegeznek oumlsszehasonliacutetaacutest majd az eredmeacuteny valamilyen tulajdonsaacutegaacutenak

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

megfelelően ugratjaacutek el a programvezeacuterleacutest vagy hagyjaacutek tovaacutebb csorogni a programot

Az olvasoacutet megnyugtatjuk hamarosan peacuteldaacutek oumlzoumlneacutevel tesszuumlk vilaacutegossaacute az [Ismerkedeacutes az assembly programozaacutesi nyelvvel] fejezetben leiacutertakat

Created by XMLmind XSL-FO Converter

3 fejezet - Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlrAz ADuC 842-es chiphez hasznaacutelhatoacute assembler a letoumlltőprogram eacutes egyeacuteb szoftverek ismerteteacutese nem e tankoumlnyv elsődleges feladata viszont nem is hiaacutenyozhat ha a teacutemaacuteval most ismerkedő hallgatoacutek teacutenylegesen hasznaacutelni akarjaacutek az eszkoumlzoumlket iacutegy roumlviden szoacutelnunk kell ezekről is

A hallgatoacutei panelt amelyre ezt a tankoumlnyvet alapozzuk Dr Kaacutentor Zoltaacuten a Fizika Inteacutezet egykori munkataacutersa tervezte Itt most csak a fő funkcioacuteit foglaljuk oumlssze a reacuteszletes aacuteramkoumlri terv a Fuumlggeleacutekben talaacutelhatoacute olyan reacuteszletesseacuteggel hogy az eszkoumlz reprodukaacutelhatoacute legyen A [A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll] aacutebra keacutet neacutezetből mutatja a panelt Talaacutelhatoacute rajta egy USB-csatlakozoacute eacutes egy 20-poacutelusuacute szalagkaacutebel-csatlakozoacute Az USB-csatlakozoacutehoz baacutetran hasznaacutelhatunk a nyomtatoacuteknaacutel megszokott USB-kaacutebelt Ezzel kapcsolhatjuk panelunkat a szaacutemiacutetoacutegeacutephez A 20-poacutelusuacute szalagkaacutebel-csatlakozoacute tuumlskeacuteire keacutet teljes IO-port laacutebai a +5 V-os taacutepfeszuumlltseacuteg eacutes a foumlld (GND) vannak kivezetve A csatlakozoacute tuumlskeacuteinek funkcioacutekiosztaacutesaacutet a fuumlggeleacutekben talaacuteljuk Ugyanez igaz a panelboacutel kiaacutelloacute egyeacuteb tuumlskeacutek ismerteteacuteseacutere is

31 aacutebra - A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll

A panelon joacutel foumllismerhető egy nyolcas LED-sor eacutes maga az ADuC 842-es mikrovezeacuterlő Talaacutelunk meacuteg neacutegy nyomoacutegombot a panel hosszabbik eacuteleacutehez (a Pannon Egyetem felirathoz) koumlzelebbi kettőnek baacutermilyen funkcioacutet adhatunk szoftveresen A szalagkaacutebel-csatlakozoacutehoz legkoumlzelebb elhelyezkedő gomb a resetgomb A negyedik a program letoumllteacuteseacutet lehetőveacute tevő uumlzemmoacutedba aacutelliacutetja a mikrovezeacuterlőt Ilyenkor uacutegy kell eljaacuternunk hogy egyik ujjunkkal lenyomjuk ezt a gombot majd ezt fel nem engedve lenyomjuk a resetgombot is Iacutegy aacutell az eszkoumlz letoumlltőuumlzemmoacutedba

Az ADuC 842-es processzormagja a 8052-es Ez csak nagyon keveacutes reacuteszletben (főkeacutent a memoacuteriateruumlletek meacutereteacuteben) kuumlloumlnboumlzik a 8051-es magtoacutel iacutegy nem veacuteletlen hogy az Analog Devices gyaacuteri CD-i is a 8051-es programozaacutesaacutera alkalmas assemblert tartalmazzaacutek Ennek neve asm51exe Gyaacuteri CD hiacutejaacuten az Internetről toumllthetjuumlk le ezt az alkalmazaacutest melyet meacuteg DOS alaacute fejlesztettek Windows XP-n meacuteg simaacuten futtathatoacute parancsuumlzemmoacutedban vagy valamely alkalmas Commander-t hasznaacutelva Keacutesőbbi Windows rendszer eseteacuten emulaacutetorra lesz szuumlkseacuteguumlnk Az asm51exe assemblerhez komplett leiacuteraacutesokat is koumlnnyen talaacutelunk az Interneten Ezeacutert itt csak annyit emliacutetuumlnk meg hogy assembly koacutedot tartalmazoacute faacutejl (aacuteltalaacuteban sima szoumlvegfaacutejl legfoumlljebb asm kiterjeszteacutest szokaacutes neki adni) lefordiacutetaacutesa utaacuten egy LST eacutes egy HEX kiterjeszteacutesű faacutejl generaacuteloacutedik Az LST faacutejlban (ez is egyszerű szoumlvegfaacutejl) taacutejeacutekozoacutedhatunk a fordiacutetoacute aacuteltal talaacutelt hibaacutekroacutel eacutes a memoacuteriaciacutemek hozzaacuterendeleacuteseacuteről Aacuteltalaacutenossaacutegban elmondhatoacute hogy az LST faacutejlba toumlbbnyire csak akkor kukkantunk bele ha a fordiacutetoacute hibaacuteba uumltkoumlzoumltt

A HEX kiterjeszteacutesű faacutejl az amit le kell toumlltenuumlnk a mikrovezeacuterlőre hogy ott futtatni tudjuk Ehhez megfelelő letoumlltőprogramra van szuumlkseacuteguumlnk Az Analog Devices honlapjaacuteroacutel (wwwanalogcom) ez az alkalmazaacutes szabadon letoumllthető a faacutejl neve wsd_setup_v705 az alkalmazaacuteseacute pedig Windows Serial Dowloader Első letoumllteacutes előtt a legfontosabb dolgunk az hogy a Configuration menuumlpontnaacutel beaacutelliacutetsuk a mikrovezeacuterlő aacuteltal lefoglalt Com Port szaacutemaacutet Ezt a Windows VezeacuterlőpultrarrRendszerrarrHardverrarrEszkoumlzkezelőrarrPortok (COM eacutes LPT) helyen talaacuteljuk Az alkalmazaacutes feluumlleteacutet az alaacutebbi aacutebra mutatja

32 aacutebra - Az Analog Devices soros porti letoumlltőprogramjaacutenak feluumllete

Created by XMLmind XSL-FO Converter

Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr

A keacutesőbbiekben a soros porti kommunikaacutecioacute lefolytataacutesaacutehoz eacutes a mikrovezeacuterlőről a PC-re eacuterkező uumlzenetek megjeleniacuteteacuteseacutehez szuumlkseacuteguumlnk lesz arra alkalmas szoftverre Az Interneten sok ilyen alkalmazaacutes eleacuterhető A szerző a Hercules nevű freeware alkalmazaacutest hasznaacutelta a tankoumlnyvbe bekeruumllt kommunikaacutecioacutes peacuteldaacutekat ezzel valoacutesiacutetotta meg Ennek az alkalmazaacutesnak a feluumlleteacutet az [A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete] aacutebraacuten laacutethatjuk A Serial menuumlpontnaacutel ugyanazt a COM Portot kell beaacutelliacutetanunk mint a letoumlltőprogramnaacutel Hasznaacutelat koumlzben arra azonban nagyon figyeljuumlnk hogy ha a Hercules alkalmazaacutesban nem zaacuterjuk be a koraacutebban megnyitott soros portot akkor nem tudunk uacutejabb programot letoumllteni a mikrovezeacuterlőre a Windows Serial Downloader-rel Ez a figyelmetlenseacuteg kaacutert nem bosszuacutesaacutegot viszont annaacutel inkaacutebb tud okoznihellip

33 aacutebra - A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete

Created by XMLmind XSL-FO Converter

4 fejezet - Első programunk villogtassuk a panel LED-jeit1 feladat

Az oktataacutesi ceacutelra tervezett panelon egy LED-sor talaacutelhatoacute amely 8 darab LED-ből aacutell Villogtassuk a LED-eket 1 Hz-es frekvenciaacuteval uacutegy hogy egyszer az egyik oldali neacutegy maacutesszor a maacutesik oldali neacutegy vilaacutegiacutetson [Code01]

A feladat megoldaacutesa nagyon egyszerű lesz csak paacuter sorboacutel fog aacutellni Ennek elleneacutere neacutehaacuteny dolgot meacuteg meg kell beszeacutelnuumlnk hogy eacutertsuumlk mi mieacutert keruumll a programba A magyaraacutezatokat a koumlvetkező neacutehaacuteny alfejezetben talaacuteljuk de mindig csak annyit amennyire eacuteppen szuumlkseacuteguumlnk van

1 Portok eacutes funkcioacuteregiszterekAz ADuC 842-es mikrovezeacuterlőnek neacutegy darab nyolcbites portja van melyek nagyon sokfeacutele ceacutelra toumlbbek koumlzt IO-műveletekre hasznaacutelhatoacutek A portoknak megfelelő neacutegy baacutejt a mikrovezeacuterlő memoacuteriaacutejaacutenak egy-egy ciacutemeacuten talaacutelhatoacute Emliacutetettuumlk maacuter hogy egy-egy speciaacutelis memoacuteriarekeszt regiszternek szoktunk nevezni Na haacutet mi lenne speciaacutelisabb egy szaacutemiacutetoacutegeacutepneacutel mint az IO-portok Az ADuC 842-es mikrovezeacuterlő műkoumldeacuteseacutet konfiguraacutecioacutejaacutet a portokon kiacutevuumll meacuteg nagyon sok tovaacutebbi memoacuteriarekesz tartalma befolyaacutesolja Eacuteppen a kituumlntetett szerepuumlk miatt ezek a bizonyos memoacuteriarekeszek a speciaacutelis funkcioacutejuacute regiszterek (angolul Special Function Register roumlvidiacutetve SFR) elnevezeacutest kaptaacutek

A hallgatoacutei panelon a 2 port felel a LED-ek műkoumldeacuteseacuteeacutert Ennek a portnak A0h a ciacuteme de hogy az ilyesfeacutele ciacutemeket ne kelljen fejben tartani programozaacutesnaacutel az assemblerben ehhez kuumlloumln szimboacutelumot rendeltek P2 Ismerve ezt a szimboacutelumot soha toumlbbet nem kell a konkreacutet ciacutemmel foglalkoznunk

A P2 SFR bitjei egy-egy LED-nek felelnek meg Tudnunk kell hogy az ADuC mikrovezeacuterlő portjai aacuteltalaacuteban nem hasznaacutelhatoacutek aktiacutev kimenetkeacutent ha meacutegis akkor is csak paacuter tized mA aacuteram leadaacutesaacutera keacutepesek kuumlloumlnben fuumlstjelenseacutegek leacutepnek foumll Iacutegy aztaacuten talaacuten nem meglepő hogy a P2-re koumltoumltt LED-ek fordiacutetott logikaacuteval fognak műkoumldni azaz akkor vilaacutegiacutetanak ha a nekik megfelelő bit eacuterteacuteke 0 Ha ez a bit 1 akkor a LED nem vilaacutegiacutet Ennek tudataacuteban az olvasoacute biztos lehet abban hogy a LED-ek katoacutedja neacutez a port laacutebai feleacute Azt is mondhatjuk hogy a P2 port laacutebaival a LED-ek katoacutedjait foumlldre huacutezzuk iacutegy tud folyni az aacuteram

Ha az első 4 LED-et akarjuk bekapcsolni akkor ezt kell tennuumlnk

MOV P211110000b

Ha az maacutesik 4 LED-et akkor ezt

MOV P200001111b

2 Egyszerű ciklusszervezeacutesA programozaacutes egyik legfontosabb eleme a ciklusszervezeacutes Mire joacute egy ciklus Talaacuteloacute lehet az a definiacutecioacute hogy egy ciklussal valamely programreacuteszt bizonyos felteacuteteleknek megfelelő moacutedon toumlbbszoumlr veacutegrehajtunk Ezt a bizonyos programreacuteszt ciklusmagnak szoktaacutek nevezni A ciklusokhoz toumlbbnyire szuumlkseacuteg van egy olyan memoacuteriarekeszre vagy regiszterre melynek eacuterteacuteke meghataacuterozza hogy haacutenyszor hajtoacutedik veacutegre a ciklusmag Ezt a memoacuteriarekeszt vagy regisztert ciklusvaacuteltozoacutenak is nevezhetjuumlk Ciklusokat szervezni mind magas szintű programozaacutesi nyelvekben mind assemblyben toumlbbfeacutelekeacuteppen lehetseacuteges A legegyszerűbb eset talaacuten az amikor a ciklusmagot előre definiaacutelt moacutedon n-szer hajtjuk veacutegre Ezt az n-t adjuk meg magaacuteban a programkoacutedban iacutegy az semmilyen kuumllső vagy belső felteacuteteltől nem fuumlgg

Az ADuC utasiacutetaacutesai koumlzoumltt van egy olyan amelyet remekuumll felhasznaacutelhatunk a fenti kiacutevaacutenalmak szerint Ez a DJNZ utasiacutetaacutes A mnemonik az angol Decrement and Jump if Not Zero (csoumlkkent eacutes ugrik ha nem nulla) kifejezeacutesből szaacutermazik Ennek az utasiacutetaacutesnak keacutet variaacutensa van az egyik szintaxisa a koumlvetkező

DJNZ Rnrel

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

Az Rn azt jelenti hogy ehhez az utasiacutetaacuteshoz baacutermelyik R regisztert hasznaacutelhatjuk Ez az utasiacutetaacutes felteacuteteles elaacutegazaacutest azaz felteacutetelhez koumltoumltt ugraacutest valoacutesiacutet meg A felteacutetel jelen esetben az hogy az Rn regiszter ne legyen egyenlő 0-val Ha a regiszter tartalma meacutegis 0 akkor a program szeacutepen csorog tovaacutebb Ha nem 0 akkor viszont ugraacutes toumlrteacutenik Azt hogy hovaacute ugrik a program vezeacuterleacutese a rel eacuterteacutek mutatja meg Nagyon leacutenyeges hogy ide ne akaacutermilyen memoacuteriaciacutemet keacutepzeljuumlnk Lesz utasiacutetaacutes arra is amelyikkel baacutermekkoraacutet lehet ugratni de itt most maacutesroacutel van szoacute relatiacutev ugraacutes toumlrteacutenik Azeacutert relatiacutev ugraacutes mert ahhoz a memoacuteriaciacutemhez keacutepest ugrik előre vagy haacutetra a program vezeacuterleacutese amelyiken a DJNZ utasiacutetaacutes talaacutelhatoacute Fontos megjegyeznuumlnk hogy baacutermely ilyesfeacutele relatiacutev ugraacutes előrefeleacute 127 baacutejtot visszafeleacute pedig 128 baacutejtot nem leacutephet tuacutel Kezdő programozoacutek sokszor meglepődnek azon (aztaacuten moacutedosult tudataacutellapotba keruumllnek eacutes oumlkoumllcsapaacutesokkal buumlntetik a billentyűzetet pedig az semmiről nem tehet) hogy a laacutetszoacutelag teljesen joacute programkoacutedjukra hibaacutet jelez a fordiacutetoacute Ez sokszor azeacutert van mert relatiacutev ugraacutessal tuacutelleacutepik a 127 ill 128 baacutejtot Ennek kiveacutedeacuteseacutet a keacutesőbbiekben szintuacutegy megtanuljuk

Az assemblyben iacutert koacutedban az ugraacutesok helyeacutenek megjeloumlleacuteseacutere ciacutemkeacuteket hasznaacutelunk Az alkalmazott assemblerben a ciacutemkeacutek eacutekezetes betűket nem tartalmazhatnak eacutes kettősponttal veacutegződnek Vegyuumlk peacuteldaacutenak a koumlvetkező nyuacutelfarknyi koacutedot

MOV R725

label

[ciklusmag]

DJNZ R7label

A fenti koacutedocska a [ciklusmag]-nak nevezett reacuteszt pontosan 25-szoumlr hajtja veacutegre Keacutepzeljuumlk el ugyanis hogy R7 tartalma maacuter csak 1 Ha lefut a ciklusmag akkor a DJNZ utasiacutetaacutes R7 tartalmaacutet 1-gyel csoumlkkenti azaz 1-ről 0-ra majd oumlsszehasonliacutetja azt 0-val Mivel egyezeacutes van ezeacutert maacuter nem toumlrteacutenik ugraacutes a label ciacutemkeacutere (ugraacutes akkor toumlrteacutenik amikor a vizsgaacutelt regiszter tartalma elteacuter 0-toacutel) hanem csorog tovaacutebb a program R7 tartalma ekkor garantaacuteltan 0

A ciklusokat termeacuteszetesen egymaacutesba is aacutegyazhatjuk Eacuteppen uacutegy ahogy a nagyobb hal megeszi a kisebb halat vagy halakat Olyan nincs hogy a halak szaacuteja oumlsszeakad eacutes egyik se tudja megenni a maacutesikat Ciklusok egymaacutesba aacutegyazaacutesaacutera hamarosan laacutetunk peacuteldaacutet

3 SzubrutinokTeacutetelezzuumlk foumll hogy a programunk valamely reacuteszeacutet sokszor (neacutehaacutenyszor igen sokszor ki tudja haacutenyszor stb) akarjuk veacutegrehajtani Ilyenkor nem ceacutelszerű ezt a reacuteszt favaacutegoacute moacutedon sokszor (neacutehaacutenyszor igen sokszor ki tudja haacutenyszor stb) beleiacuterni a programba mert van erre egy uumlgyes megoldaacutes Ezt az uumlgyes megoldaacutest szubrutinnak hiacutevjaacutek A program baacutermely helyeacuteről hiacutevhatunk szubrutinokat Ilyenkor az a memoacuteriaciacutem ahol a program vezeacuterleacutese tartott elmentődik egy meghataacuterozott memoacuteriateruumlletre (ezt hiacutevjaacutek veremnek erről bővebben keacutesőbb) majd a vezeacuterleacutes a szubrutinhoz ugrik Azt a keacutetbaacutejtos regisztert amelyben az aktuaacutelisan veacutegrehajtandoacute utasiacutetaacutes ciacuteme talaacutelhatoacute programszaacutemlaacuteloacutenak hiacutevjuk (angolul Program Counter) A szubrutin veacutegeacutet speciaacutelis utasiacutetaacutessal kell jeleznuumlnk Ha ezt elfelejtjuumlk akkor a vezeacuterleacutes nem ugrik vissza az eredeti helyre hanem a program fut tovaacutebb eacutes aacuteltalaacuteban anomaacutelis műkoumldeacutesbe kezd vagy joacutel lefagyhellip Ha ellenben a helyeacutere iacuterjuk a szubrutint lezaacuteroacute utasiacutetaacutest akkor a verembe keruumllt ciacutem visszatoumlltődik a programszaacutemlaacuteloacuteba eacutes a program futaacutesa a szubrutint megiacutevoacute utasiacutetaacutes utaacuteni ponttoacutel folytatoacutedik Szubrutin hiacutevaacutesaacutenak utasiacutetaacutesa

CALL subroutine

A mnemonik toumlrteacutenetesen teljes egeacuteszeacuteben az angol Call szoacute ami hiacutevaacutest jelent Ha valaki belekukkant az 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacutebe akkor nem is talaacutelja meg a CALL utasiacutetaacutest Talaacutel viszont keacutet maacutesikat ACALL (Absolute Call within 2K block) eacutes LCALL (Long Call) A helyzet az hogy az ACALL utasiacutetaacutessal olyan szubrutint hiacutevhatunk melynek kezdőciacuteme ugyanabban a 2 kilobaacutejtos memoacuteriablokkban van mint a hiacutevoacute utasiacutetaacutes Az LCALL utasiacutetaacutesnaacutel maacuter nincsen semmi ilyesfeacutele megkoumlteacutes Ennek a furcsasaacutegnak az eacutertelme az hogy az ACALL utasiacutetaacutes gyorsabban veacutegrehajtoacutedik eacutes raacuteadaacutesul geacutepi koacutedkeacutent egy baacutejttal kevesebb helyet foglal a memoacuteriaacuteban Ennek akkor van szerepe amikor olyan nagy programot iacuterunk hogy maacuter nagyon oda kell figyelni arra hogy azt bele tudjuk passziacuterozni a memoacuteriaacuteba esetleg eacuteppen azeacutert mert a memoacuteria meacuterete csak neacutehaacutenyszor 2 kilobaacutejt Azonban ha szerencseacutenk van olyan assemblerrel dolgozhatunk amelyik a ciacutemkeacutek elhelyezkedeacutese alapjaacuten uacutegyis eldoumlnti hogy melyiket jobb hasznaacutelni (mondjuk meacuteretre optimalizaacutel) iacutegy nyugodtan hasznaacutelhatjuk simaacuten csak a CALL-t

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

A szubrutinboacutel toumlrteacutenő visszateacutereacutes utasiacutetaacutesa a RET A mnemonik az angol Return from Subroutine (visszateacutereacutes a szubrutinboacutel) kifejezeacutesből szaacutermazik Peacutelda szubrutin hiacutevaacutesaacutera

MOV R725

label

CALL subroutineDJNZ R7label

subroutine

[szubrutin tartalma]

RET

Ez a kis peacuteldaprogramocska eacuteppen uacutegy tartalmaz egy a ciklust mint az előző fejezet peacuteldaacuteja Itt azonban a ciklusmag semmi egyebet nem csinaacutel mint meghiacutev egy szubrutint A ciklusvaacuteltozoacute gyanaacutent felhasznaacutelt R7 regiszter kezdeti eacuterteacuteke alapjaacuten tudhatjuk hogy a szubrutint a ciklus pontosan 25-szoumlr hiacutevja meg Aztaacuten hogy a szubrutin mit tartalmaz az maacuter a programozoacute dolgahellip

4 Ugraacutes a koacutedon beluumllAki eddig magas szintű strukturaacutelt programozaacutest tanult az nagyon joacutel tudja hogy ott hivatalboacutel utaacutelni kellett a koumlzvetlen ugraacutest megvaloacutesiacutetoacute utasiacutetaacutest Nem iacutegy az assemblyben Koumlzvetlen ugraacutesok vagy egyaacuteltalaacuten ugraacutesok neacutelkuumll valamire valoacute assembly koacuted elkeacutepzelhetetlen Ebbe jobb ha beletoumlrőduumlnk A koumlzvetlen ugraacutes utasiacutetaacutesaacutenak a mnemonikja a JMP amely az angol Jump (ugrik) szoacuteboacutel szaacutermazik Az utasiacutetaacutes egyik verzioacuteja utaacuten adott memoacuteriaciacutemet kell megadnunk amelyet termeacuteszetesen ciacutemkeacutevel is reprezentaacutelhatunk

JMP address

Erre az utasiacutetaacutesra ugyanaz az eacuterdekesseacuteg eacuterveacutenyes mint a CALL utasiacutetaacutesra Ezt sem talaacuteljuk meg a 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben Talaacutelunk viszont haacuterom maacutesikat AJMP (Absolute Jump within 2K block abszoluacutet ugraacutes 2K-os blokkon beluumll) LJMP (Long Jump taacutevoli ugraacutes) eacutes SJMP (Short Jump koumlzeli ugraacutes) Az AJMP 2 kilobaacutejtos blokkon beluumlli ugraacutest tud megvaloacutesiacutetani Az LJMP-ra ilyen megkoumlteacutes maacuter nem vonatkozik Az SJMP utasiacutetaacutes relatiacutev ugraacutest valoacutesiacutet meg Ez azt jelenti hogy ez is csak 128 baacutejtnyi taacutevolsaacutegot jelenthet visszafeleacute eacutes 127 baacutejtnyit előre Az utasiacutetaacutesok koumlzoumltt most is a hossz eacutes a veacutegrehajtaacutesi idő a kuumlloumlnbseacuteg Eacutes ha szerencseacutenk van az assembler a ciacutemkeacutek alapjaacuten uacutegyis meghataacuterozza melyik lesz az optimaacutelis amikor simaacuten csak JMP-ot iacuterunk

5 Oacuterajel veacutegrehajtaacutesi időA logikai aacuteramkoumlroumlkből alkotott haacuteloacutezatok a legtoumlbb esetben oacuterajellel műkoumldnek Ezeket hiacutevjuk szekvenciaacutelis haacuteloacutezatoknak A mikroprocesszorok szinteacuten oacuterajelet igeacutenyelnek műkoumldeacutesi sebesseacuteguumlket eacuteppen az oacuterajel frekvenciaacutejaacuteval szokaacutes megadni Az ADuC 842-es oacuterajele maximaacutelisan 16 777 216 Hz Bekapcsolaacuteskor azonban az oacuterajel nem ekkora hanem csak 2 097 152 Hz Ez az uacuten default oacuterajel Az ADuC oacuterajele megfelelő SFR-rel futaacutes koumlzben vaacuteltoztathatoacute (PLLCON SFR) Erre azonban kezdő szinten nem lesz szuumlkseacuteguumlnk

A geacutepi koacuteduacute utasiacutetaacutesok mindegyikeacutenek veacutegrehajtaacutesa egeacutesz szaacutemuacute oacuterajelciklust igeacutenyel Vannak 1 2 3 4 eacutes 9 oacuterajelciklust foumllemeacutesztő utasiacutetaacutesok Azzal hogy egy utasiacutetaacutes haacuteny oacuterajelciklus alatt hajtoacutedik veacutegre aacuteltalaacuteban nem kell toumlrődnuumlnk Egyszer azonban szaacutemoljuk ki hogy mennyi ideig tart egy roumlvidke koacuted peacuteldaacuteul az alaacutebbiak veacutegrehajtaacutesa Előtte azonban meacuteg megtanuljuk hogy a NOP utasiacutetaacutes ami az angol No Operation (nincs művelet) kifejezeacutesből szaacutermazik pontosan azt csinaacutelja hogy semmit sem csinaacutel Eacutes ehhez kemeacuteny 1 oacuterajelciklust emeacuteszt foumll

MOV R7100cik7MOV R622cik6MOV R5237cik5

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET

Az egyes utasiacutetaacutesok veacutegrehajtaacutesaacutenak ciklusszaacutemai a koumlvetkezők

MOV Rndata - 2NOP - 1DJNZ Rnrel ndash 3RET - 4

Ezek alapjaacuten a fenti program oumlsszesen oacuterajelciklust igeacutenyel A szaacutemiacutetaacutes aacutetgondolaacutesa nem neheacutez de inkaacutebb segiacutetuumlnk egy kicsit A legbelső zaacuteroacutejelben az aacutell hogy Ez a NOP utasiacutetaacutes eacutes a koumlzvetlenuumll utaacutena aacutelloacute DJNZ R5cik5 aacuteltal igeacutenyelt oacuterajelciklus A legbelső ciklus melynek R5 a ciklusvaacuteltozoacuteja a kezdeti eacuterteacutek szerint pontosan 237-szer hajtoacutedik veacutegre Innen joumln a 237-es szorzoacute Ahaacutenyszor veacutegrehajtoacutedik ez a ciklus annyiszor kell kieacuterteacutekelni a ciklusvaacuteltozoacutera eacuterveacutenyes kileacutepeacutesi felteacutetelt csakuacutegy mint az oumlsszes toumlbbi ciklusnaacutel Maga a kezdeti eacuterteacutek megadaacutesa R5-nek 2 oacuterajelciklust

igeacutenyel Emiatt szerepel a 2-es az előtt A legbelső ciklus be van aacutegyazva egy kijjebb leacutevő ciklusba ami 22-szer hajtoacutedik veacutegre eacutes aminek ciklusvaacuteltozoacuteja R6 Csakhogy R6 eacuterteacutekeacutenek kieacuterteacutekeleacutese azaz a

koumlvetkező DJNZ utasiacutetaacutes is mindig 3 oacuterajelciklust igeacutenyel Ebből szaacutermazik a 3-as szaacutem az utaacuten Ez előtt a 2-es szaacutem R6 kezdeti eacuterteacutekeacutenek megadaacutesaacutet jelenti Ez a kieacuterteacutekeleacutesekre vonatkozoacute fenti magyaraacutezat szerint meacuteg nyilvaacuten a 22-es szorzoacuten beluumll van Eacutes iacutegy tovaacutebb a teljes kifejezeacutes veacutegeacuteig Az utolsoacute 4-es a szubrutinboacutel valoacute visszateacutereacutes utasiacutetaacutesaacutenak a RET-nek a veacutegrehajtaacutesi ideje A default oacuterajel-frekvenciaacuteval azaz 2 097 152 Hz-cel szaacutemolva 2 097 106 oacuterajelciklus lefutaacutesi ideje 0999 978 maacutesodperc Iacutegy ezzel a kis szubrutinnal nagyjaacuteboacutel 1 maacutesodperces időkeacuteslelteteacutest valoacutesiacutethatunk meg a neacutelkuumll hogy ismerneacutenk az ADuC időziacutetőfunkcioacuteit A keacutesőbbiekben termeacuteszetesen azok koumlzuumll is toumlbbet kiveseacutezuumlnk

6 Az első alkalmazaacutes koacutedjaAz [1 feladat] megoldaacutesaacutehoz immaacuteron mindent tudunk maacuter csak az assemblerrel kapcsolatban kell neacutehaacuteny dolgot tisztaacuteznunk Ezt uacutegy fogjuk tenni hogy előszoumlr veacutegre megneacutezzuumlk magaacutet a koacutedot aztaacuten hozzaacutefűzzuumlk a magyaraacutezatot Az [1 feladat] megoldaacutesaacutet jelentő koacuted a koumlvetkező

Code01asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelataCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a program- vezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacutenORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacutedMAINMOV P211110000b Bekapcsoljuk az alsoacute 4 LED-etCALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintMOV P200001111b Bekapcsoljuk a felső 4 LED-etCALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintJMP MAIN Visszaugratjuk az elejeacutere a programot Tulajdonkeacuteppen veacutegtelen ciklust hozunk leacutetreDELAY Időhuacutezoacute szubrutinMOV R750 05 sec keacuteslelteteacutescik7MOV R622cik6MOV R5237cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

END

A magyaraacutezatok elkezdeacutese előtt felhiacutevjuk a figyelmet arra amit talaacuten az olvasoacute is kitalaacutelt maacuter a koacutedba szuacutert megjegyzeacutesek pontosvesszővel kezdődnek

A koacuted maacutesodik sora eddig ismeretlen teacutetelt tartalmaz $MOD842 Ez a fordiacutetoacutei direktiacuteva arra utasiacutetja az assemblert hogy az ADuC 842-es architektuacuteraacutehoz tartozoacute szimboacutelumlistaacutet hasznaacutelja Ebben a faacutejlban ugyanis joacutel eacuterthető szimboacutelumokat rendeltek a kituumlntetett memoacuteriaciacutemekhez regiszterekhez eacutes speciaacutelis funkcioacutejuacute regiszterekhez Ha maacuter kellő jaacutertassaacutegot szerzett az olvasoacute a teacutemaacuteban eacuterdemes egyszer belekukkantania ebbe a faacutejlba Az elektronikus tankoumlnyvben a tovaacutebbiakban a helytakareacutekossaacuteg veacutegett ezt a direktiacutevaacutet nem tuumlntetjuumlk foumll de jegyezzuumlk meg hogy minden lefordiacutetandoacute koacutednak ezzel kell kezdődnie amennyiben a 842-es architektuacuteraacutet hasznaacuteljuk

A maacutesodik uacutejdonsaacuteg a CSEG direktiacuteva Ezzel jelezzuumlk a fordiacutetoacuteak hogy innentől kezdődik a programkoacuted A koacutedszegmens az END direktiacutevaacuteval zaacuterul Ezekre a direktiacutevaacutekra ugyanaz lesz eacuterveacutenyes a tankoumlnyvben mint a $MOD842-ra

A harmadik uacutejdonsaacuteg az ORG direktiacuteva Ezzel jelezzuumlk az assemblernek hogy mely memoacuteriaciacutemre keruumlljoumln a lefordiacutetott koacuted Ennek fontos szerepe lesz a programok elhelyezeacuteseacuteneacutel Tudnunk kell ugyanis hogy amikor a mikrovezeacuterlő elindul vagy reset toumlrteacutenik akkor a programvezeacuterleacutes a 0000h ciacutemre ugrik Szokjunk hozzaacute ahhoz hogy innen azonnal elugratjuk a programot egy haacutetreacutebb talaacutelhatoacute ciacutemre ugyanis a keacutesőbb taacutergyalandoacute megszakiacutetaacutesok vektorai szeacutepen sorban a koacutedmemoacuteria elejeacuten helyezkednek el Ha semmifeacutele megszakiacutetaacutest sem hasznaacutelunk erre az elugrataacutesra nincs szuumlkseacuteg de jobb ha az oumlsszes koacutedunkat uacutegy iacuterjuk hogy annak eacuterdemi reacutesze kicsit haacutetreacutebb kezdődik mint 0000h Elmondhatjuk hogy a 0060h ciacutemtől kezdődően maacuter semmi veszeacutely nem leselkedik raacutenk a program szervezeacuteseacutenek szempontjaacuteboacutel iacutegy ezt a ciacutemet baacutetran vaacutelaszthatjuk a program eacuterdemi reacutesze kezdeteacutenek

A koacutedban az ORG 0000h sor utaacuten az aacutell hogy JMP MAIN A MAIN itt egy ciacutemke eacutes ide fog ugrani a program indulaacutes vagy reset utaacuten Most maacuter az is eacuterthető hogy mieacutert előzi meg a MAIN ciacutemkeacutet az ORG 0060h direktiacuteva eacutes eacuterteacutek ezen a ciacutemen kezdődik a program eacuterdemi reacutesze

A koacuted maga annyira egyszerű hogy foumlloumlsleges blokkdiagramban megadni az algoritmust A leiacuteraacutes roumlviden bekapcsoljuk az alsoacute 4 LED-et (a toumlbbit kikapcsoljuk) vaacuterakozunk feacutel maacutesodpercet bekapcsoljuk a felső 4 LED-et (a toumlbbit kikapcsoljuk) vaacuterakozunk feacutel maacutesodpercet aztaacuten kezdjuumlk eloumllről az egeacuteszet Az időhuacutezaacutest szubrutin veacutegzi uacutegy ahogyan azt a [Szubrutinok] eacutes [Oacuterajel veacutegrehajtaacutesi idő] alfejezetekben megtaacutergyaltuk

Itt eacutes most szeretneacutenk leszoumlgezni hogy a tovaacutebbiakban az elektronikus tankoumlnyvben szereplő koacutedokba magukba csak annyi kommentet iacuterunk amennyi okvetlenuumll szuumlkseacuteges Ez főkeacutent az uacutejdonsaacutegokat eacutes a főbb egyseacutegeket eacuterinti Az elektronikus tankoumlnyvhoumlz azonban koacutedtaacuter is tartozik amely az azonnal lefordiacutethatoacute ellenőrzoumltt keacutesz koacutedokat tartalmazza Ezeket a koacutedokat minden esetben eleacuteg nagy reacuteszletesseacuteggel kikommentezzuumlk hogy akkor is eacuterthető legyen ha majd a tankoumlnyvben leiacutertak megtanulaacutesa utaacuten mondjuk egy eacutevvel nyuacutelunk vissza valamelyik alkalmazaacuteshoz A koacutedtaacuter nem csak a koacutedokat tartalmazza hanem oumlsszetettebb alkalmazaacutesoknaacutel aacuteramkoumlri rajzokat feacutenykeacutepeket eacutes sok esetben meacuteg roumlvid videofelveacutetelt is

Created by XMLmind XSL-FO Converter

5 fejezet - Csiacutek a LED-ekenMi a legnagyobb kuumlloumlnbseacuteg az ADuC mikrovezeacuterlőnk eacutes egy heacutetkoumlznapi szaacutemiacutetoacutegeacutepes munkaaacutellomaacutes koumlzoumltt Az egyik az hogy a mikrovezeacuterlőn gyaacuterilag semmifeacutele operaacutecioacutes rendszer nem talaacutelhatoacute (Ez persze nem azt jelenti hogy nem is lehet raacute keacutesziacuteteni) A maacutesik leacutenyeges kuumlloumlnbseacuteg pedig a [Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr] fejezet alapjaacuten talaacuten maacuter nyilvaacutenvaloacutevaacute vaacutelt semmifeacutele monitor nem csatlakozik a panelhoz A jelenlegi szintuumlnkoumln a 8 LED-ből aacutelloacute sor az egyetlen visszajelzeacutesi lehetőseacuteguumlnk azonban meglepően sokatmondoacute lehet meacuteg ez is pedig mindoumlsszesen egyetlen baacutejt kijelzeacuteseacutere alkalmas

A LED-sort termeacuteszetesen sokfeacutele funkcioacutehoz tudjuk munkaacutera fogni kuumlloumlnfeacutele mintaacutezatokat jeleniacutethetuumlnk meg rajta Ennek meacuteg a mechatronikai alkalmazaacutesok szempontjaacuteboacutel nem sok haszna lesz viszont joacutekat fogunk szoacuterakozni tovaacutebbaacute rengeteget tanulunk vele aminek maacuter majd igen A bevezető utaacuten tekintsuumlk a koumlvetkező feladatot

2 feladat

Jeleniacutetsuumlnk meg a LED-soron egy egyre hosszabb csiacutekot amely noumlvekedeacutes koumlzben minden faacutezisnaacutel vaacuterakozik egy keveset teliacutetődeacutes utaacuten pedig uacutejraindul [Code02]

Kuumlloumlnfeacutele mintaacutezatoknak a LED-soron valoacute előaacutelliacutetaacutesaacutehoz keacutet moacutedszert alkalmazhatunk Az egyik az hogy a koacutedmemoacuteriaacuteban előre roumlgziacutetett bitmintaacutekat taacuterolunk majd kiolvassuk azokat Ezt a keacutesőbbiekben meg is tanuljuk A maacutesik moacutedszer az hogy aritmetikai truumlkkoumlkkel a program futaacutesa koumlzben aacutelliacutetjuk elő a mintaacutezatot Oldjuk meg a [2 feladat]ot most ilyen moacutedon

1 Bitek sorszaacutemozaacutesaA szaacutemiacutetaacutestechnikaacuteban heacutetkoumlznapi fogalmainkkal ellenteacutetben az objektumok szaacutemozaacutesaacutet nem 1-gyel kezdjuumlk hanem toumlbbnyire 0-val Ha egy baacutejt bitjeiről van szoacute akkor azok sorszaacutemozaacutesa szintuacutegy 0-val kezdődik iacutegy termeacuteszetes kifejezeacutes lesz az hogy nulladik bit Egy baacutejt bitjeinek helyieacuterteacutekeacutet decimaacutelis eacuterteacutekeacutet eacutes sorszaacutemaacutet a [Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll] mutatja

51 taacuteblaacutezat - Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll

Bit sorszaacutema Hatvaacuteny Decimaacutelis eacuterteacutek

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 eacutes aritmetikai utasiacutetaacutesok

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

A [2 feladat] megoldaacutesaacutehoz szuumlkseacuteguumlnk lesz arra az utasiacutetaacutesra amelyik a logikai negaacuteltjaacutet vagy maacutes szoacuteval komplementereacutet megint maacutes szoacuteval inverzeacutet keacutepezi az akkumulaacutetornak

CPL A

A mnemonik az angol Complement Register (regiszter komplementere) kifejezeacutesből szaacutermazik Ha az akkumulaacutetor tartalma peacuteldaacuteul 10001101 akkor a CPL A utasiacutetaacutes kiadaacutesa utaacuten az akkumulaacutetor tartalma 01110010 lesz vagyis csakugyan az eredeti tartalmaacutenak logikai negaacuteltja vagy komplementere esetleg inverze

A koumlvetkező utasiacutetaacutes amelyre szuumlkseacuteguumlnk lesz az aacutetvitel neacutelkuumlli oumlsszeadaacutes utasiacutetaacutesa ADD A mnemonik az angol Add Accumulator (hozzaacutead az akkumulaacutetorhoz) kifejezeacutesből szaacutermazik Ennek az utasiacutetaacutesnak ahogy azt maacuter a MOV utasiacutetaacutesnaacutel megiacutezlelhettuumlk toumlbb verzioacuteja van mi most haacuterommal ismerkeduumlnk meg Az utasiacutetaacutesok ciacutemzeacutesmoacutedja az elektronikus tankoumlnyvben eddig elmondottak alapjaacuten vilaacutegos kell hogy legyen

ADD ARn ADD Adirect ADD Adata

Mindhaacuterom esetben az akkumulaacutetor tartalmaacutehoz adjuk vagy valamelyik R regiszter tartalmaacutet vagy egy adott memoacuteriarekesz tartalmaacutet vagy a koumlzvetlenuumll megadott eacuterteacuteket Aacutetvitel neacutelkuumll Az aacutetvitelt is figyelembe vevő oumlsszeadaacutesroacutel keacutesőbb szoacutelunk

Ismerkedjuumlnk meg meacuteg keacutet utasiacutetaacutessal melyek igen nagy segiacutetseacuteguumlnkre lehetnek ha aritmetikai műveletekkel eacutes truumlkkoumlkkel szeretneacutenk adott bitmintaacutezatot mint eacuterteacuteket előaacutelliacutetani az akkumulaacutetorban Ez a keacutet utasiacutetaacutes a bitforgataacutes műveletet hajtja veacutegre az akkumulaacutetoron Az egyik balra forgat

RL A

A maacutesik jobbra forgat

RR A

A mnemonikok az angol Rotate Accumulator Left (akkumulaacutetor forgataacutesa balra) eacutes Rotate Accumulator Right (akkumulaacutetor forgataacutesa jobbra) kifejezeacutesekből szaacutermaznak A forgataacutes azt jelenti hogy az akkumulaacutetor tartalma egy bittel balrajobbra csuacuteszik a szeacuteleacuten kileacutepő bit pedig visszakeruumll a meguumlruumllt helyre a maacutesik oldalon Peacuteldaacuteul legyen az akkumulaacutetor tartalma 00001111 RL A utaacuten az akkumulaacutetor tartalma 00011110 RL R utaacuten pedig 10000111 lesz A [Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire] aacutebraacuten rajzos magyaraacutezattal szemleacuteltetjuumlk a bitforgatoacute utasiacutetaacutesok műkoumldeacuteseacutet Ezekkel az utasiacutetaacutesokkal sok huncutsaacutegot meg tudunk valoacutesiacutetani ahogy azt majd hamarosan laacutetni fogjuk

51 aacutebra - Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire

3 Parameacuteteraacutetadaacutes szubrutinnakAki valamely magas szintű programozaacutesi nyelvvel kezdett az nagyon joacutel tudja hogy parameacutetert aacutetadni valamely fuumlggveacutenynek vagy eljaacuteraacutesnak meglehetősen koumlnnyű Aki meacuteg nem tudja mit jelent ez keacutepzelje el azt a szituaacutecioacutet hogy a [Oacuterajel veacutegrehajtaacutesi idő] eacutes [Az első alkalmazaacutes koacutedja] alfejezetben bemutatott időhuacutezoacute szubrutint nem aacutellandoacutesult 05 vagy eacuteppen 1 maacutesodperces időhuacutezaacutesra akarjuk hasznaacutelni hanem rugalmasan aacuteltalunk tetszeacutes szerint megadott eacuterteacutekkel Assemblyben uacutegy megy ez hogy a szubrutinnak tudnia kell hogy a műkoumldeacuteseacutehez szuumlkseacuteges eacuterteacuteket honnan veszi (mely regiszterből vagy memoacuteriaciacutemről) a szubrutin meghiacutevaacutesa előtt viszont a szuumlkseacuteges eacuterteacuteket be kell toumllteni a keacuterdeacuteses regiszterbe majd ez utaacuten meghiacutevni a szubrutint Doumlntsuumlnk most uacutegy hogy a parameacuteteraacutetadaacutesra hasznaacutelt regiszter az akkumulaacutetor legyen Ezek utaacuten moacutedosiacutetsuk a [Az első alkalmazaacutes koacutedja] alfejezetben bemutatott szubrutint a koumlvetkező moacutedon

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

DELAYMOV R7Acik7MOV R622cik6MOV R5237cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET

Ezzel azt eacuterjuumlk el hogy a szubrutin a meghiacutevaacutesakor az akkumulaacutetorboacutel toumllti be a szuumlkseacuteges eacuterteacuteket az R7 regiszterbe Ez az eacuterteacutek az egybaacutejtos adatterjedelemnek megfelelően 0 eacutes 255 koumlzoumltt lehet A rutin műkoumldeacutese alapjaacuten ha 0-t adjunk neki az olyan lenne mintha 256-toacutel szaacutemlaacutelnaacutenk vissza Hiszen amikor a DJNZ a 0-t eggyel csoumlkkenti akkor az eacuterteacutek visszafeleacute aacutetfordul 255-re

A szubrutin meghiacutevaacutesa mondjuk 06 maacutesodperces vaacuterakozaacuteshoz iacutegy toumlrteacutenik

MOV A60CALL DELAY

Ha a szubrutinnak kell parameacutetert aacutetadnia a főprogramnak az assemblyben hasonloacutean toumlrteacutenik mint fordiacutetva a szubrutinnak valamely memoacuteriarekeszekbe vagy regiszterekbe kell iacuternia az aacutetadni kiacutevaacutent parameacutetereket a főprogramnak viszont tudnia kell hol keresse azokat A leacutenyeg az hogy bonyolultabb programoknaacutel a szubrutinok ne iacuterjaacutek foumlluumll egymaacutes parameacuteteraacutetadaacutesi adatteruumlleteit Erre nagyon figyelni kell assemblyben

4 A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkelAhhoz hogy a csiacutek egyes faacutezisait elő tudjuk aacutelliacutetani a maacuter ismert ill a [ Logikai eacutes aritmetikai utasiacutetaacutesok] alfejezetekben bemutatott utasiacutetaacutesokkal mindenekelőtt tisztaacutezzuk mire van szuumlkseacuteguumlnk Ha egy noumlvekvő csiacutekot szeretneacutenk a LED-ekkel kijelezni akkor a koumlvetkező bitmintaacutezatokra mint faacutezisokra lesz szuumlkseacuteguumlnk

11111111

11111110

11111100

11111000

11110000

11100000

11000000

10000000

00000000

Hogy lehet ilyen sort leacutetrehozni Erre nyilvaacuten szaacutezfeacutele megoldaacutes van de tekintsuumlk azt amikor előszoumlr is egyetlen 1-es bitet leacuteptetuumlnk sorban balra

00000001

00000010

00000100

00001000

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

00010000

00100000

01000000

10000000

Figyeljuumlk meg hogy az első listaacutenak 9 miacuteg a maacutesodiknak csak 8 tagja van Ha a maacutesodik listaacutenak az elemeit szeacutepen sorban hozzaacuteadjuk 00000000-hoz de uacutegy hogy a koumlvetkező listatagot mindig az addig megkapott eredmeacutenyhez adjuk hozzaacute akkor az egyes faacutezisok iacutegy alakulnak

00000000

00000001

00000011

00000111

00001111

00011111

00111111

01111111

11111111

Eacutes ha ennek a listaacutenak az elemeit negaacuteljuk (keacutepezzuumlk a komplementeruumlket invertaacuteljuk őket) maacuteris eleacuterkeztuumlnk a kiacutevaacutent eredmeacutenyhez

A koumlvetkező koacuted nem pofonegyszerű neacutemi ravaszkodaacutest tartalmaz A fontos parameacuteterek listaacutejaacutet eacutes eacuterteacutekeit azonban a koacuted utaacuten taacuteblaacutezatban foglaljuk oumlssze hogy koumlvetni lehessen mit toumlrteacutenik Az olvasoacutet arra biztatjuk hogy addig ne haladjon tovaacutebb amiacuteg ezt a koacutedot meg nem eacutertette A [Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten] ehhez nagy segiacutetseacuteget fog nyuacutejtani A koacutedban az R2 regiszterben azok az eacuterteacutekek aacutellnak elő amelyeket a fenti maacutesodik lista tartalmaz Az R3 regiszterben keacutepződnek azok az eacuterteacutekek amelyeket a fenti harmadik lista tartalmaz Nagyon fontos szerepet jaacutetszik a keacutet regiszter kezdeti eacuterteacuteke ill az hogy a regiszterek eacuterteacutekeacutet a LED-ek portjaacutenak vaacuteltoztataacutesa előtt vagy utaacuten manipulaacuteljuk A koacutedban a [Az első alkalmazaacutes koacutedja] alfejezetben roumlgziacutetettek szerint maacuter nem tuumlntetjuumlk foumll az aacutellandoacute fordiacutetoacutei direktiacutevaacutekat eacutes jelen esetben a [Parameacuteteraacutetadaacutes szubrutinnak] alfejezetben bemutatott parameacuteteraacutetadaacutest is teljesiacutető időhuacutezoacute DELAY szubrutint sem Iacuteme a koacuted

Code02asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a programvezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacutenORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacutedMAINMOV R30 Kezdeti eacuterteacutek R3-nak Ebben gyűlnek a csiacutek egyes faacutezisainak megfelelő eacuterteacutekek de ezt majd meacuteg negaacutelnunk kell A kezdeti eacuterteacutek 0 azaz egyetlen LED sem vilaacutegiacutetMOV R210000000b Kezdeti eacuterteacutek R2-nek Amikor ezt az eacuterteacuteket előszoumlr forgatjuk balra akkor kapjuk meg az első hasznaacutelhatoacute eacuterteacuteket azaz 00000001-t amit majd az addigi de meacuteg nem invertaacutelt eredmeacutenyhez adunkMOV R49 Kilencszer fut le ez a ciklus hiszen 9 faacutezisboacutel aacutell a csiacutekcsikMOV AR3 A-ba toumlltjuumlk R3-at azaz a csiacuteknak

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

megfelelő eacuterteacuteketCPL A Negaacuteljuk A-tMOV P2A Kitesszuumlk a LED-ek portjaacuteraMOV A10 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (01 s)MOV AR2 A-be toumlltjuumlk R2-tRL A Balra forgatjuk az eacuterteacuteketMOV R2A Visszatoumlltjuumlk R2-be R2-ben alakul ki a koumlvetkező lista 00000001 00000010 00000100 stbMOV AR3 A-ba toumlltjuumlk R3-at azaz a csiacutek aktuaacutelis faacutezisaacutetADD AR2 Hozzaacuteadjuk a balra leacuteptetett bitet Iacutegy alakul ki a koumlvetkező lista 00000001 00000011 00000111 stbMOV R3A Visszaiacuterjuk R3-ba a csiacutek koumlvetkező faacutezisaacutetDJNZ R4csik Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Visszaugratjuk az elejeacutere a programot

A [Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten]ban a program keacutet kritikus jelentőseacutegű vaacuteltozoacutejaacutenak azaz az R2 eacutes R3 regisztereknek eacuterteacutekeit tuumlntetjuumlk foumll leacutepeacutesről leacutepeacutesre bdquoKezdrdquo jelenti a kezdeti eacuterteacuteket bdquoBe1rdquo a ciklus első veacutegrehajtaacutesaacutenaacutel a beleacutepeacutesi bdquoKi1rdquo a kileacutepeacutesi eacuterteacuteket bdquoBe2rdquo eacutes bdquoKi2rdquo ugyaniacutegy a ciklus maacutesodik veacutegrehajtaacutesaacutenaacutel stb A P2-es portra a ciklus minden egyes veacutegrehajtaacutesaacutenaacutel az R3 regiszterben taacuterolt eacuterteacutek komplementere keruumll ki Ez utaacuten a regiszterek tartalma megvaacuteltozik Tulajdonkeacuteppen ez az utoacutemunkaacutelat jelenti a programban a ravaszkodaacutest hiszen ezzel a regisztereket előkeacutesziacutetjuumlk a ciklus koumlvetkező futaacutesaacutehoz Laacutethatoacute hogy amikor a ciklus valamely lefutaacutesa veacuteget eacuter a koumlvetkező lefutaacutes ugyanazokkal a regisztereacuterteacutekekkel kezdődik

52 taacuteblaacutezat - Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten

Programaacutellapot 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

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

Ki9 00000001 00000000

Created by XMLmind XSL-FO Converter

6 fejezet - Csiacutek a LED-eken toumlmoumlrenAz előző alfejezetben a [2 feladat] megoldaacutesaacutenak assembly koacutedja talaacuten egy kicsit nehezen volt emeacuteszthető Sebaj szokjunk hozzaacute ahhoz hogy az assemblyben ilyesfeacutele gondolatmentek sűrűn fordulnak elő Azonban meg szeretneacutenk nyugtatni az olvasoacutet egy joacute darabig sokkal egyszerűbb koacutedokkal fogjuk bemutatni az ADuC lehetőseacutegeit Vizsgaacuteljuk most meg hogy hogyan lehetne sokkal egyszerűbben megoldani a [2 feladat]ot akkor ha meacuteg neacutehaacuteny utasiacutetaacutest ismeruumlnk

1 A Carry bitAz [Regiszterek] alfejezetben maacuter emliacutetettuumlk hogy az assembly nyelvű programozaacutesnaacutel bizonyos az architektuacuteraacutera jellemző jelzőbitek vagy flag-ek is fontos szerephez jutnak Ismerkedjuumlnk meg haacutet azzal a bittel amelyik az ADuC mikrovezeacuterlőkneacutel kulcsszerepet jaacutetszik nagyon sok műveletneacutel Ezt a bitet Carry bitnek vagy roumlviden C bitnek hiacutevjaacutek A Carry angol szoacute magyarul aacutetvitelt (is) jelent Ez szoros oumlsszefuumlggeacutesben aacutell a C bit szerepeacutevel Mire hasznaacutelhatoacute a C bit Mit jelez Mit mutat Főbb hasznaacutelati teruumlletei a koumlvetkezők

1 Keacutet baacutejt oumlsszeadaacutesakor tartalmazhatja a kezdeti aacutetvitelt ill jelzi ha az eredmeacuteny aacutetvitelt tartalmaz

2 Keacutet baacutejt kivonaacutesakor tartalmazhatja a kezdeti aacutetvitelt ill jelzi ha az eredmeacuteny aacutetvitelt tartalmaz

3 Jelezheti a kieacuterteacutekelt relaacutecioacute mint logikai kifejezeacutes igaz vagy hamis mivoltaacutet oumlsszehasonliacutetoacute utasiacutetaacutesoknaacutel

4 Bitforgatoacute műveletekneacutel ideiglenes taacuteroloacutekeacutent műkoumldhet

5 Bitműveletekneacutel a logikai kifejezeacutesek egyik operandusa

Amint laacutethatoacute a C bit hasznaacutelhatoacutesaacutega nagyon szeacuteleskoumlrű Sokszor maacuter a miatt bizonytalanodnak el a kezdő programozoacutek hogy egyaacuteltalaacuten van-e olyan utasiacutetaacutes amelynek veacutegrehajtaacutesa nem befolyaacutesolja a C bit eacuterteacutekeacutet Termeacuteszetesen van aacutem csakugyan sok utasiacutetaacutes van hataacutessal a C bitre Iacutegy amikor valaki oumlnaacutelloacutean boumlngeacuteszi a 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacutet akkor azt is mindig neacutezze meg hogy egy adott utasiacutetaacutes mit tesz a C bittel

A C bit eacuterteacutekeacutet befolyaacutesoloacute legegyszerűbb utasiacutetaacutesok a koumlvetkezők

SETB C CLR C CPL C

Az első utasiacutetaacutes magasra aacutelliacutetja a C bitet tehaacutet C = 1 lesz A maacutesodik utasiacutetaacutes toumlrli a C bitet tehaacutet C = 0 lesz A harmadik utasiacutetaacutes eredmeacutenye maacuter sejthető invertaacutelja a C bitet A mnemonikok rendre az angol Set Bit (bit magasra aacutelliacutetaacutesa) kifejezeacutesből ill Clear (toumlroumll) eacutes Complement (komplementer) szavakboacutel szaacutermaznak

2 Bitforgataacutes C-n keresztuumllA maacuter bemutatott bitforgatoacute utasiacutetaacutesoknak tehaacutet RL-nek eacutes RR-nek van olyan vaacuteltozatuk is amely a C-biten keresztuumll veacutegzi a forgataacutest Ez azt jelenti hogy az akkumulaacutetor kileacuteptetett bitje C-be keruumll a beleacutepő bit viszont C-ből eacuterkezik A keacutet utasiacutetaacutes mnemonikja a koumlvetkező

RLC A

eacutes

RRC A

A mnemonikok az angol Rotate Accumulator Left through C (akkumulaacutetor forgataacutesa balra C-n keresztuumll) eacutes Rotate Accumulator Right through C (akkumulaacutetor forgataacutesa jobbra C-n keresztuumll) kifejezeacutesekből szaacutermaznak Koumlnnyű meggondolni hogy ha a C-bit eacuterteacutekeacutet szabadon aacutelliacutetgathatjuk akkor azt leacuteptethetuumlnk be az akkumulaacutetorba amit csak akarunk A C-biten keresztuumll dolgozoacute bitforgatoacute utasiacutetaacutesok hataacutesaacutet a [Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor bitjeire] aacutebra szemleacutelteti

61 aacutebra - Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken toumlmoumlren

bitjeire

Az uacutej utasiacutetaacutesok ismereteacuteben fogalmazzuk aacutet a [2 feladat]ot

3 feladat

Jeleniacutetsuumlnk meg a LED-soron egy egyre hosszabb csiacutekot amely noumlvekedeacutes koumlzben minden faacutezisnaacutel vaacuterakozik egy keveset teliacutetődeacutes utaacuten pedig uacutejraindul Hasznaacuteljuk a C-n keresztuumlli bitforgataacutes műveleteacutet [Code03]

A [A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkel] alfejezet első listaacuteja mutatja hogy milyen bitmintaacutezatokat kell a 2-es portra kitennuumlnk hogy előaacutelljanak a megjeleniacutetendő csiacutek egyes faacutezisai Laacutetni fogjuk hogy milyen hateacutekony eszkoumlzt ad a kezuumlnkbe a C-n keresztuumll toumlrteacutenő bitforgataacutes Teacutetelezzuumlk foumll ugyanis hogy az akkumulaacutetor tartalma 11111111 Ez ugyebaacuter az első faacutezis amikor egyetlen LED sem vilaacutegiacutet Ha ezek utaacuten toumlroumlljuumlk a C bitet (C = 0) majd kiadjuk az RLC A utasiacutetaacutest akkor az akkumulaacutetor tartalma 11111110 lesz Az eredeti eacuterteacutek bal szeacutelső azaz 7 bitje azaz aktuaacutelisan 1 leacutep be C-be Ezzel az eacuterteacutekkel a tovaacutebbiakban semmi dolgunk A koumlvetkező faacutezis előaacutelliacutetaacuteshoz uacutejra toumlroumlljuumlk a C bit eacuterteacutekeacutet uacutejra alkalmazzuk a C-n keresztuumlli bitforgataacutest eacutes iacutegy tovaacutebb Ezzel az eljaacuteraacutessal sokkal egyszerűbben aacutelliacutetjuk elő a csiacutek egyes faacutezisainak bitmintaacutezataacutes mint amikor aritmetikai eacutes logikai műveletekkel tettuumlk A koacuted is sokkal roumlvidebbeacute toumlmoumlrebbeacute eacutes koumlnnyebben eacuterthetőveacute vaacutelik Figyeljuumlnk arra hogy a csiacutek faacutezisainak megfelelő eacuterteacutekeket az R3 regiszterben taacuteroljuk hiszen az akkumulaacutetort az időhuacutezoacute szubrutin meghiacutevaacutesaacutehoz hasznaacutelni fogjuk Ez a szubrutin (DELAY) toumlkeacuteletesen megegyezik azzal amit a [Parameacuteteraacutetadaacutes szubrutinnak] alfejezetben keacutesziacutetettuumlnk Iacuteme a koacuted

Code03asm ORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a programvezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacuten ORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacuted MAIN MOV R311111111b Kezdeti eacuterteacutek R3-nak Ebben gyűlnek a csiacutek egyes faacutezisainak megfelelő eacuterteacutekek melyek a P2-es portra iacuterandoacutek A kezdeti eacuterteacutek az oumlsszes LED-et kikapcsolja MOV R49 Kilencszer fut le ez a ciklus hiszen 9 faacutezisboacutel aacutell a csiacutek csik MOV P2R3 Kitesszuumlk a LED-ek portjaacutera a csiacutek eacuterteacutekeacutet MOV A10 A megfelelő parameacuteterrel CALL DELAY meghiacutevjuk az időhuacutezaacutest (01 s) MOV AR3 A-ba toumlltjuumlk a csiacutek aktuaacutelis eacuterteacutekeacutet CLR C Toumlroumlljuumlk a C bitet RLC A Beleacuteptetjuumlk A-ba a C bitet jobbroacutel balra MOV R3A Visszaiacuterjuk R3-ba a csiacutek uacutej faacutezisaacutet DJNZ R4csik Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutet JMP MAIN Ugraacutes vissza a program elejeacutere

Created by XMLmind XSL-FO Converter

7 fejezet - Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutelA [Csiacutek a LED-eken] eacutes [Csiacutek a LED-eken toumlmoumlren] fejezetekben megtanultuk hogyan lehet szisztematikusan mintaacutezatokat alkotni melyeket aztaacuten kijeleztuumlnk az ADuC-panel LED-soraacuten Azonnal adoacutedik a keacuterdeacutes mi van ha tetszőlegesen vaacutelasztott mintaacutezatokat szeretneacutenk kijelezni A vaacutelasz erre az hogy ez is koumlnnyűszerrel megoldhatoacute csupaacuten egy igen fontos regisztert eacutes egy uacutej ciacutemzeacutesmoacutedot kell megismernuumlnk hozzaacute A koumlvetkező feladatot tehaacutet iacutegy fogalmazzuk meg

4 feladat

Jeleniacutetsuumlnk meg a LED-soron a koacutedmemoacuteriaacuteban előre roumlgziacutetett mintaacutezatokat [Code04 Code05]

1 Az adatmutatoacuteA 80518052-es processzormagoknak van olyan regiszteruumlk is amelyikkel a memoacuteriaacuteban talaacutelhatoacute adatokat eacuterhetjuumlk el szisztematikusan Ez a regiszter az adatmutatoacute angol neveacuten Data Pointer Nagyon fontos tudnunk hogy ez a regiszter valoacutejaacuteban haacuterombaacutejtos azaz haacuterom egybaacutejtos regiszterből aacutell Ezek megnevezeacutese DPP DPH DPL A roumlvidiacuteteacutesek az angol Data Pointer Page Data Pointer High eacutes Data Pointer Low kifejezeacutesekből szaacutermaznak A DPP regiszterrel ebben a tankoumlnyvben nem foglalkozunk (ez mutatja a megciacutemzendő memoacuteriateruumllet adott lapjaacutet) eleacuteg lesz most nekuumlnk a DPHDPL regiszterkettős Ez a keacutet regiszter szorosan oumlsszetartozik egyuumltt egy 16-bites ciacutemet alkot Ezzel a 16-bites ciacutemmel 64 kilobaacutejtos memoacuteriateruumllet ciacutemezhető A memoacuteriateruumlletek 256-baacutejtos egyseacutegeit nevezik lapoknak Iacutegy pl az 1 lap a 64 kbyte-on beluumll a 0100h ciacutemtől a 01FFh ciacutemig tart A DPH regiszter az adatmutatoacute felső baacutejtja miacuteg a DPL regiszter az alsoacute baacutejtja Ezek egyuumlttes eacutertelmezeacuteseacutehez nyuacutejt segiacutetseacuteget a [Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese] Magaacutet a regiszterkettőst innentől kezdve DPTR-nek fogjuk jeloumllni hiszen egyuumlttesen alkotjaacutek az adatmutatoacutet (Data Pointer-t) Laacutethatoacute hogy a DPTR adatmutatoacute iacutegy oumlsszesen 16-bites binaacuteris eacuterteacuteket reprezentaacutel Ha ezt memoacuteriaciacutemzeacutesre hasznaacuteljuk akkor iacutegy joumln ki a 64 kbyte hiszen 216 = 65 536 = 641 024 = 64210 (vouml [Memoacuteria] alfejezet)

71 taacuteblaacutezat - Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese

DPH bitjei DPL bitjei

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

A keacutetbaacutejtos DPTR regiszter

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

2 Eacuterteacutekek noumlveleacutese eacutes csoumlkkenteacuteseAz assembly nyelvek elemi utasiacutetaacutesi koumlzeacute tartozik a memoacuteriarekeszek tartalmaacutenak 1-gyel valoacute noumlveleacutese eacutes csoumlkkenteacutese Ezeket az utasiacutetaacutesokat szigoruacute eacutertelemben aritmetikai utasiacutetaacutesoknak kell tekintenuumlnk de enneacutel a besorolaacutesnaacutel azeacutert rezeg a leacutec No de semmi baj az egyszerű noumlvelő eacutes csoumlkkentő utasiacutetaacutesok neacutelkuumll neacuteha szinte keacuteptelenseacuteg de legalaacutebbis igen neheacutezkes lenne megiacuterni azt amit akarunk

A memoacuteriarekesz noumlveleacuteseacutet veacutegrehajtoacute utasiacutetaacutes mnemonikja INC ami az angol Increment Register (regiszter noumlveleacutese) kifejezeacutesből szaacutermazik a memoacuteriarekesz csoumlkkenteacuteseacutet veacutegrehajtoacute utasiacutetaacutes mnemonikja DEC ami az angol Decrement Register (regiszter csoumlkkenteacutese) kifejezeacutesből joumln Az eddig ismertetett ciacutemzeacutesmoacutedokkal a keacutet utasiacutetaacutes vaacuteltozatai a koumlvetkezők

INC AINC Rn

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

INC directINC DPTRDEC ADEC RnDEC direct

Laacutethatoacute hogy az adatmutatoacute noumlveleacuteseacutere leacutetezik utasiacutetaacutes de csoumlkkenteacuteseacutere nincs Ez azonban ne keseriacutetsen el bennuumlnket az ADuC 842-es a megfelelő SFR hasznaacutelataacuteval konfiguraacutelhatoacute uacutegy hogy az adatmutatoacuteval toumlrteacutenő ciacutemzeacutes veacutegrehajtaacutesa utaacuten annak eacuterteacuteke automatikusan 1-gyel nőjoumln vagy akaacuter 1-gyel csoumlkkenjen Egyeacuteb esetekben nekuumlnk kell gondoskodnunk DPTR noumlveleacuteseacuteről vagy csoumlkkenteacuteseacuteről

3 A koacuted-indirekt ciacutemzeacutesAz assembly nyelvekben aacuteltalaacuteban leacuteteznek olyan utasiacutetaacutesok melyekkel indirekt ciacutemzeacutes valoacutesiacutethatoacute meg Aki tanult maacuter magas szintű programozaacutesi nyelvet annak a mutatoacutek koncepcioacuteja jelenthet neacutemi fogoacutedzkodoacutet Az indirekt ciacutemzeacutes leacutenyege az hogy egy roumlgziacutetett ciacutemhez egy segeacutedregiszter vagy az adatmutatoacute tartalmaacutet meacuteg hozzaacuteadja a processzor eacutes az iacutegy kapott ciacutemen leacutevő memoacuteriarekeszhez nyuacutel hozzaacute A reacuteszletes magyaraacutezatot jelen esetben mindjaacutert egy konkreacutet ciacutemzeacutestiacutepussal ismertetjuumlk Ennek a ciacutemzeacutesnek a neve koacuted-indirekt ciacutemzeacutes (angolul Code Indirect Addressing) Azeacutert koacuted-indirekt mert a processzor a koacutedmemoacuteriaacutehoz feacuter hozzaacute eacutes maacutesol ki onnan adatot Iacuterni a megciacutemzett helyre nyilvaacuten nem tud hiszen a koacutedmemoacuteria futaacutes koumlzben csak olvashatoacute memoacuteriakeacutent műkoumldik Neacutezzuumlk milyen szintaxisa van annak a koacuted-indirekt ciacutemzeacutessel dolgozoacute utasiacutetaacutesnak amellyel foglalkozni fogunk

MOVC AA+DPTR

Kicsit csemegeacutezzuumlnk az utasiacutetaacutes megjeleneacuteseacuten A MOV utasiacutetaacutest maacuter ismerjuumlk toumlbbfeacutele ciacutemzeacutesmoacuteddal Azonnal feltűnhet hogy ehhez keacutepest a fenti utasiacutetaacutes meacuteg egy C karaktert tartalmaz Ez a C betű utal a koacutedhoz toumlrteacutenő hozzaacutefeacutereacutesre A MOVC mnemonik ugyanis az angol Move Code Byte to Accumulator (koacutedbaacutejt (be)mozgataacutesa az akkumulaacutetorba) kifejezeacutesből szaacutermazik Ami meacuteg feltűnhet az az a teacuteny hogy a ciacutemzeacutesneacutel szerepel a kukac karakter Ez a karakter nekuumlnk magyaroknak kukac a hollandoknak majomfarkinca (apenstaartje) aminek itt semmi eacutertelme eacutes egy angol anyanyelvű ember egy e-mail-ciacutem felolvasaacutesakor a kukac karakterhez eacuterve azt mondja hogy at ([aeligt] prepoziacutecioacute jelenteacutese -naacutel -neacutel) Helymegjeloumlleacutesre hasznaacutelja Gondolkodjunk most ezzel a logikaacuteval A MOVC utasiacutetaacutes a MOV előtag alapjaacuten adatot fog maacutesolni a koacutedboacutel erre a C karakter utal Az utasiacutetaacutes első operandusa az A iacutegy a maacutesolaacutes ceacutelaacutellomaacutesa az akkumulaacutetor Most joumln az hogy honneacutet toumlrteacutenik a maacutesolaacutes ennek ciacutemeacutet uacutegy hataacuterozzuk meg hogy az adatmutatoacutehoz (DPTR) hozzaacuteadjuk az akkumulaacutetor (A) aktuaacutelis eacuterteacutekeacutet DPTR+A Veacuteguumll a kukac karakter mutatja hogy a DPTR+A művelettel megadott ciacutem a forraacutesciacutem azaz onnan toumlrteacutenik az ott aacutellomaacutesozoacute adat kiolvasaacutesa Figyeljuumlnk oda arra hogy enneacutel az utasiacutetaacutesnaacutel az akkumulaacutetor tartalma foumlluumlliacuteroacutedik A koacuted-indirekt ciacutemzeacutes megeacuterteacuteseacutehez az [A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese] nyuacutejt segiacutetseacuteget

72 taacuteblaacutezat - A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese

Koacutedmemoacuteria ciacutemei Eacuterteacutekek

0200h 20

0201h 11

0202h 3

0203h 28

0204h 19

0205h 72

0206h 10

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

0207h 5

DPTR A A eacuterteacuteke a MOVC AA+DPTR utasiacutetaacutes veacutegrehajtaacutesa utaacuten

0200h 0 20

0200h 2 3

0200h 6 10

0200h 7 5

0204h 0 19

0204h 3 5

4 Adatok elhelyezeacutese a koacutedbanAdatok elhelyezeacutese a koacutedban viszonylag egyszerűen toumlrteacutenik Ehhez csak a DB (Data Byte magyarul adatbaacutejt) fordiacutetoacutei direktiacutevaacutet kell ismernuumlnk Az adatok felsorolaacutesaacutet jelentő teruumlletnek vagy konkreacutet ciacutemet vagy ciacutemkeacutet (ez a gyakoribb) kell adnunk amint azt az alaacutebbi koacutedreacuteszletben laacutethatjuk

adatok

DB 11111111b Az adattoumlmb elemeiDB 01111110bDB 00111100bDB 00011000bDB 00000000bDB

A DB direktiacutevaacutek megadaacutesa utaacuten az eacuterteacutekadaacutes pontosan azzal a szintaxissal toumlrteacutenhet mint amit a koumlzvetlen ciacutemzeacutesneacutel laacutettunk ([Koumlzvetlen ciacutemzeacutes] alfejezet) de most nincs szuumlkseacuteg a kettős keresztre ()

Az adatmutatoacuteba a ciacutemkeacutevel ellaacutetott memoacuteriateruumllet kezdőciacutemeacutet a koumlvetkező szintaxissal toumllthetjuumlk

MOV DPTRadatok

Ennek az utasiacutetaacutesnak az aacuteltalaacutenos megjeloumlleacutese a koumlvetkező

MOV DPTRdata16

A koumlzvetlen ciacutemzeacutes rendben is van de figyeljuumlnk oda arra hogy az adatmutatoacutenak 16-bites adatot kell megadnunk hiszen 64 kilobaacutejt megciacutemzeacuteseacutehez eacuteppen ennyi szuumlkseacuteges

Eleacuterkeztuumlnk haacutet ahhoz a ponthoz hogy megoldjuk a [4 feladat]ot A koacutedhoz folyamataacutebraacutet nem tartunk szuumlkseacutegesnek most sem mert ismeacutet csak nagyon egyszerű esettel aacutellunk szemben Nyolc bitmintaacutezatot fogunk kijelezni a LED-soron majd uacutejraindiacutetjuk a ciklust iacutegy joacutepofa mozgoacute mintaacutezatok hataacutesaacutet keltő alkalmazaacutest kapunk A koacutedboacutel eacuteppen uacutegy hiaacutenyozni fognak az aacutellandoacute direktiacutevaacutek eacutes az időhuacutezoacute szubrutin (DELAY) mint a koraacutebbi neacutehaacuteny esetben

Code04asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Ugraacutes a teacutenyleges programkezdethet ORG 0060h A teacutenyleges program kezdete

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

MAINMOV DPTRadatok Az adatok toumlmbjeacutenek ciacuteme az adatmutatoacuteba keruumllMOV R30 Az R3 regisztert hasznaacuteljuk indexregiszternek az indirekt ciacutemzeacuteshezMOV R48 8-szor fut le ez a ciklus mert 8 adatbaacutejtot akarunk kijeleznidisplMOV AR3 A-ba tesszuumlk a soros indexuumlnket R3-boacutelMOVC AA+DPTR Adat olvasaacutesa a koacutedmemoacuteriaacuteboacutel koacuted-indirekt ciacutemzeacutesselMOV P2A A beolvasott adat kihelyezeacutese a LED-sorraMOV A20 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (02 s)INC R3 Az indexregiszteruumlnk eacuterteacutekeacutenek noumlveleacutese a ciklus koumlvetkező lefutaacutesaacutehozDJNZ R4displ Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Ugraacutes vissza a program elejeacutereadatokDB 01111110b Az adattoumlmb elemeiDB 00111100bDB 10011001bDB 11000011bDB 11100111bDB 11000011bDB 10011001bDB 00111100b

5 Az adatmutatoacute automatikus noumlveleacuteseAz előző alfejezetben bemutatott koacutedban az adatmutatoacute eacuterteacutekeacutet nem vaacuteltoztattuk Indexeleacuteshez csak az akkumulaacutetorra volt szuumlkseacuteguumlnk Maacutes lenne a helyzet ha 255-neacutel toumlbb adatbaacutejtot szeretneacutenk kijelezni Ekkor az akkumulaacutetor oumlnmaga maacuter nem lenne eleacuteg az indexeleacutesre iacutegy gondoskodnunk kellene az adatmutatoacute noumlveleacuteseacuteről is Van viszont lehetőseacuteg arra hogy az ADuC 842-es minden egyes koacuted-indirekt ciacutemzeacutes utaacuten automatikusan 1-gyel noumlvelje DPTR-t Ehhez egy SFR-be kell elhelyeznuumlnk a megfelelő eacuterteacuteket

A speciaacutelis funkcioacutejuacute regiszterekről roumlviden maacuter tettuumlnk emliacuteteacutest a [Portok eacutes funkcioacuteregiszterek] alfejezetben Az elektronikus tankoumlnyv haacutetraleacutevő reacuteszeacuteben sokszor fogunk hasznaacutelni SFR-eket Ehhez elengedhetetlenuumll szuumlkseacuteges lesz az Analog Devices ceacuteg aacuteltal a 842-es architektuacuteraacutehoz melleacutekelt leiacuteraacutes tanulmaacutenyozaacutesa [1] Ennek a tankoumlnyvnek nem az a feladata hogy minden SFR minden funkcioacutejaacutet kimeriacutetően bemutassa Sok SFR-rel fogunk dolgozni de nem mindegyikkel Amelyekkel dolgozunk azoknak sem tudjuk mindig minden konfiguraacutecioacutejaacutet bemutatni Amennyire azonban lehetseacuteges tankoumlnyvhoumlz illő moacutedon proacutebaacuteljuk meg taglalni az aktuaacutelisan hasznaacutelt SFR kivaacutelasztott konfiguraacutecioacutejaacutenak hataacutesaacutet Az SFR-eknek aacuteltalaacuteban van sajaacutet nevuumlk melyekkel hivatkozhatunk raacutejuk Ezek a nevek is toumlbbnyire mnemonikok melyek angol kifejezeacutesekből szaacutermaznak Ezek a nevek szerepelnek toumlbbek koumlzoumltt az assemblerhez tartozoacute MOD842 faacutejlban is Szaacutemos SFR bitenkeacutent ciacutemezhető azaz minden bitjeacutenek kuumlloumln neve van melyeket a C bithez hasonloacutean aacutelliacutetgathatunk magasra vagy alacsonyra A toumlbbi SFR bitenkeacutent nem csak egeacutesz baacutejtkeacutent ciacutemezhető Ebben az esetben a mi felelősseacuteguumlnk az hogy minden bitnek pontosan azt az eacuterteacuteket adjuk ami a felhasznaacutelni kiacutevaacutent hataacutest kivaacuteltja Az [1] referenciakeacutent megadott ADuC841_2_3pdf faacutejlban mely a gyaacutertoacutetoacutel megvaacutesaacuterolt CD-ről szaacutermazik az SFR-ek taacutergyalaacutesnaacutel mindig koumlzlik azok mnemonikjaacutet teljes angol neveacutet memoacuteriaciacutemeacutet bekapcsolaacuteskor felvett default eacuterteacutekeacutet eacutes bitenkeacutenti ciacutemezhetőseacutegeacutet Uacutegy gondoljuk hogy ezek koumlzuumll a legfontosabbakat mi is mindig oumlsszefoglaljuk egy taacuteblaacutezatban kiegeacutesziacutetve a magyar megnevezeacutessel

Visszateacuterve az adatmutatoacutera az adatmutatoacute műkoumldeacuteseacutet befolyaacutesoloacute SFR adatait a [A DPCON SFR taacutergyalt bitjei]ban talaacuteljuk Kezdő szintuumlnk miatt csak keacutet bitjeacutenek hataacutesaacutet ismertetjuumlk

73 taacuteblaacutezat - A DPCON SFR taacutergyalt bitjei

DPCON Data Pointer Control

Adatmutatoacute-vezeacuterlő

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Bit neve Leiacuteraacutes

3 DP0m1 Az adatmutatoacute viselkedeacutese

DP0m1 DP0m0 Uumlzemmoacuted

0 0 Normaacutel (8052-es) viselkedeacutes

0 1 MOVX eacutes MOVC utasiacutetaacutesok utaacuten DPTR

noumlveleacutese 1-gyel

1 0 MOVX eacutes MOVC utasiacutetaacutesok utaacuten DPTR

csoumlkkenteacutese 1-gyel

1 1 DPTR alsoacute baacutejtjaacutenak kipeckeleacutese

(16-bites eszkoumlzoumlkneacutel lehet hasznos)

2 DP0m0

Az egyes SFR-ek lehetőseacutegeinek taacutergyalaacutesakor arra biztatjuk az olvasoacutet hogy ezzel az elektronikus tankkoumlnyvvel paacuterhuzamosan tanulmaacutenyozza az emliacutetett ADuC841_2_3pdf faacutejl megfelelő reacuteszeacutet Az adatmutatoacute műkoumldeacuteseacutet befolyaacutesoloacute DPCON SFR oumlsszes bitjeacutenek magyaraacutezata itt talaacutelhatoacute meg [1 p 51 Table 21] A hivatkozott taacuteblaacutezatboacutel kideruumll hogy a bemutatott adatmutatoacutet elsődleges adatmutatoacutenak kell neveznuumlnk mert van egy maacutesodlagos vagy hűbb fordiacutetaacutessal aacuternyeacutek-adatmutatoacute is Ez utoacutebbival azonban nem foglalkozunk Az elsődleges adatmutatoacute viselkedeacuteseacutet a DPCON 3 eacutes 2 bitje hataacuterozza meg Ha e keacutet bit eacuterteacuteke egyuumlttesen 01 akkor az azt a műkoumldeacutest vaacuteltja ki hogy minden egyes MOVC (eacutes MOVX de erről majd keacutesőbb) utasiacutetaacutes utaacuten DPTR eacuterteacuteke 1-gyel nő Ezek szerint ilyenkor az akkumulaacutetorra igaziboacutel nincs is szuumlkseacuteguumlnk a ciacutemzeacuteshez de mivel az mindig reacutesze a koacuted-indirekt ciacutemzeacutesnek ezeacutert ceacutelszerű az eacuterteacutekeacutet 0-n tartani (Rafinaacuteltabb programozoacutek persze kombinaacutelhatjaacutek a kettőthellip) Mindazt amit most elmondtunk a koumlvetkező koacutedban mutatjuk be Ez a koacuted a bemutatott reacutesztől eltekintve toumlkeacuteletesen megegyezik Code04-gyel laacutesd előző alfejezet Ezzel az adatmutatoacutes truumlkkel a koacuted meacuteg roumlvidebbeacute vaacutelik

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

Code05asmMAINMOV DPCON00000100b Annak beaacutelliacutetaacutesa hogy az elsődleges adatmutatoacute automatikusan 1-gyel nőjoumln valahaacutenyszor veacutegrehajtoacutedik a MOVC utasiacutetaacutesMOV DPTRadatok Az adatok toumlmbjeacutenek ciacuteme az adatmutatoacuteba keruumllMOV R48 8-szor fut le ez a ciklus mert 8 adatbaacutejtot akarunk kijeleznidisplMOV A0 A koacuted-indirekt ciacutemzeacuteshez 0-t teszuumlnk A-ba mert most majd a DPTR fog automatikusan nőniMOVC AA+DPTR Adat olvasaacutesa a koacutedmemoacuteriaacuteboacutel koacuted-indirekt ciacutemzeacutesselMOV P2A A beolvasott adat kihelyezeacutese a LED-sorraMOV A20 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (02 s)DJNZ R4displ Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Ugraacutes vissza a program elejeacutere

Created by XMLmind XSL-FO Converter

8 fejezet - Felteacutetelek kezeleacuteseA 80518052-es processzormagok utasiacutetaacuteskeacuteszlete nem bővelkedik oumlsszehasonliacutetaacutesokat lehetőveacute tevő utasiacutetaacutesokban Persze azzal a neacutehaacutennyal ami rendelkezeacutesuumlnkre aacutell mindent el lehet inteacutezni csak hozzaacute kell szokni a logikaacutejukhoz Felteacutetelek kezeleacuteseacutere egy programban szinte mindig szuumlkseacuteg van Ha maacuter akaacutercsak egyetlen ciklust is iacuterunk annak kileacutepeacutesi felteacutetele is felteacutetel Ez az egyik legfontosabb eset A maacutesik az amikor valamely logikai kifejezeacutes igaz vagy hamis mivolta alapjaacuten el kell aacutegaztatnunk a programot Ebben a fejezetben megmutatjuk hogy mikeacutent lehet pontosan ugyanuacutegy műkoumldő ciklusokat toumlbbfeacutelekeacuteppen megiacuterni A bemutatott moacutedszerek nem kimeriacutető elemzeacutest jelentenek ezek alapjaacuten (vagy eacuteppen ezektől fuumlggetlenuumll) tovaacutebbi ciklusszervezeacutesi gondolatmeneteket bizonyaacutera az olvasoacute is koumlnnyen ki tud talaacutelni

1 Oumlsszeadaacutes eacutes kivonaacutesAz aacutetvitel neacutelkuumlli oumlsszeadaacutes utasiacutetaacutesaacutet maacuter bemutattuk a [Logikai eacutes aritmetikai utasiacutetaacutesok] alfejezetben azonban a teljesseacuteg kedveacuteeacutert uacutejra felsoroljuk a maacuter ismert ciacutemzeacutesmoacuteduacute vaacuteltozatokat

ADD ARnADD AdirectADD Adata

Ez az utasiacutetaacutes befolyaacutesolja a C bit eacuterteacutekeacutet Ha az oumlsszeadaacutes eredmeacutenye nagyobb mint 255 akkor a C bit 1 lesz kuumlloumlnben 0 Ezeacutert hiacutevjaacutek aacutetviteli bitnek Ennek segiacutetseacutegeacutevel lehet toumlbb baacutejton aacutebraacutezolt szaacutemokat oumlsszeadni de akkor azt maacuter oumlsszeadaacutes koumlzben figyelembe kell venni amit az ADD utasiacutetaacutes nem tesz Az oumlsszeadaacutesnak van olyan vaacuteltozata is amely nem csak az operandust adja az akkumulaacutetorhoz hanem a C bit tartalmaacutet is Az aacutetviteles oumlsszeadaacutes mnemonikja ADDC ami az angol Add Accumulator with Carry (hozzaacutead az akkumulaacutetorhoz aacutetvitellel) kifejezeacutesből szaacutermazik A művelet veacutegrehajtaacutesa befolyaacutesolja a C bit eacuterteacutekeacutet baacutermi volt is az a művelet elveacutegzeacutese előtt Jelenteacutese a művelet utaacuten ugyanaz mint az ADD utasiacutetaacutesnaacutel Az aacutetviteles oumlsszeadaacutes utasiacutetaacutesa az eddig megtanult ciacutemzeacutesmoacutedokkal

ADDC ARnADDC AdirectADDC Adata

Hogy joacutel eacuterthető legyen megismeacuteteljuumlk a C bittel kapcsolatos tudnivaloacutekat Vannak olyan utasiacutetaacutesok melyek veacutegrehajtaacutesaacutenaacutel nem mindegy hogy mi volt a C bit eacuterteacuteke az utasiacutetaacutes veacutegrehajtaacutesa előtt Vannak aztaacuten olyan utasiacutetaacutesok amelyek veacutegrehajtaacutesa befolyaacutesolja a C bit eacuterteacutekeacutet de ez csak az utasiacutetaacutes veacutegrehajtaacutesa utaacuten deruumll ki A keacutet eset teljesen maacutest jelent eacutes figyeljuumlnk arra hogy bizonyos utasiacutetaacutesokra mind a keacutet megfogalmazaacutes igaz

A teljesseacuteg kedveacuteeacutert el kell mondanunk hogy a C bit mellett van meacuteg keacutet jelzőbit vagy flag melyek eacuterteacutekeacutet befolyaacutesoljaacutek az aritmetikai műveletek Ezek az AC ill OV bitek Az AC roumlvidiacuteteacutes az angol Auxiliary Carry (segeacuted- kiegeacutesziacutető aacutetvitel) kifejezeacutesből az OV pedig az Overflow (tuacutelcsordulaacutes) szoacuteboacutel szaacutermazik AC pont ugyanazt jelzi mint C csak nem a 7 bitneacutel hanem a 3 bitneacutel (a bitek szaacutemozaacutesaacutet 0-val kezdve) OV a kettes komplemensben aacutebraacutezolt előjeles szaacutemoknaacutel jut szerephez Ezekkel a jelzőbitekkel egyelőre nem foglalkozunk

A kivonaacutes utasiacutetaacutesaacutenak mnemonikja SUBB ami az angol Subtract from Accumulator with Borrow (kivonaacutes az akkumulaacutetorboacutel koumllcsoumlnzeacutessel) kifejezeacutesből szaacutermazik A borrow azaz koumllcsoumlnzeacutes szoacute magyaraacutezatra szorul Amerikaacuteban az terjedt el keacutet szaacutem papiacuteron toumlrteacutenő kivonaacutesaacutenaacutel hogy ha kisebb szaacutemjegyből kell nagyobbat kivonni valamely helyieacuterteacutekneacutel akkor a kisebbiacutetendő koumlvetkező jegyeacutet csoumlkkentik eggyel majd ezt a koumllcsoumlnvett eacuterteacuteket adjaacutek hozzaacute aacutetmenetileg a kisebbiacutetendő probleacutemaacutes szaacutemjegyeacutehez Az eggyel csoumlkkentett jegyet aacutet is huacutezzaacutek majd odaiacuterjaacutek az eggyel kisebb szaacutemjegyet Ez a koumllcsoumlnzeacutes szerepel az utasiacutetaacutes megnevezeacuteseacuteben A műveletet magyarul mi hiacutevjuk nyugodtan simaacuten aacutetviteles kivonaacutesnak A SUBB utasiacutetaacutes vaacuteltozatai a maacuter ismert ciacutemzeacutesmoacutedokkal

SUBB ARnSUBB AdirectSUBB Adata

A SUBB utasiacutetaacutes veacutegrehajtaacutesaacutenaacutel a C bit eredeti eacuterteacuteke is beszaacutemiacutet Ha az utasiacutetaacutes veacutegrehajtaacutesa előtt C = 1 akkor eleve lesz koumllcsoumlnzeacutes ha C = 0 akkor nem lesz (Foumlldi halandoacute ez utoacutebbi eacutertelemben gondolna elsőkeacutent a kivonaacutes műveletre) Kivonaacutesnaacutel ahogy az vaacuterhatoacute maga az eredmeacuteny is befolyaacutesolja a C bitet C akkor lesz 1

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

ha a kivonandoacute nagyobb mint a kisebbiacutetendő azaz az akkumulaacutetor eacuterteacuteke (AC eacutes OV eacuterteacuteke itt is ahhoz hasonloacutean alakul mint az oumlsszeadoacute utasiacutetaacutesoknaacutel) Ha nem akarunk magunknak meglepeteacutest a SUBB utasiacutetaacutes hasznaacutelataacutenaacutel nagyon figyeljuumlnk arra hogy mi a C bit eacuterteacuteke a veacutegrehajtaacutes előtt

2 Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesokEbben a fejezetben oumlsszeszedjuumlk azokat az oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesokat melyekkel ciklusokat lehet szervezni eacutes egyeacuteb programelaacutegazaacutesokat megvaloacutesiacutetani

A [Egyszerű ciklusszervezeacutes] alfejezetben maacuter taacutergyaltuk a DJNZ utasiacutetaacutest az R segeacutedregiszterekkel Ezt most megismeacuteteljuumlk a felsorlaacutesban eacutes most maacuter egy maacutesik ciacutemzeacutessel is eacuterteni fogjuk

DJNZ RnrelDJNZ directrel

Az utasiacutetaacuteshoz tartozoacute magyaraacutezat megtalaacutelhatoacute az emliacutetett alfejezetben

A maacutesik oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutes a CJNE A mnemonik az angol Compare and Jump if Not Equal (oumlsszehasonliacutet eacutes ugrik ha nem egyenlő) kifejezeacutesből szaacutermazik Ciacutemzeacutesmoacuted alapjaacuten az alaacutebbi verzioacutek leacuteteznek

CJNE AdirectrelCJNE AdatarelCJNE Rndatarel

A haacuterom operandusboacutel az első azt jelenti amit oumlsszehasonliacutetunk Ez lehet az akkumulaacutetor vagy valamelyik R regiszter tartalma A maacutesodik operandus az amihez hasonliacutetunk a harmadik pedig egy relatiacutev ugraacutes meacuterteacuteke azaz az ugraacutes meacuterteacuteke az utasiacutetaacutes poziacutecioacutejaacutehoz keacutepest +127 eacutes ndash128 baacutejt koumlzoumltt Assemblyben ezt aacuteltalaacuteban ciacutemkeacutekkel adjuk meg eacutes az assembler az ami a kokreacutet eacuterteacuteket meghataacuterozza Ugraacutes akkor toumlrteacutenik ha a keacutet oumlsszehasonliacutetott objektum eacuterteacuteke nem egyenlő Kuumlloumlnben a program csorog tovaacutebb

A harmadik eacutes negyedik oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutes a JZ eacutes a JNZ A mnemonikok az angol Jump if Accumulator Zero (ugrik ha az akkumulaacutetor nulla) eacutes Jump if Accumulator Not Zero (ugrik ha az akkumulaacutetor nem nulla) kifejezeacutesből szaacutermaznak Ezek csak az akkumulaacutetor eacuterteacuteke alapjaacuten ugratnak vagy nem ugratnak

JZ relJNZ rel

Ennyi Bitekre vonatkozoacutean meacuteg vannak elaacutegazaacutesi utasiacutetaacutesok azokat keacutesőbb vesszuumlk De toumlbb teacutenyleg nincs Neacutehaacuteny truumlkkoumlt azonban meacuteg a keacutesőbbiekben ismertetuumlnk az ugroacute utasiacutetaacutesokkal kapcsolatban

3 Hat variaacutecioacute egy feladatraAz előző alfejezetek utaacuten proacutebaacuteljunk kuumlloumlnfeacutele moacutedon ciklusokat szervezni valami laacutetszoacutelag eacutertelmes feladatot teljesiacutetve de uacutegy hogy a ciklusszervezeacutes moacutedjainak logikaacuteja akaacuter jelentősen elteacuterhet egymaacutestoacutel a laacutetszat azonban toumlkeacuteletesen ugyanaz maradjon

5 feladat

Szaacutemoljunk el a programmal 1-től 15-ig eacutes kis vaacuterakozaacutessal jeleniacutetsuumlk meg a LED-soron az eacuterteacutekeket a kettes szaacutemrendszerben [Code06 Code07 Code08 Code09 Code10 Code11]

Ennek a feladatnak a megoldaacutesaacutenaacutel hat elteacuterő ciklusszervezeacutest fogunk kielemezni Ezekhez most maacuter folyamataacutebraacutet is rajzolunk A megadott koacutedreacuteszletekben az időhuacutezoacute szubrutinunk meacuteg mindig az mint az előző neacutehaacuteny feladat megoldaacutesaacutenaacutel iacutegy ezt uacutejra ismeacutet csak foumlloumlsleges lenne megadnunk Jelenleacuteteacutere csak az azt meghiacutevoacute utasiacutetaacutes fog utalni

Az első megoldaacutesban a DJNZ utasiacutetaacutest hasznaacuteljuk A ciklusvaacuteltozoacute az R4 regiszter lesz a kijelezendő eacuterteacutekek vaacuteltozoacuteja pedig R3 Leacutenyeges hogy az első megoldaacutesban e keacutet vaacuteltozoacutenak semmi koumlze nem lesz egymaacuteshoz az egyik (R4) csak azeacutert lesz felelős hogy a ciklus 15-szoumlr fusson le miacuteg a maacutesik (R3) eacuterteacutekeacutet kuumlloumln kezeljuumlk A megoldaacutes folyamataacutebraacuteja az [Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval] aacutebraacuten laacutethatoacute Vegyuumlk eacuteszre hogy a DJNZ utasiacutetaacutes nem csak a felteacutetelt jelkeacutepező teacutetelt valoacutesiacutetja meg hanem az az előtt aacutelloacute

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

eacuterteacutekcsoumlkkenteacutest is

81 aacutebra - Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval

Az [Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval] aacutebraacuten laacutethatoacute folyamataacutebra koacutedja a koumlvetkező

Code06asmMOV R31 Kezdeti eacuterteacutek R3-nakMOV R415 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a kijelezendő eacuterteacuteketCPL A Vesszuumlk a komplementereacutetMOV P2A Kijelezzuumlk a LED-soronMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 Noumlveljuumlk a kijelezendő eacuterteacuteketDJNZ R4cik Lekezeljuumlk a ciklusvaacuteltozoacutet Ugrunk vissza ha R4 eacuterteacuteke meacuteg nem 0 Ha maacuter igen csorog tovaacutebb a program azaz kileacutepuumlnk a ciklusboacutelJMP $ Oumlnmagaacutera ugratjuk vissza a programot A program helyben jaacuter toumlbbet semmit sem csinaacutel

A koacutedban egyetlen aproacute uacutejdonsaacutegot laacutethatunk Ez a legutolsoacute utasiacutetaacutesnaacutel a $ jel a JMP utaacuten Ez azt jelenti hogy az ugraacutes az utasiacutetaacutesra oumlnmagaacutera toumlrteacutenik iacutegy igen toumlmoumlr alakjaacutet laacutetjuk egy veacutegtelen ciklusnak Itt a program megakad eacutes innentől kezdve helyben jaacuter

A feladat maacutesodik megoldaacutesaacuteban ugyanuacutegy szervezzuumlk a ciklust mint az előbb de a kijelezendő eacuterteacutekekhez most nem hasznaacutelunk kuumlloumln vaacuteltozoacutet hanem azokat kifejezetten a ciklusvaacuteltozoacuteboacutel aacutelliacutetjuk elő aritmetikai műveletekkel Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code07)

82 aacutebra - Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code07asmMOV R415 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV A16 A-ba tesszuumlk a kijelezendő eacuterteacuteketCLR C C-t toumlroumlljuumlk a kivonaacuteshozSUBB AR4 A=16-R4 lesz az eredmeacuteny azaz a kijelezendő eacuterteacutek 1-től megy 15-igCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintDJNZ R4cik Lekezeljuumlk a ciklusvaacuteltozoacutet Ugrunk vissza ha R4 eacuterteacuteke meacuteg nem 0 Ha maacuter igen csorog tovaacutebb a program azaz kileacutepuumlnk a ciklusboacutelJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat harmadik megoldaacutesaacuteban maacuteshogy szervezzuumlk a ciklust Most a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet Tulajdonkeacuteppen ez lesz a ciklusvaacuteltozoacute is A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet a ciklus veacutegeacuten eacuterteacutekeljuumlk ki azaz a ciklus haacutetul tesztelő lesz Ehhez a CJNE utasiacutetaacutest hasznaacuteljuk Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code08)

83 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code08asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetCJNE R316cik R3 utolsoacute eacuterteacuteke ami joacute nekuumlnk a 15 Ha ez utaacuten noumlveluumlnk rajta egyet akkor 16-ot kapunk Ez a 16-os eacuterteacutek lesz joacute kileacutepeacutesi felteacutetelnek Ha ezt meacuteg nem eacutertuumlk el ugrunk visszaJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat negyedik megoldaacutesaacuteban szintuacutegy a CJNE utasiacutetaacutest hasznaacuteljuk Most is a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet eacutes ismeacutet ez lesz a ciklusvaacuteltozoacute is A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet azonban a ciklus elejeacuten eacuterteacutekeljuumlk ki azaz a ciklus eloumll tesztelő lesz Ennek a megoldaacutesnak a folyamataacutebraacuteja a [ Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code09)

84 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code09asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikCJNE R316rendben Ha R3 meacuteg nem eacuterte el a 16-ot akkor joumlhet a ciklusmag Ugrunk a rsquorendbenrsquo ciacutemkeacutereJMP kiugrik Ha R3 maacuter 16-tal egyenlő akkor ide csorog a program Elhagyjuk a ciklust Kiugratjuk a ciklus moumlgeacute

rendben

MOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetJMP cik Visszaugrunk a ciklus elejeacutere az ott leacutevő vizsgaacutelathoz

kiugrik

JMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat oumltoumldik megoldaacutesaacuteban szintuacutegy a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet Ismeacutet ez lesz a ciklusvaacuteltozoacute A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet ismeacutet csak ciklus veacutegeacuten eacuterteacutekeljuumlk ki azaz a ciklus megint haacutetul tesztelő lesz Ehhez azonban most a JNZ utasiacutetaacutest hasznaacuteljuk Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code10)

85 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk

Code10asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutet kor kell kileacutepni ha R3-at 16-ra noumlveltuumlk hiszen utolsoacute hasznos eacuterteacuteke 15MOV AR3 A-ba tesszuumlk R3-atCLR C Toumlroumlljuumlk C-t a kivonaacuteshozSUBB A16 A=R3-16JNZ cik Ha az eredmeacuteny nem 0 akkor meacuteg nem eacutertuumlk el 16-ot azaz a kileacutepeacutesi felteacutetelt Ekkor ugrunk vissza a ciklus elejeacutereJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

Veacuteguumll a feladat hatodik megoldaacutesaacuteban az a kuumlloumlnbseacuteg az oumltoumldikhez keacutepest hogy itt a JZ utasiacutetaacutest hasznaacuteljuk Ehhez mind a folyamataacutebra ([Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk] aacutebra) mind a koacuted (Code11) neacutemileg moacutedosul hogy most akkor toumlrteacutenjen ugraacutes ha egy eredmeacuteny eacuteppen nulla Figyeljuumlk meg hogy e keacutet utolsoacute algoritmusnaacutel hol helyezkedik el a ciklusvaacuteltozoacute eacuterteacutekeacutenek noumlveleacutese a kileacutepeacutesi felteacutetel kieacuterteacutekeleacuteseacutehez keacutepest

86 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk

Code11asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintMOV AR3 A-ba tesszuumlk R3-atCLR C Toumlroumlljuumlk C-t a kivonaacuteshozSUBB A15 A=R3-15JZ kiugrik Ha az eredmeacuteny 0 akkor eleacutertuumlk R3 utolsoacute hasznos eacuterteacutekeacutet Ez a kileacutepeacutesi felteacutetel Kiugrunk a ciklusboacutelINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetJMP cik Ugraacutes vissza a ciklus elejeacutere

kiugrik

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

JMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

Az [5 feladat] megoldaacutesaacutera gyaacutertott hat elteacuterő oumltlet nem az oumlsszes lehetőseacuteget jelenti Sok-sok aproacute reacuteszletekben elteacuterő moacutedszert lehetne meacuteg bemutatni A ceacutel mindenesetre az volt hogy megmutassuk az olvasoacutenak hogy meacuteg a nagyon keveacutes elaacutegazaacutesi utasiacutetaacutessal is milyen ceacuteliraacutenyos moacutedon van lehetőseacuteg ciklusok szervezeacuteseacutere eacutes felteacutetelek kieacuterteacutekeleacuteseacutere Sajaacutet programban pedig az aktuaacutelis feladattoacutel fuumlggően baacutetran lehet uumlgyeskedni a legroumlvidebb koacuted leggyorsabb veacutegrehajtaacutes legkevesebb felhasznaacutelt regiszter stb eacuterdekeacuteben

Created by XMLmind XSL-FO Converter

9 fejezet - Nyomoacutegombok a panelonAz ADuC 842 egyik portjaacutenak keacutet laacuteba alkalmas arra hogy az azon toumlrteacutenő vaacuteltozaacutest kuumllső esemeacutenykeacutent eacuterteacutekelje a processzor Ezzel kicsit keacutesőbb behatoacutebban foglalkozunk de maacuter most is keacutepesek vagyunk arra hogy ezeket a laacutebakat programboacutel figyeljuumlk A hallgatoacutei panelon egy-egy nyomoacutegomb van koumltve a 3 port 2 eacutes 3 laacutebaacutera Amikor ezeket a nyomoacutegombokat lenyomjuk akkor foumlldre huacutezzuk a laacutebakat Ha a gombok nincsenek lenyomva akkor a laacutebak magas jelszinten uumllnek

A nyomoacutegombok keacutenyelmes hasznaacutelataacutehoz tanuljuk meg az assembler BIT fordiacutetoacutei direktiacutevaacutejaacutet Ezzel a direktiacutevaacuteval bitekhez rendelhetuumlnk szimboacutelumokat peacuteldaacuteul

led1 BIT P20led2 BIT P27but1 BIT P32but2 BIT P33

Az első keacutet sor a 2 port (a LED-sor portja) keacutet szeacutelső bitjeacutet rendeli a led1 ill led2 szimboacutelumhoz miacuteg az utolsoacute keacutet sor a nyomoacutegombok portbitjeit rendeli a but1 ill but2 szimboacutelumhoz Figyeljuumlk meg hogyan hivatkozunk adott port adott bitjeacutere A P jelenti a portot az utaacutena aacutelloacute szaacutem a port sorszaacutema a tizedespont utaacuteni szaacutem pedig a portbit sorszaacutema (0-val kezdve)

1 Gombnyomaacutes detektaacutelaacutesaEbben az alfejezetben egy nagyon elemi kis feladatot oldunk meg a nyomoacutegombokkal kapcsolatban

6 feladat

A panel nyomoacutegombjainak lenyomaacutesaacutera vilaacutegiacutetson egy-egy LED a panel LED-soraacuten Egyuumlttes megnyomaacutesukkor mindkeacutet LED vilaacutegiacutetson A LED-ek bekapcsolaacutesa pontosan a lenyomaacutes idejeacuteig tartson [Code12]

A feladat megoldaacutesaacutehoz a MOV utasiacutetaacutesnak keacutet uacutej verzioacutejaacutet tanuljuk meg azokat amelyekkel adott bitet mozgatunk a Carry bitbe ill fordiacutetva

MOV CbitMOV bitC

A [6 feladat] megoldaacutesa amilyen roumlvid annyira laacutetvaacutenyos lesz műkoumldeacutes koumlzben A koacuted teacutenyleg csak paacuter sor iacutegy teljes egeacuteszeacuteben koumlzoumlljuumlk A bitek definiaacutelaacutesa gyakorlatilag baacuterhol toumlrteacutenhet a koacutedon beluumll

Code12asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelatabut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaled1 BIT P20 Az egyik szeacutelső LED szimboacutelumaled2 BIT P27 A maacutesik szeacutelső LED szimboacutelumaCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV Cbut1 Az 1 gomb bitjeacutenek mozgataacutesa C-beMOV led1C Aztaacuten C kirakaacutesa a led1 portbitreMOV Cbut2 A 2 gomb bitjeacutenek mozgataacutesa C-beMOV led2C Aztaacuten C kirakaacutesa a led2 portbitreJMP MAIN Kezdjuumlk eloumllrőlEND

2 Logikai műveletek bitekkelEzzel az alfejezettel eleacuterkeztuumlnk ahhoz a ponthoz ami a szaacutemiacutetaacutestechnikaacuteban aacuteltalaacuteban elkeruumllhetetlen

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

oumlsszefoglaljuk a logikai műveleteket eacutes az azokhoz tartozoacute utasiacutetaacutesokat Egyelőre mindezt a bitek szintjeacuten A baacutejtokkal ezek alapjaacuten kicsit keacutesőbb maacuter egeacuteszen koumlnnyen el fogunk baacutenni

Az előző alfejezetben megismerkedtuumlnk az egyedileg kezelhető bitek fogalmaacuteval eacutes maacutesoltuk is őket ide-oda Ezeket a biteket termeacuteszetesen eacuteppen uacutegy lehet magasra aacutelliacutetani toumlroumllni eacutes invertaacutelni mint a C bitet (laacutesd [A Carry bit] alfejezet)

SETB bitCLR bitCPL bit

Egyedi bitekkel a keacutet legfontosabb logikai műveletet veacutegezhetjuumlk el az EacuteS ill VAGY műveletet A biztonsaacuteg kedveacuteeacutert a [Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata]ban eacutes a [A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata] felideacutezzuumlk e keacutet művelet igazsaacutegtaacuteblaacutezataacutet csak a műveletekre az angol szoacutet hasznaacuteljuk Ha maacuter itt tartunk ne maradjon ki a negaacutecioacute művelete sem ([A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata])

91 taacuteblaacutezat - Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata

A B A AND B

0 0 0

0 1 0

1 0 0

1 1 1

92 taacuteblaacutezat - A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata

A B A OR B

0 0 0

0 1 1

1 0 1

1 1 1

93 taacuteblaacutezat - A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata

A NOT A

0 1

1 0

A fenti keacutet logikai művelet utasiacutetaacutesa bit tiacutepusuacute operandusokra a koumlvetkező

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

ANL CbitORL Cbit

A mnemonikok első keacutet betűje nyilvaacutenvaloacute az utaacutenuk koumlvetkező L pedig valoacutesziacutenűleg az angol Logical (logikai) szoacuteboacutel szaacutermazik A 80518052-es processzormag programozaacutesaacuteval foglalkozoacute szakkoumlnyvek mindenesetre ezekre a mnemonikokra nem adnak kimeriacutető magyaraacutezatot

Nagyon fontos szem előtt tartanunk hogy az eredmeacuteny mindig a C bitbe keruumll Mintha a koumlvetkező moacutedon iacuternaacutenk foumll a műveleteket

C = C AND bit

C = C OR bit

Amennyiben uacutegy adoacutedik a helyzet hogy a logikai műveletek elveacutegzeacuteseacutehez nem a bit neacutevvel illetett bitre hanem annak komplementereacutere (negaacuteltjaacutera inverzeacutere) van szuumlkseacuteg akkor a koumlvetkező keacutet utasiacutetaacutes lehet a segiacutetseacuteguumlnkre

ANL CbitORL Cbit

Ez utoacutebbi keacutet utasiacutetaacutes nem azonos a fentebbi kettővel geacutepi koacutedjuk is elteacuterő A perjel () utal arra hogy a művelet a C biten eacutes a megciacutemzett bit negaacuteltjaacuten hajtoacutedik veacutegre

3 Elaacutegazaacutesok bitek alapjaacutenA JZ eacutes JNZ utasiacutetaacutesok logikaacutejaacutet koumlvetve bitek eacuterteacuteke alapjaacuten is leacutetrehozhatunk felteacuteteles ugraacutesokat

JC relJNC relJB bitrelJNB bitrel

A mnemonikok az angol Jump if CBit Set (ugraacutes ha Cbit magas) eacutes Jump if CBit Not Set (ugraacutes ha Cbit nem magas (tehaacutet alacsony)) kifejezeacutesekből szaacutermaznak Az ugraacutes meacuterteacuteke a relatiacutev ciacutemkeacutenek megfelelően megint csak ndash128 eacutes +127 baacutejt koumlzoumltti eacuterteacutek lehet A harmadik eacutes negyedik utasiacutetaacutesnaacutel az első operandus azaz a bit arra utal hogy konkreacutet bitre kell hivatkoznunk Hogy teljes legyen a lista megadjuk az oumltoumldik ide tartozoacute utasiacutetaacutest is

JBC bitrel

Ez a mnemonik az angol Jump if Bit Set and Clear Bit kifejezeacutesből szaacutermazik Akkor toumlrteacutenik ugraacutes ha a hivatkozott bit eacuterteacuteke 1 eacutes ugraacuteskor mindjaacutert toumlrlődik is ez a bit Ez az utasiacutetaacutes viszonylag ritkaacuten keruumll elő de attoacutel meacuteg bizonyos helyzetekben nagyon is hasznos lehet

4 Logikai műveletek baacutejtokkalA [Logikai műveletek bitekkel] alfejezetben aacutettekintettuumlk a legelemibb logikai műveleteket kuumlloumlnaacutelloacute bitek eseteacuteben Hasonloacute moacutedon lehet logikai műveleteket veacutegezni baacutejtokon egyszerűen arroacutel van szoacute hogy keacutet baacutejtnak mindig az azonos helyieacuterteacutekű bitjein veacutegezzuumlk a műveletet A baacutejtokon azaz regiszterek vagy memoacuteriarekeszek tartalmaacuten veacutegrehajthatoacute logikai műveletek listaacuteja a maacuter ismert ciacutemzeacutesmoacutedokkal a koumlvetkező

ANL ARnANL AdirectANL AdataANL directAANL directdataORL ARnORL AdirectORL AdataORL directAORL directdata

Baacutejtok eseteacuteben szerencseacutere leacutetezik utasiacutetaacutes arra a logikai műveletre amelyet talaacuten sok olvasoacute titokban maacuter

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

hiaacutenyolt is ez lesz a kizaacuteroacute VAGY Angolul exclusive OR-nak hiacutevjaacutek iacutegy mi is az ebből szaacutermazoacute XOR roumlvidiacuteteacutest hasznaacuteljuk a [A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata]ban Eacuterdekes hogy bitekre nem hoztak leacutetre a gyaacutertoacutek ilyen utasiacutetaacutest

94 taacuteblaacutezat - A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata

A B A XOR B

0 0 0

0 1 1

1 0 1

1 1 0

A kizaacuteroacute VAGY műveletre vonatkozoacute utasiacutetaacutesok listaacuteja iacutegy fest

XRL ARnXRL AdirectXRL AdataXRL directAXRL directdata

A mnemonik az Exclusive OR Logical (kizaacuteroacute vagy logikai) angol kifejezeacutesből szaacutermazhat

Az ebben a fejezetben felsorolt ciacutemzeacutesmoacutedoknaacutel a logikai művelet eredmeacutenye mindig az első operanduskeacutent megadott regiszterbe vagy memoacuteriaciacutemre keruumll

5 Bitek moacutedosiacutetaacutesa baacutejton beluumllA baacutejtokra vonatkozoacute logikai műveletekkel aproacute de igen fontos feladatokat oldhatunk meg Az EacuteS művelettel tetszőlegesen vaacutelasztott biteket toumlroumllhetuumlnk egy baacutejtban fuumlggetlenuumll attoacutel hogy mi volt azok eredeti eacuterteacuteke Mindezt uacutegy hogy a toumlbbi bit eacuterteacuteke nem vaacuteltozik meg Vegyuumlk peacuteldaacutenak azt az esetet amikor toumlroumllni akarjuk egy baacutejt 1 eacutes 3 bitjeacutet Ebben az esetben az EacuteS művelet egyik operandusa az 11110101 lesz tehaacutet oda iacuterunk nullaacutekat ahol a bit toumlrleacuteseacutet veacutegezzuumlk Az ilyen műveletekre hasznaacutelt bitmintaacutekat maszknak vagy logikai maszknak nevezzuumlk Konkreacutet peacutelda bitek toumlrleacuteseacutere

11001100

AND 11110101

--------

11000100

Laacutethatoacute hogy ami a kijeloumllt helyeken az eredeti baacutejtban 1 volt az csakugyan 0-vaacute vaacutelt ami 0 volt az maradt 0 a toumlbbi bit pedig vaacuteltozatlan maradt

Ha most az a ceacutelunk hogy az előbbi helyeken eacuteppen magasra aacutelliacutetsuk a biteket akkor az előbbi maszk inverzeacutet hasznaacuteljuk azaz 00001010-t Tehaacutet oda iacuterunk 1-et ahol a magasra aacutelliacutetaacutest veacutegezzuumlk EacuteS művelet helyett most a VAGY műveletre van szuumlkseacuteguumlnk

11001100

OR 00001010

--------

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

11001110

Laacutethatoacute hogy ami a kijeloumllt helyeken az eredeti baacutejtban 0 volt az csakugyan 1-gyeacute vaacutelt ami 1 volt az maradt 1 a toumlbbi bit pedig vaacuteltozatlan maradt

A kizaacuteroacute VAGY művelettel meacuteg a fentiekneacutel is nagyobb huncutsaacutegot tudunk kivitelezni invertaacutelhatjuk a kijeloumllt helyen leacutevő biteket

11001100

XOR 00001010

--------

11000110

Ezek a maszkolaacutesi truumlkkoumlk nagyon hasznos eszkoumlzt adnak a kezuumlnkbe assembly nyelvű programozaacutes soraacuten hiszen igen sokszor kell majd egyes regiszterek bitjeit elszigetelt a toumlbbitől fuumlggetlen moacutedon aacutelliacutetgatnunk

6 Gombnyomaacutesok vizsgaacutelataEbben az alfejezetben olyan feladatot fogalmazunk meg a nyomoacutegombokkal kapcsolatban melynek megoldaacutesaacutehoz szuumlkseacuteg lesz az előző keacutet alfejezetben ismertetett utasiacutetaacutesokra

7 feladat

A panel nyomoacutegombjainak lenyomaacutesaacutera vilaacutegiacutetson egy-egy LED a panel LED-soraacutenak egyik ill maacutesik szeacuteleacuten Egyuumlttes megnyomaacutesukkor az oumlsszes LED vilaacutegiacutetson A LED-ek bekapcsolaacutesaacutet a gombnyomaacutesok pillanatnyi aacutellapota hataacuterozza meg [Code13]

A [6 feladat] megoldaacutesaacutenaacutel nem volt maacutes dolgunk mint hogy beraacutemoljuk a nyomoacutegomboknak megfelelő biteket a LED-ek bitjeibe Ez annak volt koumlszoumlnhető hogy mind a nyomoacutegombok mind a LED-ek inverz logikaacuteval dolgoznak azaz ha az ezeknek megfelelő bit 0 akkor vilaacutegiacutet egy LED ill van lenyomott aacutellapotban a nyomoacutegomb Most azonban enneacutel toumlbbre lesz szuumlkseacuteg Az algoritmus nem bonyolult folyamataacutebraacutera nincs is szuumlkseacuteg Code12 szimboacutelumait alapul veacuteve figyeljuumlk meg csupaacuten az alaacutebbi haacuterom sort mert ez lesz a [6 feladat] megoldaacutesaacutenak a lelke

CLR CORL Cbut1ORL Cbut2

Mi toumlrteacutenik itt Előszoumlr toumlroumlljuumlk a C bitet Utaacutena VAGY műveletet hajtunk veacutegre C-n szeacutepen sorban mindkeacutet gomb bitjeacutevel Ha mindkeacutet gomb le van nyomva (but1=but2=0) akkor a haacuterom sor veacutegrehajtaacutesa utaacuten C eacuterteacuteke 0 Ha csak az egyik gomb van lenyomva (valamelyikuumlk bitjeacutenek eacuterteacuteke 1) akkor a haacuterom sor veacutegrehajtaacutesa utaacuten C = 1 Ha egyik gomb sincs lenyomva akkor is ugyanezt kapjuk Laacutethatoacute tehaacutet hogy a kritikus esetet vagyis azt amikor mindkeacutet gombot lenyomtuk az jelzi ha a haacuterom sor veacutegrehajtaacutesa utaacuten C = 0 Eacutes ezzel a felteacutetellel maacuter meg tudunk fogalmazni elaacutegazaacutest A koacutedot ismeacutet teljes terjedelmeacuteben koumlzoumlljuumlk Vegyuumlk eacuteszre hogy a bitek szimboacutelumainak definiacutecioacuteja most maacutes helyen aacutell mint Code12-ben hiszen azt aacutelliacutetottuk hogy az ilyen sorok gyakorlatilag baacuterhol elhelyezkedhetnek a koacutedban

Code13asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelataCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaled1 BIT P20 Az egyik szeacutelső LED szimboacutelumaled2 BIT P27 A maacutesik szeacutelső LED szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV Cbut1 Az 1 gomb bitjeacutenek mozgataacutesa C-beMOV led1C Aztaacuten C kirakaacutesa a led1 portbitreMOV Cbut2 A 2 gomb bitjeacutenek mozgataacutesa C-be

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

MOV led2C Aztaacuten C kirakaacutesa a led2 portbitreCLR C Toumlroumlljuumlk C-tORL Cbut1 VAGY műveletet hajtunk veacutegre a nyomoacutegombok keacutet bitjeacutevelORL Cbut2 Ha valamelyik gomb nincs lenyomva (azaz eacuterteacuteke 1) akkor a VAGY műveletek veacutegeredmeacutenye 1 Ha mindkeacutet gombot lenyomjuk (bitjeik eacuterteacuteke 0) akkor a VAGY műveletek veacutegeredmeacutenye 0JNC dupla Ugrunk ha mindkeacutet gomb le van nyomvaORL P201111110b Akaacutermi is volt eddig a LED-eken kikapcsoljuk a koumlzeacutepső hatot a keacutet szeacutelsőt nem baacutentjukJMP MAIN Ugraacutes vissza a program elejeacutereduplaMOV P20 Az oumlsszes LED bekapcsolaacutesaJMP MAIN Kezdjuumlk eloumllrőlEND

7 Leacutepteteacutes nyomoacutegombbalNyomoacutegombokat toumlbbnyire nem a nyomogataacutes oumlroumlmeacuteeacutert hasznaacutelunk hanem valamilyen funkcioacutet adunk nekik A koumlvetkező feladat egeacuteszen egyszerű kis alkalmazaacutest fogalmaz meg melyben egyetlen nyomoacutegombeacute lesz a főszerep

8 feladat

Az 1 nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Uacutej leacutepeacutes csak a gomb felengedeacutese eacutes uacutejboacuteli lenyomaacutesa utaacuten toumlrteacutenhet [Code14]

Ha veacutegiggondoljuk hogy mire lesz itt szuumlkseacuteguumlnk sejthetjuumlk hogy a gomb lenyomaacutesaacutenak teacutenyeacutet valahogyan roumlgziacutetenuumlnk kell eacutes uacutej leacutepeacutes csak akkor koumlvetkezhet be ha a gombot felengedtuumlk majd uacutejra lenyomtuk azaz a lenyomaacutes teacutenyeacutenek aacutellapota megszűnik majd uacutejra fennaacutell Ezt az aacutellapotjelzeacutest most a C bittel valoacutesiacutetjuk meg keacutesőbb tanulunk raacute jobban hasznaacutelhatoacute megoldaacutest is Magaacutehoz az elvhez azonban a C bit is toumlkeacuteletesen megfelel A megvaloacutesiacutetaacutes folyamataacutebraacuteja a [A (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute

91 aacutebra - A [8 feladat] (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A koacuted maga nem tuacutel hosszuacute a koumltelező direktiacutevaacutekat ismeacutet elhagyjuk

Code14asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesaCLR C A C bit toumlrleacutese Ebben a programban arra hasznaacuteljuk hogy jelezze a lenyomaacutes aacutellapotaacutetwaitJNB but1lenyom Ugrunk ha a gomb le van nyomvaCLR C Toumlroumlljuumlk C-t mert felengedtuumlk a gombotJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozlenyomJC wait Ha maacuter lenyomott aacutellapotban van a gomb akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB C Ha meacuteg nem volt lenyomva a gomb akkor most maacuter le van nyomva Jelezzuumlk ezt az aacutellapotot a C bitenMOV AP2 Eggyel odeacutebb leacuteptetjuumlk a LED-et aRL A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

Amikor nagy eacutelvezettel nyomogatjuk a gombot hogy a vilaacutegiacutetoacute LED laacutetszoacutelag szaladgaacuteljon koumlrbe-koumlrbe neacuteha eacuterdekes jelenseacuteget tapasztalunk A nyomoacutegomb mechanikai szerkezeteacutetől fuumlggően ugyanis sokszor nem csekeacutely valoacutesziacutenűseacuteggel előfordul az hogy a LED hirtelen kettőt ugrik egy helyett Eacutes ez nem programhiba A jelenseacuteg neve prellegeacutes A prellegeacutes neacutemet eredetű szoacute (prellen ndash csapoacutedik kocog pattog visszapattan) az elektronikaacuteban azt jelenti hogy valamely alkatreacutesz jellemzően kapcsoloacute vagy nyomoacutegomb nem stabilan vaacutelt aacutet egyik aacutellapotaacuteboacutel a maacutesikba hanem toumlbbszoumlr zaacuterja ill szakiacutetja meg az aacuteramkoumlrt Ez a jelenseacuteg a most keacutesziacutetett alkalmazaacutesunkban anomaacutelis viselkedeacutest ideacutezhet elő Nagyon fontos hogy a prellegeacutes lehetőseacutegeacutenek mindig tudataacuteban legyuumlnk eacutes amikor csak tehetjuumlk veacutedekezzuumlnk ellene Keacutesőbb arra is mutatunk peacuteldaacutet hogy ezt hogyan tehetjuumlk meg

8 Bitvaacuteltozoacutek hasznaacutelataA [Nyomoacutegombok a panelon] fejezet bevezetőjeacuteben bemutattuk hogy hogyan lehet szimboacutelumokat rendelni konkreacutet bitekhez mint nyomoacutegombokhoz eacutes portbitekhez A [7 feladat] megoldaacutesaacutenaacutel a C bitet hasznaacuteltuk aacuteltalaacutenos ceacuteluacute keacutetaacutellapotuacute vaacuteltozoacutenak azaz bitvaacuteltozoacutenak Ott meacuteg elegendő volt egynek a hasznaacutelata Ez azonban csak ritkaacuten tarthatoacute igen sokszor egyneacutel joacuteval toumlbb bitvaacuteltozoacutera lesz szuumlkseacuteguumlnk amelyek maacuter nem a C bitet fogjaacutek terhelni

Az ADuC 842-es architektuacutera memoacuteriaacuteja 0 lapjaacutenak első 128 baacutejtjaacutet Lower RAM-nak azaz alsoacute RAM-nak hiacutevjaacutek Ez a memoacuteriateruumllet kuumlloumlnoumlsen eacuterdekes Az elektronikus tankoumlnyvben toumlbbszoumlr elővesszuumlk a memoacuteria speciaacutelis teruumlleteinek teacutemakoumlreacutet most azonban csak azt a teruumlletet taacutergyaljuk amelyik bitenkeacutent ciacutemezhető laacutesd [A Lower RAM bitenkeacutent ciacutemezhető teruumllete] aacutebra

92 aacutebra - A Lower RAM bitenkeacutent ciacutemezhető teruumllete

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A bitenkeacutent ciacutemezhető teruumllet memoacuteriaciacutemei 20h-toacutel 2Fh-ig tartanak A 20h memoacuteriaciacutemen pl egy nyolcbites baacutejt talaacutelhatoacute eacuteppen uacutegy mint maacuteshol Megfelelő ciacutemzeacutessel ez a baacutejt teljes egeacuteszeacuteben feluumlliacuterhatoacute Azonban ezt a kincset eacuterő memoacuteriateruumlletet nem iacutegy szokaacutes hasznaacutelni hiszen az ADuC 842-es architektuacuteraacuteja lehetőveacute teszi hogy a 20h-toacutel 2Fh-ig terjedő ciacutemeken leacutevő baacutejtokat bitenkeacutent ciacutemezhessuumlk Vagyis az emliacutetett 20h ciacutemen elhelyezkedő baacutejt minden egyes bitjeacutehez kuumlloumln hozzaacutefeacuterhetuumlnk eacutes felhasznaacutelhatjuk őket a programjainkban Peacuteldaacuteul jelzőbitkeacutent bitvaacuteltozoacutekeacutent Az alaacutebbi lista a bitenkeacutent ciacutemezhető memoacuteriateruumllet hozzaacuterendeleacuteseacutere mutat peacuteldaacutekat

bit0 BIT 00h

bit1 BIT 01h

gomb BIT 1Fh

marker BIT 5Bh

last_bit BIT 7Fh

Ezek utaacuten baacutermelyik bitre vonatkozoacute utasiacutetaacutesba baacutetran beiacuterhatnaacutenk a bit aacuteltalaacutenos megnevezeacutes (laacutesd [Logikai műveletek bitekkel] eacutes [Elaacutegazaacutesok bitek alapjaacuten] alfejezet) helyeacutere a fenti listaacuteban megadott neveket

A bitvaacuteltozoacutek megismereacutese utaacuten megfogalmazzuk a [9 feladat]ot amely a [8 feladat] tovaacutebbfejleszteacutese mindkeacutet iraacutenyra

9 feladat

A keacutet nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Az 1 gombbal balra a 2 gombbal jobbra toumlrteacutenjen a leacutepteteacutes Uacutej leacutepeacuteshez a gombok felengedeacutese eacutes uacutejboacuteli lenyomaacutesa szuumlkseacuteges [Code15]

Enneacutel a feladatnaacutel uacutegy tűnik hogy nem lesz eleacuteg egyetlen jelzőbit De ez nem jelent probleacutemaacutet hiszen maacuter tudjuk hogyan hasznaacutelhatunk bitvaacuteltozoacutekat A [A (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatjuk a [9 feladat] folyamataacutebraacutejaacutet amelyen a kritikus bitvaacuteltozoacutek a koumlvetkezők le1 le2 Ha ezek a jelzőbitek magasak akkor az 1 ill 2 gomb lenyomott aacutellapotban van Minden tovaacutebbi uumlgylet uacutegy toumlrteacutenik mint a [8 feladat] megoldaacutesaacutenaacutel

93 aacutebra - A [9 feladat] (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A [A (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten szereplő folyamataacutebra baacuter terjedelmesebb mint az eddigiek a koacuted nem lesz ennyire ijesztő

Code15asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumale1 BIT 00h Az 1 gomb lenyomott aacutellapotaacutet jelző bitvaacuteltozoacutele2 BIT 01h A 2 gomb lenyomott aacutellapotaacutet jelző bitvaacuteltozoacute

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

ORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesaCLR le1 A gombok lenyomott aacutellapotaacutet jelzőCLR le2 bitvaacuteltozoacutek toumlrleacutesewaitJNB but1balra Ugrunk ha az 1 gomb le van nyomvaJNB but2jobbra Ugrunk ha a 2 gomb le van nyomvaCLR le1 Ha egyik gomb sincs lenyomva toumlroumlljuumlk azokCLR le2 jelzőbitjeitJMP wait Uacutejra gombnyomaacutesra vaacuterunkbalraJB le1wait Ha baacutermelyik gomb lenyomott aacutellapotban vanJB le2wait akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB le1 Ha meacuteg nem volt lenyomva az 1 gomb akkor most maacuter le van nyomva Jelezzuumlk ez az aacutellapototMOV AP2 Eggyel balra leacuteptetjuumlk a LED-et a RL A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozjobbraJB le1wait Ha baacutermelyik gomb lenyomott aacutellapotban vanJB le2wait akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB le2 Ha meacuteg nem volt lenyomva a 2 gomb akkor most maacuter le van nyomva Jelezzuumlk ez az aacutellapototMOV AP2 Eggyel jobbra leacuteptetjuumlk a LED-et a RR A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

A prellegeacutes jelenseacutege enneacutel az alkalmazaacutesnaacutel eacuteppen uacutegy megfigyelhető mint Code14-neacutel Eacuteppen uacutegy tudomaacutesul vettuumlk eacutes eacuteppen uacutegy nem tettuumlnk ellene semmit mint előzőleg Tudaacutesunk jelenlegi szintjeacuten meacuteg pironkodva tovaacutebbleacutephetuumlnk de komoly alkalmazaacutesoknaacutel ez maacuter nem maradhat ennyiben

9 A prellegeacutes kikuumlszoumlboumlleacutese vaacuterakozaacutessalEbben az alfejezetben a feladat legyen hasonloacute a [9 feladat]hoz de moacutedosiacutetsuk azt egy kicsikeacutet Most ne az legyen a leacutenyeg hogy fel kelljen engedni a nyomoacutegombokat a koumlvetkező leacutepeacuteshez hanem az hogy bizonyos időnek el kelljen telnie ahhoz hogy uacutejboacuteli kieacuterteacutekeleacutes koumlvetkezzeacutek be

10 feladat

A keacutet nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Az 1 gombbal balra a 2 gombbal jobbra toumlrteacutenik a leacutepteteacutes A gombok uacutejboacuteli kieacuterteacutekeleacuteseacutehez neacutemi időkeacuteslelteteacutesen keresztuumll vezessen az uacutet [Code16]

Enneacutel a feladatnaacutel nem lesz szuumlkseacuteguumlnk bitvaacuteltozoacutekra viszont uacutejra előhuacutezzuk a joacutel bevaacutelt időhuacutezoacute szubrutinunkat (laacutesd [Parameacuteteraacutetadaacutes szubrutinnak] alfejezet) Amikor nyomoacutegomb lenyomaacutesaacutet eacuterzeacutekeli a program akkor elveacutegzi azt a műveletet amit kell (jelen esetben a bitforgataacutest) utaacutena pedig neacutehaacuteny tized maacutesodpercig vaacuter Iacutegy a prellegeacutest kikuumlszoumlboumlljuumlk viszont a vaacuterakozaacutest jelentő idő holt idő mert ott tovaacutebbi beavatkozaacutesra esemeacutenykezeleacutesre egyelőre nem lesz lehetőseacuteguumlnk Egyszerűbb esetekben ez nem is baj de kifinomultabb igeacutenyek eacutes feladatok eseteacuteben ez a moacutedszer nem engedhető meg Amikor eleacuteruumlnk a megszakiacutetaacutesok taacutergyalaacutesaacuteig erre a helyzetre is mutatni fogunk megoldaacutest A gombnyomaacutes eacuteszleleacutese utaacuteni cselekveacutes eacutes vaacuterakozaacutes egyszerűbb mint az előző keacutet feladat megoldaacutesaacutenak gondolatmenete iacutegy folyamataacutebra megadaacutesa sem szuumlkseacuteges A koacuted koumlnnyen eacutertelmezhető Eacutes annak is nyilvaacutenvaloacutenak kell lennie hogy enneacutel a megoldaacutesnaacutel akaacuter raacute is tenyerelhetuumlnk a nyomoacutegombokra akkor is leacutepkedni fog koumlrbe a LED Ha mindkeacutet gomb le van nyomva akkor viszont visszaugratjuk a vezeacuterleacutest a vaacuterakozaacuteshoz A leacutepeacutesek maximaacutelis sebesseacutegeacutet egyeacutebkeacutent eacuteppen a prellegeacutest kikuumlszoumlboumllő vaacuterakozaacutes hataacuterozza meg Ezt a szubrutint eacuteppen uacutegy nem tuumlntetjuumlk foumll mint a koraacutebbi programoknaacutel mert az nem vaacuteltozik meg most is ugyanazt hasznaacuteljuk (DELAY)

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

Code16asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut1 BIT P33 A 2 gomb szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesawaitJNB but1balra Ugrunk ha az 1 gomb le van nyomvaJNB but2jobbra Ugrunk ha a 2 gomb le van nyomvaJMP wait Uacutejra gombnyomaacutesra vaacuterunkbalraJNB but2wait Ha a 2 gomb is le van nyomva (azaz itt eacuteppen mind a kettő) akkor visszaugrunk a vaacuterakozaacuteshozMOV AP2 Eggyel balra leacuteptetjuumlk a LED-et a RL A bitforgataacutes művelettelMOV P2AMOV A10 01 s időhuacutezaacutes joumln aCALL DELAY szubrutinnalJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozjobbraJNB but1wait Ha az 1 gomb is le van nyomva (azaz itt eacuteppen mind a kettő) akkor visszaugrunk a vaacuterakozaacuteshozMOV AP2 Eggyel jobbra leacuteptetjuumlk a LED-et a RR A bitforgataacutes művelettelMOV P2AMOV A10 01 s időhuacutezaacutes joumln aCALL DELAY szubrutinnalJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

10 A teljes alsoacute RAMAz alsoacute RAM-roacutel maacuter foumllvillantottunk neacutehaacuteny reacuteszletet a [Bitvaacuteltozoacutek hasznaacutelata] alfejezetben Ott kizaacuteroacutelag a bitenkeacutent ciacutemezhető teruumlletet taacutergyaltuk Az alsoacute RAM-nak azonban van meacuteg keacutet fontos teruumllete Az első ilyen teruumllet ciacutemei 00h-toacutel 1Fh-ig tartanak azaz oumlsszesen 32 memoacuteriarekeszről van szoacute Ezen a teruumlleten helyezkednek el a memoacuteriaacuteban az R regiszterek Eacutes az a helyzet hogy ezekből a regiszterekből oumlsszesen neacutegy peacuteldaacuteny leacutetezik nyolcasaacuteval rendezve Olyan ez mintha nyolcfioacutekos szekreacutenyből lenne oumlsszesen neacutegy darabunk a szobaacutenkban Az R regiszterek ciacutemeit a [Az alsoacute RAM neacutegy regiszterbankja] aacutebra mutatja Bal szeacutelen a decimaacutelis ciacutemek mellettuumlk a hexadecimaacutelis eacuterteacutekek majd a regiszterek nevei

94 aacutebra - Az alsoacute RAM neacutegy regiszterbankja

A neacutegy darab nyolcfioacutekos szekreacutenyuumlnkkel viszont lesz egy kis baj Mindig csak egyiket hasznaacutelhatjuk A 80518052-es processzormagnaacutel ez azt jelenti hogy a neacutegy regiszterbank koumlzuumll mindig pontosan egy lesz aktiacutev azaz ha peacuteldaacuteul kiadjuk a MOV AR3 utasiacutetaacutest akkor az akkumulaacutetorba vagy a 03h vagy a 0Bh vagy az 13h vagy az 1Bh ciacutemről toumlltődik be a tartalom vagyis az eacuteppen aktuaacutelis R3 regiszter tartalma A regiszterbank kivaacutelasztaacutesa a PSW (Program Status Word ndash programaacutellapot) SFR-rel toumlrteacutenik Default esetben a 0 regiszterbank aktiacutev Ebben a tankoumlnyvben a tovaacutebbiakban nem vaacuteltunk regiszterbankot a default beaacutelliacutetaacutest hasznaacuteljuk A PSW (Program Status Word) SFR viszont annyira fontos hogy teljes tartalmaacutet megadjuk (laacutesd [A PSW SFR parameacuteterei]) eacutes nem csak hivatkozunk az ADuC 842-es leiacuteraacutesaacutera [1 p 21 Table 5]

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

95 taacuteblaacutezat - A PSW SFR parameacuteterei

PSW Program Status Word

Programaacutellapot

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Angol neacutev Magyar neacutev

7 CY Carry Flag Aacutetviteli bit

6 AC Auxiliary Carry Flag

Kiegeacutesziacutető aacutetviteli bit

5 F0 General-Purpose Flag

Aacuteltalaacutenos ceacuteluacute jelzőbit

4 RS1 Register Bank Select Bits

Regiszterbankot kivaacutelasztoacute bitek

3 RS0 RS1

0

0

1

1

RS0

0

1

0

1

Bank

0

1

2

3

2 OV Overflow Flag Tuacutelcsordulaacutes-bit

1 F1 General-Purpose Flag

Aacuteltalaacutenos ceacuteluacute jelzőbit

0 P Parity Bit Paritaacutesbit

A [A Lower RAM bitenkeacutent ciacutemezhető teruumllete] eacutes [Az alsoacute RAM neacutegy regiszterbankja] aacutebra alapjaacuten laacutethatoacute hogy a 128 baacutejt meacuteretű alsoacute RAM-ban 00h-toacutel 1Fh-ig a regiszterbankok helyezkednek el 20h-toacutel 2Fh-ig pedig a bitenkeacutent ciacutemezhető teruumllet De mi van 30h-toacutel 7Fh-ig Ezt a teruumlletet aacuteltalaacutenos ceacuteluacute teruumlletnek hiacutevjuk laacutesd [Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete] aacutebra

95 aacutebra - Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete

Ez a teruumllet elvileg szabad arra hasznaacuteljuk amire akarjuk Kivaacuteloacutean alkalmas baacutejtmeacuteretű vaacuteltozoacutek definiaacutelaacutesaacutera csak most egy maacutesik a DATA direktiacutevaacutet kell hasznaacutelnunk az assemblerben peacuteldaacuteul

byte0 DATA 030hbyte1 DATA 031h

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

last_byte DATA 07Fh

Iacutegy tehaacutet maacuter nem csak bitvaacuteltozoacuteink hanem baacutejtvaacuteltozoacuteink is lehetnek meacuteghozzaacute az alsoacute RAM-ban oumlsszesen 80 darab Ez talaacuten nem tűnik soknak elsőre de laacutetni fogjuk hogy ezzel a kis szabad hellyel is mennyi mindent meg lehet oldani

Created by XMLmind XSL-FO Converter

10 fejezet - A belső oacutera hasznaacutelataAz ADuC 842-es architektuacuteraacuteja toumlbb időziacutetőtszaacutemlaacuteloacutet tartalmaz eacutes tartalmaz egy belső oacuteraacutet is Ebben a fejezetben az oacutera hasznaacutelataacuteval fogunk megismerkedni Ennek neve angolul Time Interval Counter (TIC) ami magyarul időintervallum-szaacutemlaacuteloacutet jelent Az oacuteraacutehoz seregnyi SFR tartozik iacutegy előszoumlr is meg kell ismerkednuumlnk ezekkel Az időegyseacutegekhez tartozoacute SFR-eket a [Az időegyseacutegek SFR-jeinek parameacuteterei] foglalja oumlssze [1 p 56]

101 taacuteblaacutezat - Az időegyseacutegek SFR-jeinek parameacuteterei

SFR Angol neacutev Eacuterveacutenyes eacuterteacutekek Funkcioacute Default eacuterteacutek bekapcsolaacuteskor

HTHSEC Hundredths Seconds Time Register

0-127 A regiszter eacuterteacuteke 1-egyel nő minden 1128-maacutesodperces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a SEC regiszter noumlvekszik

00h

SEC Seconds Time Register

0-59 A regiszter eacuterteacuteke 1-egyel nő minden 1-maacutesodperces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a MIN regiszter noumlvekszik

00h

MIN Minutes Time Register 0-59 A regiszter eacuterteacuteke 1-egyel nő minden 1-perces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a HOUR regiszter noumlvekszik

00h

HOUR Hours Time Register 0-23 A regiszter eacuterteacuteke 1-egyel nő minden 60-perces időintervallum letelte utaacuten

00h

Az időegyseacutegek regiszterei gyakorlatilag belső uumltemezeacutes szerint kezelt vaacuteltozoacuteknak tekinthetők Az oacuteraacutet azonban be is kell kapcsolni azt meg lehet aacutelliacutetani eacutes meacuteg sok eacuterdekes dologra lehet raacutebiacuterni A legfontosabb az hogy el tudjuk indiacutetani eacutes meg tudjuk aacutelliacutetani Ehhez (eacutes a toumlbbi eacuterdekes dologhoz) a TIMECON SFR ismerete szuumlkseacuteges A [A TIMECON SFR parameacuteterei] a TIMECON SFR aacuteltalaacutenos parameacutetereit foglalja oumlssze Keacutesőbb a megszakiacutetaacutesok taacutergyalaacutesaacutenaacutel reacuteszletesebb ismerteteacutest koumlzluumlnk ([A TIMECON SFR parameacuteterei reacuteszletesebben]) A leacutenyeg most csupaacuten az hogy az oacuteraacutet a [Az időegyseacutegek SFR-jeinek parameacuteterei]ban ismertetett vaacuteltozoacutek kezdeti eacuterteacutekeacutenek beaacutelliacutetaacutesa utaacuten a TIMECON SFR 0 bitjeacutenek magasra aacutelliacutetaacutesaacuteval indiacutethatjuk el Ennek a bitnek a toumlrleacuteseacutevel az oacutera megaacutell Nagyon leacutenyeges hogy az oacutera az uacutejboacuteli indiacutetaacuteskor nem a megaacutelliacutetaacutesnaacutel megfigyelhető időeacuterteacutekről ketyeg tovaacutebb hanem a [Az időegyseacutegek SFR-jeinek parameacuteterei]ban ismertetett vaacuteltozoacutek legutoacutebbi beaacutelliacutetaacutesai szerint indul uacutejra [1 p 55 Table 24] Iacutegy ha folytatni akarjuk az időmeacutereacutest akkor az oacutera megaacutelliacutetaacutesakor el kell mentenuumlnk az időegyseacutegek vaacuteltozoacuteinak tartalmaacutet majd uacutejraindiacutetaacutes előtt uacutejra be kell toumlltenuumlnk azokat Az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban az oacutera regisztereinek ismerteteacuteseacuteneacutel foumllhiacutevjaacutek a figyelmet arra hogy bdquoelegendő időt kell hagyni az oacutera regisztereire vonatkozoacute utasiacutetaacutesok koumlzoumlttrdquo [1 p 54] Ez a megfogalmazaacutes eleacuteg koumldoumls de proacutebaacuteljuk meg eacutertelmezni Arroacutel van szoacute hogy

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

az intervallumszaacutemlaacuteloacutet egy 32 kHz-es kuumllső kristaacutely hajtja eacutes ez az oacuterajel vonatkozik az oacutera regisztereinek hozzaacutefeacutereacuteseacutehez is Iacutegy ha joacuteval nagyobb frekvenciaacuteval fut a processzorunk akkor egyszerűen nem lesz eleacuteg idő a regisztereket foumlluumlliacuterni eacutes anomaacutelis viselkedeacutesbe torkollik a program futaacutesa Erre megfelelő gyoacutegyiacuter lehet ha beszuacuterunk a programba egy roumlvid vaacuterakozaacutest Peacuteldaacuteul a NOP utasiacutetaacutest hajtjuk veacutegre neacutehaacutenyszor egy ciklussal A leacutenyeg az hogy ha a belső oacuteraacutet hasznaacuteljuk akkor mindig kuumlloumlnoumls figyelemmel teszteljuumlk a programunk műkoumldeacuteseacutet eacutes legyuumlnk felkeacuteszuumllve a fent emliacutetett hataacutes jelentkezeacuteseacutere eacutes annak kikuumlszoumlboumlleacuteseacutere

102 taacuteblaacutezat - A TIMECON SFR parameacuteterei

TIMECON TIC Control Register

Az időintervallum-szaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Az oacutera a 0 bit magasra aacutelliacutetaacutesaacuteval indul toumlrleacuteseacutevel megaacutell

Az oacutera indiacutetaacutesa logikai maszkolaacutessal a koumlvetkező moacutedon kivitelezhető

ORL TIMECON00000001b

Hasonloacute technikaacuteval az oacutera leaacutelliacutetaacutesa iacutegy toumlrteacutenhet

ANL TIMECON11111110b

Mindezek utaacuten fogalmazzunk meg egy nagyon egyszerű feladatot az oacuteraacuteval (TIC) kapcsolatban

11 feladat

Nullaacutezzuk majd Indiacutetsuk el a belső oacuteraacutet eacutes jelezzuumlk ki a maacutesodperceket a panel LED-soraacuten [Code17]

A feladat annyira egyszerű hogy ehhez joacuteformaacuten meacuteg magyaraacutezat is foumlloumlsleges Mivel a maacutesodperceket kell kijeleznuumlnk elegendő a SEC eacutes HTHSEC regisztreket nullaacuteznunk hiszen a maacutesik kettő időregiszter konkreacutet eacuterteacuteke esetuumlnkben teljesen melleacutekes

Code17asmMAINMOV TIMECON0 Mindenfeacutele oacuteraparameacutetert lenullaacutezunkMOV HTHSEC0 A 1128 maacutesodpercek nullaacutezaacutesaMOV SEC0 A maacutesodpercek nullaacutezaacutesaORL TIMECON00000001b Elindiacutetjuk az oacuteraacutet Logikai maszkolaacutessal magasra aacutelliacutetjuk a 0 bitetdisplayMOV ASEC A-ba toumlltjuumlk a maacutesodperceketCPL A Invertaacuteljuk az eacuterteacuteket a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-eken a maacutesodperceketJMP display Folytatjuk a kijelzeacutest Uacutejra eacutes uacutejra

Moacutedosiacutetsuk uacutegy a [11 feladat]ot hogy az 1 gomb megnyomaacutesaacutera megaacutelljon az oacutera a 2 gomb megnyomaacutesaacutera pedig folytatoacutedjeacutek az idő meacutereacutese

12 feladat

Indiacutetsuk el a belső oacuteraacutet 000000-roacutel Jelezzuumlk ki a maacutesodperceket a panel LED-soraacuten Az 1 gomb megnyomaacutesaacutera aacutelljon meg az oacutera a 2 gomb megnyomaacutesaacutera pedig induljon tovaacutebb onneacutet ahol megaacutellt [Code18]

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

Ahogyan emliacutetettuumlk az oacutera uacutejraindiacutetaacutesakor be kell toumlltenuumlnk a megfelelő SFR-ekbe azokat az eacuterteacutekeket amelyeket az oacutera megaacutelliacutetaacutesakor remeacutelhetőleg elmentettuumlnk Ehhez nevet adunk egy-egy memoacuteriarekesznek az alsoacute RAM-ban uacutegy ahogyan azt a [A teljes alsoacute RAM] alfejezetben bemutattuk A koacuted maga nem sokkal lesz bonyolultabb csupaacuten kicsit bővuumll Ennek elleneacutere ehhez a vaacuteltozathoz folyamataacutebraacutet is keacutesziacutetuumlnk (laacutesd [A (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebra)

101 aacutebra - A [12 feladat] (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja

Code18asmMHOUR DATA 030h A HOUR eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMMIN DATA 031h A MIN eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMSEC DATA 032h A SEC eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMHTHSEC DATA 033h A HTHSEC eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaMAINMOV TIMECON0 Mindenfeacutele oacuteraparameacutetert lenullaacutezunkMOV HTHSEC0 A 1128 maacutesodpercek nullaacutezaacutesaMOV SEC0 A maacutesodpercek nullaacutezaacutesaMOV MIN0 A percek nullaacutezaacutesaMOV HOUR0 Az oacuteraacutek nullaacutezaacutesaORL TIMECON00000001b Elindiacutetjuk az oacuteraacutet Logikai maszkolaacutessal magasra aacutelliacutetjuk a 0 bitetdisplay

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

MOV ASEC A-ba toumlltjuumlk a maacutesodperceketCPL A Invertaacuteljuk az eacuterteacuteket a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-eken a maacutesodperceketJNB but1stop Leaacutellunk ha megnyomtuk az 1 gombotJMP display Folytatjuk a kijelzeacutest Uacutejra eacutes uacutejrastopMOV MHTHSECHTHSEC Az 1128 maacutesodpercek elmenteacuteseMOV MSECSEC A maacutesodpercek elmenteacuteseMOV MMINMIN A percek elmenteacuteseMOV MHOURHOUR Az oacuteraacutek elmenteacuteseANL TIMECON11111110b A TIMECON regiszter 0 bitjeacutenek toumlrleacutese azaz megaacutelliacutetjuk az oacuteraacutetJB but2$ Vaacuterjuk a 2 gomb lenyomaacutesaacutetMOV HTHSECMHTHSEC Az 1128 maacutesodpercek visszatoumllteacuteseMOV SECMSEC A maacutesodpercek visszatoumllteacuteseMOV MINMMIN A percek visszatoumllteacuteseMOV HOURMHOUR Az oacuteraacutek visszatoumllteacuteseORL TIMECON00000001b A TIMECON regiszter 0 bitjeacutenek 1-re aacutelliacutetaacutesa azaz (uacutejra) elindiacutetjuk az oacuteraacutetJMP display Ugrunk vissza a kijelzeacuteshez

Veacutegezetuumll neacutezzuumlk meg kiacutevaacutencsisaacutegboacutel hogy igaz-e az hogy ha nem toumlltjuumlk vissza az oacutera uacutejraindiacutetaacutesa előtt az elmentett regiszterek eacuterteacutekeacutet akkor az teacutenyleg az utoljaacutera beaacutelliacutetott eacuterteacutekről indul Ehhez a fenti Code18-boacutel szedjuumlk ki azokat a sorokat amelyek a regiszterek elmenteacuteseacuteeacutert ill visszatoumllteacuteseacuteeacutert felelősek beleeacutertve persze a helyfoglalaacutest is a vaacuteltozoacuteknak Ehhez nem melleacutekeluumlnk kuumlloumln koacutedot a tankoumlnyvben de a moacutedosiacutetott programot Code19 neacuteven megtalaacutelhatjuk a koacutedkoumlnyvtaacuterban A hataacutes joacutel laacutethatoacute

Created by XMLmind XSL-FO Converter

11 fejezet - MegszakiacutetaacutesokA programozaacutest eacuteppen tanuloacute lelkes emberek a megszakiacutetaacutes szoacute hallataacuten aacuteltalaacuteban valami feacutelelmetes eacutes varaacutezslatos dologra gondolnak Attoacutel a perctől kezdve azonban hogy megeacutertik mi az mindez a vilaacuteg legtermeacuteszetesebb dolgaacutevaacute vaacutelik ami neacutelkuumll maacuter nem is lenne joacute az eacutelet (Ez egyeacutebkeacutent teacutenyleg iacutegy van)

Miről is van szoacute Keacutepzeljuumlk el azt az esetet amikor levelet vaacuterunk Valami nagyon fontos levelet Eacutes ilyen vagy olyan okok miatt a vilaacutegeacutert sem akarjuk elmulasztani annak szemeacutelyes aacutetveacuteteleacutet Mit tehetuumlnk ilyenkor

Tegyuumlk fel hogy nincsen csengőnk vagy van de nem műkoumldik Ilyenkor megtehetjuumlk azt hogy kiaacutellunk az ajtoacutenkba eacutes addig el nem megyuumlnk onneacutet amiacuteg meg nem joumln a postaacutes Kedvezőtlen esetben persze eacutehen halunk mert nem joumln a postaacutes Az elv tovaacutebbfejleszteacutese az hogy mondjuk 10 percenkeacutent 1 percig lessuumlk a postaacutest az ajtoacuteban aztaacuten visszamegyuumlnk a dolgunkra Ez maacuter sokszor műkoumldőkeacutepes oumltletnek fog bizonyulni Az ilyen elven toumlrteacutenő esemeacutenykezeleacutest jelfogaacutest pollozaacutesnak (poll angol ndash elnyer kap) hiacutevjaacutek a szaacutemiacutetaacutestechnikaacuteban Ennek finomiacutetott moacutedszere teacutenylegesen gyakran hasznaacutelatos

Tegyuumlk fel hogy van csengőnk A postaacutest lesni nincs időnk mert mondjuk a deacutel-afrikai beacutelyegeinket rendezgetjuumlk a baraacutetunkkal froumlccsoumlzuumlnk vagy eacuteppen puskaport keacutesziacutetuumlnk stb Nos ha megjoumln a postaacutes megnyomja a csengőt Ekkor megszakiacutetjuk addigi cselekveacutesuumlnket kimegyuumlnk alaacuteiacuterjuk a cetlit aztaacuten visszamegyuumlnk eacutes ott folytatjuk a teveacutekenyseacuteguumlnket ahol abbahagytuk Az ilyesfeacutele esemeacutenykezeleacutest hiacutevjuk a szaacutemiacutetaacutestechnikaacuteban megszakiacutetaacutesnak Ez az esemeacutenykezelő moacutedszer a valoacutesaacutegban aacuteltalaacuteban hateacutekonyabb mint a pollozaacutes

1 Az ADuC 842 megszakiacutetaacutesaiAz elektronikus tankoumlnyvben nem fogjuk az oumlsszes megszakiacutetaacutest peacuteldaacutekkal illusztraacutelva taacutergyalni De joacute neacutehaacutenyat felhasznaacutelunk koumlzuumlluumlk eacutes azokat termeacuteszetesen igen A megszakiacutetaacutes (interrupt angol latin eredetű ndash megszakiacutetaacutes) fogalom a szaacutemiacutetaacutestechnikaacuteban azt jelenti hogy az addig zajloacute programfutaacutes valamilyen esemeacuteny bekoumlvetkezte miatt felfuumlggesztődik eacutes a vezeacuterleacutes maacuteshovaacute keruumll ahonnan az esemeacuteny lekezeleacutese utaacuten aacuteltalaacuteban visszateacuter a vezeacuterleacutes az eredeti helyeacutere A megszakiacutetaacutesok kezeleacutese azt az eacuterzetet kelti sokszor hogy multitasking-roacutel van szoacute vagyis toumlbb folyamat paacuterhuzamos kezeleacuteseacuteről Ez azonban csak illuacutezioacute a 80518052-es mag egyszerre csak egy dolgot tud veacutegezni Ezt azonban sokszor annyira gyorsan teszi hogy toumlbb szakaszosan kezelt esemeacuteny eacutes veacutegrehajtaacutes csakugyan azt az illuacutezioacutet kelti mintha multitasking-roacutel lenne szoacute

Mi toumlrteacutenik egy megszakiacutetaacutesnaacutel A processzor elmenti a programszaacutemlaacuteloacute tartalmaacutet a verembe majd a megszakiacutetaacutes tiacutepusaacutenak fuumlggveacutenyeacuteben az adott megszakiacutetaacutes vektoraacutenak ciacutemeacutere ugrik a vezeacuterleacutes Neacutezzuumlk reacuteszletesen hogy mit jelentenek ezek a fogalmak

A verem sajaacutetos szerkezetű taacuteroloacute a szaacutemiacutetaacutestechnikaacuteban LIFO-taacuteroloacutenak is hiacutevjaacutek mert az utolsoacutenak belerakott elemet lehet kivenni elsőkeacutent Az angol betűszoacute is erre utal az eredeti kifejezeacutes last in ndash first out azaz utolsoacutenak be elsőnek ki Eacutertelmeacuteben ugyanezt jelenti a FILO betűszoacute is first in ndash last out azaz elsőnek be utolsoacutenak ki A verem szoacute szeacutepen kifejezi a taacuteroloacute jellegeacutet baacuter az eredeti angol szoacute a stack valoacutejaacuteban rakaacutest halmot jelent Kicsit vidaacutemabb szemleacutelettel eacutelve a veremtaacuteroloacute uacutegy műkoumldik mint amikor egy teacuterdzokniba gyoumlmoumlszoumlluumlnk biliaacuterdgolyoacutekat Nyilvaacuten azt tudjuk előszoumlr kivenni amelyiket utolsoacutekeacutent dugtuk bele a zokniba

A verem a szokvaacutenyos memoacuteriaacutek eseteacuteben meghataacuterozott memoacuteriateruumlletet jelent Azt hogy hovaacute keruumll be a koumlvetkező teacutetel a veremmutatoacute hataacuterozza meg A 80518052-es processzormag eseteacuten indulaacuteskor a verem a [A teljes alsoacute RAM] alfejezetben bemutatott alsoacute RAM 08h ciacutemeacuten kezdődik vagyis az 1 regiszterbanknaacutel Iacutegy tehaacutet nagyon vigyaacutezzunk arra hogy mikeacutent baacutenunk a regiszterbankokkal ha ezeket mind hasznaacutelni akarjuk akkor a verem helyeacutet aacutet kell definiaacutelnunk Ennek moacutedjaacuteroacutel azonban ebben a tankoumlnyvben nem eacutertekezuumlnk mert a default verem meacuterete is bőven eleacuteg lesz szaacutemunkra A veremmutatoacutet keacutet SFR tartalmazza most csak megemliacutetjuumlk hogy ezek SP eacutes SPH

A megszakiacutetaacutesvektorok ciacutemei a koacutedmemoacuteria legelejeacuten helyezkednek el Ezt a teacutenyt maacuter megemliacutetettuumlk a Code01 kommentjei koumlzoumltt A 0000h ciacutemre indulaacutesnaacutel eacutes reset-kor ugrik a program vezeacuterleacutese Kuumllső esemeacuteny bekoumlvetkezeacutesekor a 0003h vagy a 0013h ciacutemre Időziacutetőkszaacutemlaacuteloacutek tuacutelcsordulaacutesakor a 000Bh vagy 001Bh ciacutemre A soros porti kommunikaacutecioacute aacuteltal generaacutelt megszakiacutetaacuteskor a 0023h ciacutemre Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacuteskor a 0053h ciacutemre Az ADuC 842-es meacuteg toumlbb kuumlloumlnleges megszakiacutetaacutest keacutepes kezelni

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

itt csak azokat soroltuk foumll hamarjaacuteban melyekkel reacuteszletesen foglalkozunk a tankoumlnyvben A megszakiacutetaacutesvektorokat azeacutert hiacutevjaacutek vektornak mert ezekről a ciacutemekről jellemzően tovaacutebb kell ugratnunk a programot hiszen a megszakiacutetaacutesvektorokhoz tartozoacute ciacutemek igencsak koumlzel vannak egymaacuteshoz a koacutedmemoacuteriaacuteban paacuter utasiacutetaacutesnaacutel hosszabb koacutedot nem lehet koumlzeacutejuumlk iacuterni Iacutegy ezek a vektorok teacutenylegesen mutatnak valahovaacute

A megszakiacutetaacutesok taacutergyalaacutesaacutenaacutel oacutehatatlanul előjoumln a regiszterveacutedelem fogalma A tankoumlnyvben eddig leiacutertak alapjaacuten tudjuk hogy csaknem minden assembly nyelvű utasiacutetaacutes valamelyik kituumlntetett regiszterre vonatkozik Maacuterpedig ha a megszakiacutetaacutes lekezeleacuteseacutere szolgaacuteloacute koacutedreacuteszletben baacutermelyik regisztert foumllhasznaacuteljuk akkor aacuteltalaacuteban azok eacuterteacuteke megvaacuteltozik Ez pedig katasztrofaacutelis koumlvetkezmeacutenyekkel jaacuterna a főprogram uumlgyeire vonatkozoacutean Ilyenkor egyszerűen azt kell tennuumlnk hogy a megszakiacutetaacutest lekezelő programreacuteszben elmentjuumlk azoknak a regisztereknek az eacuterteacutekeacutet melyeket felhasznaacutelunk ebben a programreacuteszben A regiszterek tartalmaacutenak elmenteacutese a verembe toumlrteacutenik Visszateacutereacutes előtt pedig a sorrendre figyelve visszatoumlltoumlgetjuumlk az elmentett regiszterek eacuterteacutekeacutet a veremből majd visszateacuteruumlnk a megszakiacutetaacutest lekezelő programreacuteszből Ez utoacutebbi fogalmat gyakran szintuacutegy csak megszakiacutetaacutesnak nevezik iacutegy ez a szoacute ettől kezdve keacutet fogalmat is jeloumllhet aacutem ez eacutertelemzavart szinte sohasem okoz

Regiszterveacutedelemre sokszor szubrutinoknaacutel is szuumlkseacuteg van hiszen ugyanaz lehet igaz a regiszterek hasznaacutelataacutera mint amit az előbb taglaltunk Eacutes persze az is lehet hogy a hasznaacutelandoacute szubrutint nem is mi iacutertuk hanem valaki maacutes eacutes mi csak be akarjuk eacutepiacuteteni a sajaacutet koacutedunkba Remeacuteljuumlk hogy a mostanra magaacutetoacutel vilaacutegossaacute vaacutelt hogy mi a kuumlloumlnbseacuteg szubrutin eacutes megszakiacutetaacutes koumlzoumltt Ha netaacuten meacutegsem akkor a keacutet fogalom koumlzoumltti kuumlloumlnbseacuteg leacutenyege abban rejlik hogy a szubrutinokat előre tervezett moacutedon mindig ugyanarroacutel a helyről hiacutevogatja a főprogram a megszakiacutetaacutesok viszont bizonyos esemeacutenyek hataacutesaacutera vaacuteltoacutednak ki fuumlggetlenuumll attoacutel hogy hol tart a főprogram

A verembe valoacute adatmenteacutest a koumlvetkező utasiacutetaacutessal valoacutesiacutethatjuk meg

PUSH iram addr

Az utasiacutetaacuteslistaacutek ezt a fenti moacutedon adjaacutek meg Az iram addr az internal RAM address angol kifejezeacutesből szaacutermazik azaz belső RAM-ciacutemet jelent A Push szoacute azt jelenti hogy nyom raacutenyom Az toumlrteacutenik hogy a megadott memoacuteriaciacutemen talaacutelhatoacute eacuterteacuteket raacutenyomjuk a kupacra rakaacutesra azaz beletesszuumlk a verembe Ilyesformaacuten adhatunk meg konkreacutet regisztereket

PUSH ACCPUSH R0PUSH R7

A veremből valoacute adatkiveacutetel a

POP iram addr

utasiacutetaacutessal toumlrteacutenik A Pop angol szoacute igen-igen sok mindent jelent de a Pop Value from Stack kifejezeacutest legszerencseacutesebben talaacuten a kupacroacutel lekap jelenteacutessel fordiacutethatjuk ami itt annyit tesz hogy eacuterteacuteket veszuumlnk ki a veremből Konkreacutet peacuteldaacutekkal

POP R7POP R0POP ACC

Jegyezzuumlk meg hogy az akkumulaacutetorra enneacutel a keacutet utasiacutetaacutesnaacutel az ACC roumlvidiacuteteacutessel hivatkozunk Ez azeacutert van iacutegy mert ilyenkor az akkumulaacutetor nem az utasiacutetaacuteshoz tartozik hanem annak csupaacuten az argumentuma Lehetne baacutermi maacutes is viszont ezt a konkreacutet memoacuteriaciacutemet (az E0h ciacutemű SFR-ről van szoacute kuumlloumlnben) az assemblerhez tartozoacute szimboacutelumlistaacuteban eacuteppen az ACC neacutevvel illetteacutek Akaacuter azt is iacuterhatnaacutenk hogy

PUSH 0E0hPOP 0E0h

Megszakiacutetaacutesboacutel a RETI utasiacutetaacutessal teacuter vissza a program vezeacuterleacutese az eredeti helyeacutere A mnemonik a Return from Interrupt (visszateacutereacutes a megszakiacutetaacutesboacutel) kifejezeacutesből szaacutermazik

A megszakiacutetaacutesoknak prioritaacutesi parameacuteteruumlk lehet ami az ADuC 842-esneacutel a koumlvetkezőkeacuteppen neacutez ki vannak magas eacutes alacsony prioritaacutesuacute megszakiacutetaacutesok Ezek az IP eacutes IEIP2 SFR-ek tartalmaacuteval konfiguraacutelhatoacutek A default beaacutelliacutetaacutes szerint az oumlsszes eddig emliacutetett megszakiacutetaacutestiacutepus alacsony prioritaacutesuacute A tankoumlnyvben ezen nem is

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

vaacuteltoztatunk Annyit azonban el kell mondanunk hogy magas prioritaacutesuacute megszakiacutetaacutes megszakiacutetja az alacsony prioritaacutesuacutet de fordiacutetva ilyen nem toumlrteacutenhet eacutes nem is toumlrteacutenik Ha azonos prioritaacutesuacute megszakiacutetaacutesok egyidejűleg koumlvetkezneacutenek be akkor az eddig emliacutetettek koumlzuumll a koumlvetkező sorrendben hajtoacutednak veacutegre (a legnagyobb prioritaacutesuacuteval kezdve) 0 kuumllső esemeacuteny 0 időziacutetőszaacutemlaacuteloacute 1 kuumllső esemeacuteny 1 időziacutetőszaacutemlaacuteloacute soros porti esemeacuteny időintervallum-szaacutemlaacuteloacute A megszakiacutetaacutesok hasznaacutelataacutet egy aacuteltalaacutenos jelzőbittel (EA) engedeacutelyezni kell majd egyeseacutevel a hasznaacutelni kiacutevaacutent tiacutepusokat is Ha pedig bizonyos esemeacutenyre valoacute reagaacutelaacutes nemkiacutevaacutenatossaacute vaacutelik a megszakiacutetaacutesokat le is lehet tiltani Sőt azok egymaacutest is letilthatjaacutek De meacuteg sajaacutet magukat is Minderről reacuteszletesen a koumlvetkező alfejezetekben nyerhetuumlnk keacutepet

2 Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutesAz ADuC-panel keacutet nyomoacutegombjaacutenak megnyomaacutesa egy-egy olyan esemeacuteny amely megszakiacutetaacutes kivaacuteltaacutesaacutera alkalmas amennyiben engedeacutelyezzuumlk azt Ezeket a megszakiacutetaacutesokat kuumllső megszakiacutetaacutesoknak nevezzuumlk A [A kuumllső megszakiacutetaacutesok jellemzői] a kuumllső megszakiacutetaacutesokkal kapcsolatos tudnivaloacutekat foglalja oumlssze a [Az IE SFR parameacuteterei] pedig azt az SFR-t amelyben a megszakiacutetaacutesok engedeacutelyezőbitjei talaacutelhatoacutek [1 p 70 Table 35]

111 taacuteblaacutezat - A kuumllső megszakiacutetaacutesok jellemzői

A Kuumllső megszakiacutetaacutesok jellemzői

ADuC 842 laacuteba portbit P32 P33

Megnevezeacutes angolul external interrupt 0 external interrupt 1

Megnevezeacutes magyarul 0 kuumllső megszakiacutetaacutes 1 kuumllsőmegszakiacutetaacutes

Engedeacutelyezőbit EX0 EX1

Nyomoacutegomb 1 gomb 2 gomb

Vektor ciacuteme 0003h 0013h

112 taacuteblaacutezat - Az IE SFR parameacuteterei

IE Interrupt Enable Register

Megszakiacutetaacutesengedeacutelyező regiszter

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Jelenteacutes

7 EA Valamennyi megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

6 EADC Nem taacutergyaljuk

5 ET2 Nem taacutergyaljuk

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

4 ES Az UART soros port megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

3 ET1 A Timer 1 megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

2 EX1 Az 1 kuumllső megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

1 ET0 A Timer 0 megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

0 EX0 A 0 kuumllső megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

A fentiek utaacuten megfogalmazhatjuk a koumlvetkező feladatunkat amelyben szuumlkseacuteguumlnk lesz a gombnyomaacutesok megszakiacutetaacutesokkal toumlrteacutenő kezeleacuteseacutere

13 feladat

Az ADuC-panel LED-soraacuten fusson koumlrbe egy LED Az 1 gomb megnyomaacutesaacutera aacutelljon meg a futaacutes ezt pedig a 2 gomb megnyomaacutesaacuteval lehessen feloldani [Code20]

A feladat megoldaacutesa nem lesz neheacutez meacutegis rajzolunk folyamataacutebraacutet hiszen előszoumlr hasznaacutelunk megszakiacutetaacutesokat A főprogram semmi egyebet nem csinaacutel mint leacutepteti koumlrbe-koumlrbe az egy szem kigyuacutejtott LED-et Egy-egy leacutepeacutes (eacutes utaacutena a megszokott vaacuterakozaacutes) akkor toumlrteacutenik ha egy fut nevű jelzőbit eacuterteacuteke magas kuumlloumlnben a főprogram helyben jaacuter A fut nevű jelzőbit eacuterteacutekeacutet eacuteppen a megszakiacutetaacutesok aacutelliacutetjaacutek be a megfelelő moacutedon A keacutet megszakiacutetaacutes mindig letiltja sajaacutet magaacutet eacutes engedeacutelyezi a maacutesikat Ez amolyan koumllcsoumlnoumls kizaacuteraacutest jelent A folyamataacutebra a [A (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute Ezen maacuter hasznaacuteljuk a fut EX0 eacutes EX1 biteket A [13 feladat] megoldaacutesaacutet jelentő koacuted meacuteg mindig nem tekintendő bdquohosszuacutenakrdquo

111 aacutebra - A [13 feladat] (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

Code20asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutes vektoraJMP GOMB1 Ugrunk az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacuteszhezORG 0013h A 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutes vektoraJMP GOMB2 Ugrunk a 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacuteszhezORG 0060h A teacutenyleges programkoacuted kezdetefut BIT 00h A futaacutes engedeacutelyezőbitje Bitvaacuteltozoacute Ezt majd a megszakiacutetaacutesok aacutelliacutetgatjaacutek a főprogram leginkaacutebb csak figyeliGOMB1 Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutes lekezeleacuteseCLR EX0 Az 1 gomb megszakiacutetaacutesaacutenak letiltaacutesaCLR fut Toumlroumlljuumlk a fut jelzőbitetSETB EX1 Engedeacutelyezzuumlk a 2 gomb (1 kuumllső esemeacuteny) megszakiacutetaacutesaacutetRETI Visszateacuteruumlnk a megszakiacutetaacutesboacutelGOMB2 A 2 gomb aacuteltal kivaacuteltott megszakiacutetaacutes lekezeleacuteseCLR EX1 A 2 gomb megszakiacutetaacutesaacutenak letiltaacutesaSETB fut Foumllaacutelliacutetjuk a fut jelzőbitet SETB EX0 Engedeacutelyezzuumlk az 1 gomb (0 kuumllső esemeacuteny) megszakiacutetaacutesaacutetRETI Visszateacuteruumlnk a megszakiacutetaacutesboacutelMAIN A főprogram kezdeteSETB fut Foumllaacutelliacutetjuk a futaacutest jelző bitetMOV P211111110b Az első LED bekapcsolaacutesaCLR EX1 Az 1 kuumllső esemeacuteny (2 gomb) megszakiacutetaacutesaacutenak letiltaacutesa (A sor maga foumlloumlsleges mert amuacutegy is iacutegy indul az ADuC csak az eacuterthetőseacuteg kedveacuteeacutert tesszuumlk ideSETB EX0 A 0 kuumllső esemeacuteny (1 gomb) megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesfigyelJNB fut$ Ha fut=0 akkor helyben jaacuterunk Egyeacutebkeacutent csorog tovaacutebb a programMOV AP2RL A A LED-ek baacutejtjaacutenak balra forgataacutesaMOV P2AMOV A10 01 s vaacuterakozaacutes koumlvetkezikCALL DELAY Időhuacutezoacute rutin meghiacutevaacutesaJMP figyel Ugraacutes vissza a rsquofutrsquo bit figyeleacuteseacutehez

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

3 Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutesAz előző alfejezetben megismerkedtuumlnk a belső oacutera hasznaacutelataacuteval amit időintervallum-szaacutemlaacuteloacutenak is hiacutevnak (TIC) Most fog kideruumllni hogy mieacutert talaacuteloacute ez az elnevezeacutes Ennek eacuterdekeacuteben ismerkedjuumlnk meg az INTVAL SFR-el (laacutesd [Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei])

113 taacuteblaacutezat - Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei

SFR Angol neacutev Eacuterveacutenyes eacuterteacutekek Funkcioacute Default eacuterteacutek bekapcsolaacuteskor

INTVAL User Time Interval Select Register

0-255 A kiacutevaacutent időintervallum darabszaacutema felhasznaacuteloacutei programmal iacuterhatoacute a regiszterbe Amikor a 8-bites intervallum-szaacutemlaacuteloacute egyenlő lesz az INTVAL regiszterbe iacutert eacuterteacutekkel megszakiacutetaacutes leacutep fel amennyiben engedeacutelyezett

00h

Mire lesz joacute nekuumlnk az INTVAL regiszter Arra hogy a belső oacuteraacutera raacuteakasztunk meacuteg egy funkcioacutet amely keacutepes arra hogy meghataacuterozott darabszaacutemuacute előre roumlgziacutetett időintervallum eltelte utaacuten megszakiacutetaacutest vaacuteltson ki Ezzel leszuumlnk keacutepesek olyan koacutedokat iacuterni amelyek meghataacuterozott időnkeacutent periodikusan veacutegeznek valamilyen feladatot Ehhez azonban ki kell egeacutesziacutetenuumlnk a [A TIMECON SFR parameacuteterei]ot A TIMECON SFR műkoumldeacuteseacutenek szaacutemunkra szuumlkseacuteges reacuteszleteit a [A TIMECON SFR parameacuteterei reacuteszletesebben] tartalmazza Tovaacutebbi reacuteszletek talaacutelhatoacutek az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban [1 p 55 Table 24]

114 taacuteblaacutezat - A TIMECON SFR parameacuteterei reacuteszletesebben

TIMECON TIC Control Register

Az időintervallum-szaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Bit neve Jelenteacutes

7 - Foglalt

6 TFH 24-oacuteraacutes uumlzemmoacutedot beaacutelliacutetoacute bit Ha 1 akkor az oacutera szaacutemlaacuteloacuteja 0-toacutel 23-ig fut Ha 0 akkor 0-toacutel 255-ig

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

5 ITS1 Az intervallum időalapjaacutet beaacutelliacutetoacute bitek A koumlvetkező kombinaacutecioacutek aacutelliacutethatoacutek be az intervallum-szaacutemlaacuteloacute frissiacuteteacuteseacutehez

ITS1 ITS0 Időegyseacuteg

0 0 1128 maacutesodperc

0 1 1 maacutesodperc

1 0 1 perc

1 1 1 oacutera

4 ITS0

3 STI Egyszeri intervallumtuacutelleacutepeacutest engedeacutelyező bit (Nem taacutergyaljuk)

2 TII Az intervallum-szaacutemlaacuteloacute megszakiacutetaacutesi bitje (Nem taacutergyaljuk)

1 TIEN Az időintervallumokat engedeacutelyező bit Ha 1 engedeacutelyezzuumlk a 8-bites időintervallum-szaacutemlaacuteloacutet

0 TCEN Az oacutera engedeacutelyezőbitje Ha 1 indul az oacutera ha 0 leaacutell az oacutera A TIC regiszterei TCEN=0 eseteacuten iacuterhatoacutek

Amennyiben peacuteldaacuteul perc egyseacutegben adott megszakiacutetaacutesokat szeretneacutenk az ITS1 ill ITS0 biteket 1-re ill 0-ra kell aacutelliacutetanunk Ha maacutesodperc egyseacutegben adott megszakiacutetaacutesokat akkor 0-ra ill 1-re Ilyenkor az INTVAL regiszter tartalmazza a kivaacutelasztott időegyseacuteg darabszaacutemaacutet eacutes a megszakiacutetaacutes a darabszaacutem letelte utaacuten koumlvetkezik be Iacutegy lehet periodikusan megszakiacutetaacutest kivaacuteltani mondjuk 5 percenkeacutent 10 maacutesodpercenkeacutent stb

A [Az IE SFR parameacuteterei]ban felsoroltuk hogy melyik megszakiacutetaacutesok engedeacutelyezhetők az IE SFR-rel Csakhogy ebben a felsorlaacutesban nincsen benne az intervallumszaacutemlaacuteloacute De semmi baj a megszakiacutetaacutesokhoz egy maacutesodlagos SFR is tartozik amelyikben viszont maacuter benne lesz Ezt mutatja a [Az IEIP2 SFR parameacuteterei (reacuteszlet)] (a teljesseacuteg igeacutenye neacutelkuumll) Tovaacutebbi reacuteszletek a gyaacuteri leiacuteraacutesban olvashatoacutek [1 p 71 Table 37]

115 taacuteblaacutezat - Az IEIP2 SFR parameacuteterei (reacuteszlet)

IEIP2 Secondary Interrupt Enable Register

Maacutesodlagos megszakiacutetaacutesengedeacutelyező regiszter

Bekapcsolaacutes utaacuteni default eacuterteacutek A0h = 10100000b

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Jelenteacutes

7 - Foglalt

5 PPSM A taacutepellaacutetaacutest figyelő megszakiacutetaacutes prioritaacutesa (Nem taacutergyaljuk)

2 ET2 Az időintervallum-szaacutemlaacuteloacutehoz tartozoacute megszakiacutetaacutes engedeacutelyezeacutese (1) vagy letiltaacutesa (0)

A fentiek ismereteacuteben nekifuthatunk a koumlvetkező feladatnak

14 feladat

Az ADuC-panel LED-soraacutenak oumlsszes LED-je villanjon foumll roumlvid ideig minden egyes maacutesodpercben [Code21]

A feladat megoldaacutesa egeacuteszen egyszerű lesz folyamataacutebraacutet nem is igeacutenyel Azt fogjuk megvaloacutesiacutetani hogy az intervallum-szaacutemlaacuteloacute megfelelő beaacutelliacutetaacutesaival minden egyes maacutesodpercben kivaacuteltunk egy megszakiacutetaacutest A megszakiacutetaacutes felkapcsolja a LED-eket vaacuterakozik egy kicsit majd lekapcsolja a LED-eket eacutes visszateacuter a főprogramba Hogy meacuteg szebb legyen a megvaloacutesiacutetaacutes ugyanazt az időhuacutezoacute rutint fogjuk hasznaacutelni mint eddig de azt most nem a főprogram hanem a megszakiacutetaacutes hiacutevja meg Csak arra kell vigyaacuteznunk nehogy a megszakiacutetaacutesban toumlltoumltt idő toumlbb legyen mint a koumlvetkező kivaacuteltaacutesig eltelt idő mert akkor anomaacutelis programműkoumldeacutesre kell szaacutemiacutetanunk Jelen esetben a regiszterveacutedelemmel nem fogunk toumlrődni mert sem a megaszakiacutetaacutes sem a szubrutin nem baacutentjaacutek sem egymaacutes sem a főprogram vaacuteltozoacuteit Tovaacutebbaacute ne felejtsuumlk hogy az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutes vektora a 0053h ciacutemen helyezkedik el Az oacuteraacutenak nem is adunk most kezdeti eacuterteacuteket hiszen teljesen mindegy hogy honnan indul nekuumlnk csak a maacutesodpercek muacutelaacutesa szaacutemiacutet A koacuted meacuteg mindig egyszerűnek titulaacutelhatoacute A roumlvidseacuteg kedveacuteeacutert a megszokott eacutes vaacuteltozatlan formaacuteban aacutetvett DELAY szubrutinunkat most sem tuumlntetjuumlk foumll A bitenkeacutent nem ciacutemezhető SFR-eknek valoacute eacuterteacutekadaacuteskor sziacutenes kiemeleacutessel jeloumlljuumlk azokat a biteket amelyek kuumlloumlnoumls fontossaacuteggal biacuternak a koacuted szempontjaacuteboacutel

Code21asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdeteMAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL1 1 maacutesodpercenkeacutent kell kivaacuteltani a megszakiacutetaacutestORL TIMECON00010011b Folytonos intervallumszaacutemlaacutelaacutes Maacutesodperc alapuacute Ezt az 5 eacutes 4 bittel aacutelliacutetjuk be Az 1 bitaz intervallumszaacutemlaacuteloacutet indiacutetja a 0 bit magaacutet az oacuteraacutetORL IEIP200000100b Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes engedeacutelyezeacutese Ez a bit a maacutesodlagos engedeacutelyezőregiszterben van Ez a regiszter bitenkeacutent nem ciacutemezhető iacutegy logikai maszkolaacutest hasznaacutelhatunkSETB EA A megszakiacutetaacutesok globaacutelis engedeacutelyezeacuteseJMP $ Itt veacutegtelen ciklusba keruumll a program hiszen a főprogramnak nincs toumlbb dolgaTIKTAK Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutesMOV P20 LED-ek bekapcsolaacutesaMOV A10 01 s-ig fogunk vaacuterakozni

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

CALL DELAY A vaacuterakozoacute szubrutin meghiacutevaacutesaMOV P2255 LED-ek kikapcsolaacutesaRETI Visszateacutereacutes a megszakiacutetaacutesboacutel

4 A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesokEbben az alfejezetben olyan alkalmazaacutest mutatunk be amely kombinaacutelja a kuumllső esemeacutenyek (azaz a gombnyomaacutesok) eacutes az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesait A feladat ugyanis olyan lesz hogy a programot e keacutet megszakiacutetaacutestiacutepus neacutelkuumll csak kiacutenkeservesen lehetne megiacuterni Iacutegy viszont viszonylag egyszerűen

15 feladat

A LED-soron leacuteptessuumlnk a Knight Rider-eacutehez hasonloacute mintaacutezatot jobbra-balra Tegyuumlk ezt uacutegy hogy haacuterom egymaacutes melletti LED leacutepkedjen ide-oda de a LED-sor szeacuteleacutehez eacuterve a szeacutelső LED mindig leacutepjen is ki A nyomoacutegombokkal lehessen gyorsiacutetani eacutes lassiacutetani a mintaacutezat leacutepkedeacuteseacutet A prellegeacutest adott ideig toumlrteacutenő vaacuterakozaacutessal kuumlszoumlboumlljuumlk ki [Code22]

Előszoumlr is tisztaacutezzuk hogyan mikeacutent menjen a mintaacutezat Ezt mutatja az alaacutebi aacutebra amely az utolsoacute sor utaacuten uacutejrakezdhető

112 aacutebra - A [15 feladat]ban megkoumlvetelt LED-leacutepteteacutes

Ezt a Knight Rider-es leacutepteteacutest az olvasoacute bizonyaacutera maacuter oumlnaacutelloacutean is meg tudnaacute csinaacutelni A Code22-ben egy megoldaacutest fogunk mutatni melyben felhasznaacuteljuk az RRC A eacutes RLC A utasiacutetaacutesokat Leacutenyeges hogy kell egy kezdeti eacuterteacutek a mintaacutezathoz utaacutena viszont maacuter keacutet szabaacutelyos cikluson keresztuumll (7 leacutepeacutes jobbra majd 7 leacutepeacutes balra) a veacutegtelenseacutegig mehet a leacutepteteacutes

Enneacutel sokkal eacuterdekesebb lesz ahogy most a megszakiacutetaacutesokkal baacutenni fogunk A főprogram nem csinaacutel semmi egyebet mint a veacutegtelenseacutegig leacutepteti a mintaacutezatot jobbra-balra Minden egyes leacutepeacutes utaacuten betoumllti egy vaacuteltozoacuteboacutel (wait) az aktuaacutelis vaacuterakozaacutes idő egyseacutegeacutet majd meghiacutevja a joacute oumlreg DELAY szubrutinunkat Nyilvaacutenvaloacute hogy a keacutet nyomoacutegomb megszakiacutetaacutesainak a vaacuterakozaacutesi idő vaacuteltozoacutejaacutet (wait) kell manipulaacutelnia Az 1 nyomoacutegomb megszakiacutetaacutesa noumlveli wait eacuterteacutekeacutet a 2 nyomoacutegomb megszakiacutetaacutesa csoumlkkenti wait eacuterteacutekeacutet (Ezek az eacuterteacutekek Code22-ben 1 eacutes 30 koumlzoumlttiek lehetnek)

Most joumln a csel A nyomoacutegombok megszakiacutetaacutesa azonnal letiltja oumlnmagaacutet eacutes elindiacutetja az időintervallum-szaacutemlaacuteloacutet ami egy bizonyos előiacutert időeacuterteacutek (16128 s = 0125 s) lejaacuterta utaacuten kivaacuteltja a sajaacutet megszakiacutetaacutesaacutet Az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesa leaacutelliacutetja magaacutet az intervallumszaacutemlaacutelaacutest majd uacutejra engedeacutelyezi a nyomoacutegombok megszakiacutetaacutesaacutet eacutes ezzel veacuteget is eacuter Ezzel az elvvel egyreacuteszt kikuumlszoumlboumlljuumlk a prellegeacutest maacutesreacuteszt a gombok megszakiacutetaacutesa a főprogram futaacutesa koumlzben keacutepes olyan vaacuteltozoacutet manipulaacutelni amit a főprogram amuacutegy rendszeresen hasznaacutel Ezzel vaacutelik lehetőveacute a LED-ek leacutepteteacutese alatti azaz menet koumlzbeni sebesseacutegaacutelliacutetaacutes

A megoldaacutes koacutedja maacuter nem nevezhető pofonegyszerűnek ezeacutert csereacutebe viszont egeacuteszen laacutetvaacutenyos megjeleneacutest kiacutenaacutel eacutes kombinaacutelja az eddig megtanult keacutet megszakiacutetaacutestiacutepust Az olvasoacutet arra biztatjuk hogy elemezze a programot eacutes addig ne haladjon tovaacutebb amiacuteg teljes egeacuteszeacuteben meg nem eacutertette annak műkoumldeacuteseacutet A megeacuterteacutest elősegiacutető folyamataacutebra a [A (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute

Enneacutel a programnaacutel nagyon fontos lesz a regiszterveacutedelem hiszen a kuumllső esemeacutenyek (gombnyomaacutesok) megszakiacutetaacutesai nem csak az akkumulaacutetort hasznaacuteljaacutek hanem a C bitet is iacutegy ez utoacutebbit is el kell mentenuumlnk Ezt most uacutegy fogjuk megtenni hogy egy kuumlloumln bitvaacuteltozoacutet definiaacutelunk (savec) erre a ceacutelra

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

113 aacutebra - A [15 feladat] (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja

A koacutedot a tankoumlnyvben nem a legbővebb kommentezeacutessel ismertetjuumlk hosszabb vaacuteltozat aacutell rendelkezeacutesre a koacutedkoumlnyvtaacuterban Figyeljuumlk meg hogy az oacuteraacutet elindiacutetaacutes utaacuten soha toumlbbeacute nem aacutelliacutetjuk le csak az intervallumszaacutemlaacuteloacutet engedeacutelyezzuumlk vagy tiltjuk le

Code22asmCSEG A koacutedszegmens kezdetewait DATA 030h Baacutejtvaacuteltozoacute a moacutedosiacutethatoacute időhuacutezaacuteshozsavec BIT 00h Bitvaacuteltozoacute a Carry elmenteacuteseacutereORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB1 vektoraORG 0013h A 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB2 vektoraORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdete Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1PUSH ACC Regiszterveacutedelem

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

MOV savecC A Carry bit elmenteacuteseCLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaMOV Await Megvizsgaacuteljuk az időhuacutezaacutes vaacuteltozoacutejaacutetCJNE A30novel Ha (meacuteg) nem 30 akkor noumlvelhetjuumlkJMP tova1 Kuumlloumlnben maacuter nem noumlvelhetjuumlknovelINC wait Noumlveljuumlk wait eacuterteacutekeacutettova1 MOV Csavec A Carry bit visszatoumllteacutesePOP ACC Az elmentett eacuterteacutek kiszedeacutese a verembőlRETI A 2 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB2PUSH ACC RegiszterveacutedelemMOV savecC A Carry bit elmenteacuteseCLR EX1 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaMOV Await Megvizsgaacuteljuk az időhuacutezaacutes vaacuteltozoacutejaacutetCJNE A1csokkent Ha (meacuteg) nem 1 akkor csoumlkkenthetjuumlkJMP tova2 Kuumlloumlnben maacuter nem csoumlkkenthetjuumlkcsokkentDEC wait Csoumlkkentjuumlk wait eacuterteacutekeacutettova2 MOV Csavec A Carry bit visszatoumllteacutesePOP ACC Az elmentett eacuterteacutek kiszedeacutese a verembőlRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111101b Az intervallumszaacutemlaacuteloacute leaacutelliacutetaacutesaSETB EX0 Az 1 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EX1 A 2 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseRETI FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 0125 maacutesodpercenkeacutent kell kivaacuteltani a megszakiacutetaacutest Ennyi teljen el gombnyomaacutes utaacuten hogy ismeacutet eacuterzeacutekeny legyen a gombra a programMOV TIMECON00000001b Az oacutera elindiacutetaacutesa eacutes 1128 s az egyseacuteg az intervallumszaacutemlaacutelaacuteshozMOV IEIP200000100b Az intervallumszaacutemlaacuteloacute engedeacutelyezeacutese Ez a bit a maacutesodlagos engedeacutelyezőregiszterben vanSETB EX0 Az 1 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EX1 A 2 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesMOV wait15 Kezdeti eacuterteacutek az időhuacutezaacutes vaacuteltozoacutejaacutenakMOV P200111111b Kezdeti elrendezeacutes Kigyuacutejtunk keacutet LED-et a bal oldalon MOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAY Az időhuacutezoacute szubrutin meghiacutevaacutesaCLR C Toumlroumlljuumlk a Carry bitet hogy amikor jobbra beforgatjuk a LED-ek portjaacuteba akkor ott maacuter haacuterom LED vilaacutegiacutetsonujraMOV R47 Heacutetszer fogunk leacuteptetni jobbra a Carry-n keresztuumll

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

jobbraMOV AP2 A LED-ek portjaacutenakRRC A leacutepteteacutese jobbraMOV P2AMOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAYDJNZ R4jobbra A ciklusvaacuteltozoacute vizsgaacutelataMOV R47 Heacutetszer fogunk leacuteptetni balra a Carry-n keresztuumllbalraMOV AP2 LED-ek portjaacutenakRLC A leacutepteteacutese jobbraMOV P2AMOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAYDJNZ R4balra A ciklusvaacuteltozoacute vizsgaacutelataJMP ujra Folytatjuk a leacutepteteacutestEND

Mielőtt elbuacutecsuacuteznaacutenk ettől a programtoacutel meg kell jegyeznuumlnk hogy a C bit veacutedelmeacutet maacuteskeacutepp is megoldhatjuk Ehhez kuumlloumln bit definiaacutelaacutesa helyett az akkumulaacutetor utaacuten mentsuumlk el a verembe a PSW SFR tartalmaacutet hiszen a C bit ebben talaacutelhatoacute (vouml [A PSW SFR parameacuteterei])

PUSH ACCPUSH PSW

A visszaszedeacutes pedig figyelve a sorrendre iacutegy toumlrteacutenhet

POP PSW POP ACC

Created by XMLmind XSL-FO Converter

12 fejezet - Kuumllső aacuteramkoumlroumlk LED-ekkelAz előző fejezetek utaacuten eleacuterkezett az idő arra hogy veacutegre kuumllső aacuteramkoumlroumlket kapcsoljunk a mikrovezeacuterlőnkhoumlz A kuumllső aacuteramkoumlroumlk hasznaacutelata termeacuteszetesen meacuteg nagyon sok tudnivaloacutet fog megkoumlvetelni az ADuC 842-essel kapcsolatban de ezeket szeacutepen sorban amennyire csak lehet egymaacutesra eacutepiacutetve taacutergyaljuk

Melyek azok a jelzőberendezeacutesek amelyekkel az aacutetlagember a legtoumlbbszoumlr talaacutelkozik Valoacutesziacutenűleg a koumlzlekedeacutesi jelzőlaacutempaacutek Ebben a fejezetben ezeket fogjuk modellezni A fejezetben a koumlzlekedeacutesi jelzőlaacutempaacutek feacutenyeit LED-ek reprezentaacuteljaacutek a helyzetmeghataacuterozaacuteshoz pedig fotokapukat fogunk hasznaacutelni Innentől kezdve az egyes feladatok megoldaacutesaacutehoz mindig aacuteramkoumlri rajz is tartozik Az alkatreacuteszek oumlsszevaacutelogataacutesa termeacuteszetesen nem kizaacuteroacutelagos a tananyag elkeacutesziacuteteacuteseacutehez igyekeztuumlnk koumlnnyen eleacuterhető ill olcsoacute aacuteramkoumlri elemeket vaacutelasztani A LED-ek kiveacuteteleacutevel az alkalmazott alkatreacuteszek mindegyikeacutehez tartozik elektronikus leiacuteraacutes ezeket kuumlloumln koumlnyvtaacuter tartalmazza Megfelelő villamosmeacuternoumlki ismeretekkel baacutetran vaacutelaszthatunk maacutes tiacutepusuacute alkatreacuteszeket is legfeljebb kicsit aacutet kell alakiacutetanunk az aacuteramkoumlrt esetleg a koacutedot

1 Jelzőlaacutempa vezeacuterleacutese16 feladat

Modellezzuumlnk a haacuteromlencseacutes koumlzlekedeacutesi jelzőlaacutempa alapfunkcioacutejaacutet uacutegy hogy az egyes sziacutenek vaacuteltaacutesaacutet előre roumlgziacutetett időziacuteteacuteshez koumltjuumlk [Code23 Code24]

A feladat megoldaacutesa nagyon-nagyon egyszerű Bekapcsoljuk az adott LED-et vaacuterakozunk az ehhez a faacutezishoz tartozoacute ideig aztaacuten tovaacutebbleacutepuumlnk A vaacuterakozaacutes toumlrteacutenhetne a joacute oumlreg DELAY szubrutininkkal is de alkalmazzuk most inkaacutebb az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesaacutet Oldjuk meg a feladatot uacutegy hogy a LED-ek bekapcsolaacutesaacuteeacutert felelős bitmintaacutezatokat eacutes a vaacuterakozaacutesi időket előre megadjuk a koacutedmemoacuteriaacuteban adatkeacutent

A haacuteromlencseacutes jelzőlaacutempaacutet LED-ekkel modellező aacuteramkoumlr rajza a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute A LED-ek előteacutet-ellenaacutellaacutesait egeacuteszen szabadon megvaacutelaszthatjuk csak arra figyeljuumlnk hogy ne aacutelliacutetsunk elő tuacutel nagy aacuteramerősseacuteget az egyes aacutegakban Ennek eacuterteacuteke persze a LED-tiacutepusoktoacutel fuumlgg de 10-15 mA aacuteltalaacuteban bőven eleacuteg Az ADuC 842-es mikrovezeacuterlő portjai koumlzuumll most akaacuter a 0-at akaacuter a 2-at hasznaacutelhatnaacutenk Mivel eddig a 2 portot hasznaacuteltuk ndash hiszen arra vannak koumltve a panelra uumlltetett aproacute LED-ek ndash vaacutelasszuk most a nulladik portot Nagyon figyeljuumlnk azonban arra hogy a portok aktiacutev kimenetkeacutent nem hasznaacutelhatoacutek (kiemelve a [Fontos tudnivaloacute a portokkal kapcsolatban] aacutebraacuten) A portok laacutebaival viszont minden tovaacutebbi neacutelkuumll foumlldre huacutezhatjuk a raacutejuk koumltoumltt aacuteramkoumlri elemeket hiszen ez a foumlld a taacutepellaacutetaacutes foumlldje

121 aacutebra - Fontos tudnivaloacute a portokkal kapcsolatban

A 0-s port bitjeinek sajaacutetos kiosztaacutesa a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten azzal fuumlgg oumlssze hogy iacutegy toumlbb helyuumlnk marad a dugdosoacutes proacutebapanelon iacutezleacutesesen egymaacutes melleacute tenni az 5 mm-es tokozaacutesuacute LED-eket amennyiben ilyeneket hasznaacutelunk (Eacutes ebben a tankoumlnyvben ilyeneket hasznaacutelunk)

122 aacutebra - A [16 feladat] (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

A program műkoumldeacuteseacutenek leacutenyege az hogy az egyes laacutempafaacutezisokhoz tartozoacute bitmintaacutezatokat eacutes a faacutezisok időtartamaacutenak eacuterteacutekeit a koacutedmemoacuteriaacuteban helyezzuumlk el ahonnan azokat a [Adatok elhelyezeacutese a koacutedban] alfejezetben ismertetett moacutedon olvassuk ki Kuumlloumln toumlmbben aacutellnak a bitmintaacutezatok eacutes kuumlloumln toumlmbben a vaacuterakozaacutesi időeacuterteacutekek maacutesodperc egyseacutegben megadva Iacutegy menet koumlzben mindig a megfelelő toumlmbkezdetet kell majd az adatmutatoacuteba toumlltenuumlnk A vaacuterakozaacutest az időintervallum-szaacutemlaacuteloacute (TIC) megszakiacutetaacutesa valoacutesiacutetja meg melynek beaacutelliacutetaacutesa szinteacuten maacutesodperces kell hogy legyen A megszakiacutetaacutes az adott idő letelte utaacuten vaacuteltoacutedik ki eacutes a megszakiacutetaacutes programreacuteszeacuteben magasra aacutelliacutetoacutedik egy jelzőbit (tovabb) A főprogram az egyes laacutempafaacutezisok koumlzoumltt erre a bitre vaacuter eacutes ha azt a megszakiacutetaacutes magasra aacutelliacutetja akkor joumlhet a koumlvetkező laacutempafaacutezis Addig viszont a főprogram helyben jaacuter eacutes csak lesi hogy beaacutell-e a keacuterdeacuteses bit A megszakiacutetaacutes leaacutelliacutetja az intervallumszaacutemlaacuteloacutet eacutes az oacuteraacutet is hiszen a koumlvetkező laacutempafaacutezishoz elteacuterő vaacuterakozaacutesi idő tartozhat iacutegy moacutedosiacutetani kell az INTVAL regisztert Ez pedig csak leaacutelliacutetott oacuteraacuteval lehetseacuteges Az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet a főprogram indiacutetja ismeacutet az uacutej laacutempafaacutezis kezdeteacuten Most kell visszaemleacutekeznuumlnk a [A belső oacutera hasznaacutelata] fejezetben leiacutertakra Arra hogy az intervallumszaacutemlaacuteloacute regisztereinek foumlluumlliacuteraacutesakor elegendő időt kell biztosiacutetanunk a műveletre kuumlloumlnben a foumlluumlliacuteraacutes nem toumlrteacutenik meg Erre az INTVAL regiszter kuumlloumlnoumlsen eacuterzeacutekeny iacutegy a roumlvid kis vaacuterakozaacutes nem hiaacutenyozhat (Ha nem hiszi nyugodtan proacutebaacutelja ki a kedves olvasoacute hogy mi toumlrteacutenik akkor ha kiszedi a koacutedboacutel ezt a vaacuterakozoacute ciklust A laacutempafaacutezisok időziacuteteacutese nem fog az előiacutert moacutedon műkoumldni vagy egyaacuteltalaacuten nem fog műkoumldnihellip)

A megoldaacuteshoz most nem klasszikus folyamataacutebraacutet melleacutekeluumlnk hiszen a koacuted maga nem tuacutel bonyolult A műkoumldeacutest most olyan aacutellapot-aacutetmenetgraacuteffal szemleacuteltetjuumlk (laacutesd [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef] aacutebra) amelyben az aacutellapotokat a graacutef csuacutecsai jeloumllik Ezeket az egyes faacutezisokhoz tartozoacute sziacutenek angol kezdőbetűivel jeloumlljuumlk R ndash red piros RA ndash red-amber piros-saacuterga A ndash amber borostyaacutensaacuterga G ndash green zoumlld A csuacutecsokhoz folyamataacutebra-szerűen kapcsolunk blokkokat melyek az ott veacutegrehajtott leacutepeacuteseket mutatjaacutek termeacuteszetesen csak a műkoumldeacutes szempontjaacuteboacutel legfontosabbakat Az aacutellapotok koumlzoumltti aacutetmeneteket a graacutef eacutelei reprezentaacuteljaacutek melyekre az aacutetmenet felteacuteteleacutet iacuterjuk Ne felejtsuumlk hogy a felteacutetelekben szereplő tovabb bitvaacuteltozoacutet az intervallumszaacutemlaacuteloacutehoz koumltoumltt megszakiacutetaacutes aacutelliacutetja mindig 1-re Az egyes aacutellapotoknaacutel a TIC(Tn) jeloumlleacutes eacutertelme az hogy az intervallumszaacutemlaacuteloacutehoz (TIC-hez) tartozoacute megszakiacutetaacutest az n-edik faacutezishoz tartozoacute ideig tartoacute vaacuterakozaacutessal engedjuumlk uacutetjaacutera A megszakiacutetaacutest a graacuteftoacutel elkuumlloumlniacutetve aacutebraacutezoljuk (Enneacutel a blokknaacutel csak a jelzőbitre koncentraacutelunk)

123 aacutebra - A [16 feladat] megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef

Code23asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdete

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

tovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehoz Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111100b Az oacutera eacutes az intervallumszaacutemlaacuteloacute leaacutellSETB tovabb A tovaacutebbot jelző bit foumllaacutelliacutetaacutesaRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON00010000b Maacutesodperces uumlzemmoacuted beaacutelliacutetaacutesaORL IEIP200000100b Az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesujraMOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell a koacuted-indirektMOVC AA+DPTR ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-aacutes portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV INTVALA A soron koumlvetkező vaacuterakozaacutesi eacuterteacutek betoumllteacutese az INTVAL regiszterbeMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetORL TIMECON00000011b Indiacutetjuk az intervallumszaacutemlaacuteloacutetJNB tovabb$ Vaacuterunk hogy 1 legyen a tovabb bit Ezt az intervallumszaacutemlaacuteloacute megszakiacutetaacutesa inteacuteziCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP ujra Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozlampaDB 11111101b A piros LED bitmintaacutezataDB 11110101b A piros eacutes a saacuterga LED bitmintaacutezataDB 11011111b A zoumlld LED bitmintaacutezataDB 11110111b A saacuterga LED bitmintaacutezatavarDB 3121 Az egyes laacutempafaacutezisok vaacuterakozaacutesi ideje maacutesodpercben

Figyeljuumlk meg hogy az adatbaacutejtokat vesszővel elvaacutelasztva is iacuterhatjuk nem kell mindegyiket okvetlenuumll kuumlloumln sorba tennuumlnk

A koumlvetkező alfejezet koumlnnyebb eacuterthetőseacutege eacuterdekeacuteben előredolgozunk egy kicsit eacutes meacuteg egy megoldaacutest mutatunk a [16 feladat]hoz A megoldaacutesi elv gyakorlatilag ugyanaz lesz mint előbb csak nem maacutesodperces intervallumszaacutemlaacutelaacutest alkalmazunk hanem mondjuk 18 maacutesodpercet vaacutelasztunk egyseacutegnek Ezt a program elejeacuten mindjaacutert be is aacutelliacutetjuk eacutes toumlbbet nem nyuacutelunk hozzaacute Tesszuumlk ezt uacutegy hogy 1128 s alapuacute szaacutemlaacutelaacutest aacutelliacutetunk be a TIMECON SFR-rel az INTVAL regiszterbe pedig 16-ot toumlltuumlnk Iacutegy kapjuk meg a 16128 s = 18 s időszeletet Meacuteg egyszer hangsuacutelyozzuk hogy az intervallumszaacutemlaacutelaacutest nem vaacuteltoztatjuk a program futaacutesa koumlzben annak egyseacutege maacutes szoacuteval időszelete ez az 18 s lesz a teljes futaacutes soraacuten

Kell egy olyan vaacuteltozoacute amellyel a TIC megszakiacutetaacutes az eltelt időszeleteket szaacutemlaacutelja (szaml) Kell aztaacuten meacuteg egy vaacuteltozoacute is amelybe az egyes laacutempafaacutezisokhoz szuumlkseacuteges vaacuterakozaacutes eacuterteacutekeacutet adjuk meg termeacuteszetesen 18 s

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

egyseacutegben (tvar) Ezek utaacuten leacutenyegeacuteben minden ugyanuacutegy toumlrteacutenik mint az előző programban kiveacuteve a megszakiacutetaacutest lekezelő programreacuteszt Ez mindig 1-gyel noumlveli szaml eacuterteacutekeacutet eacutes megneacutezi hogy ennek eacuterteacuteke eleacuterte-e tvar eacuterteacutekeacutet Ha nem akkor szaml eacuterteacutekeacutet noumlveli 1-gyel Ha igen akkor rendben is vagyunk letelt a szuumlkseacuteges vaacuterakozaacutes oumlsszes kicsi időszelete eacutes magasra lehet aacutelliacutetani a tovabb bitet Figyeljuumlnk oda arra hogy a szaml vaacuteltozoacutet 1-ről indiacutetsuk hiszen amikor előszoumlr vaacuteltoacutedik ki a TIC megszakiacutetaacutesa akkor maacuter eltelt a beaacutelliacutetott időintervallum azaz jelen esetben 18 s A moacutedosiacutetott aacutellapot-aacutetmenetgraacutefot az alaacutebbi aacutebra mutatja

124 aacutebra - A [16 feladat] moacutedosiacutetott megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef

A fentebbi aacutebraacuten szemleacuteltetett megoldaacutesi elv koacutedja Code24 csak neacutehaacuteny sorban kuumlloumlnboumlzik Code23-toacutel iacutegy a tankoumlnyvben csak a leacutenyegi elteacutereacutesek sorait tuumlntetjuumlk foumll Fontos hogy Code24-ben csak a főprogram legelejeacuten kell az intervallumszaacutemlaacuteloacutet eacutes az oacuteraacutet inicializaacutelnunk Utaacutena toumlbbeacute nem kapcsoljuk le őket iacutegy uacutejraindiacutetaacutesukra sincs szuumlkseacuteg Emiatt az INTVAL-nak toumlrteacutenő eacuterteacutekadaacutes utaacuten most nem is kell vaacuterakoznunk A teljes koacuted megtalaacutelhatoacute a koacutedtaacuterban

Code24asmORG 0060h A teacutenyleges programkoacuted kezdetetovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehozszaml DATA 030h Az 18-ad maacutesodperces intervallumok szaacutemolaacutesaacutenak vaacuteltozoacutejatvar DATA 031h Az aktuaacutelisan szuumlkseacuteges vaacuterakozaacutes vaacuteltozoacuteja Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKMOV Aszaml Ha szaml eacuterteacuteke nem egyenlő tvar CJNE Atvarnovel eacuterteacutekeacutevel akkor noumlveljuumlk szaml eacuterteacutekeacutetSETB tovabb Kuumlloumlnben tovabb=1RETInovelINC szaml Noumlveljuumlk szaml eacuterteacutekeacutetRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 16-ot toumlltuumlnk INTVAL-ba mert 16128 s = 18 s lesz az alap-időosztaacutesunkMOV TIMECON00000011b 1128 maacutesodperces intervallumhossz beaacutelliacutetaacutesa eacutes az oacutera eacutes az intervallum- szaacutemlaacuteloacute elindiacutetaacutesaORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacutet

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV tvarA Betoumlltjuumlk tvar-ba a szuumlkseacuteges vaacuterakozaacutes időtartamaacutet Ennyiszer 18 s-et kell vaacuterakozniCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetMOV szaml1 Az 18 s-es időszeletek szaacutemlaacutelaacutesaacutenak vaacuteltozoacutejaacutet alapeacuterteacutekre aacutelliacutetjuk

2 Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedjaA bemutatott ciklusszervezeacutesi moacutedszerekneacutel ([Hat variaacutecioacute egy feladatra] alfejezet) minden esetben szuumlkseacuteg volt a ciklusvaacuteltozoacute vizsgaacutelataacutera Amennyiben az akkumulaacutetor nulla vagy eacuteppen nem nulla mivoltaacutera voltunk kiacutevaacutencsiak hasznaacutelhattuk a JZ vagy JNZ utasiacutetaacutesokat Enneacutel oumlsszetettebb volt de ugyanide lyukadt ki a DJNZ utasiacutetaacutes is csak az a vizsgaacutelat előtt meacuteg eggyel csoumlkkenti is az adott regiszter tartalmaacutet Szabadabb oumlsszehasonliacutetaacutest a CJNE utasiacutetaacutessal tudtunk megvaloacutesiacutetani amely akkor ugrat ha nem aacutell fenn egyenlőseacuteg Mindez rendben is van de egyvalami meacuteg faacutejdalmasan hiaacutenyzik Ez pedig annak kieacuterteacutekeleacutese hogy egy regiszter tartalma kisebb vagy nagyobb-e egy maacutesik regiszter tartalmaacutenaacutel Nos tovaacutebbi oumlsszehasonliacutetoacute utasiacutetaacutesaink nincsenek de az egyiket felhasznaacutelhatjuk ilyesfeacutele kieacuterteacutekeleacutesre

A CJNE utasiacutetaacutes mellett sok oumlsszefoglaloacuteban ezt laacutethatjuk

CJNE xyrel C = x lt y

Mit jelent ez A CJNE xyrel utasiacutetaacutes maacuter eacuterthető szaacutemunkra hiszen erről volt szoacute a [Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesok] alfejezetben A processzor oumlsszehasonliacutetja az x eacuterteacuteket y eacuterteacutekeacutevel eacutes relatiacutev ugraacutest valoacutesiacutet meg ha azok nem egyenlők De mit jelent a jobb oldali kifejezeacutes Ennek megeacuterteacutese most igen-igen fontos lesz mert ismeacutet csak hasznos eszkoumlz hullik az oumlluumlnkbe A C=xlty kifejezeacutes azt jelenti hogy a CJNE utasiacutetaacutes veacutegrehajtaacutesa utaacuten a Carry bit eacuterteacuteke 1 lesz ha igaz hogy xlty eacutes 0 lesz ha xy Ezek utaacuten pedig maacuter gond neacutelkuumll elaacutegaztathatjuk a programot a JC eacutes JNC utasiacutetaacutesokkal Iacutegy tudjuk koumlnnyen megfogalmazni azt hogy pl az akkumulaacutetor eacuterteacuteke keacutet adott eacuterteacutek koumlzeacute esik-e Csak arra kell figyelnuumlnk hogy a keacuterdeacuteses rendezett halmazunk keacutet szeacutelső eacuterteacuteke beleesik-e a kiacutevaacutent tartomaacutenyba vagy sem Ha az xy kifejezeacutesben az egyenlőseacuteg meacuteg mindig nem kiacutevaacutenatos akkor azt elinteacutezhetjuumlk egy erre iraacutenyuloacute vizsgaacutelattal

A koumlvetkező peacuteldaacuten az igen ciacutemkeacutehez keruumll a program vezeacuterleacutese ha az akkumulaacutetor tartalma 10 eacutes 20 koumlzoumltt van a hataacuterokat is beleeacutertve Ellenkező esetben a nem ciacutemkeacutere Figyeljuumlk meg hogy a C bit megfelelő beaacutellaacutesaacutenak kiaknaacutezaacutesa eacuterdekeacuteben a CJNE utasiacutetaacutes maga moumlgeacute ugrat mert itt nem az elaacutegazaacutes a ceacutel hanem az hogy a C bit adja meg a vaacutelaszt a most rendkiacutevuumlli fontossaacuteguacute talaacutenyra

CJNE A10relac1relac1JC nemCJNE A21relac2relac2

JNC nem

igen

nem

Előszoumlr oumlsszehasonliacutetjuk A eacuterteacutekeacutet 10-zel Ha ez utaacuten C=1 akkor maacuteris ugorhatunk a nemleges ciacutemkeacutere mert Alt10 Ha ez nem igaz azaz C=0 akkor a program fut tovaacutebb a maacutesodik oumlsszehasonliacutetaacuteshoz de legalaacutebb annyit maacuter tudunk hogy A10 Itt oumlsszehasonliacutetjuk A eacuterteacutekeacutet 21-gyel Azeacutert 21-gyel mert az maacuter nem joacute Azeacutert 21-gyel mert a fent bemutatott oumlsszehasonliacutetaacutes a bdquokisebb mintrdquo relaacutecioacutera van kihegyezve Ott tartottunk tehaacutet hogy oumlsszehasonliacutetjuk A eacuterteacutekeacutet 21-gyel Ha ez utaacuten C=0 akkor maacuteris ugorhatunk a nemleges ciacutemkeacutere mert A21 eacutes nekuumlnk 20-ig joacute Ha e keacutet oumlsszehasonliacutetaacuteson tuacuteljut a program akkor viszont A eacuterteacuteke garantaacuteltan 10 eacutes 20 koumlzeacute esik a hataacuterokat is beleeacutertve Ezeket a relaacutecioacutes truumlkkoumlket nagyon sokszor hasznaacutelhatjuk uumlgyesen a koacutedjainkban

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

3 Jelzőlaacutempa toumlbb uumlzemmoacuteddal17 feladat

Modellezzuumlnk egy haacuteromlencseacutes koumlzlekedeacutesi jelzőlaacutempaacutet uacutegy hogy az egyes sziacutenek vaacuteltaacutesaacutet előre roumlgziacutetett időziacuteteacuteshez koumltjuumlk A jelzőlaacutempaacutenak haacuterom uumlzemmoacutedja legyen normaacutel (R-RA-G-A) villogoacute saacuterga eacutes kikapcsolt Az egyes uumlzemmoacutedok koumlzoumltt nyomoacutegombbal leacutepkedhessuumlnk A prellegeacutest kuumlszoumlboumlljuumlk ki [Code25 Code26]

A feladat most is a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute aacuteramkoumlrhoumlz tartozik A megoldaacutesaacutehoz nagyon sok elemet aacutetveszuumlnk a [16 feladat] megoldaacutesaacuteboacutel időszelet nagysaacutega (16128 s = 18 s) időszeletek szaacutemlaacutelaacutesa (szaml) eacutes a vaacuterakozaacutesi idő kezeleacutese (tvar) A feladat megoldaacutesaacuteban ismeacutet kombinaacuteljuk az 1 gombhoz tartozoacute megszakiacutetaacutest eacutes az intervallumszaacutemlaacuteloacutehoz tartozoacute megszakiacutetaacutest mint a [15 feladat] megoldaacutesaacuteban (Code22) Az 1 gombhoz tartozoacute megszakiacutetaacutes semmi maacutest nem tesz mint letiltja oumlnmagaacutet eacutes beaacutelliacutet egy jelzőbitet (nyom) A TIC megszakiacutetaacutesa pontosan akkor aacutelliacutetja magasra a laacutempafaacutezisok vaacuteltaacutesaacutehoz szuumlkseacuteges jelzőbitet (tovabb) ha letelt az aktuaacutelisan megadott vaacuterakozaacutesi idő (tvar) Ez a megszakiacutetaacutes meacuteg arra is figyel hogy az 1 gomb megszakiacutetaacutesaacutet csak akkor engedeacutelyezi uacutejra ha eltelt 2times18 s azaz 14 s A koacutedban talaacutelhatoacute egy szubrutin (RESET128) amely lekapcsolja az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet lenullaacutezza a 128-ad maacutesodperceket vaacuter egy kicsit majd uacutejra bekapcsolja az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet Erre koumlzvetlenuumll az uumlzemmoacutedok koumlzoumltti ugraacutes utaacuten van szuumlkseacuteg hogy bdquotiszta lappalrdquo induljon uacutejra az idő meacutereacutese Eacutes azeacutert keruumllt mindez szubrutinba mert toumlbb helyen is szuumlkseacuteg van erre a reacuteszletre Maga a szubrutin iacutegy neacutez ki

A RESET128 szubrutin Code25asm-benRESET128 ANL TIMECON11111100b Az oacutera eacutes az intervallumszaacutemlaacuteloacute leaacutellMOV HTHSEC0 A 128-ad maacutesodpercek nullaacutezaacutesaMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelORL TIMECON00000011b Az oacutera eacutes az intervallumszaacutemlaacuteloacute indulRET

A megoldaacuteshoz aacutellapot-aacutetmenetgraacutefot melleacutekeluumlnk (laacutesd [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek] aacutebra) mert ez most maacuter sokkal informatiacutevabb mint amilyen egy tuacutelmeacuteretes folyamataacutebra lenne A laacutempafaacutezisokhoz tartozoacute aacutetmeneteket mint esemeacutenyeket ill az uumlzemmoacutedok vaacuteltaacutesaacutet kivaacuteltoacute gombnyomaacutesokat mint esemeacutenyeket elteacuterő sziacutennel jeloumlljuumlk előbbieket feketeacutevel utoacutebbiakat pirossal

125 aacutebra - A [17 feladat] megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek

A koacuted a fent bemutatott RESET128 szubrutin neacutelkuumll az alaacutebbiakban talaacutelhatoacute Ez a koacuted most maacuter egeacuteszen

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

oumlsszetett de az aacutellapot-aacutetmenet graacutef nagy segiacutetseacuteget nyuacutejthat ahhoz hogy ne teacutevedjuumlnk el benne Egyuacutettal megnyugtatjuk az olvasoacutet enneacutel hosszabb koacuted maacuter nem keruumll elő ebben a tankoumlnyvben A program elejeacuten az INTVAL regiszternek valoacute eacuterteacutekadaacutes utaacuten azeacutert nem szerepel roumlgtoumln a sokat emlegetett roumlvid vaacuterakozaacutes mert nem sokkal utaacutena amuacutegy is meghiacutevjuk a RESET128 szubrutint amely tartalmazza azt mindjaacutert a normaacutel uumlzemmoacuted első laacutempafaacutezisaacutenaacutel A koacuted veacutegeacuten nem reacuteszletezzuumlk az adatokat mert toumlkeacuteletesen megegyeznek a Code23-ban megadottakkal A koacutedban sziacutenes jeloumlleacuteseket hasznaacutelunk hogy joacutel elkuumlloumlniacutethetők legyenek az egyes uumlzemmoacutedokhoz tartozoacute reacuteszek

Code25asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB1 vektoraORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetetovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehoznyom BIT 01h A gomb lenyomaacutesaacutet jelző bitszaml DATA 030h Az 18-ad maacutesodperces intervallumok szaacutemolaacutesaacutenak vaacuteltozoacutejatvar DATA 031h Az aktuaacutelisan szuumlkseacuteges vaacuterakozaacutes vaacuteltozoacuteja Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1CLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetSETB nyom A nyom jelzőbit 1-re aacutelliacutetaacutesaRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKMOV Aszaml Megneacutezzuumlk hogy szamllt2 Iacutegy 216 s-igCJNE A2relac nem lesz hataacutesa a gombnyomaacutesnakrelacJC sima Ha igen ugrunk a koumlvetkező vizsgaacutelathozSETB EX0 Uacutejra engedeacutelyezzuumlk a gomb megszakiacutetaacutesaacutetsimaCJNE Atvarnovel Ha szaml nem eacuterte meacuteg el tvar-t akkor noumlveljuumlk szaml eacuterteacutekeacutetSETB tovabb Kuumlloumlnben tovabb=1 eacutesRETI visszateacuteruumlnknovelINC szaml Noumlveljuumlk szaml eacuterteacutekeacutetRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 16-ot toumlltuumlnk INTVAL-ba mert 16128 s = 18 s lesz az alap-időosztaacutesunkORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutetSETB EX0 Engedeacutelyezzuumlk az 1 gomb megszakiacutetaacutesaacutetSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesnormal | | | CLR nyom A nyom jelzőbit toumlrleacuteseCALL RESET128 Reset-eljuumlk a 128-ad maacutesodpercek eacuterteacutekeacutetMOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-s portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumll

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV tvarA Betoumlltjuumlk tvar-ba a szuumlkseacuteges vaacuterakozaacutes időtartamaacutet Ennyiszer 18 s-et kell vaacuterakozniCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetMOV szaml1 Az 18 s-es időszeletek szaacutemlaacutelaacutesaacutenak vaacuteltozoacutejaacutet alaphelyzetbe aacutelliacutetjukbitek1 Figyeljuumlk a jelzőbiteketJB tovabbvalt Ha tovabb=1 vaacutelthat a laacutempaJB nyomsarga Ha nyom=1 gombot nyomtunk Joumln a koumlvetkező uumlzemmoacutedJMP bitek1 Figyeljuumlk tovaacutebb a jelzőbiteketvaltCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP normal Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozsarga | CLR nyom A nyom jelzőbit toumlrleacuteseCALL RESET128 Reset-eljuumlk a 128-ad maacutesodpercek eacuterteacutekeacutetMOV tvar4 A villogaacutes feacutel-perioacutedusideje 05 s leszMOV P011111111b Kikapcsoljuk az oumlsszes LED-etvillogXRL P000001000b Invertaacuteljuk a saacuterga LED aacutellapotaacutetCLR tovabb Jelzőbit toumlrleacuteseMOV szaml1 Szaacutemlaacuteloacute alapaacutellaacutesabitek2 Figyeljuumlk a jelzőbiteketJB tovabbvillog Ha tovabb=1 mehet a villogaacutes tovaacutebbJB nyomkikapcs Koumlvetkező uumlzemmoacutedJMP bitek2 Figyeljuumlk tovaacutebb a jelzőbiteketkikapcs CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etCLR tovabb Jelzőbit toumlrleacuteseMOV szaml1 Szaacutemlaacuteloacute alapaacutellaacutesaJNB nyom$ Helyben aacutellunk amiacuteg 0 a gomb jelzőbitjeJMP normal Kezdjuumlk előroumll a normaacutel uumlzemmoacuteddal Adatok lampa var

A Code25 programban a megszakiacutetaacutesokkal valoacute baacutenaacutesmoacuted maacuter egeacuteszen kifinomult megoldaacutest jelent Előfordulhat azonban hogy ezt a bdquokicentizettrdquo stiacutelust az olvasoacute kisseacute nyomasztoacutenak talaacutelja Semmi baj mutatunk egy elteacuterő megoldaacutest a [17 feladat]ra A [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek] aacutebraacuten laacutethatoacute aacutellapot-aacutetmenetgraacutef vaacuteltozatlanul eacuterveacutenyben marad A megoldaacutes kulcsa most abban rejlik hogy ismeacutet előhuacutezzuk a joacute oumlreg DELAY szubrutint de azt moacutedosiacutetjuk egy kicsit Most ugyanis ez fogja inteacutezni az adott laacutempafaacutezisok aacuteltal megkiacutevaacutent vaacuterakozaacutest de beleeacutepiacutetjuumlk a gombnyomaacutes jelzőbitjeacutenek figyeleacuteseacutet Joacute meacutelyre a legbelső ciklusba hogy mineacutel gyakrabban megtoumlrteacutenjen a bit vizsgaacutelata Az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutenak feladatkoumlre most leszűkuumll a prellegeacutes kikuumlszoumlboumlleacuteseacutere Eacuteppen uacutegy mint a [15 feladat] megoldaacutesaacuteban (laacutesd Code22) A gombnyomaacutes megszakiacutetaacutesa Code25-houmlz keacutepest egyetlen sorral bővuumll az intervallumszaacutemlaacuteloacute elindiacutetaacutesaacuteval

Az időhuacutezoacute szubrutint uacutegy terveztuumlk meg hogy pontosan azokkal a vaacuterakozaacutesi időkkel lehessen meghiacutevni mint amelyeket Code24 eacutes Code25 is tartalmaz Ez azt jelenti hogy ha a meghiacutevaacuteskor az akkumulaacutetor tartalma 8 akkor fogunk 1 maacutesodpercet vaacuterakozni Neacutezzuumlk a moacutedosiacutetott szubrutint

GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R5150cik5

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV R4249cik4JB nyomvisszaDJNZ R4cik4DJNZ R5cik5DJNZ R6cik6visszaRET Visszateacutereacutes a szubrutinboacutel

Eacutes most ismeacutet kiszaacutemiacutetjuk hogy mennyi időt vesz igeacutenybe a szubrutin futaacutesa Az akkumulaacutetor eacuterteacutekeacutet vegyuumlk 8-nak A sima DELAY szubrutinba eacutepiacutetett NOP utasiacutetaacutes 1 oacuterajelciklust vesz igeacutenybe a GDELAY szubrutinba aacutegyazott JB bitrel utasiacutetaacutes viszont 4-et Iacutegy a teljes rutin most oumlsszesen

oacuterajelciklust igeacutenyel A default 2 097 152 Hz oacuterajellel szaacutemolva ez 10002 s-et jelent

A mostani megoldaacutes lelke az hogy az időhuacutezoacute szubrutin ha maacuter maacutest uacutegysem csinaacutel mint időt huacutez kivaacuteloacutean alkalmas arra hogy amilyen sokszor csak lehet megvizsgaacutelja hogy 1-re billent-e a gombnyomaacutest jelző bit (nyom) Ha igen azonnal veacuteget is eacuter futaacutesa megszakad A főprogramban a szubrutin meghiacutevaacutesa utaacuten azonnal megvizsgaacuteljuk immaacuteron maacutesodszor hogy mi a jelzőbit eacuterteacuteke Ha 1 akkor idő előtt teacutert vissza a vezeacuterleacutes a szubrutinboacutel Eacutes ez azt jelenti hogy ugorhatunk a koumlvetkező uumlzemmoacutedhoz Az alaacutebbiakban koumlzoumllt programban az időhuacutezoacute szubrutint maacuter nem tuumlntetjuumlk foumll ismeacutetelten A megszakiacutetaacutesok vektorait sem mert azok vaacuteltozatlanul maradnak

Code26asmORG 0060h A teacutenyleges programkoacuted kezdetenyom BIT 01h A gomb lenyomaacutesaacutet jelző bit Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1CLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaSETB nyom A nyom jelzőbit 1-re aacutelliacutetaacutesaRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111101b Az intervallumszaacutemlaacuteloacute leaacutelliacutetaacutesa Az oacuteraacutet nem aacutelliacutetjuk leSETB EX0 Uacutejra engedeacutelyezzuumlk a gomb megszakiacutetaacutesaacutetRETI visszateacuteruumlnk FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL32 32-t toumlltuumlnk INTVAL-ba mert 32128 s = 14 s lesz a gombnyomaacutesok eacuterzeacutekeleacutesei koumlzoumltt eltelt időMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelMOV TIMECON00000001b Az oacutera elindiacutetaacutesaORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutetSETB EX0 Engedeacutelyezzuumlk az 1 gomb megszakiacutetaacutesaacutetSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesnormal | | | CLR nyom A nyom jelzőbit toumlrleacutese

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-s portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesaJB nyomsarga Ha nyom=1 gombot nyomtunk Joumln a koumlvetkező uumlzemmoacutedCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP normal Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozsarga | CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etvillogXRL P000001000b Invertaacuteljuk a saacuterga LED aacutellapotaacutetMOV A4 A 48 s vaacuterakozaacutes beaacutelliacutetaacutesaCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesaJB nyomkikapcs Ha gombot nyomtunk joumln a koumlvetkező uumlzemmoacutedJMP villog A villogaacutes folytataacutesakikapcs CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesa (Az akkumulaacutetor nem vaacuteltozott)JNB nyomkikapcs Ha a rsquonyomrsquo jelzőbit 0 akkor ugrunk vissza a kikapcsolt uumlzemmoacuted elejeacutereJMP normal Kuumlloumlnben vissza a bdquonormaacutelrdquo uumlzemmoacutedhoz Adatok lampa var

Code25-oumlt eacutes Code26-ot oumlsszehasonliacutetva laacutethatjuk hogy az utoacutebbi kicsivel roumlvidebb eacutes kevesebb vaacuteltozoacutet igeacutenyel Mindkettő tanulsaacutegos megoldaacutest kiacutenaacutel de egeacuteszen elteacuterő stiacutelusban Az olvasoacutet arra biztatjuk hogy mindkettőt elemezze ki eacutes eacutertse meg maradeacutektalanul minden reacuteszleteacuteben Koumlnnyen előfordulhat hogy sokkal erősebb szimpaacutetiaacutet fog eacuterezni az egyik iraacutent mint a maacutesik iraacutent Azonban feladata vaacutelogatja hogy mikor melyik stiacutelussal eacuteruumlnk ceacutelt koumlnnyebben vagy eacuteppen elegaacutensabban Eacutes termeacuteszetesen az is előfordulhat hogy az olvasoacute harmadik a fenti kettőtől gyoumlkeresen elteacuterő oumltletet valoacutesiacutet majd meg eacutes tartja azt a legjobbnakhellip

Created by XMLmind XSL-FO Converter

13 fejezet - Kuumllső aacuteramkoumlr fotokapuvalAz előző fejezetben kuumllső aacuteramkoumlrbe koumltoumltt LED-eket kapcsolgattunk a mikrovezeacuterlővel Leacutepjuumlnk most tovaacutebb most vezeacuterlőjeleket ne csak kiadjunk hanem fogadjunk is

18 feladat

Keacutesziacutetsuumlnk behatolaacutesjelzőt fotokapuval Nyugalmi aacutellapotban egy zoumlld LED vilaacutegiacutet Behatolaacuteskor piros-keacutek villogoacute jelez Gombnyomaacutesra visszateacuteruumlnk a nyugalmi aacutellapothoz [Code27]

A feladat megoldaacutesaacutehoz fotokaput kell keacutesziacutetenuumlnk Ezt sokszor infradioacutedaacuteval eacutes infraacuteban eacuterzeacutekeny fototranzisztorral valoacutesiacutetjaacutek meg Tegyuumlk ezt mi is A kapcsolaacutesi rajzot a [A (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatjuk Fototranzisztorokről bővebben olvashatunk a [2] [3] [4] [5] eacutes [6] szakkoumlnyvekben

131 aacutebra - A [18 feladat] (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

A LED-ek műkoumldeacutese nem igeacutenyel bővebb magyaraacutezatot Az aacuteramkoumlri rajz alsoacute reacuteszeacuten laacutethatoacute dioacuteda az infravoumlroumls tartomaacutenyban sugaacuteroz a vele szemben elhelyezett fototranzisztor pedig ugyanebben a sziacutenkeacuteptartomaacutenyban eacuterzeacutekeny a laacutethatoacute tartomaacutenyban nem Ha az infradioacuteda sugaacuterzaacutest bocsaacutet ki akkor a fototranzisztor kinyit minek hataacutesaacutera a P21-es laacuteb foumlldpotenciaacutelra keruumll (Uacutegy is fogalmazhatunk hogy a fototranzisztor a P21-es laacutebat foumlldre huacutezza) Amennyiben a keacutet aacuteramkoumlri elem koumlzeacute olyan objektum keruumll amely elzaacuterja a dioacuteda aacuteltal kibocsaacutetott infravoumlroumls sugaacuterzaacutes uacutetjaacutet a tranzisztor lezaacuter eacutes iacutegy a P21-es laacuteb +5 V potenciaacutelon uumll Ez a keacutet aacutellapot pontosan megfelel a P21-es laacutebhoz tartozoacute bit alacsony ill magas aacutellapotaacutenak Iacutegy ha a programban ezt figyeljuumlk folyamatosan akkor detektaacutelhatjuk a bdquobehatolaacutestrdquo Ez azt jelenti hogy most nem adatot iacuterunk a P2-es portra hanem annak tartalmaacutet olvassuk peacuteldaacuteul

MOV AP2

Az infradioacuteda hasznaacutelataacutehoz egy kis truumlkkoumlt szeretneacutenk ismertetni Az infravoumlroumls sugaacuterzaacutes az emberi szem szaacutemaacutera laacutethatatlan Meacutegis koumlnnyen meg tudunk arroacutel győződni hogy műkoumldik-e az infradioacuteda bdquoNeacutezzuumlnk raacuterdquo digitaacutelis feacutenykeacutepezőgeacuteppel vagy mobiltelefon kameraacutejaacuteval eacutes maacuteris kideruumll be van-e kapcsolva ([Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel] aacutebra) Ez azeacutert van iacutegy mert a legtoumlbb digitaacutelis

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlr fotokapuval

keacuteproumlgziacutető eszkoumlz sziacutenkeacutepi eacuterzeacutekenyseacutege a koumlzeli infravoumlroumls tartomaacutenyban sem nulla iacutegy a tisztaacuten ilyen sugaacuterzaacutes hataacutesaacutera is kellően nagy jel keletkezik ahhoz hogy azt a kamera ndash igaz teljesen hamisan ndash laacutethatoacute informaacutecioacutenak tekintse

132 aacutebra - Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel

Az aacuteramkoumlrben alkalmazott BPV11F tiacutepusuacute fototranzisztornak a legtoumlbb fototranzisztorral ellenteacutetben nem kettő hanem haacuterom laacuteba van Ez termeacuteszetesen semmi egyebet nem jelent mint azt hogy a baacutezis is ki van vezetve iacutegy alkalmasint a munkapont-beaacutelliacutetaacutesroacutel is gondoskodhatunk Erre nekuumlnk most nem lesz szuumlkseacuteguumlnk eacutes tulajdonkeacuteppen be kell vallanunk hogy azeacutert esett a vaacutelasztaacutes erre a tiacutepusra mert ezt a hallgatoacutek nem keverik oumlssze keacutetlaacutebuacute dioacutedaacutekkalhellip A tranzisztor műkoumldeacuteseacuteről szinteacuten koumlnnyen meggyőződhetuumlnk a [A (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute aacuteramkoumlrnek az ADuC-panelre toumlrteacutenő raacutecsatlakoztataacutesa utaacuten Ha a tranzisztor kinyit akkor a leiacutertak szerint a P21 laacuteb foumlldpotenciaacutelra keruumll iacutegy az ennek megfelelő LED-nek vilaacutegiacutetania kell a LED-soron ([Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel] aacutebra)

133 aacutebra - A fototranzisztor foumlldre huacutezza a P21-es laacutebat iacutegy az arra koumltoumltt LED vilaacutegiacutet

Az olvasoacuteban mindezek utaacuten jogosan meruumll foumll a keacuterdeacutes hogy mi toumlrteacutenik akkor ha kiacutevuumllről raacutekeacutenyszeriacutetuumlnk valamilyen jelszintet a 2-es portra (input portkeacutent hasznaacuteljuk) de szoftveresen maacutes jelszintet iacuterunk ki raacute (outputkeacutent hasznaacuteljuk) A megnyugtatoacute vaacutelasz az hogy a mikrovezeacuterlőt nem fogjuk toumlnkretenni a 2-es port hardveres kialakiacutetaacutesa olyan hogy ilyenkor a kuumllső jel az erősebb eacutes annak eredmeacutenye olvashatoacute le szoftveresen baacutermit is iacutertunk ki raacute előzőleg A 2-es port keacutetiraacutenyuacute port belső felhuacutezoacute-ellenaacutellaacutesokkal [1 p 57-58] Keacutetiraacutenyuacute mivoltaacutet nagyon joacutel peacuteldaacutezza a mostani feladat hiszen 3 laacutebaacutet kimeneti laacutebkeacutent (a 3 LED-hez) egyik laacutebaacutet bemeneti laacutebkeacutent (a fototranzisztorhoz) hasznaacuteljuk

A [18 feladat] megoldaacutesaacutet jelentő program műkoumldeacutese egyszerűbb lesz mint azt elsőre hinneacutenk Előszoumlr bekapcsoljuk a zoumlld LED-et majd folyamatosan figyeljuumlk hogy mi a P21 laacutebhoz tartozoacute bit eacuterteacuteke Ha ez 1 lesz valamikor akkor riasztaacutes toumlrteacutenik azaz felvaacuteltva villogtatni kezdjuumlk a piros eacutes keacutek LED-et A LED-ek bekapcsolt eacutes kikapcsolt aacutellapotaacutet a villogtataacuteskor egyszerű időhuacutezoacute szubrutinnal oldjuk meg Ez ugyanolyan szerkezetű lesz mint a GDELAY az előző fejezetben de most aacutetrendezzuumlk az egymaacutesba aacutegyazott ciklusok veacutegrehajtaacutesi szaacutemaacutet hogy ismeacutet akkor vaacuterjon pontosan 1 maacutesodpercet a szubrutin ha azt A=100 eacuterteacutekkel hiacutevjuk meg mint ahogy a joacute oumlreg DELAY rutinunkat szoktuk A rutin veacutegrehajtaacutesaacutehoz szuumlkseacuteges oacuterajelek darabszaacutemaacutenak kiszaacutemiacutetaacutesaacutet (a vaacuterakozaacutesi idő ellenőrzeacuteseacutet) most maacuter az olvasoacutera biacutezzuk A moacutedosiacutetott GDELAY szubrutin koumlzvetlenuumll figyeli az 1 gomb bitjeacutet mert most nem alkalmazunk megszakiacutetaacutesokat Amennyiben vaacuterakozaacutes koumlzben baacutermikor gombnyomaacutest eacuteszlel a program azonnal visszateacuter a szubrutinboacutel amit a program legelejeacutere toumlrteacutenő visszaugraacutes koumlvet Eacutes kezdődik előroumll minden Jelen esetben a prellegeacutessel sem kell foglalkoznunk hiszen a gombnyomaacutesnak nem leacutepteteacutes a szerepe hanem pusztaacuten a vezeacuterleacutes visszaugrataacutesa a program legelejeacutere amineacutel eacuteszrevehetetlen marad ha ez egymaacutes utaacuten toumlbbszoumlr koumlvetkezik be

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlr fotokapuval

Code27asmORG 0060h A teacutenyleges programkoacuted kezdetebut1 BIT P32 Az 1 gomb bitjeacutenek elnevezeacuteseled1 BIT P23 A voumlroumls LED bitjeacutenek elnevezeacuteseled2 BIT P25 A keacutek LED bitjeacutenek elnevezeacuteseled3 BIT P27 A zoumlld LED bitjeacutenek elnevezeacutesetranzi BIT P21 A fototranzisztor bitjeacutenek elnevezeacutesenyom BIT 00h A gombnyomaacutes jelzőbitjeMAINCLR nyom A nyom jelzőbit toumlrleacuteseSETB led1 A voumlroumls LED kikapcsolaacutesaSETB led2 A keacutek LED kikapcsolaacutesaCLR led3 A zoumlld LED bekapcsolaacutesaMOV A6 A villogoacute frekvenciaacuteja (006 s)figyelMOV Ctranzi Pollozzuk a fototranzisztor jeleacutet Előszoumlr is a C-be toumlltjuumlkJNC figyel Ha nem szakiacutetja meg semmi a fotokapu infra sugaacuterzaacutesaacutet akkor a fototranzisztor a 21-es portbitet lehuacutezza foumlldre azaz 0 az eacuterteacuteke Ilyenkor pedig folytatjuk a figyeleacutest (pollozaacutest)SETB led3 Kikapcsoljuk a zoumlld LED-et mert bement valami a fotokapuba azaz joumln a riasztaacutesvillogMOV R74 Neacutegyszer villantjuk foumll a voumlroumls LED-etegyikCLR led1 Bekapcsoljuk a LED-etCALL GDELAY Vaacuterunk kicsit (006 s)JB nyomMAIN Ha volt gombnyomaacutes akkor kezdjuumlk előroumll a programotSETB led1 Kikapcsoljuk a LED-etCALL GDELAY Vaacuterunk kicsit (006 s)JB nyomMAIN Ha volt gombnyomaacutes akkor kezdjuumlk előroumll a programotDJNZ R7egyik Lekezeljuumlk az R7-es ciklusvaacuteltozoacutetMOV R74 Neacutegyszer villantjuk foumll a keacutek LED-etmasik A leiacuteraacutes toumlkeacuteletesen ugyanaz mint az előbb CLR led2 a voumlroumls LED-neacutel Csak most a keacuteketCALL GDELAY villogtatjukJB nyomMAINSETB led2CALL GDELAYJB nyomMAINDJNZ R7masikJMP villog Folytatoacutedik a villogtataacutes Időhuacutezoacute szubrutin amely az 1 gomb lenyomaacutesaacutet is figyeli GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R543cik5MOV R469cik4JNB but1armed Itt vizsgaacuteljuk meg a gomb bitjeacutet Elugrunk ha le van nyomva azaz 0DJNZ R4cik4DJNZ R5cik5DJNZ R6cik6RETarmed Ide ugrunk ha gombnyomaacutes voltSETB nyom Magasra aacutelliacutetjuk a jelzőbitetRET

Created by XMLmind XSL-FO Converter

14 fejezet - Heacutetszegmenses kijelző meghajtaacutesaAz előző keacutet fejezetben megtanultuk hogy hogyan adhatunk ill fogadhatunk egyszerű jeleket aacuteramkoumlroumlknek ill aacuteramkoumlroumlkről Ebben a fejezetben munkaacutera fogjuk az egyik legegyszerűbb de mind a mai napig igen sokszor neacutelkuumlloumlzhetetlen megjeleniacutetőeszkoumlzt a heacutetszegmenses kijelzőt Heacutetszegmenses kijelzőből toumlbb szaacutez gyaacutertoacute toumlbb ezer feacuteleacutet keacutesziacutet A kijelzők elteacuternek meacuteretben aacuteramfelveacutetelben laacutebelrendezeacutesben sziacutenben stb A heacutetszegmenses kijelzőkneacutel azonban van valami ami mindegyikuumlkneacutel megegyezik a szegmensek jeloumlleacutese (laacutesd [A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese] aacutebra) A DP szimboacutelum a Decimal Point angol kifejezeacutesből szaacutermazik eacutes tizedespontot jelent (Maacutes szoumlvegkoumlrnyezetben a DP egeacuteszen maacutest jelenthet de ennek taacutergyalaacutesa nem a mi feladatunkhellip)

A tankoumlnyvben eddig ha LED-eket kellett bekapcsolnunk mindig foumlldre huacuteztuk azokat iacutegy olyan heacutetszegmenses kijelzőt ceacutelszerű vaacutelasztanunk amely koumlzoumls anoacutedos Ettől eltekintve gyakorlatilag nincs megkoumlteacutes a tiacutepusra A tankoumlnyvben konkreacutetan az SA52-11 tiacutepusuacute heacutetszegmenses kijelzőt hasznaacuteljuk melynek laacutebkiosztaacutesa a [Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa] aacutebraacuten laacutethatoacute

141 aacutebra - A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese

142 aacutebra - Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa

A heacutetszegmenses kijelző meghajtaacutesa toumlrteacutenhet uacutegy hogy egy teljes portot foumllaacuteldozva koumlzvetlenuumll kapcsolgatjuk az egyes szegmenseket mint LED-eket Ez azt jelenti hogy uacutegy jaacuterunk el mintha a [Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa] aacutebraacuten laacutethatoacute laacutebkiosztaacutest egy-egy ellenaacutellaacutessal kibőviacuteteneacutenk eacutes azokat szeacutepen sorban raacutekapcsolnaacutenk a 0 vagy a 2 port laacutebaira Neacutemileg keacutenyelmesebb megoldaacutest jelent az ha alkalmazunk egy BCD-heacutetszegmenses dekoacutedert A koumlvetkezőkben bemutatott joacute neacutehaacuteny feladat megoldaacutesaacutenaacutel konkreacutetan az SN74LS47N tiacutepusuacute dekoacutedert hasznaacuteljuk A dekoacuteder-IC feleacutepiacuteteacuteseacutenek eacutes műkoumldeacuteseacutenek bemutataacutesa nem a tankoumlnyv feladata az adatlapot az olvasoacute kuumlloumln koumlnyvtaacuterban talaacutelja Annyit azeacutert elmondhatunk hogy a 7447-es dekoacuteder felhasznaacutelaacutesaacuteval csak 4 portbitet koumlt le a kijelző ciacutemzeacutese A szaacutemjegyeknek megfelelő binaacuteris eacuterteacutek előaacutelliacutetaacutesa eacutes kirakaacutesa a portra azutaacuten maacuter a mi feladatunk Illik meacuteg azt is megjegyeznuumlnk hogy a decimaacutelis ponttal a dekoacuteder-IC nem tud mit kezdeni Ha ezt hasznaacutelni szeretneacutenk akkor annak műkoumldteteacuteseacutehez kuumlloumln ellenaacutellaacutes eacutes szabad portbit szuumlkseacuteges A [Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel] aacutebraacuten laacutethatoacute aacuteramkoumlr a mikrovezeacuterlős kalandjaink soraacuten egy darabig elkiacuteseacuter bennuumlnket A megeacutepiacutetett aacuteramkoumlrben az egyes szegmensekhez tartozoacute ellenaacutellaacutesok eacuterteacutekeacutenek 390 Ω-ot vaacutelasztottunk heacutetszegmenses kijelzőnek pedig egy SA52-11GWA tiacutepusuacutet azaz zoumlldet

143 aacutebra - Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

Az olvasoacutenak felteacutetelezhetően maacuter viszketnek az ujjbegyei hogy megiacuterja első programjaacutet amellyel a heacutetszegmenses kijelzőt uumlzemeltetheti Fogalmazzuk meg haacutet koumlvetkező feladatunkat a [Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel] aacutebraacuten laacutethatoacute aacuteramkoumlrhoumlz

19 feladat

Leacuteptessuumlk a szaacutemokat a heacutetszegmenses kijelzőn 0-toacutel 9-ig 9 utaacuten ismeacutet 0-roacutel induljon a szaacutemlaacutelaacutes [Code28]

Enneacutel az egyszerű kis feladatnaacutel az aacuteramkoumlr oumlsszerakaacutesa tovaacutebb tart mint megiacuterni a programot annyira egyszerű lesz Folyamataacutebra vagy egyeacuteb szemleacutelteteacutes teljesen felesleges hozzaacute De meacuteg joacuteformaacuten bővebb magyaraacutezat is Egyszerűen leacutetrehozunk egy ciklust amely 0-toacutel 9-ig szaacutemol majd visszaugrunk a program elejeacutere A ciklus minden veacutegrehajtaacutesa soraacuten kitesszuumlk a P2-es portra a ciklusvaacuteltozoacute eacuterteacutekeacutet A programban a joacute oumlreg DELAY szubrutinunkat hasznaacuteljuk időhuacutezaacutesra Iacuteme az bdquoijesztően hosszuacuterdquo koacuted

Code28asmMAINMOV R40 R4 a ciklusvaacuteltozoacute 0 a kezdeti eacuterteacutekcountMOV P2R4 Kitesszuumlk a P2-es portra a ciklusvaacuteltozoacutetMOV A40 04 s időhuacutezaacutes leszCALL DELAY IdőhuacutezaacutesINC R4 A ciklusvaacuteltozoacute noumlveleacuteseCJNE R410count A ciklusvaacuteltozoacute felteacuteteleacutenek kieacuterteacutekeleacuteseJMP MAIN Kezdjuumlk előről az egeacuteszet

Oldjunk most meg veacutegre egy olyan feladatot is amely nem oumlnmagaacuteeacutert valoacute hanem akaacuter eacutertelmes alkalmazaacutesi koumlre is lehet Vonjuk be a nyomoacutegombokat is Meg meacuteg egy kuumllső LED-et is

20 feladat

Az egyik gombbal leacuteptessuumlk a szaacutemokat a heacutetszegmenses kijelzőn 1-toacutel 9-ig (9 utaacuten 1-ről induljon ismeacutet a szaacutemlaacutelaacutes) A maacutesik gomb megnyomaacutesaacutera egy kuumllső LED annyiszor villanjon foumll amennyit a kijelző mutat [Code29]

A kuumllső LED-hez maacuter nem rajzolunk kuumlloumln aacuteramkoumlrt Koumlssuumlk azt megfelelő ellenaacutellaacuteson keresztuumll a P27-es laacutebra Ez az olvasoacutenak a tankoumlnyvből megtanultak alapjaacuten veacutelhetően maacuter nem jelenthet probleacutemaacutethellip

Taacuteroljuk a kijelezendő eacuterteacuteket R3-ban a kuumllső LED villogtataacutesaacutenak ciklusvaacuteltozoacuteja pedig legyen R2 Az időhuacutezaacutesokhoz hasznaacuteljuk ismeacutet a joacute oumlreg DELAY szubrutint Mivel a programban roumlvidseacutege elleneacutere talaacuten meacutegis szokatlan megoldaacutesokat alkalmazunk folyamataacutebraacutet keacutesziacutetuumlnk amely a [A (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute A szokatlan megoldaacutes a kezdeti eacuterteacutek olyan megadaacutesa ami elő sem fordulhat hiszen R3 első legaacutelis eacuterteacuteke 1 A program kezdeteacuten R3-t meacutegis 0-nak vesszuumlk viszont utaacutena azonnal noumlveljuumlk is 1-gyel Ugyanez a megoldaacutes szerepel akkor is amikor megvizsgaacuteljuk hogy eleacuterte-e a 9-et A megoldaacutes eleganciaacuteja az hogy a kezdeti eacuterteacutek eacutes az alaphelyzet elrendezeacutese mindoumlsszesen egy sort igeacutenyel utaacutena mindjaacutert beugratjuk a vezeacuterleacutest az algoritmus bdquosziacuteveacuteberdquo hiszen onnantoacutel kezdve toumlkeacuteletesen rendben tud eacutes fog műkoumldni minden

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

144 aacutebra - A [20 feladat] (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja

A koacuted az elmondottak elleneacutere meglehetősen roumlvid A DELAY szubrutint most sem tuumlntetjuumlk foumll

Code29asmbut1 BIT P32 Az 1 gomb bitvaacuteltozoacutejabut2 BIT P33 A 2 gomb bitvaacuteltozoacutejaled BIT P27 A kuumllső LED bitvaacuteltozoacutejaMAINMOV R30 0-t teszuumlnk R3-ba mert utaacutena azonnal noumlveljuumlk majd 1-gyelJMP sima Ugrunk a noumlveleacuteshezgombokJNB but1lep Az 1 gombra leacuteptetjuumlk a kijelzett szaacutemeacuterteacuteketJNB but2villog A 2 gombra villogtatunkJMP gombok Tovaacutebb figyeljuumlk a gombokatlepCJNE R39sima Ha meacuteg nem eacutertuumlk el a 9-et nincs bajMOV R30 Ha eleacutertuumlk nullaacutezzuk R3-t hiszen azonnal noumlveljuumlk azt Iacutegy lesz 1 az aacutetfordulaacutes utaacuteni eacuterteacuteksimaINC R3 A kijelezendő eacuterteacutek noumlveleacuteseMOV AR3 R3-t A-ba tesszuumlk

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

ORL A11110000b A felső 4 bitet 1-re aacutelliacutetjuk hogy ne vilaacutegiacutetson minden LEDMOV P2A Kitesszuumlk a kapott eacuterteacuteket P2-reMOV A20 02 s vaacuterakozaacutes leszCALL DELAY Időhuacutezoacute szubrutinJMP gombok Ugrunk vissza a gombok figyeleacuteseacutehezvillogMOV AR3 R3 eacuterteacutekeacutet A-ne keresztuumll R2-be tesszuumlkMOV R2A Ez lesz a villogtataacutes ciklusvaacuteltozoacutejaMOV A30 03 s vaacuterakozaacutes lesz a villogtataacutesnaacutelvillCLR led Kuumllső LED bekapcsolaacutesaCALL DELAY Időhuacutezoacute szubrutinSETB led Kuumllső LED kikapcsolaacutesaCALL DELAY Időhuacutezoacute szubrutin DJNZ R2vill Az R2 ciklusvaacuteltozoacute lekezeleacuteseJMP gombok Ugraacutes vissza a gombok figyeleacuteseacutehez

Created by XMLmind XSL-FO Converter

15 fejezet - Kommunikaacutecioacute az UART-talA mai ember ha szaacutemiacutetoacutegeacutepes csatlakozaacutesi lehetőseacutegekre gondol eacutes az nem az Internet akkor az USB jut eszeacutebe Reacutegebben a PC-k csatlakozaacutesi lehetőseacutegeineacutel a soros portot eacutes a paacuterhuzamos portot szoktaacutek bemutatni Eacuterdekes moacutedon a paacuterhuzamos port mint csatlakozaacutesi feluumllet szerepe elsikkadt a soros port viszont tovaacutebbfejlődoumltt eacutes ebből lett az amit ma USB-nek hiacutevunk A betűszoacute az angol Universal Serial Bus kifejezeacutesből szaacutermazik eacutes univerzaacutelis soros buszt jelent Ma maacuter kisseacute lesajnaacuteljuk azokat a szaacutemiacutetoacutegeacutepeket amelyeken nincs legalaacutebb neacutegy USB-csatlakozoacute A mai kor (2013-at iacuterunk eacuteppen) perifeacuteriaacuteit eacutes egyeacuteb kuumltyuumlit a legtoumlbbszoumlr USB-porton keresztuumll csatlakoztathatjuk a szaacutemiacutetoacutegeacutepuumlnkhoumlz Kuumllső lemezegyseacutegeket kaacutertyaolvasoacutekat nyomtatoacutekat pen-drive-okat stb

Az USB fogalom valoacutejaacuteban egy ipari szabvaacutenyt jelent amely a buszhoz hasznaacutelt vezeteacutekeket csatlakozoacutekat protokollokat definiaacutelja szaacutemiacutetoacutegeacutepek eacutes elektronikus eszkoumlzoumlk kommunikaacutecioacutejaacutehoz csatlakoztataacutesaacutehoz eacutes taacutepellaacutetaacutesaacutehoz Ha szeacutetvaacutegunk egy USB-kaacutebelt akkor a [USB-kaacutebel belső vezeteacutekei] aacutebraacuten laacutethatoacute keacutep taacuterul szemuumlnk eleacute Az USB-kaacutebel tehaacutet neacutegy belső szigetelt vezeteacuteket eacutes aacuteltalaacuteban egy finom sodrott eacuterkoumlteget tartalmaz Ez utoacutebbinak kizaacuteroacutelag aacuternyeacutekolaacutesi ill mechanikai szerepe van A sziacutenes szigeteleacutesű vezeteacutekek funkcioacutejaacutet a [Az USB-kaacutebel vezeteacutekeinek funkcioacuteja] foglalja oumlssze

151 aacutebra - USB-kaacutebel belső vezeteacutekei

151 taacuteblaacutezat - Az USB-kaacutebel vezeteacutekeinek funkcioacuteja

piros VCC +5 V taacutep

feheacuter data ndash adat

ndash

zoumlld data + adat

+

fekete GND foumlld

Az UART betűszoacute aacuteltal takart fogalom szorosan kapcsoloacutedik az USB fogalmaacutehoz de vigyaacutezzunk mert nem ugyanazt jelenti Az UART betűszoacute az angol Universal Asynchonous ReceiverTransmitter kifejezeacutesből szaacutermazik ami univerzaacutelis aszinkron adoacutevevőt jelent Ez egyfajta hardverelem amely aacutetalakiacutetaacutest veacutegez soros eacutes paacuterhuzamos adatformaacutetumok koumlzoumltt Tehaacutet paacuterhuzamosan kezelt adatokat (mondjuk egy baacutejt bitjeit) elkuumlldhetuumlnk valamely eszkoumlzről egy UART hardverelem koumlzbeiktataacutesaacuteval az USB-n amit egy maacutesik eszkoumlz fog a sajaacutet UART-jaacuteval visszaalakiacutetani Iacutegy korrekt a fogalmazaacutes Vagyis egy baacutejtot az UART szeacutetszerel bitekre azokat elkuumlldoumlzgeti a soros buszon a kuumlldoumltt bitekből pedig a maacutesik eszkoumlz UART-ja szereli uacutejra oumlssze az elkuumlldoumltt baacutejtot Szerencseacutere az ADuC 842-es architektuacuteraacutejaacuteban a baacutejtok szeacutetszereleacuteseacutevel eacutes oumlsszerakaacutesaacuteval nekuumlnk egyaacuteltalaacuten nem kell foglalkoznunk ezt megteszi helyettuumlnk a mikrovezeacuterlő UART-ja Mi csak a baacutejtszintű kommunikaacutecioacutet fogjuk eacuterzeacutekelni csak azzal kell toumlrődnuumlnk Ha nekuumlnk kellene bitenkeacutent kuumlldoumlzgetnuumlnk az adatokat akkor igen csak megizzadnaacutenk mire oumlsszehoznaacutenk egy valamirevaloacute kommunikaacutecioacutethellip

1 Az UART soros interfeacuteszAz ADuC soros portja full duplex elven műkoumldik azaz egyidejűleg keacutepes adatokat kuumlldeni eacutes fogadni A fogadaacutesi csatorna pufferelt ami azt jelenti hogy egy baacutejt megeacuterkezeacutese utaacuten elkezdődhet a maacutesodik baacutejt fogadaacutesa meacuteg akkor is ha az elsőt meacuteg nem olvastuk ki a fogadaacutes regisztereacuteből Viszont ha ilyenkor a maacutesodik baacutejt teljes egeacuteszeacuteben megeacuterkezik akkor az elsőt elvesziacutetjuumlk Fizikailag a fogadaacuteseacutert a P30 (RxD) laacuteb a

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

kuumlldeacuteseacutert a P31 (TxD) laacuteb felelős A szoftveres alkalmazaacutesoknaacutel az SBUF eacutes SCON nevű SFR jaacutetszik rendkiacutevuumll fontos szerepet

A fogadaacutes eacutes a kuumlldeacutes regisztereit az SBUF SFR-en keresztuumll eacuterjuumlk el Az SBUF iacuteraacutesakor a kuumlldeacutes regisztereacutebe keruumll az adat az SBUF olvasaacutesakor a fogadaacutes regisztereacuteben leacutevő adatot eacuterjuumlk el Tudnunk kell hogy itt fizikailag keacutet kuumlloumlnaacutelloacute regiszterről van szoacute meacutegis mindkettőhoumlz az SBUF regisztert kell hasznaacutelnunk

Az SCON nevű SFR a soros porti kommunikaacutecioacute konfiguraacutelaacutesaacuteeacutert felel Ismerteteacuteseacutet a [Az SCON SFR parameacuteterei] tartalmazza Meg kell azonban jegyeznuumlnk hogy toumlbb bitet eacuteppen csak megnevezuumlnk vagy igen roumlviden jellemzuumlnk mert a tankoumlnyv alkalmazaacutesainaacutel messze nem hasznaacuteljuk mindegyiket A leiacuteraacutes a gyaacuteri ismertetőben teljes reacuteszletesseacuteggel megtalaacutelhatoacute [1]

152 taacuteblaacutezat - Az SCON SFR parameacuteterei

SCON Serial Port Control Register

A soros port vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek

00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg

igen

Bit Szimboacute-lum Angol neacutev Magyar neacutev Jelenteacutes

7 SM0 Serial Mode Select Bits Kommunikaacutecioacutes moacutedot kivaacutelasztoacute bitek

Laacutesd [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese]

6 SM1

5 SM2 Multiprocessor Communication Enable Bit

Toumlbbprocesszoros kommunikaacutecioacutet engedeacutelyező bit

Nem taacutergyaljuk

4 REN Receive Enable Bit Fogadaacutest engedeacutelyező bit

A soros port fogadaacutest engedeacutelyező (1) eacutes letiltoacute (0) bitje

3 TB8 Transmit Bit 8 (9 bit) Adaacutesi bit 8 (9 bit)

2 eacutes 3 moacutedban a 9 elkuumlldoumltt bit (Darabra Ha 0-toacutel sorszaacutemozzuk akkor a nyolcadik)

2 RB8 Receive Bit 8 (9 bit) Fogadaacutesi bit 8 (9 bit)

2 eacutes 3 moacutedban a 9 fogadott bit (Darabra Ha 0-

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

toacutel sorszaacutemozzuk akkor a nyolcadik) 1 moacutedban a stopbit keruumll ide

1 TI Transmit Interrupt Flag Adaacutesi megszakiacutetaacutest jelző bit

Kuumlldeacuteskor a 0 moacutedban a 8 bit (1-től kezdett sorszaacutemozaacutessal) veacutegeacuteneacutel hardveresen 1-re aacutell A toumlbbi moacutedban a stopbit elejeacuten aacutell 1-re Szoftveresen kell toumlroumllni

0 RI Receive Interrupt Flag Fogadaacutesi megszakiacutetaacutest jelző bit

Fogadaacuteskor a 0 moacutedban a 8 bit (1-től kezdett sorszaacutemozaacutessal) veacutegeacuteneacutel hardveresen 1-re aacutell A toumlbbi moacutedban a stopbit feleacuteneacutel aacutell 1-re Szoftveresen kell toumlroumllni

153 taacuteblaacutezat - Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese

SM0 SM1 Kivaacutelasztott moacuted

0 0 0 moacuted Leacuteptetőregiszter roumlgziacutetett baud-raacuteta (Core_Clk2)

0 1 1 moacuted 8-bites UART vaacuteltoztathatoacute baud-raacuteta

1 0 2 moacuted 9-bites UART roumlgziacutetett baud-raacuteta (Core_Clk32) vagy (Core_Clk16)

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

1 1 3 moacuted 9-bites UART vaacuteltoztathatoacute baud-raacuteta

A [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese] foglalja oumlssze a soros porti kommunikaacutecioacute moacutedjait Laacutethatoacute hogy az ADuC 842-es mikrovezeacuterlőt nagyjaacuteboacutel mindenre felkeacutesziacutetetteacutek ez uumlgyben A tankoumlnyvben kizaacuteroacutelag az 1 moacutedot fogjuk hasznaacutelni mert ez a legegyszerűbb eacutes legrugalmasabb hiszen nem kell jaacuteruleacutekos ellenőrzőbittel vacakolnunk viszont vaacuteltoztathatoacute a kommunikaacutecioacute sebesseacutege A szaacutemiacutetaacutestechnikaacuteban a kommunikaacutecioacute sebesseacutegeacutet bits-ban meacuterjuumlk Eacutemile Baudot feltalaacuteloacute tiszteleteacutere a bits meacuterteacutekegyseacuteget baudnak is nevezik jele Bd Magaacutet a kommunikaacutecioacutes sebesseacuteget szokaacutes baud-raacutetaacutenak is hiacutevni

Az ADuC 842-es mikrovezeacuterlő tulajdonsaacutegainak felsorlaacutesakor maacuter emliacutetettuumlk hogy az architektuacutera toumlbb időziacutetőtszaacutemlaacuteloacutet is tartalmaz Az a helyzet hogy egeacuteszen pontosan neacutegyet A sorszaacutemozaacutesuk persze a szaacutemiacutetaacutestechnikaacuteban megszokottak szerint 0 1 2 eacutes 3 A soros porti kommunikaacutecioacute jeleinek uumltemezeacuteseacutehez az 1 eacutes a 2 időziacutetőtszaacutemlaacuteloacutet is hasznaacutelhatjuk de a harmadikat kifejezetten erre a ceacutelra hoztaacutek leacutetre iacutegy a tankoumlnyvben mi mindig ezt fogjuk hasznaacutelni (A maacutesik haacuterom időziacutetőszaacutemlaacuteloacute joacute lesz meacuteg nekuumlnk maacutes ceacutelokrahellip) A 3 időziacutetőszaacutemlaacuteloacute konfiguraacutecioacuteja keacutet SFR-rel toumlrteacutenik T3CON eacutes T3FD Előszoumlr neacutezzuumlk meg mire valoacute a T3CON regiszter ([Az T3CON SFR parameacuteterei])

154 taacuteblaacutezat - Az T3CON SFR parameacuteterei

T3CON Timer 3 Control Register

A 3 időziacutetőszaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 T3BAUDEN Ha 1 akkor a baud-raacutetaacutet a 3 szaacutemlaacuteloacute generaacutelja A 0 eseteacutet nem taacutergyaljuk

6 - Foglalt

5 - Foglalt

4 - Foglalt

3 - Foglalt

2 DIV2 A binaacuteris osztoacute bitjei

DIV2 DIV1

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

DIV0

0 0 0

0 0 1

1 1 1

1 DIV1

0 DIV0

Az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban talaacutelhatoacute egy aacutebra amely azt mutatja hogy hogyan aacutell elő az oacuterajelből a soros porti kommunikaacutecioacute baud-raacutetaacuteja [1 p 68 Figure 74] Ezt az aacutebraacutet vaacuteltozatlan formaacuteban vesszuumlk aacutet (laacutesd [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebra)

152 aacutebra - A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten

A baud-raacuteta előaacutelliacutetaacutesaacutehoz tehaacutet az aktuaacutelis oacuterajel leosztaacutesa toumlbb leacutepcsőben toumlrteacutenik A gyaacuteri leiacuteraacutesban az eredeti aacutebra [1 p 68 Figure 74] utaacuten szereplő keacutepletek viszont azt sugalljaacutek hogy a legelső kettővel valoacute osztaacutest jelelő blokk veacutelhetően foumlloumlsleges Ennek igazolaacutesaacutera mi is levezetjuumlk a regiszterek eacuterteacutekeacutenek beaacutelliacutetaacutesaacutehoz szuumlkseacuteges keacutepleteket amelyek viszont egytől egyig meg fognak egyezni a gyaacuteri leiacuteraacutesban szereplőkkel A matematikaacuteban ugyan nem bdquoszabaacutelyosrdquo szimboacutelumvaacutelasztaacutesnak leszuumlnk tanuacutei de a mi levezeteacuteseinkben is oumlnaacutelloacute vaacuteltozoacutenak tekintjuumlk most a T3FD eacutes a DIV szimboacutelumokat Jeloumlljuumlk tovaacutebbaacute B-vel a kiacutevaacutent baud-raacutetaacutet

A [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebraacuten laacutethatoacute osztaacutesi leacutepcsők alapjaacuten (a legelsőt mellőzve) a koumlvetkező oumlsszefuumlggeacutest iacuterhatjuk fel

Ez a kifejezeacutes a koumlvetkező moacutedon alakiacutethatoacute tovaacutebb

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Ez a keacuteplet pedig pontosan ugyanaz mint a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 3 keacuteplete eltekintve az angolszaacutesz jeloumlleacutesmoacutedtoacutel A keacuteplet aacutetrendezeacuteseacutevel a koumlvetkezőket kapjuk

Ez az oumlsszefuumlggeacutes pedig azzal egyezik meg amelyik a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 2 keacuteplete

Most megmagyaraacutezzuk hogy egyaacuteltalaacuten mieacutert van szuumlkseacuteg a [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebraacuten laacutethatoacute (1+T3FD64) osztaacutesi fokozatra Tegyuumlk fel hogy e neacutelkuumll szeretneacutenk megkapni a baud-raacutetaacutet azaz

Ezt aacutetalakiacutetva kapjuk hogy

azaz

Eacutes ez az oumlsszefuumlggeacutes azzal egyezik meg amelyik a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 1 keacuteplete Maacutermost ha mindent ilyen szeacutepen le tudunk vezetni akkor ismeacutetelten mieacutert van szuumlkseacuteg az (1+T3FD64) osztaacutesi fokozatra A vaacutelasz erre az hogy azeacutert mert DIV eacuterteacuteke csakis termeacuteszetes szaacutem lehet Sőt kideruumll hogy ez az eacuterteacutek haacuterom biten aacutebraacutezolhatoacute DIV2 DIV1 DIV0 (laacutesd [Az T3CON SFR parameacuteterei]) Maacuterpedig ha ilyen fontos uumlgyben kerekiacuteteacutesi hibaacutek miatt elvesznek eacuterteacutekek az bizony nagyon kritikus koumlvetkezmeacutenyekkel jaacuterhat egy igazi meacuternoumlki alkalmazaacutesra neacutezve Iacutegy tehaacutet most maacuter eacuterthető mieacutert lesz szuumlkseacuteg a szoacute szerint brutaacutelis binaacuteris osztoacuten kiacutevuumll egy finomiacutetoacute fokozatra ami szintuacutegy egy osztoacuteleacutepcsőfokot jelent

A gyaacuteri leiacuteraacutesban a fenti levezeteacutesek nem talaacutelhatoacutek meg Az ott leiacutertak tuumlkreacuteben a koumlvetkező kiegeacutesziacuteteacuteseket fűzzuumlk a levezeteacutesekhez A DIV eacuterteacuteket a T3CON regiszter alsoacute haacuterom bitjeacuten kell beaacutelliacutetanunk Nagyon leacutenyeges hogy ehhez a kapott DIV eacuterteacuteket mindig lefeleacute kell egeacuteszre kerekiacutetenuumlnk A T3FD SFR eacuterteacutekeacutenek meghataacuterozaacutesaacutenaacutel a DIV maacuter szinteacuten a lefeleacute kerekiacutetett eacuterteacutek T3FD eacuterteacutekeacutere viszont a kerekiacuteteacutes szokvaacutenyos moacutedjaacutet kell alkalmaznunk Ezek utaacuten az aktuaacutelis baud-raacuteta a koumlvetkező formulaacuteval szaacutemiacutethatoacute

Peacutelda gyanaacutent hataacuterozzuk meg DIV eacutes T3FD eacuterteacutekeacutet amikor is a kiacutevaacutent kommunikaacutecioacutes sebesseacuteg 9 600 baud az oacuterajel pedig a default 2 097 152 Hz

A lefeleacute kerekiacuteteacutes előiacuteraacutesaacutenak megfelelően a veacutegső eacuterteacutek DIV = 3 lesz Ennek alapjaacuten a T3CON regiszter alsoacute

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

haacuterom bitjeacutet 011-re kell aacutelliacutetanunk A T3FD regiszterbe pedig a koumlvetkező eacuterteacuteket kell iacuternunk

Iacutegy a veacutegső eacuterteacutek T3DF = 45 = 2Dh lesz Ellenőrizzuumlk az aktuaacutelis baud-raacutetaacutet

ami az eleacuterni kiacutevaacutent 9 600-as eacuterteacutekhez keacutepest csupaacuten 02 -os elteacutereacutest jelent Ilyen csekeacutely elteacutereacutest pedig gond neacutelkuumll elvisel az UART egyseacuteg A [A soros porti kommunikaacutecioacute tipikus eacuterteacutekei] a default 2 097 152 Hz-es oacuterajel eseteacutere tartalmaz beaacutelliacutetaacutesi eacuterteacutekeket neacutehaacuteny tipikus kommunikaacutecioacutes sebesseacutegeacuterteacutekhez Maacutes oacuterajel-beaacutelliacutetaacuteshoz tartozoacute eacuterteacutekeket megtalaacutelunk a gyaacuteri leiacuteraacutesban [1 p 69 Table 34] A [A soros porti kommunikaacutecioacute tipikus eacuterteacutekei] T3CON fejleacutecű oszlopaacuteban maacuter konkreacutetan azok az eacuterteacutekek szerepelnek amelyeket teacutenylegesen ebbe a regiszterbe kell iacuternunk A bal oldali feacutelbaacutejt a 3 időziacutetőszaacutemlaacuteloacute engedeacutelyezeacuteseacutet jelenti (vouml [Az T3CON SFR parameacuteterei]) a jobb oldali feacutelbaacutejt pedig nyilvaacutenvaloacutean megegyezik DIV eacuterteacutekeacutevel

155 taacuteblaacutezat - A soros porti kommunikaacutecioacute tipikus eacuterteacutekei

Kommunikaacutecioacutes sebesseacuteg Bd

DIV T3CON T3FD Hiba

57 600 1 81h 9 = 09h 025

38 400 1 81h 45 = 2Dh 02

19 200 2 82h 45 = 2Dh 02

9 600 3 83h 45 = 2Dh 02

4 800 4 84h 45 = 2Dh 02

2 Baacutejtok fogadaacutesa eacutes kuumlldeacutese assemblybenAz előző alfejezetben leiacutert tudnivaloacutek utaacuten neacutezzuumlk meg hogy milyen utasiacutetaacutessorozattal kommunikaacutelhatunk a soros porton assembly nyelven iacutert programocskaacutekkal Itt valoacutejaacuteban baacutejtok fogadaacutesaacuteroacutel eacutes kuumlldeacuteseacuteről lesz szoacute hiszen minden maacutes ezen alapul A kicsinyiacutető keacutepző azeacutert lesz indokolt mert most csak paacuter soros koacutedreacuteszleteket ismertetuumlnk eacutes elemzuumlnk

Ha az elhataacuterozaacutesunknak megfelelően a 3 időziacutetőtszaacutemlaacuteloacutet szeretneacutenk hasznaacutelni akkor a soros porti kommunikaacutecioacute beaacutelliacutetaacutesait az SCON regiszterrel kezdjuumlk Mivel ez a leacutepeacutes eacutes ennek reacuteszletei rendkiacutevuumlli fontossaacuteguacuteak a tankoumlnyv tovaacutebbi alkalmazaacutesainaacutel hasznaacutelt beaacutelliacutetaacutesokat a [Az SCON SFR parameacuteterei] mintaacutejaacutera kellő reacuteszletesseacuteggel megmagyaraacutezzuk laacutesd [Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai] Ez utoacutebbi taacuteblaacutezatban sziacutenes jeloumlleacutest alkalmazunk a bitek szerepeacutenek elkuumlloumlniacuteteacuteseacutere amit a koacutedokban is hasznaacutelni fogunk a koumlnnyebb koumlvethetőseacuteg kedveacuteeacutert

156 taacuteblaacutezat - Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai

SCON Serial Port Control Register

A soros port vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek

00h

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacute-lum Magyar neacutev Jelenteacutes

7 SM0 Kommunikaacutecioacutes moacutedot kivaacutelasztoacute bitek

Mivel az 1 kommunikaacutecioacutes moacutedot fogjuk hasznaacutelni (laacutesd [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese]) ezeacutert SM0=0 eacutes SM1=1

6 SM1

5 SM2 Toumlbbprocesszoros kommunikaacutecioacutet engedeacutelyező bit

Nem hasznaacutelunk toumlbbprocesszoros uumlzemmoacutedot ezeacutert SM2=0

4 REN Fogadaacutest engedeacutelyező bit A mikrovezeacuterlőnek adatokat kell fogadnia a PC-ről ezeacutert termeacuteszetesen REN=1

3 TB8 Adaacutesi bit 8 (9 bit) Nem hasznaacutelunk jaacuteruleacutekos bitet iacutegy TB8=0

2 RB8 Fogadaacutesi bit 8 (9 bit) Nem hasznaacutelunk jaacuteruleacutekos bitet iacutegy RB8=0

1 TI Adaacutesi megszakiacutetaacutest jelző bit Ez a jelzőbit akkor aacutell 1-re hardveresen ha az ADuC elkuumlldoumltt egy karaktert a soros porton keresztuumll Kezdetben eacuterdemes 1-re aacutelliacutetanunk (Mintha elkuumlldtuumlnk volna maacuter egyet)

0 RI Fogadaacutesi megszakiacutetaacutest jelző bit

Fel kell keacutesziacutetenuumlnk az

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

ADuC-ot karakterek fogadaacutesaacutera Ez a bit akkor aacutell 1-re hardveresen ha eacuterkezett egy karakter Kezdetben eacuterdemes 0-ra aacutelliacutetanunk hogy joumlhessen valami

A [Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai]ban oumlsszefoglaltak szerint a soros port beaacutelliacutetaacutesa ceacutelszerűen a

MOV SCON01010010b

utasiacutetaacutessal kezdődik Ez utaacuten aacutelliacutethatjuk be a 3 időziacutetőszaacutemlaacuteloacute keacutet regisztereacutet Az előző alfejezetben leiacutertak alapjaacuten ha 9 600 baudos kommunikaacutecioacutet szeretneacutenk akkor iacutegy folytatjuk a koacutedot

MOV T3CON083hMOV T3FD02Dh

Ha karakter eacuterkezik valahonnan az ADuC-nak pontosabban fogalmazva az teljes egeacuteszeacuteben beeacuterkezik az SBUF nevű regiszterbe akkor az addig 0 eacuterteacutekű RI jelzőbit 1-re vaacutelt Ezt vagy folyamatosa lessuumlk a főprogramboacutel vagy megszakiacutetaacutesra biacutezzuk Akaacuter iacutegy akaacuter uacutegy a karakter fogadaacutesa utaacuten az RI bitet szoftveresen kell toumlroumllnuumlnk Magaacutet az eacuterkezett karaktert az SBUF regiszterből olvassuk ki Az RI jelzőbitnek ez utaacuteni toumlrleacutese mintegy bdquoelőkeacutesziacutetirdquo a terepet a koumlvetkező karakter eacuterkezeacuteseacutehez Iacutegy a most leiacutertak keacutet sort jelentenek assemblyben

MOV ASBUFCLR RI

Ha az ADuC karaktert kuumlld el pontosabban fogalmazva az teljes egeacuteszeacuteben kiuumlruumll az SBUF nevű regiszterből akkor az addig 0 eacuterteacutekű TI jelzőbit 1-re vaacutelt Ezt szintuacutegy vagy folyamatosa lessuumlk a főprogramboacutel vagy ezt is megszakiacutetaacutesra biacutezzuk Az utasiacutetaacutesokkal azonban fordiacutetott a helyzet Előszoumlr nullaacutezzuk a kuumlldeacutes jelzőbitjeacutet azaz TI-t a karaktert pedig csak ez utaacuten pakoljuk be az SBUF regiszterbe Aztaacuten ha az teacutenyleg elment akkor vaacutelt TI ismeacutet 1-re Ezeacutert kell TI-t a karakternek az SBUF regiszterbe valoacute beraacutemolaacutesa előtt nullaacuteznunk

CLR TIMOV ASBUF

3 Soros porti kommunikaacutecioacute pollozaacutessal21 feladat

Jelezzuumlk ki a heacutetszegmenses kijelzőn a PC-ről a soros porton eacuterkező szaacutemjegyeket Teacuteves karakterre valamilyen egyeacuteb jelet jelezzuumlnk ki A soros porti kommunikaacutecioacutet pollozaacutessal veacutegezzuumlk [Code30]

A feladat megoldaacutesa a soros porti kommunikaacutecioacuteroacutel eddig megtanultak alapjaacuten meglepően egyszerű lesz Ennek elleneacutere egy egyszerű folyamataacutebraacutet a biztonsaacuteg kedveacuteeacutert meacutegis melleacutekeluumlnk laacutesd [A (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja] aacutebra A folyamataacutebra utolsoacute blokkjaacuteba iacutert bdquofarkincardquo szoacute azt akarja jelenteni hogy teacuteves (tehaacutet nem szaacutemjegy) karakter eacuterkezeacutese eseteacuten valami erre utaloacute jelet szeretneacutenk kijelezni Mivel a heacutetszegmenses kijelzőt a 7447-es dekoacuteder hajtja meg tuacutel sok vaacutelasztaacutesi lehetőseacuteguumlnk nincs (laacutesd az IC adatlapja) Iacutegy jelzőkarakternek a 12-es eacuterteacutekhez tartozoacute a b f eacutes g szegmensekből alkotott jelet vaacutelasztottuk vouml [A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese] aacutebra Ezt a folyamataacutebraacuten bdquofarkincaacutenakrdquo nevezzuumlk

153 aacutebra - A [21 feladat] (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

A feladat uacutegy szoacutel hogy a soros porti kommunikaacutecioacutet pollozaacutessal valoacutesiacutetsuk meg Ez csakuacutegy mint a gombok figyeleacutese a [Nyomoacutegombok a panelon] fejezetben a főprogramban toumlrteacutenik eacutes azt jelenti hogy folyamatosan figyeljuumlk az esemeacutenyeket Itt az esemeacuteny karakter eacuterkezeacutese a soros porton keresztuumll Az előző alfejezetben leiacutertak szerint figyelnuumlnk kell hogy mikor aacutell 1-re az RI bit eacutes ennek megtoumlrteacutente utaacuten kuumlldhetuumlnk karaktert (kuumlldhetjuumlk a koumlvetkező karaktert) Mindez termeacuteszetesen az ADuC szemszoumlgeacuteből eacutertendő Az RI bit figyeleacutese a karakter beraacutemolaacutesa a pufferba eacutes a bit toumlrleacutese iacutegy neacutez ki assembly nyelven

JNB RI$MOV ASBUFCLR RI

Az uacutejdonsaacuteg ebben a haacuteromsoros kis reacuteszletben az első utasiacutetaacutes Az olvasoacute maacuter valoacutesziacutenűleg eacuterti hogy ez mit jelent Azt jelenti hogy addig jaacuter helyben a program amiacuteg RI 1 nem lesz Ez a helyben jaacuteraacutes persze bizonyos alkalmazaacutesoknaacutel nem engedhető meg de a [21 feladat] megoldaacutesaacutenaacutel nem jelent semmifeacutele probleacutemaacutet Karakter elkuumlldeacutese a TI bit figyeleacuteseacutevel hasonloacutean toumlrteacutenik csak az előző alfejezetben leiacutert sorrendi elteacutereacutesre kell figyelnuumlnk Előszoumlr megvaacuterjuk amiacuteg TI 1 nem lesz utaacutena mindjaacutert toumlroumlljuumlk is eacutes ez utaacuten helyezzuumlk a kuumlldendő karaktert a pufferba Aztaacuten majd ha elment a karakter akkor lesz TI ismeacutet 1 eacutes akkor kuumlldhetjuumlk a koumlvetkezőt A kuumlldeacutesre hasznaacutelhatoacute haacuterom sor iacutegy fest

JNB TI$CLR TIMOV ASBUF

Ez a keacutet haacuteromsoros ki programreacuteszlet joacutel foumllismerhető lesz a [21 feladat] megoldaacutesaacuteban

A soros porti kommunikaacutecioacutenaacutel oacutehatatlanul előkeruumll az ASCII karakterkeacuteszlet Amikor ugyanis karaktert kuumllduumlnk a soros porton az hallgatoacutelagosan ASCII karakterre vonatkozik Az ASCII koacutedtaacuteblaacutezat toumlrteacuteneteacutenek bemutataacutesa nem e tankoumlnyv feladata de annyit elmondhatunk hogy a betűszoacute az American Standard Code for Information Interchange kifejezeacutesből szaacutermazik ami szoacute szerint azt jelenti hogy Amerikai Szabvaacutenyos Koacuted Informaacutecioacutecsereacutehez de a veacutegeacuten az uumlzenetvaacuteltaacutes szoacute talaacuten szerencseacutesebb lenne Az ASCII koacutedtaacuteblaacutezatoknak toumlbb vaacuteltozatuk leacutetezik van 7-bites eacutes 8-bites verzioacute eacutes meacuteg speciaacutelis vaacuteltozatok is leacuteteznek Ennek elleneacutere a [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebraacuten szereplő a 7-bites vaacuteltozatnak megfelelő taacuteblaacutezat nagyjaacuteboacutel minden szaacutemiacutetoacutegeacutepen ugyanazt jelenti Amennyiben tehaacutet egy rsquo0rsquo karakter eacuterkezik valahonneacutet az ADuC mikrovezeacuterlőre

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

akkor az ASCII koacutedban eacuterkezik ezeacutert hexadecimaacutelisan 30h-t decimaacutelisan 48-at jelent Iacutegy tehaacutet ha a fogadaacutes utaacuten teacutenylegesen azzaacute a szaacutemeacuterteacutekkeacute szeretneacutenk alakiacutetani mint amit a szaacutemjegy (rsquo0rsquo) mutat akkor egyszerűen ki kell vonnunk belőle 48-at (vagy 30h-t) Eacutes keacutesz

154 aacutebra - Az ASCII karakterkeacuteszlet 32-től 126-ig

Az eacuterkezett karakterek intervallumba zaacuteraacutesaacutehoz joacute tudni hogy a rsquo9rsquo-es szaacutemjegy utaacuten az ASCII taacuteblaacutezatban a rsquorsquo karakter koumlvetkezik Iacutegy koumlnnyen tudjuk alkalmazni a [Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedja] fejezetben bemutatott oumltletet Erre a most koumlvetkező programban szuumlkseacuteguumlnk is lesz Annyit meacuteg illik megjegyeznuumlnk hogy a heacutetszegmenses kijelző a P2-es port bitjeiből oumlsszesen neacutegyet fog le Ha a maacutesik neacutegy bitet maacutes ceacutelokra akarjuk foumllhasznaacutelni akkor azokat nem szabad oumlssze-vissza aacutelliacutetgatnunk az esetleges soros porti műveletek soraacuten meg kell őket kiacutemeacutelnuumlnk Az alaacutebbi koacutedban erre uacutegy emleacutekeztetuumlnk hogy logikai művelettel mindig 1-re aacutelliacutetjuk ezeket a biteket Most egyeacutebkeacutent semmi szerepuumlk nem lesz de ha majd igen akkor tudni fogjuk hogy el kell kuumlloumlniacutetenuumlnk őket a heacutetszegmenses kijelzőnek szaacutent informaacutecioacutetoacutel Erre fog utalni a bdquofoumllaacutelliacutetjuk a felső 4 bitetrdquo megjegyzeacutes Az eacuterkező karaktert a program azonnal visszakuumlldi hogy megfelelő kommunikaacutecioacutes feluumllet eseteacuteben azonnal laacutethassuk hogy milyen karakter eacuterkezett az ADuC-nak Az ilyen jellegű visszakuumlldeacutest szoktaacutek ekhoacutezaacutesnak (angolul echo) nevezni

Code30asmbyte DATA 030h A P2-es portra kirakandoacute eacuterteacutek vaacuteltozoacutejaMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV P211111100b A 7447-es IC-neacutel a 12-es koacuted egy kis furcsa jelet produkaacutel Ez jelzi a keacuteszenleacutetetfogadJNB RI$ Karakter eacuterkezeacuteseacutere vaacuterunk Az RI flag ezt

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

jelziMOV ASBUF Kiolvassuk a pufferboacutel az eacuterkezett karaktertCLR RI Toumlroumlljuumlk az RI flag-etJNB TI$ Arra vaacuterunk hogy TI 1 legyen mert ez jelzi ha egy előző karakter teacutenylegesen elmentCLR TI Utaacutena toumlroumlljuumlk TI-tMOV SBUFA Betesszuumlk a pufferba A tartalmaacutetCJNE A0relac1 Ha az eacuterkezett karakter 0 előttrelac1 vagy 9 moumlgoumltt van akkor azJC nemjo eacuterveacutenytelen esetCJNE Arelac2 A 0lt=Alt=9 felteacutetel ekvivalens arelac2 0lt=Alt felteacutetellel 9 utaacuten ASCII-benJNC nemjo joumlnCLR C Toumlroumlljuumlk a C bitet egy kivonaacutes előttSUBB A0 A kivonaacutessal csinaacutelunk az ASCII eacuterteacutekből normaacutelis szaacutemeacuterteacuteketMOV byteA A byte vaacuteltozoacuteba beletesszuumlk a kijelezendő szaacutemeacuterteacuteketORL byte11110000b Foumllaacutelliacutetjuk a felső 4 bitetportMOV P2byte Kitesszuumlk az eacuterteacuteket a P2-es portraJMP fogad Kezdjuumlk előroumll a beolvasaacutestnemjoMOV byte11111100b A 12-es koacuteduacute szaacutemjegyet fogjuk kijelezniJMP port Ugraacutes a kirakaacuteshoz

4 Soros porti kommunikaacutecioacute megszakiacutetaacutessal22 feladat

Jelezzuumlk ki a heacutetszegmenses kijelzőn a PC-ről a soros porton eacuterkező szaacutemjegyeket Teacuteves karakterre valamilyen egyeacuteb jelet jelezzuumlnk ki A soros porti kommunikaacutecioacutet megszakiacutetaacutes veacutegezze [Code31]

Ez a feladat egyetlen reacuteszlettől eltekintve toumlkeacuteletesen megegyezik a [21 feladat]tal Ez a reacuteszlet azonban nagyon is fontos a soros porti kommunikaacutecioacute kezeleacuteseacutenek moacutedjaacuteroacutel van szoacute Az előző alfejezetben ez pollozaacutessal toumlrteacutent azaz a főprogram figyelte hogy eacuterkezett-e ill elment-e karakter Ehhez az RI ill TI bitek eacuterteacuteke nyuacutejtotta a fogoacutedzkodoacutet A helyzet az hogy az az esemeacuteny amikor ezek a bitek hardveresen 1-re billennek megszakiacutetaacutest is ki tud vaacuteltani Fontos hogy mindkeacutet bit eseteacuten Itt most tehaacutet nincs maacutes dolgunk mint engedeacutelyezni a soros portra vonatkozoacute megszakiacutetaacutest majd megfelelően lekezelni a keacutet kritikus bitet RI-t ill TI-t A megszakiacutetaacutesban kisseacute jobban elkuumlloumlnuumll egymaacutestoacutel karakter eacuterkezeacutese eacutes kuumlldeacutese Karakter eacuterkezeacuteseacutet gyakorlatilag ugyanuacutegy kezeljuumlk mint az előző alfejezetben A kuumlldeacutes is hasonloacutean toumlrteacutenik de amikor a TI bit 1-re aacutell akkor is kivaacuteltoacutedik a megszakiacutetaacutes Nos ebben az esetben nem csinaacutelunk semmit visszateacuteruumlnk a megszakiacutetaacutesboacutel eacutes keacutesz A soros porti megszakiacutetaacutes vektora a 0023h ciacutemen talaacutelhatoacute a megszakiacutetaacutes engedeacutelyezeacutese pedig az ES bittel toumlrteacutenik laacutesd [Az IE SFR parameacuteterei] Figyeljuumlk meg hogy milyen roumlvidre zsugorodik a főprogram A 3 időziacutetőszaacutemlaacuteloacute inicializaacutelaacutesaacuten eacutes a megszakiacutetaacutes engedeacutelyezeacuteseacuten kiacutevuumll leacutenyegeacuteben semmi egyebet nem csinaacutel Helyben jaacuter Az olvasoacutet arra biztatjuk hogy figyelmesen hasonliacutetsa oumlssze Code30-at Code31-gyel eacutes figyelje meg hogy hogyan oldja meg a megszakiacutetaacutes mindazt amit előző esetben a főprogram veacutegzett

Code31asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0023h A soros porti megszakiacutetaacutes vektoraJMP UARTORG 0060h A teacutenyleges programkoacuted kezdetebyte DATA 030h A P2-es portra kirakandoacute eacuterteacutek vaacuteltozoacuteja Karakter eacuterkezeacutese vagy elkuumlldeacutese aacuteltal kivaacuteltott megszakiacutetaacutes UARTJB RIfogad Ha karakter eacuterkezeacutese vaacuteltotta ki a megszakiacutetaacutest akkor azt fogadjuk eacutes lekezeljuumlkRETI Ha a maacutesik eset azaz karakter elkuumlldeacutese

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

akkor simaacuten visszateacuteruumlnk a megszakiacutetaacutesboacutelfogadMOV ASBUF Kiolvassuk a pufferboacutel az eacuterkezett karaktertCLR RI Toumlroumlljuumlk az RI flag-etCLR TI Kuumlldeacutes előtt toumlroumlljuumlk TI-tMOV SBUFA Betesszuumlk a pufferba A tartalmaacutetCJNE A0relac1 Ha az eacuterkezett karakter 0 előttrelac1JC nemjo vagy 9 moumlgoumltt van akkor az eacuterveacutenytelenCJNE Arelac2 esetrelac2 A 0lt=Alt=9 felteacutetel ekvivalens aJNC nemjo 0lt=Alt felteacutetellel 9 utaacuten ASCII-ben joumlnCLR C Toumlroumlljuumlk a C bitet egy kivonaacutes előttSUBB A0 A kivonaacutessal csinaacutelunk az ASCII eacuterteacutekből normaacutelis szaacutemeacuterteacuteketMOV byteA A byte vaacuteltozoacuteba beletesszuumlk a kijelezendő szaacutemeacuterteacuteketORL byte11110000b Foumllaacutelliacutetjuk a felső 4 bitetportMOV P2byte Kitesszuumlk az eacuterteacuteket a P2-es portraRETInemjoMOV byte11111100b A 12-es koacuteduacute szaacutemjegyet fogjuk kijelezniJMP port Ugraacutes a kirakaacuteshoz FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV P211111100b A 7447-es IC-neacutel a 12-es koacuted egy kis furcsa jelet produkaacutel Ez jelzi a keacuteszenleacutetetSETB ES A soros porti megszakiacutetaacutes engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesJMP $ Helyben jaacuter a program

5 Koacutedreacuteszletek beeacutepiacuteteacutese sajaacutet programunkbaAz előző keacutet alfejezetben megtaacutergyaltuk a soros port kezeleacuteseacutenek keacutet nagyon fontos moacutedjaacutet Keacutesziacutetsuumlnk most olyan alkalmazaacutest amely a szerencsejaacuteteacutekos teacuteveacuteműsorokban előforduloacutekra hasonliacutet

23 feladat

A heacutetszegmenses kijelzőn fussanak koumlrbe a szaacutemok nagyon gyorsan Az 1 gomb megnyomaacutesaacutera aacutelljon meg a futaacutes a mikrovezeacuterlő pedig kuumlldje el a PC-nek a kijelzőn laacutethatoacute szaacutemot A 2 gomb lenyomaacutesaacutera folytatoacutedjon a szaacutemok futaacutesa a mikrovezeacuterlő pedig kuumlldje a PC-nek a bdquoRunningrdquo szoacutet [Code32]

Mivel a program egeacuteszen egyszerű lesz nem keacutesziacutetuumlnk folyamataacutebraacutet Valoacute igaz csaknem minden eleme előkeruumllt maacuter valamikor a tankoumlnyvben Ami most tanulsaacutegos lesz az az ahogy karakterlaacutencot kuumllduumlnk a soros porton Ehhez fel fogunk hasznaacutelni egy előre megiacutert szubrutinkoumlnyvtaacuterat Ennek neve UARTIOASM A koumlnyvtaacuterban szaacutemos olyan szubrutin talaacutelhatoacute amelyekre sokszor van igeacuteny a soros porti kommunikaacutecioacute soraacuten A szubrutinkoumlnyvtaacuter az ADuC 842-es gyaacuteri CD-jeacuten talaacutelhatoacute Az olvasoacutet ara biztatjuk hogy baacutetran kukkantson bele eacutes neacutezze meg hogy milyen stiacutelusban programoznak profik Mi a szubrutinok koumlzuumll mindoumlsszesen haacutermat fogunk felhasznaacutelni a tankoumlnyvben az ezekkel kapcsolatos tudnivaloacutekat a [A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz] foglalja oumlssze A konkreacutet hasznaacutelatra Code32 mutat peacuteldaacutekat A szubrutinokat tartalmazoacute faacutejlt az

$INCLUDE(UARTIOASM)

fordiacutetoacutei direktiacutevaacuteval csatolhatjuk a sajaacutet koacutedunkhoz

157 taacuteblaacutezat - A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Rutin neve Parameacuteteraacutetadaacutes Megjegyzeacutes

SENDCHAR Akkumulaacutetor Karakter kuumlldeacutese A kuumlldeacutesre szaacutent karaktert a rutin meghiacutevaacutesa előtt helyezzuumlk az akkumulaacutetorba A szubrutin tartalma megegyezik a [Soros porti kommunikaacutecioacute pollozaacutessal] alfejezetben a kuumlldeacutesre alkotott haacuteromsoros reacuteszlettel

GETCHAR Akkumulaacutetor Karakter fogadaacutesa Az eacuterkezett karaktert a rutin meghiacutevaacutesa utaacuten az akkumulaacutetorba keruumll A szubrutin tartalma megegyezik a [Soros porti kommunikaacutecioacute pollozaacutessal] alfejezetben a karakter fogadaacutesaacutera alkotott haacuteromsoros reacuteszlettel

SENDSTRING Adatmutatoacute Karakterlaacutenc kuumlldeacutese A rutin meghiacutevaacutesa előtt toumlltsuumlk az adatmutatoacuteba az elkuumlldeni kiacutevaacutent karakterlaacutenc kezdőciacutemeacutet A karakterlaacutenc veacutegeacutet egy 00h baacutejtnak kell jeleznie

Most neacutezzuumlk meg a koacutedot utaacutena pedig meacuteg majd megmagyaraacutezunk egy-keacutet aproacutesaacutegot

Code32asmORG 0060h A teacutenyleges programkoacuted kezdete

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

but1 BIT P32 Az 1 gomb bitjebut2 BIT P33 A 2 gomb bitjenyom BIT 00h Bitvaacuteltozoacute a gombnyomaacuteshoz Időhuacutezoacute szubrutin amely az 1 gombot is figyeli GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R543cik5MOV R469cik4JNB but1pushed Itt vizsgaacuteljuk meg a gomb bitjeacutet Elugrunk ha le van nyomva a gomb azaz a bit 0DJNZ R4cik4DJNZ R5cik5DJNZ R6cik6RETpushed Ide ugrunk gombnyomaacuteskorSETB nyom Magasra aacutelliacutetjuk a jelzőbitetRET Visszateacutereacutes a szubrutinboacutel FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV DPTRtext A kuumlldeni valoacute karakterlaacutenc ciacuteme azCALL SENDSTRING adatmutatoacuteba keruumll Aztaacuten meghiacutevjuk a kuumlldő szubrutintujraMOV R30 Ciklusvaacuteltozoacute nullaacutezaacutesafutMOV P2R3 Ciklusvaacuteltozoacute eacuterteacuteke a P2-es portra keruumllCLR nyom A rsquonyomrsquo jelzőbit toumlrleacuteseMOV A5 005 s lesz a vaacuterakozaacutesCALL GDELAY Időhuacutezoacute rutin meghiacutevaacutesaJB nyomstop Ha volt gombnyomaacutes megaacutellunkfolytatINC R3 Ciklusvaacuteltozoacute noumlveleacuteseCJNE R310fut 9-ig mehenek a szaacutemjegyek iacutegy 10-zel hasonliacutetjuk oumlssze R3-t az utolsoacute noumlveleacutes utaacutenJMP ujra Kezdjuumlk előroumll a szaacutemlaacutelaacuteststopMOV AR3 R3 eacuterteacuteke az akkumulaacutetorba keruumllADD A0 Hozzaacuteadjuk az ASCII 0 eacuterteacutekeacutetCALL SENDCHAR Elkuumlldjuumlk a PC-nekMOV A13 Kocsi vissza kuumlldeacuteseCALL SENDCHARMOV A10 Soremeleacutes kuumlldeacuteseCALL SENDCHARJB but2$ Vaacuterunk a 2 gombraCALL SENDSTRING Uacutejra elkuumlldjuumlk a karakterlaacutencotJMP folytat Folytatoacutedik a futaacutestext DB Running10130$INCLUDE(UARTIOASM)

Amikor a kijelzett szaacutemjegyet akarjuk ASCII karakter formaacutejaacuteban elkuumlldeni a PC-nek a konkreacutet szaacutemeacuterteacutekhez hozzaacute kell adnunk 32-t hiszen a koacutedtaacuteblaacutezatban a szaacutemjegyek 32-vel kezdődnek (vouml [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebra) Most a fordiacutetottjaacutet veacutegezzuumlk annak mint amikor eacuterkezett szaacutemjegyeket dolgoztunk foumll

A [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebra 32-től 126-ig mutatja az ASCII koacutedokat Tudnunk kell azonban hogy a 32-es eacuterteacutek alatti koacutedok kuumlloumlnfeacutele vezeacuterlőjeleket reprezentaacutelnak Ezeket elsősorban sornyomtatoacutekhoz hasznaacuteltaacutek Nekuumlnk igazaacuteboacutel kettő lesz ezek koumlzuumll kulcsfontossaacuteguacute A 10-es koacuted a New line

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

vagy Line Feed parancs Magyarul uacutej sor vagy soremeleacutes Hataacutesaacutera a kurzor egy sorral lejjebb ugrik amennyiben megfelelő feluumlleten toumlrteacutenik a kommunikaacutecioacute A 13-as koacuted a Carriage Return parancsot jelenti Ez magyarul annyit tesz hogy kocsi vissza Hataacutesa az hogy a kurzor visszaugrik a sor elejeacutere Karakterek fogadaacutesakor a 13-as koacuted jelenti az ENTER billentyűt

Ami meacuteg szokatlan az az adatbaacutejt direktiacuteva (DB) utaacuten beiacutert karakterlaacutenc Laacutethatoacute hogy aposztroacutefok koumlzeacute iacuterhatjuk a szoumlveget amit minden tovaacutebbi neacutelkuumll folytathatunk baacutejtonkeacutent is vesszővel elvaacutelasztva az eacuterteacutekeket A rsquoRunningrsquo szoacutet tehaacutet koumlveti egy soremeleacutes eacutes egy kocsi vissza parancs a 0 pedig a karakterlaacutenc veacutegeacutet jelenti Ebből a 0-boacutel fogja tudni a SENDSTRING rutin hogy veacutege a karakterlaacutencnak

6 Az ADuC vezeacuterleacutese PC-velA tankoumlnyvben maacuter laacutettunk arra egyszerű peacuteldaacutekat hogy hogyan hajthat meg a mikrovezeacuterlő kuumllső aacuteramkoumlroumlket Most olyan alkalmazaacutest keacutesziacutetuumlnk amelyben az asztali szaacutemiacutetoacutegeacutepuumlnkkel vagy laptopunkkal vezeacutereljuumlk az ADuC-ot Az ADuC pedig termeacuteszetesen vezeacuterelheti a kuumllső aacuteramkoumlrt

24 feladat

A heacutetszegmenses kijelzőn leacuteptessuumlk előre ill haacutetra a szaacutemjegyeket Tegyuumlk ezt uacutegy hogy a szaacutemiacutetoacutegeacutep billentyűzeteacuten a + ill ndash gombokat nyomogatjuk Az ENTER billentyű leuumlteacuteseacutere villanjon annyit a kijelzett szaacutem amennyi a sajaacutet eacuterteacuteke [Code33]

A megoldaacutes ismeacutet egeacuteszen egyszerű Beolvasunk egy karaktert a soros portroacutel majd megneacutezzuumlk hogy az a rsquo+rsquo jel vagy rsquondashrsquo jel ASCII koacutedja-e vagy esetleg az ENTER gomb lenyomaacutesaacutenak hataacutesaacutera a 13-as koacuted Ennek alapjaacuten aacutegaztatjuk el a programot a megfelelő helyre A koacutedok eacuterteacutekeacutenek elemzeacuteseacutehez a SUBB utasiacutetaacutest hasznaacuteljuk majd egyezeacutes eseteacuten a JZ hataacutesaacutera toumlrteacutenik az ugraacutes A program ismeacutet a joacute oumlreg DELAY szubrutinunkat igeacutenyli iacutegy azt most sem csatoljuk a koacutedhoz

Code33asmORG 0060h A teacutenyleges programkoacuted kezdetechar DATA 030h Az eacuterkezett karakter vaacuteltozoacuteja FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV R41 R4 a kijelezendő szaacutemjegy vaacuteltozoacutejakijelezMOV P2R4 A szaacutemjegy kijelzeacutesefogadCALL GETCHAR Karakterre vaacuterunkMOV charA Ha + eacuterkezettCLR CSUBB A+JZ plusz ugrunk a noumlveleacuteshezMOV Achar Ha - eacuterkezettCLR CSUBB A-JZ minusz ugrunk a csoumlkkenteacuteshezMOV Achar Ha ENTERT nyomtunk akkorCLR CSUBB A13 13 eacuterkezikJZ enter Ugrunk a villogtataacuteshozJMP fogad Baacutermely maacutes esetben visszaugrunk uacutej karakter fogadaacutesaacutehozpluszCJNE R49novel R4 maacuter 9 Ha nem noumlvelhetjuumlkMOV R41 R4 uacutejra 1 leszJMP kijelez KijelezzuumlknovelINC R4 Noumlveljuumlk R4-etJMP kijelez KijelezzuumlkminuszCJNE R41csokkent R4 maacuter 1 Ha nem csoumlkkentjuumlkMOV R49 R4 uacutejra 9 lesz

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

JMP kijelez KijelezzuumlkcsokkentDEC R4 Csoumlkkentjuumlk R4-etJMP kijelez KijelezzuumlkenterMOV AR4 R4-et aacutetmaacutesoljuk R3-ba A villogaacuteshozMOV R3A R3 lesz a ciklusvaacuteltozoacuteMOV A10 01 s vaacuterakozaacutes lesz a villogaacuteshozvillogMOV P215 Kikapcsoljuk a kijelzőtCALL DELAY VaacuterunkMOV P2R4 Bekapcsoljuk a kijelzőtCALL DELAY VaacuterunkDJNZ R3villog Ciklusvaacuteltozoacute lekezeleacuteseJMP kijelez Ugraacutes vissza a kijelzeacuteshez$INCLUDE(UARTIOASM)

Created by XMLmind XSL-FO Converter

16 fejezet - Iacuteraacutes a memoacuteriaacutebaA [Bitvaacuteltozoacutek hasznaacutelata] eacutes [A teljes alsoacute RAM] alfejezetben maacuter elemeztuumlk az alsoacute RAM beosztaacutesaacutet eacutes műkoumldeacuteseacutet No rendben annak neacutehaacuteny reacuteszleteacutet eacutes sajaacutetossaacutegaacutet Eljoumltt az idő arra hogy megtanuljuk hogy hogyan iacuterhatunk a mikrovezeacuterlő memoacuteriaacutejaacuteba Ez a memoacuteria nyilvaacutenvaloacutean RAM lesz (a flash memoacuteriaacutet ezen a szinten meacuteg nem taacutergyaljuk) iacutegy az is biztos hogy nem a koacutedmemoacuteria Vessuumlnk egy pillantaacutest a memoacuteriateruumlleteket taglaloacute adatlapra ([Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebra)

161 aacutebra - Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese

Az alsoacute RAM-ot (lower RAM) maacuter vizsgaacuteltuk az emliacutetett alfejezetekben Az aacutebraacuten azt laacutetjuk hogy az alsoacute RAM-nak megfelelő kis dobozba odaiacutertaacutek hogy direct or indirect addressing Ez azt jelenti hogy direkt vagy indirekt ciacutemzeacutes Ez nagyon fontos lesz A direkt ciacutemzeacutest maacuter ismerjuumlk hasznaacuteltuk is sokszor Indirekt ciacutemzeacutest is hasznaacuteltunk de az a koacuted-indirekt ciacutemzeacutes volt Amire itt gondolni kell az viszont nem az Sima indirekt ciacutemzeacutesről van szoacute Most fogadjuk el hogy ezt iacutegy hiacutevjaacutek a koumlvetkező alfejezetben megtanuljuk hasznaacutelni Most az a leacutenyeg hogy az alsoacute RAM mind direkt mind indirekt ciacutemzeacutessel eleacuterhető Eacutes emleacutekeztessuumlk magunkat arra is hogy az alsoacute RAM 00h-toacutel 7Fh-ig tart A 80h-toacutel FFh-ig terjedő teruumlletet felső RAM-nak (upper RAM) hiacutevjaacutek Ez teljesen uumlres nyugodtan hasznaacutelhatjuk a sajaacutet baacutejtvaacuteltozoacuteink szaacutemaacutera csak arra figyeljuumlnk hogy a felső RAM kizaacuteroacutelag indirekt ciacutemzeacutessel eacuterhető el A [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten a felső RAM doboza mellett van egy zoumlldes doboz is Ez jelenti a speciaacutelis funkcioacutejuacute regiszterek (SFR-ek) teruumlleteacutet Oda meg azt iacutertaacutek hogy kizaacuteroacutelag direkt ciacutemzeacutes Neacutezzuumlk miről is van itt szoacute A felső RAM eacutes az SFR-ek teruumllete ugyanazt a ciacutemteruumlletet foglalja el Ez a teruumllet 80h-toacutel FFh-ig terjed Az eacuterdekesseacuteg az hogy e keacutet teruumllet bdquoegymaacutes alattrdquo helyezkedik el a memoacuteriaacuteban azonos ciacutemekkel eacutes a processzor eacuteppen azzal tudja megkuumlloumlnboumlztetni a kettőt egymaacutestoacutel hogy egyiket direkt a maacutesikat indirekt ciacutemzeacutessel eacuteri el Ha tehaacutet egy 80h eacutes FFh koumlzoumltti ciacutem szerepel valamely ciacutemzeacutesben akkor az akkor ceacutelozza a felső RAM-ot ha indirekt a ciacutemzeacutes eacutes akkor ceacutelozza valamely SFR-t ha direkt a ciacutemzeacutes Talaacuten most maacuter eacuterthető az uumlgy meacuteg ha elsőre szokatlannak is tűnthellip

A [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten a baracksziacutenű doboz 4 kilobaacutejtos flash-memoacuteriaacutet mutat Ez a memoacuteria az SFR-eken keresztuumll eacuterhető el Ebben a tankoumlnyvben nem taacutergyaljuk A jobb oldali nagyobb saacuterga doboz a belső adatmemoacuteriaacutet szemleacutelteti Ennek meacuterete 2 kilobaacutejt eacutes bdquoveacuteletlenuumllrdquo ehhez is tudnunk kell egy truumlkkoumlt Megfelelő beaacutelliacutetaacutes utaacuten ezt a teruumlletet a processzor bdquouacutegy laacutetjardquo mintha kuumllső adatmemoacuteria lenne eacutes iacutegy eacuteri el Kuumlloumln ciacutemzeacutes tartozik ehhez is ez lesz a kuumllső indirekt Ez akkor is iacutegy van ha

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

kuumllső memoacuteriaacutet egyaacuteltalaacuten nem kapcsoltunk a mikrovezeacuterlőhoumlz Ezt egyeacutebkeacutent megtehetneacutenk eacutes akaacuter 16 megabaacutejtot is meg tudnaacutenk ciacutemezni

A koumlvetkező alfejezetekben adatokat fogunk iacuterni mind az alsoacute RAM-ba mind a felső RAM-ba mind a belső adatmemoacuteriaacuteba Az olvasoacutet mindhaacuteromra megtaniacutetjuk eacutes arra baacutetoriacutetjuk hogy sajaacutet belaacutetaacutesa szerint vaacutelasszon a moacutedszerek koumlzuumll amikor majd oumlnaacutelloacutean keacutesziacutet alkalmazaacutesokat

1 Iacuteraacutes az alsoacute eacutes a felső RAM-baA [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten laacutethatoacute hogy az alsoacute RAM direkt eacutes indirekt moacutedon is ciacutemezhető Most az indirekt ciacutemzeacutest fogjuk vaacutelasztani Az indirekt ciacutemzeacuteshez szuumlkseacuteg lesz egy indexregiszterre ez akaacuter az R0 akaacuter az R1 regiszter lehet Leacutenyeges hogy a toumlbbi R regiszter viszont nem Az alaacutebbiakban előszoumlr is oumlsszeszedjuumlk azokat az utasiacutetaacutesokat melyeket maacutes ciacutemzeacutessel egyeacutebkeacutent maacuter joacutel ismeruumlnk Most viszont indirekt ciacutemzeacutest hasznaacutelunk

ADD ARiADDC ARiSUBB ARiINC RiDEC RiCJNE RidatarelMOV ARiMOV RiAMOV RidataANL ARiORL ARiXRL ARi

Az Ri szimboacutelum pontosan azt jelenti hogy az indirekt ciacutemzeacutesre csak az R0 vagy R1 regisztert hasznaacutelhatjuk (Akkor aacutellna Ri helyett Rn ha az oumlsszes R regiszterrel hasznaacutelhatnaacutenk a ciacutemzeacutest) Ennek a keacutet regiszternek egyetlen baacutejt a meacuterete Ez a baacutejt most egy memoacuteriaciacutemet fog jelenti eacuterteacutekeacutenek megfelelően a 00h-FFh memoacuteriateruumlleten azaz a nullaacutes lapon A fenti utasiacutetaacutesok iacutegy azt a ciacutemet eacuterik el amelyiket a hasznaacutelt regiszter (R0 vagy R1 ) eacuterteacuteke mutat

25 feladat

A mikrovezeacuterlő fogadjon a soros porton keresztuumll legfeljebb 10 szaacutemjegyet eacutes ezeket taacuterolja el A 10 karakter eleacutereacutesekor automatikusan jeleniacutetse meg sorban a 10 karaktert Illegaacutelis karakter (nem szaacutemjegy) eseteacuten speciaacutelis karaktert (farkincaacutet) jeleniacutetsen meg Ha meacuteg nem eacutertuumlk el geacutepeleacuteskor a 10 karaktert de ENTER-t uumltuumlnk akkor is kezdődjoumln meg az addig eltaacuterolt szaacutemjegyek megjeleniacuteteacutese [Code34 Code35 Code36]

A megoldaacutes maacuter nem teljesen elemi iacutegy folyamataacutebraacutet keacutesziacutetuumlnk a vezeacuterelvek alapjaacuten laacutesd [A (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja] aacutebra A folyamataacutebra az aproacute reacuteszleteket most nem tartalmazza Azt szemleacutelteti hogy mi toumlrteacutenik a 10 karakter eleacutereacutesekor ill az ENTER megnyomaacutesakor eacutes akkor ha egyaacuteltalaacuten nem eacuterkezett karakter addig amikor megnyomtaacutek az ENTER-t

162 aacutebra - A [25 feladat] (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

Az ENTER billentyűvel kapcsolatban tartozunk meacuteg egy reacuteszlettel ha a PC-n ENTER-t uumltuumlnk akkor az keacutet koacutedot generaacutel Eacuterkezik egy 13-as koacuted (kocsi vissza) aztaacuten egy 10-es (soremeleacutes) Iacutegy a 13-as eacuteszleleacutese utaacuten el kell nyeletnuumlnk a 10-est azaz ilyenkor meacuteg egy karakter beolvasunk Eacutes termeacuteszetesen semmit nem csinaacutelunk vele Csak nem maradhat ott a pufferban

A koacutedban a char vaacuteltozoacuteban fogjuk az aktuaacutelisan beeacuterkezett karaktert eltaacuterolni A number vaacuteltozoacute azt szaacutemolja hogy haacutenyadik karakterneacutel tartunk Az alsoacute RAM 032h-s memoacuteriaciacutemeacutehez pedig az array szimboacutelumot rendeljuumlk Ehhez uacutej fordiacutetoacutei direktiacutevaacutet tanulunk meg EQU Ez a direktiacuteva az adott ciacutemhez vagy eacuteppen konstanshoz rendeli a megadott szimboacutelumot

array EQU 032h

Az indirekt ciacutemzeacutesekkel ettől a memoacuteriaciacutemtől kezdve fogjuk elmenteni az eacuterkezett legfeljebb 10 karaktert Eacutes lejaacutetszaacuteskor ezzel a ciacutemmel kezdve olvassuk ki őket a memoacuteriaacuteboacutel A koacutedban most sem tuumlntetjuumlk foumll hűseacuteges DELAY szubrutinunkat

Code34asmORG 0060h A teacutenyleges programkoacuted helyechar DATA 030h A beeacuterkező karakter eltaacuterolaacutesaacutera szolgaacuteloacute baacutejtnumber DATA 031h Ennyi darab karakter eacuterkezettarray EQU 032h A menteacutesre hasznaacutelt toumlmb memoacuteriaciacutemeMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud lesznewMOV DPTRmesstart Az indiacutetaacutesi uumlzenet kiiacuteraacutesaCALL SENDSTRINGMOV P215 Erre a koacutedra a kijelzőn semmi sincsMOV R0array R0-ba toumlltjuumlk a memoacuteriatoumlmb kezdeteacutetMOV number0 A karakterek darabszaacutemaacutenak kezdeti eacuterteacuteke

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

fogadCALL GETCHAR Karaktert olvasunk beMOV charA Elmentjuumlk a char vaacuteltozoacutebaCALL SENDCHAR Visszakuumlldjuumlk a PC-nekCLR CSUBB A13 Megneacutezzuumlk hogy ENTER eacuterkezett-e azaz 13JZ enter Ha igen elungrunk lekezelniMOV Achar A-ba tesszuumlk a char-ba ideiglenesen betett a PC-ről eacuterkezett karaktertMOV R0A Indirekt ciacutemzeacutessel a memoacuteriaacuteba mentjuumlkINC number Noumlveljuumlk az elmentett karakterek darabszaacutemaacutetINC R0 Noumlveljuumlk az indirekt ciacutemzeacuteshez hasznaacutelt regiszter eacuterteacutekeacutetMOV Anumber Megneacutezzuumlk eleacutertuumlk-e aCLR CSUBB A10 10 karaktert Ha igenJZ kijelez ugrunk kijelezniJMP fogad Visszaugrunk a koumlvetkező karakter fogadaacutesaacutehozenterCALL GETCHAR ENTER eseteacuten a 13 utaacuten 10 is joumln Ezt kiolvassuk de a tovaacutebbiakban nem csinaacutelunk vele semmitMOV Anumber Amennyiben number eacuterteacuteke 0 azaz egyJZ new karakter sem eacuterkezett visszaugrunk uacutej karaktersort fogadnikijelezMOV DPTRmesrepeat A szaacutemok kijelzeacutese előtti uumlzenetCALL SENDSTRINGMOV R30 Ez a ciklus fogja egyeseacutevel kiolvasni a memoacuteriaacuteboacutel az elmentett karaktereket amiket aztaacuten kirak a kijelzőreMOV R0array R0-ba tesszuumlk a memoacuteriatoumlmb kezdeti ciacutemeacutetdisplayMOV A10 Roumlvid időt vaacuterakozunkCALL DELAYMOV AR0 A-ba tesszuumlk az indirekt ciacutemzeacutessel kiolvasott karaktertCJNE A0relac1 Ha az eltaacuterolt karakter nem 0 eacutes 9 koumlzeacuterelac1 esik akkor farkincaacutet fogunk kijelezniJC illegal megjeleniacuteteacuteskor Eacutes odaugrunkCJNE Arelac2 Az előbbi az Altrsquo0rsquo eset ez meg azrelac2JNC illegal Agtrsquo9rsquo (Agt=rsquorsquo) esetportMOV P2A Kirakjuk a P2-es portra MOV A50 Vaacuterunk kicsit a kijelzeacutes utaacuten 05 s-etCALL DELAYMOV P215 Kikapcsoljuk a kijelzőtMOV A5 Nagyon roumlvid ideig vaacuterunk 005 sCALL DELAYINC R3 Noumlveljuumlk a ciklusvaacuteltozoacutetMOV AR3 Megvizsgaacuteljuk a ciklusvaacuteltozoacutetCJNE Anumbereval R3 lt numberevalJNC new Ha R3 = number akkor visszaugrunk uacutej karaktersorozat beolvasaacutesaacutehozINC R0 Noumlveljuumlk R0-tJMP display Folytatjuk az elmentett szaacutemjegyek kijelzeacuteseacutetillegalMOV A12 A farkincaacutenak nevezett karakter koacutedjaJMP port Ugrunk a teacutenyleges kijelzeacuteshez Adatok (karakterfuumlzeacuterek) messtart DB 101013Enter some characters10130mesrepeat DB 10Watch the display10130$INCLUDE(UARTIOASM)

A fenti koacutedban az alsoacute RAM-ba iacutertunk adatokat Egyetlen sor moacutedosiacutetaacutesaacuteval a felső RAM-ba is iacuterhatunk Ehhez

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

raacuteadaacutesul teacutenylegesen kizaacuteroacutelag indirekt ciacutemzeacutessel feacuterhetuumlnk hozzaacute hiszen ha direkt ciacutemzeacutest hasznaacutelnaacutenk akkor az SFR-eket iacuternaacutenk foumlluumll ami toumlbbnyire azonnal eleacuteg massziacutev programhalaacutelhoz vezetne A megvaacuteltoztatni kiacutevaacutent sor a memoacuteriateruumllet kezdőciacuteme Legyen ez most a felső RAM kezdete azaz 80h

array EQU 080h

Ennyi Semmi toumlbb Ezzel a ciacutemmegadaacutessal az adatok a felső RAM-ba keruumllnek Ezt a vaacuteltozatot a koacutedkoumlnyvtaacuterban a teljesseacuteg kedveacuteeacutert Code35 testesiacuteti meg

2 Iacuteraacutes a belső adatmemoacuteriaacutebaA [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten laacutethatoacute belső adatmemoacuteria hasznaacutelata nem igeacutenyel tuacutel nagy erőfesziacuteteacutest de neacutehaacuteny dolgot meg kell eacutertenuumlnk hozzaacute Ahhoz hogy hasznaacutelni tudjuk 1-re kell aacutelliacutetanunk egy bizonyos bitet egy olyan SFR-ben ami az ADuC 842-es speciaacutelis lehetőseacutegeiről rendelkezik Ez a regiszter a CFG842 Reacuteszletes leiacuteraacutesa megtalaacutelhatoacute a gyaacuteri dokumentumban [1 p 36 Table 13] Ezzel a regiszterrel fontos beaacutelliacutetaacutesokat tehetuumlnk meg a kiterjesztett veremmutatoacuteval a PWM-jelek laacutebaival a DA-aacutetalakiacutetoacute puffereacutevel kuumllső oacuterajel-generaacutetorral az SPI-busszal kapcsolatban eacutes a belső adatmemoacuteria eleacutereacuteseacutevel kapcsolatban Nekuumlnk ebben a tankoumlnyvben kizaacuteroacutelag ez utoacutebbi a fontos Jegyezzuumlk meg hogy az ADuC 842-es belső adatmemoacuteriaacuteja akkor keacutepeződik le a kuumllső memoacuteria alsoacute 2 kilobaacutejtjaacutera ha CFG842 0 bitjeacutet 1-re aacutelliacutetjuk Ellenkező esetben a belső adatmemoacuteriaacutet nem tudjuk eleacuterni Ezt a bitet a maacuter megismert logikai maszkolaacutessal aacutelliacutethatjuk 1-re

ORL CFG84200000001b

A kuumllső adatmemoacuteria eleacutereacuteseacutehez uacutej ciacutemzeacutesmoacutedot kell megtanulnunk Ez a kuumllső indirekt ciacutemzeacutes Az utasiacutetaacutes mnemonikjaacuteban szereplő X betű az External angol szoacutera utal ami kuumllsőt jelent A ciacutemzeacuteshez eacuteppen uacutegy szuumlkseacuteg lesz az adatmutatoacutera mint a koacuted-indirekt ciacutemzeacutesneacutel

MOVX ADPTRMOVX DPTRA

A ciacutemzeacutesnek van egy maacutesik vaacuteltozata is ehhez az utasiacutetaacuteshoz

MOVX ARiMOVX RiA

Ez utoacutebbit viszont csak nagyon ritkaacuten hasznaacuteljaacutek a programozoacutek csak akkor amikor elegendő a ciacutemzeacuteshez az R0 vagy R1 regiszter Egyeacuteb esetekben az adatmutatoacutet hasznaacuteljuk az indirekt moacutedon megadott ciacutem megfogalmazaacutesaacutehoz

A Code34 eacutes Code35 programokban csak neacutehaacuteny vaacuteltoztataacutest kell megtennuumlnk eacutes maacuter műkoumldni is fog a kuumllső indirekt ciacutemzeacutes Ez lesz a Code36 program Az első vaacuteltoztataacutes a CFG842 regiszter 0 bitjeacutenek 1-re aacutelliacutetaacutesa ahogy azt fentebb bemutattuk A maacutesodik hogy a sima R0-val megfogalmazott indirekt ciacutemzeacutes helyett mindig a kuumllső indirekt ciacutemzeacutest hasznaacuteljuk Ehhez persze az adatmutatoacuteba mindig időben be kell toumlltenuumlnk a kuumllső memoacuteriakeacutent eacutertelmezet belső adatmemoacuteria megfelelő ciacutemeacutet ami legyen most naacutelunk mindjaacutert a teruumllet legeleje

MOV DPTR0000h

Ha az adatmutatoacutenak toumlrteacutenő eacuterteacutekadaacutest megtesszuumlk akkor maacuter csak az oumlsszes

MOV AR0

eacutes

MOV R0A

utasiacutetaacutest kell lecsereacutelnuumlnk a koumlvetkezőkre

MOVX ADPTR

eacutes

MOV DPTRA

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

A nagyon keveacutes vaacuteltoztataacutes elleneacutere Code36-ot meacutegis reacuteszletezzuumlk hiszen igen nagy fontossaacuteggal biacuter Az elteacutereacuteseket Code34-hez (eacutes Code35-houmlz) keacutepest saacuterga kiemeleacutessel jeloumlljuumlk

Code36asmORG 0060h A teacutenyleges programkoacuted helyechar DATA 030h A beeacuterkező karakter eltaacuterolaacutesaacutera szolgaacuteloacute baacutejtnumber DATA 031h Ennyi darab karakter eacuterkezettMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszORL CFG84200000001b A belső adatmemoacuteria lekeacutepezeacutese a kuumllső adatmemoacuteria alsoacute reacuteszeacuterenewMOV DPTRmesstart Az indiacutetaacutesi uumlzenet kiiacuteraacutesaCALL SENDSTRINGMOV P215 Erre a koacutedra a kijelzőn semmi sincsMOV DPTR0000h A ciacutem elhelyezeacutese az adatmutatoacutebaMOV R0array R0-ba toumlltjuumlk a memoacuteriatoumlmb kezdeteacutetMOV number0 A karakterek darabszaacutemaacutenak kezdeti eacuterteacutekefogadCALL GETCHAR Karaktert olvasunk beMOV charA Elmentjuumlk a char vaacuteltozoacutebaCALL SENDCHAR Visszakuumlldjuumlk a PC-nekCLR CSUBB A13 Megneacutezzuumlk hogy ENTER eacuterkezett-e azaz 13JZ enter Ha igen elungrunk lekezelniMOV Achar A-ba tesszuumlk a char-ba ideiglenesen betett a PC-ről eacuterkezett karaktertMOVX DPTRA Kuumllső indirekt ciacutemzeacutessel a memoacuteriaacuteba mentjuumlkINC number Noumlveljuumlk az elmentett karakterek darabszaacutemaacutetINC DPTR Noumlveljuumlk a kuumllső indirekt ciacutemzeacuteshez hasznaacutelt adatmutatoacute eacuterteacutekeacutetMOV Anumber Megneacutezzuumlk eleacutertuumlk-e aCLR CSUBB A10 10 karaktert Ha igenJZ kijelez ugrunk kijelezniJMP fogad Visszaugrunk a koumlvetkező karakter fogadaacutesaacutehozenterCALL GETCHAR ENTER eseteacuten a 13 utaacuten 10 is joumln Ezt kiolvassuk de a tovaacutebbiakban nem csinaacutelunk vele semmitMOV Anumber Amennyiben number eacuterteacuteke 0 azaz egyJZ new karakter sem eacuterkezett visszaugrunk uacutej karaktersort fogadnikijelezMOV DPTRmesrepeat A szaacutemok kijelzeacutese előtti uumlzenetCALL SENDSTRINGMOV R30 Ez a ciklus fogja egyeseacutevel kiolvasni a memoacuteriaacuteboacutel az elmentett karaktereket amiket aztaacuten kirak a kijelzőreMOV DPTR0000h DPTR-be tesszuumlk a memoacuteriatoumlmb kezdeti ciacutemeacutetdisplayMOV A10 Roumlvid időt vaacuterakozunkCALL DELAYMOVX ADPTR A-ba tesszuumlk a kuumllső indirekt ciacutemzeacutessel kiolvasott karaktertCJNE A0relac1 Ha az eltaacuterolt karakter nem 0 eacutes 9 koumlzeacuterelac1 esik akkor farkincaacutet fogunk kijelezniJC illegal megjeleniacuteteacuteskor Eacutes odaugrunkCJNE Arelac2 Az előbbi az Altrsquo0rsquo eset ez meg azrelac2JNC illegal Agtrsquo9rsquo (Agt=rsquorsquo) esetportMOV P2A Kirakjuk a P2-es portra MOV A50 Vaacuterunk kicsit a kijelzeacutes utaacuten 05 s-et

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

CALL DELAYMOV P215 Kikapcsoljuk a kijelzőtMOV A5 Nagyon roumlvid ideig vaacuterunk 005 sCALL DELAYINC R3 Noumlveljuumlk a ciklusvaacuteltozoacutetMOV AR3 Megvizsgaacuteljuk a ciklusvaacuteltozoacutetCJNE Anumbereval R3 lt numberevalJNC new Ha R3 = number akkor visszaugrunk uacutej karaktersorozat beolvasaacutesaacutehozINC DPTR Noumlveljuumlk DPTR-tJMP display Folytatjuk az elmentett szaacutemjegyek kijelzeacuteseacutetillegalMOV A12 A farkincaacutenak nevezett karakter koacutedjaJMP port Ugrunk a teacutenyleges kijelzeacuteshez Adatok (karakterfuumlzeacuterek) messtart DB 101013Enter some characters10130mesrepeat DB 10Watch the display10130$INCLUDE(UARTIOASM)

Felhiacutevjuk a figyelmet arra hogy mivel csak 10 karaktert kell elmentenuumlnk most pont lehetne hasznaacutelni a

MOVX ARiMOVX RiA

utasiacutetaacutespaacutert is Ekkor termeacuteszetesen az adatmutatoacute helyett a hasznaacutelt R regiszternek (R0 agy R1) kellene a megfelelő helyen eacuterteacuteket adnunk eacutes azt szintuacutegy a megfelelő helyen noumlvelnuumlnk laacutesd a saacuterga kiemeleacuteseket Code36-ban

Created by XMLmind XSL-FO Converter

17 fejezet - IdőziacutetőkszaacutemlaacuteloacutekA soros porti kommunikaacutecioacuteroacutel szoacuteloacute egyik alfejezetben ([Az UART soros interfeacutesz]) maacuter emliacutetettuumlk hogy az ADuC 842-esben neacutegy időziacutetőszaacutemlaacuteloacute talaacutelhatoacute A 3 sorszaacutemuacutet kifejezetten a soros porti kommunikaacutecioacutehoz tervezteacutek eacutes ennek műkoumldeacuteseacutet ott ismertettuumlk A maacutesik haacuterom időziacutetőszaacutemlaacuteloacute azaz a 0 1 eacutes 2 baacutermilyen olyan feladatra hasznaacutelhatoacute amit a nevuumlk is takar Ha időziacutetőkeacutent uumlzemeltetjuumlk őket akkor egy oacuterajel egy kettyeneacutest jelent (Ennek eacutertelmeacutet keacutesőbb tisztaacutezzuk) Ez az uumlzemmoacuted kivaacuteloacutean alkalmas arra hogy időziacuteteacutest hajtsunk veacutegre ezekkel az eszkoumlzoumlkkel A szaacutemlaacuteloacute uumlzemmoacuted kicsit maacutest jelent Ilyenkor a chip megfelelő laacutebaacuten mutatkozoacute 1-0-aacutetmenet ugratja eggyel a szaacutemlaacuteloacute eacuterteacutekeacutet Ezzel a lehetőseacuteggel azonban e tankoumlnyvben nem foglalkozunk

A tankoumlnyvben a 0 időziacutetőt fogjuk toumlbb peacuteldaacuteban felhasznaacutelni Innentől kezdve tehaacutet nem időziacutetőnekszaacutemlaacuteloacutenak nevezzuumlk hanem csak időziacutetőnek (Az olvasoacutet arra keacuterjuumlk hogy azt se vegye zokon ha neacuteha TIMER 0-t iacuterunk) Az 1 időziacutető egyeacutebkeacutent pontosan uacutegy műkoumldik mint a 0 időziacutető eacutes a 2 sorszaacutemuacute is toumlbb hasonloacutesaacutegot mutat az előzőekkel Annyiban mindhaacuterom megegyezik hogy 16 bit felbontaacutesuacuteak Ez az eacuterteacutek nyilvaacuten keacutet baacutejtot jelent melyek egy-egy SFR-ben talaacutelhatoacutek A 0 időziacutető eseteacuteben ezek a TH0 eacutes TL0 regiszterek A T betű a Timer (időziacutető) szoacuteboacutel szaacutermazik a 0 szaacutemjegy a 0 időziacutetőt jeloumlli A H betű a High azaz felső jelzőt takarja Ez lesz tehaacutet a 16-bites eacuterteacutek felső baacutejtja Az L betű maacuter sejthető moacutedon a Low azaz alsoacute jelzőből szaacutermazik Ez pedig a 16-bites eacuterteacutek alsoacute baacutejtja lesz Mindez akkor igaz ha teacutenylegesen 16-bites uumlzemmoacutedot hasznaacutelunk

A 0 eacutes 1 időziacutetőhoumlz minthogy feleacutepiacuteteacutesuumlkben pontosan megegyeznek toumlbb olyan regiszter tartozik melyek egyik fele az egyik maacutesik fele a maacutesik időziacutetőt konfiguraacutelja Ez a TMOD eacutes TCON regiszter A most koumlvetkező taacuteblaacutezatokban ([A TMOD SFR parameacuteterei] eacutes [A TCON SFR parameacuteterei]) csak a 0 időziacutetőre vonatkozoacute biteket taacutergyaljuk az 1 időziacutetőre vonatkozoacutek leiacuteraacutesa megegyezik ezekkel csak a hivatkozaacutesokat kell kicsereacutelnuumlnk 0-roacutel 1-re

171 taacuteblaacutezat - A TMOD SFR parameacuteterei

TMOD Control and configuration for Timers 0 and 1

A 0 eacutes 1 időziacutető vezeacuterlő- eacutes konfiguraacutecioacutes regisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 Gate Az 1 időziacutető vezeacuterlő- eacutes konfiguraacutecioacutes bitjei Hataacutesuk megegyezik a 0 időziacutetőre az alaacutebbiakban leiacutertakkal

6 CT

5 M1

4 M0

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

3 Gate Ha 0 akkor a 0 időziacutetőt minden esetben engedeacutelyezzuumlk amikor a TR0 vezeacuterlőbitet magasra aacutelliacutetjuk (laacutesd TCON regiszter) Az 1 esetet nem taacutergyaljuk

2 CT Ha 0 akkor időziacutető uumlzemmoacutedot aacutelliacutetunk be A szuumlkseacuteges jelet a belső oacuterajel jelenti Az 1 esetet nem taacutergyaljuk

1 M1 A 0 időziacutető uumlzemmoacutedjaacutenak bitje

0 M0 A 0 időziacutető uumlzemmoacutedjaacutenak bitje

M1 M0 Uumlzemmoacuted

0 0 TH0 8-bites időziacutetőkeacutent uumlzemel TL0 5-bites

előskaacutelaacutezoacutekeacutent tekintendő

0 1 16-bites időziacutető TH0 eacutes TL0 egyuumltt kezelendő

1 0 8-bites uacutejratoumlltős uumlzemmoacuted TH0 eacuterteacuteke mindig

betoumlltődik TL0-ba valahaacutenyszor az tuacutelcsordul

1 1 Nem taacutergyaljuk

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

A TMOD regiszterneacutel a gyaacuteri leiacuteraacutes szerint [1 p 60 Table 28] valoacutejaacuteban van egy aproacute kuumlloumlnbseacuteg a keacutet időziacutető 11-es uumlzemmoacutedjai koumlzoumltt de ezzel az uumlzemmoacuteddal ebben a tankoumlnyvben nem foglalkozunk A toumlbbi reacuteszlet a keacutet időziacutetőre viszont teacutenylegesen toumlkeacuteletesen megegyezik A TCON regiszternek csak 4 bitje vonatkozik az időziacutetőkreszaacutemlaacuteloacutekra A toumlbbi bit eacuterdekes moacutedon a megszakiacutetaacutest kivaacuteltani keacutepes kuumllső esemeacutenyekre vonatkozik Minthogy ezeket taacutergyaltuk a tankoumlnyvben (laacutesd [Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes] alfejezet) a taacuteblaacutezatboacutel sem hagyhatjuk ki a raacutejuk vonatkozoacute tovaacutebbi informaacutecioacutekat Ezeknek birtokaacuteban az olvasoacute tovaacutebb finomiacutethatja a gombnyomaacutesroacutel mint kuumllső esemeacutenyről szerzett tudaacutesaacutet

172 taacuteblaacutezat - A TCON SFR parameacuteterei

TCON TimerCounter 0 and 1 Control Register

A 0 eacutes 1 időziacutetőszaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Leiacuteraacutes

7 TF1 Az 1 időziacutető vezeacuterlő bitjei Hataacutesuk megegyezik a 0 időziacutetőre az alaacutebbiakban leiacutertakkal

6 TR1

5 TF0 A 0 időziacutető tuacutelcsordulaacutesi jelzőbitje Hardveresen aacutell 1-re tuacutelcsordulaacuteskor Hardveresen toumlrlődik ha a programszaacutemlaacuteloacute a megszakiacutetaacutesi rutinra aacutell

4 TR0 A 0 időziacutető futaacutesi vezeacuterlőbitje Ha 1-re aacutelliacutetjuk elindul az időziacutető Ha 0-ra aacutelliacutetjuk megaacutell az időziacutető

3 IE1 Az 1 kuumllső esemeacuteny kezeleacuteseacutenek bitjei Hataacutesuk megegyezik a 0 kuumllső esemeacutenyre

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

az alaacutebbiakban leiacutertakkal

2 IT1

1 IE0 A 0 kuumllső esemeacuteny megszakiacutetaacutesi jelzőbitje Az IT0 bittől fuumlggően hardveresen aacutell 1-re lefutoacute eacutelneacutel vagy nulla jelszintneacutel

0 IT0 A 0 kuumllső esemeacuteny megszakiacutetaacutesaacutenak aktivaacutelaacutesi tiacutepusa Ha 1-et aacutelliacutetunk be 1-0 aacutetmenetre vaacuteltoacutedik ki a megszakiacutetaacutes Ha 0-t aacutelliacutetunk be alacsony jelszintre vaacuteltoacutedik ki megszakiacutetaacutes

Az időziacutetők uacutegy műkoumldnek hogy az oacuterajeleket szaacutemlaacuteloacute regiszterbe vagy regiszterekbe (ez a kivaacutelasztott uumlzemmoacutedtoacutel fuumlgg) betoumlltjuumlk a kezdeti eacuterteacuteket 16-bites uumlzemmoacutednaacutel a keacutet regiszter TH0 eacutes TL0 egyuumltt eacutertelmezendő a kettő egyuumltt egy 16-bites eacuterteacuteket takar Minden egyes oacuterajelre a szaacutemlaacuteloacuteregiszter vagy regiszterek egyuumlttes eacuterteacuteke eggyel nő Amennyiben ez az eacuterteacutek eleacuteri a maximaacutelisan aacutebraacutezolhatoacute eacuterteacuteket majd a koumlvetkező oacuterajelneacutel bdquoaacutetfordulrdquo azaz ismeacutet nulla lesz bekoumlvetkezik a megszakiacutetaacutes Ennek vektora TIMER 0 eseteacuten a 000Bh ciacutem TIMER 1 eseteacuten pedig a 001Bh ciacutem

Megismeacuteteljuumlk az időziacutetők regisztere vagy regiszterei nem lefeleacute hanem eacuteppen hogy foumllfeleacute szaacutemolnak A megszakiacutetaacutes pedig ezek tuacutelcsordulaacutesakor koumlvetkezik be

A [Az IE SFR parameacuteterei]ban megtalaacuteljuk a megszakiacutetaacutesok egy reacuteszeacutenek engedeacutelyezőbitjeacutet Timer 0 eseteacuteben ez az ET0 Timer 1 eseteacuteben pedig az ET1 A 8-bites uumlzemmoacuted nagyon nagy frekvenciaacutejuacute műkoumldeacutest eredmeacutenyezne ezeacutert elsőkeacutent a 16-bites uumlzemmoacuteddal mutatunk be tanulsaacutegos alkalmazaacutesokat

1 Egyszerű időmeacutereacutes az időziacutetővelIdeacutezzuumlk foumll a [14 feladat]ot de tegyuumlnk hozzaacute egy koumlvetelmeacutenyt eacutes adjunk neki uacutej sorszaacutemot is

26 feladat

Az ADuC-panel LED-soraacutenak oumlsszes LED-je villanjon foumll roumlvid ideig minden egyes maacutesodpercben Hasznaacuteljuk ehhez a 0 időziacutetőt [Code37]

A kiacutevaacutenalmakat azeacutert taacutergyaljuk kuumlloumln feladatkeacutent mert teljesen maacutes struktuacuteraacutejuacute megoldaacutest kiacutevaacuten eacutes előremutat egy egeacuteszen kerek alkalmazaacutes iraacutenyaacuteba Ezt a feladatot most a 0 időziacutetővel fogjuk megoldani

Neacutezzuumlk most meg hogy hogyan kell kiszaacutemiacutetanunk a TH0 eacutes TL0 regiszterekbe toumlltendő kezdeti eacuterteacutekeket Azt maacuter tudjuk hogy a keacutet regiszter egyuumlttes 16-bites eacuterteacuteke minden egyes oacuterajel-ciklussal eggyel nő Fontos hogy az eacuterteacutek nő tehaacutet felfeleacute mozdul Keacuterdeacutes tehaacutet hogy mit toumlltsuumlnk a regiszterekbe kezdeti eacuterteacutek gyanaacutent ahhoz

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

hogy mondjuk 001 s teljen el keacutet tuacutelcsordulaacutes koumlzoumltt Ezt kiszaacutemiacutetanunk nem lesz neheacutez

A default beaacutelliacutetaacutes szerint az oacuterajel 2 097 152 Hz Ahhoz hogy 001 s teljen el 20 97152 darab oacuterajel-ciklusnak kell lefutnia Elmeacuteletileg Ez az eacuterteacutek csakis egeacutesz szaacutem lehet iacutegy kerekiacutetsuumlk azt 20 972 darabra Ez hexadecimaacutelisan 51ECh Na most ennyi ciklusnak kell tehaacutet lefutnia a tuacutelcsordulaacutesig Ezek szerint a kezdeti eacuterteacuteknek FFFFh ndash 51ECh = AE13h-nak kell lennie De biztos hogy ennyinek kell lennie Vigyaacutezzunk mert ha FFFFh-roacutel indul a szaacutemlaacuteloacute akkor a tuacutelcsordulaacutesig 1 ciklus meacuteg lefut Eacuteppen ezeacutert a kapott AE13h eacuterteacutekhez 1-et meacuteg hozzaacute kell adnunk (eacutes ha iacutegy szaacutemolunk akkor mindig) iacutegy a veacutegeredmeacuteny AE14h Alsoacute baacutejtkeacutent eacutes felső baacutejtkeacutent ezt iacutegy toumlltjuumlk TIMER 0 regisztereibe

MOV TH00AEhMOV TL0014h

Eacutes indiacutethatjuk a szaacutemlaacuteloacutet Ehhez magasra kell aacutelliacutetanunk a TR0 bitet vouml [A TCON SFR parameacuteterei]

A programban kuumlloumln vaacuteltozoacutet dedikaacutelunk a szaacutezadmaacutesodperceknek (s100) Ennek eacuterteacutekeacutet mindig eggyel noumlveljuumlk amennyiben bekoumlvetkezik egy megszakiacutetaacutes Eacutes minthogy a TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes 001 maacutesodpercenkeacutent koumlvetkezik be ezeacutert helyesen cselekszuumlnk A megszakiacutetaacutesban maacuter csak azt kell figyelnuumlnk hogy a szaacutezadmaacutesodpercek vaacuteltozoacuteja eleacuterte-e maacuter a 99-es eacuterteacuteket Ha igen akkor a koumlvetkező beavatkozaacutes nem a noumlveleacutese lesz hanem lenullaacutezzuk viszont magasra aacutelliacutetunk egy jelzőbitet (mp) amely tehaacutet az egeacutesz maacutesodpercek ugraacutesaacutet jelzi Ezt a jelzőbitet pedig a főprogram fogja figyelni eacutes ha 1-re billen foumllvillantja a LED-sort egy tized maacutesodperc erejeacuteig A megszakiacutetaacutest jelentő programreacuteszneacutel csak arra az egyre kell vigyaacuteznunk nehogy a veacutegrehajtaacutesa 001 s-naacutel hosszabb időt oumlleljen foumll Szerencseacutere ezt meg sem koumlzeliacutetjuumlk Ettől fuumlggetlenuumll a regiszterveacutedelem utaacuten roumlgtoumln azzal folytatjuk a megszakiacutetaacutest lekezelő programreacuteszt hogy megaacutelliacutetjuk az időziacutetőt uacutejra betoumlltjuumlk az időziacuteteacuteshez szuumlkseacuteges eacuterteacutekeket aztaacuten elindiacutetjuk az időziacutetőt Minden maacutessal csakis ez utaacuten toumlrőduumlnk

A most koumlvetkező koacutedban ismeacutet felhasznaacuteljuk eacutes hagyomaacutenyainkhoz hiacuteven most sem tuumlntetjuumlk foumll foumlloumlslegesen a DELAY szubrutinunkat Figyeljuumlk meg hogy a megszakiacutetaacutest lekezelő programreacuteszben most maacuter okvetlenuumll alkalmaznunk kell a koraacutebban megtanult regiszterveacutedelmet hiszen a programreacutesz hasznaacutelja az akkumulaacutetort A veacutedelem most elegendő erre az egy regiszterre hiszen maacutes nincs veszeacutelyben Arra is figyelnuumlnk kell hogy a verembe mentett eacuterteacuteket mindig kivegyuumlk mielőtt visszateacuteruumlnk a megszakiacutetaacutesboacutel

Code37asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 000Bh TIMER0 tuacutelcsordulaacutesaJMP TIMER0 aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetes100 DATA 030h A szaacutezadmaacutesodpercek vaacuteltozoacutejamp BIT 00h A maacutesodpercek ugraacutesaacutenak jelzőbitje A TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes TIMER0PUSH ACC RegiszterveacutedelemCLR TR0 TIMER0 leaacutelliacutetaacutesaMOV TH00AEh Az időziacutető kezdeti eacuterteacutekeinekMOV TL0014h uacutejboacuteli betoumllteacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV As100 Megvizsgaacuteljuk s100 tartalmaacutetCJNE A99novel100 Ha meacuteg nem 99 noumlvelhetjuumlkMOV s1000 Kuumlloumlnben nullaacutezzukSETB mp Eacutes 1-re aacutelliacutetjuk az mp jelzőbitet hiszen eltelt 1 maacutesodpercPOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETInovel100INC s100 Szaacutezadmaacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETI FŐPROGRAM MAINMOV TMOD00000001b TIMER0 16-bites uumlzemmoacutedban műkoumldik

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

MOV TH00AEh Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV TL0014h Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaCLR mp Az mp jelzőbit toumlrleacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesSETB ET0 Timer0 megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV A10 Az időhuacutezaacutes parameacutetere (01 s)lesJNB mp$ Vaacuterunk az mp jelzőbit bebillenteacuteseacutereCLR mp Azonnal toumltoumlljuumlk ha előzőleg bebillentMOV P20 LED-sor bekapcsolaacutesaCALL DELAY VaacuterakozaacutesMOV P20FFh LED-sor kikapcsolaacutesaJMP les Ugraacutes vissza figyelni az mp jelzőbitet

2 Stopperoacutera keacutet fotokapuvalAz előző alfejezetben elemi alkalmazaacutest laacutettunk arra hogy hogyan lehet időmeacuterő szerkezetet csinaacutelni az ADuC 842-esből az egyik időziacutető felhasznaacutelaacutesaacuteval A most koumlvetkező feladat maacuter olyan alkalmazaacutest fogalmaz meg amit bizonyaacutera sok helyen megtalaacutelhatunk a gyakorlatban is Iacutegy lassan-lassan kezdjuumlk elhagyni a tankoumlnyvbe illő de bdquotankoumlnyvszaguacuterdquo feladatokat eacutes veacutegre eleacuterkeztuumlnk egy olyanhoz amelynek maacuter szereacutenyen de meacuternoumlki moacutedon tudunk megfelelni

27 feladat

Keacutesziacutetsuumlnk időmeacuterő eszkoumlzt keacutet fotokapuval Amikor egy objektum aacutethalad az elsőn induljon el a stopper amikor aacutethalad a maacutesodikon aacutelljon meg a stopper A meacutert időt a mikrovezeacuterlő szaacutezadmaacutesodpercre pontosan kuumlldje el a PC-nek A stopper indulaacutesa előtt zoumlld LED vilaacutegiacutetson az aacuteramkoumlri panelon a stopper futaacutesa koumlzben piros Megaacutellaacuteskor ismeacutet zoumlld [Code38]

A [27 feladat] megoldaacutesaacutehoz egyszerű kis aacuteramkoumlr tartozik melynek elemeivel maacuter talaacutelkoztunk Az aacuteramkoumlr a [A (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute A keacutet fotokapu feleacutepiacuteteacutese azonos egyeacutebiraacutent megegyezik a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacuteeacuteval A keacutet LED-et azeacutert koumltjuumlk keacutet sorszaacutemaacuteban erősen elteacuterő laacutebra hogy keacutenyelmesebben elfeacuterjenek a proacutebapanelon A keacutet fototranzisztor vaacuteltozatlanul uacutegy műkoumldik hogy ha nincs semmilyen objektum a feacutenyuacutetban akkor a P20 ill P21 portbiteknek megfelelő laacutebakat foumlldre huacutezzaacutek Mindegyik termeacuteszetesen a neki megfelelőt Amennyiben elzaacuterja valami a feacutenyutat az ott leacutevő fototanzisztor lezaacuter ami azt vonja maga utaacuten hogy a P20 ill P21 portbiteknek megfelelő laacuteb kiuumll a taacutepfeszuumlltseacutegre A portbitek eacuterteacutekeacutet azutaacuten koumlnnyen olvashatjuk szoftveresen

171 aacutebra - A [27 feladat] (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

A koacuted most maacuter hosszuacutenak tűnik de ha jobban megneacutezzuumlk ez főkeacutent a soros porton elkuumlldoumltt jelek eacutes uumlzenetek adatai miatt van iacutegy Vaacuteltozoacutet is joacutecskaacuten toumlbbet hasznaacutelunk mint a koraacutebbi programokban Egy-egy bitvaacuteltozoacutet rendeluumlnk a keacutet LED-hez (green eacutes red) ill a fototranzisztorokra kapcsolt laacutebakhoz (gate1 eacutes gate2) Ezekre toumlbb szoacutet nem is eacuterdemes vesztegetni Sokkal eacuterdekesebb lesz a baacutejtvaacuteltozoacutek szerepe Az időziacutetőnek koumlszoumlnhetően a megszakiacutetaacutes 001 maacutesodpercenkeacutent koumlvetkezik be A szaacutezadmaacutesodperceket az s100 vaacuteltozoacute szaacutemolja Amennyiben ez maacuter eleacuterte a 9-et a koumlvetkező megszakiacutetaacuteskor uacutejra 0-t iacuterunk bele viszont tovaacutebb ugrunk a tizedmaacutesodpercek noumlveleacuteseacutehez Ezeknek s10-ben kumulaacuteloacutedik az eacuterteacuteke Ha az előzőekhez hasonloacutean ez is eleacuteri a 9-es eacuterteacuteket akkor ezt is nullaacutezzuk de tovaacutebb ugrunk a maacutesodpercek noumlveleacuteseacutehez A maacutesodperceket s1 gyűjti Ennek eacuterteacuteke azonban maacuter 59-ig mehet Ha eltelt egy perc akkor bdquonullaacutezoacutedikrdquo a stopperoacuteraacutenk időeacuterteacuteke eacutes uacutegy folytatoacutedik az időmeacutereacutes mintha akkor indult volna el Ennek a kis fogyateacutekossaacutegnak tehaacutet tudataacuteban kell lennuumlnk

A főprogram a soros port eacutes Timer 0 inicializaacutelaacutesa utaacuten bekapcsolja a zoumlld LED-et majd arra vaacuter hogy az első fotokapu bitje (gate1) magasra billenjen Meacuteg egyszer ez akkor koumlvetkezik be ha valamilyen objektum behatol a feacutenyuacutetba Ekkor elindiacutetjuk az időziacutetőt kikapcsoljuk a zoumlld LED-et eacutes bekapcsoljuk helyette a pirosat Ez utaacuten arra fogunk vaacuterni hogy az 1 fotokapun aacutethaladoacute objektum a 2 fotokapun is aacutethaladjon Ekkor megaacutelliacutetjuk az időziacutetőt azaz veacuteget eacuter az idő meacutereacutese Az eltelt idő eacuterteacutekeacutet a programnak maacuter csak aacutet kell alakiacutetania karakterekkeacute eacutes el kell kuumlldenie a PC-nek a koumlvetkező kiacuteseacuterőszoumlveggel eacutes formaacutetumban

Time elapsed 0123 s

A kiacuteseacuterőszoumlveg elkuumlldeacutese nem jelent probleacutemaacutet ilyesmit maacuter csinaacuteltunk a koraacutebbi koacutedokban A szaacutezadmaacutesodpercek ill tizedmaacutesodpercek eacuterteacuteke csak egy-egy baacutejt raacuteadaacutesul ezek szaacutemjegyek iacutegy csak ASCII karakterreacute kell őket alakiacutetunk (hozzaacuteadjuk a rsquo0rsquo karakter ASCII koacutedjaacutet azaz 30h-t) aztaacuten kuumlldhetjuumlk is a PC-nek Ez előtt azonban el kell kuumlldenuumlnk a maacutesodpercek eacuterteacutekeacutet Itt meg kell aacutellnunk egy pillanatra hiszen a maacutesodpercek eacuterteacuteke keacutetjegyű szaacutem is lehet (0-59) A keacutetjegyű szaacutemot keacutet egyjegyű szaacutemra kell bontanunk azaz kuumlloumln kell vaacutelasztanunk a tiacutezeseket eacutes az egyeseket Ehhez megtanulunk egy uacutej utasiacutetaacutest eacutes megtanuljuk annak paacuterjaacutet is

A 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben van keacutet komolyabb aritmetikai utasiacutetaacutes lehetőseacuteg van szorzaacutesra eacutes osztaacutesra is E keacutet utasiacutetaacutes az akkumulaacutetoron kiacutevuumll egy aritmetikai segeacutedregisztert is igeacutenyel ennek neve eacutes jele B A

MUL AB

utasiacutetaacutes megszorozza az akkumulaacutetor eacuterteacutekeacutet a B regiszterbe toumlltoumltt eacuterteacutekkel A mnemonik az angol Multiply Accumulator by B kifejezeacutesből szaacutermazik ami azt jelenti hogy akkumulaacutetor szorzaacutesa B-vel Az eredmeacuteny keacutetbaacutejtos eacuterteacutek lesz Az alsoacute baacutejt az akkumulaacutetorba keruumll a felső baacutejt a B regiszterbe A művelet hataacutessal van

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

toumlbb flag-re is melyek fontos informaacutecioacutet hordozhatnak A tuacutelcsordulaacutest jelző flag (OV laacutesd [A PSW SFR parameacuteterei]) eacuterteacuteke 1 lesz ha a szorzaacutes eredmeacutenye nagyobb mint 255 Kuumlloumlnben OV = 0 A C bit pedig eredmeacutenytől fuumlggetlenuumll mindig toumlrlődik

A szorzaacutes utasiacutetaacutesaacutet a programban most nem hasznaacuteljuk de ceacutelszerű egyuumltt taacutergyalni az osztaacutes műveleteacutevel ezeacutert keruumllt raacute most sor Amit viszont hasznaacutelni fogunk az az osztaacutes művelete

DIV AB

A mnemonik az angol Divide Accumulator by B kifejezeacutesből szaacutermazik ami azt jelenti hogy akkumulaacutetor osztaacutesa B-vel Tehaacutet A az osztandoacute B az osztoacute A művelet elveacutegzeacutese utaacuten a haacutenyados az akkumulaacutetorba a maradeacutek pedig a B regiszterbe keruumll Ha nullaacuteval akarnaacutenk osztani akkor a tuacutelcsordulaacutest jelző bit (OV laacutesd [A PSW SFR parameacuteterei]) 1-re billen kuumlloumlnben 0 marad A C bit eredmeacutenytől fuumlggetlenuumll enneacutel az utasiacutetaacutesaacutenaacutel is mindig toumlrlődik

Teacuterjuumlnk vissza a kiindulaacutesi probleacutemaacutenkhoz azaz bontsuk szaacutemjegyekre a maacutesodpercek eacuterteacutekeacutet (s1 vaacuteltozoacute) Mivel s1 eacuterteacuteke 0 eacutes 59 koumlzoumltt lehet pontosan azt fogjuk kapni amire most vaacutegyunk ha s1-et elosztjuk 10-zel Ekkor a tiacutezesek eacuterteacuteke lesz a haacutenyados eacutes ezt az akkumulaacutetorban talaacuteljuk Az egyesek eacuterteacuteke lesz a maradeacutek ezt pedig a B regiszterben talaacuteljuk Legyen peacuteldaacuteul s1=28 eacutes hajtsuk veacutegre a koumlvetkező utasiacutetaacutessort

MOV As1MOV B10DIV AB

Ennek eredmeacutenyekeacuteppen azt kapjuk hogy A=2 eacutes B=8 Eacutes ezeket az eacuterteacutekeket maacuter eacuteppen uacutegy kuumlldhetjuumlk a PC-nek mint baacutermilyen maacutes szaacutemjegyet A programban a tiacutezesek eacuterteacutekeacutet a tim10 vaacuteltozoacuteba miacuteg az egyesek eacuterteacutekeacutet a tim1 vaacuteltozoacuteba fogjuk elmenteni a keacutesőbbi feldolgozaacutes eacuterdekeacuteben Ezzel az oumlsszes felhasznaacutelt vaacuteltozoacutet ismertettuumlk eacutes a program műkoumldeacuteseacutenek leacutenyegi elemeit is oumlsszefoglaltuk

Code38asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 000Bh TIMER0 tuacutelcsordulaacutesaJMP TIMER0 aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetes100 DATA 030h A szaacutezadmaacutesodpercek vaacuteltozoacutejas10 DATA 031h A tizedmaacutesodpercek vaacuteltozoacutejas1 DATA 032h A maacutesodpercek vaacuteltozoacutejatim10 DATA 033h A kuumlldendő időeacuterteacutek maacutesodperceinek tiacutezeseitim1 DATA 034h A kuumlldendő időeacuterteacutek maacutesodperceinek egyeseigate1 BIT P20 Az első fotokapu bitjegate2 BIT P21 A maacutesodik fotokapu bitjegreen BIT P23 A zoumlld LED bitjered BIT P27 A piros LED bitje A TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes TIMER0PUSH ACC RegiszterveacutedelemCLR TR0 TIMER0 leaacutelliacutetaacutesaMOV TH00AEh Az időziacutető kezdeti eacuterteacutekeinekMOV TL0014h uacutejboacuteli betoumllteacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV As100 Megvizsgaacuteljuk s100 tartalmaacutetCJNE A9novel100 Ha meacuteg nem 9 noumlvelhetjuumlkMOV s1000 Kuumlloumlnben nullaacutezzukJMP tized s100 aacutetfordult Noumlveljuumlk s10-et isnovel100INC s100 Szaacutezadmaacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETItizedMOV As10 Megvizsgaacuteljuk s10 tartalmaacutetCJNE A9novel10 Ha meacuteg nem 9 noumlvelhetjuumlkMOV s100 Kuumlloumlnben nullaacutezzukJMP egesz s10 aacutetfordult Noumlveljuumlk s1-et isnovel10INC s10 Tizedmaacutesodpercek noumlveleacutese

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

POP ACC Akkumulaacutetor visszaveacutetele a verembőlRETIegeszMOV As1 Megvizsgaacuteljuk s1 tartalmaacutetCJNE A59novel1 Ha meacuteg nem 59 noumlvelhetjuumlkMOV s10 Kuumlloumlnben nullaacutezzukPOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETInovel1INC s1 Egeacutesz maacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETI FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV TMOD00000001b TIMER0 16-bites uumlzemmoacutedban műkoumldikMOV TH00AEh Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV TL0014h Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s100 A tizedmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s10 Az egeacutesz maacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesSETB ET0 Timer0 megszakiacutetaacutesaacutenak engedeacutelyezeacuteseCLR green Zoumlld LED bekapuJNB gate1$ Vaacuterunk az 1 fotokapu jeleacutereSETB TR0 Indiacutetjuk az időziacutetőt (stoppert)SETB green Zoumlld LED kiCLR red Piros LED beJNB gate2$ Vaacuterunk a 2 fotokapu jeleacutereCLR TR0 Megaacutelliacutetjuk az időziacutetőt (stoppert)SETB red Piros LED kiCLR green Zoumlld LED ismeacutet beMOV As1 Betoumlltjuumlk A-ba a maacutesodpercek eacuterteacutekeacutetMOV B10 El fogjuk osztani 10-zelDIV AB Az osztaacutes műveleteMOV tim10A Az egeacuteszek (eredmeacuteny) mennek tim10-beMOV tim1B A maradeacutek tim1-beMOV DPTRmes1 A Time elapsed sor elkuumlldeacuteseCALL SENDSTRINGMOV Atim10 Az eltelt maacutesodpercek tiacutezeseinekADD A0 elkuumlldeacutese Ehhez a szaacutemhoz hozzaacuteadjuk aCALL SENDCHAR 0 ASCII karaktert Eacutes keacutesőbb ugyaniacutegyMOV Atim1 Az eltelt maacutesodpercek egyeseinekADD A0 elkuumlldeacuteseCALL SENDCHARMOV A A tizedespont elkuumlldeacuteseCALL SENDCHARMOV As10 A tizedmaacutesodpercek elkuumlldeacuteseADD A0CALL SENDCHARMOV As100 A szaacutezadmaacutesodpercek elkuumlldeacuteseADD A0CALL SENDCHARMOV DPTRmes2 A jelenteacutest lezaacuteroacute karaktersor elkuumlldeacuteseCALL SENDSTRINGMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s100 A tizedmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s10 Az egeacutesz maacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaJMP kapu Joumlhet az uacutej meacutereacutes ADATOK - karakterfuumlzeacuterek ndash stringek mes1 DB Time elapsed 0 mes2 DB s101010130 $INCLUDE(UARTIOASM)

Created by XMLmind XSL-FO Converter

18 fejezet - PWM-jelekAki elektronikaacuteval foglalkozik előbb-utoacutebb talaacutelkozik azzal a betűszoacuteval hogy PWM Ismeacutet angol kifejezeacutes lapul a haacutetteacuterben Pulse Width Modulation jelenteacutese impulzusszeacutelesseacuteg-modulaacutecioacute A fogalom megeacuterteacutese nem igeacutenyel nagy erőfesziacuteteacutest tekintsuumlk a [Neacutegyszoumlgjel] aacutebraacutet Az aacutebraacuten neacutegyszoumlgjel laacutethatoacute A viacutezszintes tengely az időtengely a fuumlggőleges tengely pedig baacutermifeacutele mennyiseacuteget jeloumllhet az elektronikaacuteban azonban a legtoumlbb esetben feszuumlltseacuteg szokott A jeltiacutepust azeacutert hiacutevjuk neacutegyszoumlgjelnek mert ideaacutelis esetben konstans fuumlggveacutenyek darabjaiboacutel eacutepuumll foumll A kapott alakzatokra azt is mondhatnaacutenk hogy teacuteglalapok A magyar terminoloacutegiaacuteban meacutegis a neacutegyszoumlgjel elnevezeacutes honosodott meg A T parameacuteter jeloumlli a neacutegyszoumlgjel perioacutedusidejeacutet Nyilvaacuten ennek reciproka lesz a jel frekvenciaacuteja A τ parameacuteter azt mutatja hogy egy perioacuteduson beluumll mennyi ideig magas a jelszint Termeacuteszetesen 0 le τ le T A haacutenyadost kitoumllteacutesi teacutenyezőnek hiacutevjuk A fentiek alapjaacuten 0 le k le 1

181 aacutebra - Neacutegyszoumlgjel

A neacutegyszoumlgjelnek azt a reacuteszeacutet ami τ ideig van jelen impulzusnak is szoktaacutek hiacutevni Mondhatjuk tehaacutet hogy a τ parameacuteter fuumlggveacutenyeacuteben vaacuteltozik az impulzus hossza vagy szeacutelesseacutege Termeacuteszetesen a jel perioacutedusidejeacutehez keacutepest Ezzel viszont el is eacuterkeztuumlnk az impulzusszeacutelesseacuteg-modulaacutecioacute fogalomhoz Adott neacutegyszoumlgjel előaacutelliacutetaacutesa kibocsaacutetaacutesa tovaacutebbiacutetaacutesa stb soraacuten ugyanis az impulzusok hossza informaacutecioacutet hordozhat Ha tehaacutet a szoacuteban forgoacute neacutegyszoumlgjel kitoumllteacutesi teacutenyezője a tovaacutebbiacutetandoacute informaacutecioacutetoacutel fuumlgg akkor impulzusszeacutelesseacuteg-modulaacutecioacuteroacutel beszeacuteluumlnk

Azt is vilaacutegosan kell laacutetnunk hogy impulzusszeacutelesseacuteg-modulaacutecioacuteval (a tovaacutebbiakban PWM-mel) nem csak informaacutecioacuteaacutetvitelt valoacutesiacutethatunk meg hanem keacutenyelmes moacutedon aacutelliacutethatjuk peacuteldaacuteul egy feszuumlltseacutegforraacutes jeleacutenek effektiacutev eacuterteacutekeacutet amennyiben lehetőseacuteguumlnk van a kimeneteacuten PWM-jel előaacutelliacutetaacutesaacutera Ez azeacutert lesz rendkiacutevuumll iacutegeacuteretes lehetőseacuteg mert nagyon sok rendszerben pusztaacuten a kitoumllteacutesi teacutenyező variaacutelaacutesaacuteval valoacutesiacutethatunk meg jelszintvezeacuterleacutest vagy erre eacutepuumllően tovaacutebbi szabaacutelyozaacutesi leacutepeacuteseket

1 PWM-jel előaacutelliacutetaacutesa a mikrovezeacuterlő jelgeneraacutetoraacutevalAz ADuC 842-es architektuacuteraacuteja alkalmas PWM-jel hardveres előaacutelliacutetaacutesaacutera A PWM-jelgeneraacutetor rendkiacutevuumll rugalmasan illeszkedik a gyakorlati igeacutenyekhez hat uumlzemmoacuted koumlzuumll vaacutelaszthatunk Ezek koumlzuumll raacuteadaacutesul kettő digitaacutelndashanaloacuteg-jelaacutetalakiacutetaacuteshoz hasznaacutelhatoacute foumll A PWM-jelek előaacutelliacutetaacutesaacutehoz oumlt SFR-re lesz szuumlkseacuteguumlnk PWMCON PWM0H PWM0L PWM1H PWM1L A legelsőt kiveacuteve a regiszterek a PWM-jelek digitaacutelis felbontaacutesaacutet frekvenciaacutejaacutet fel- eacutes lefutaacutesi időpillanataacutet hataacuterozzaacutek meg Az uumlzemmoacuted beaacutelliacutetaacutesa a PWMCON regiszterrel toumlrteacutenik laacutesd [A PWMCON SFR parameacuteterei] A PWM-jeleket a mikrovezeacuterlő a P27 eacutes P26 laacutebakon aacutelliacutetja elő ami esetuumlnkben annyit jelent hogy PWM-jelek előaacutelliacutetaacutesaacutenaacutel a panelunk LED-soraacutenak akaacuter keacutet LED-je is eacuterintett Ezt azonban ne baacutenjuk mert legalaacutebb kuumllső aacuteramkoumlr neacutelkuumll is sokszor laacutethatoacute lesz hogy sikeruumllt-e a jel előaacutelliacutetaacutesa (A PWM-jeleket aacutettehetjuumlk a P34 eacutes P33 laacutebakra is a CFG842 SFR 6 bitjeacutenek magasra aacutelliacutetaacutesaacuteval de ebben a tankoumlnyvben nem teszuumlnk ilyet)

181 taacuteblaacutezat - A PWMCON SFR parameacuteterei

PWMCON PWM Control Register

Created by XMLmind XSL-FO Converter

PWM-jelek

A PWM vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 SNGL Kikapcsolja a PWM-generaacutelaacutest a P26 (vagy P34) laacutebon szabadon hagyva a laacutebat egyeacuteb IO-műveletekhez

6 MD2 A PWM-uumlzemmoacuted bitjei

MD2 MD1 MD0 Uumlzemmoacuted

0 0 0 0 moacuted PWM letiltva

0 0 1 1 moacuted Egyetlen vaacuteltoztathatoacute

felbontaacutesuacute PWM-jel P27-en (vagy

P33-on)

0 1 0 2 moacuted 8-bites iker-PWM-jel

0 1 1 3 moacuted 16-bites iker-PWM-jel

1 0 0 4 moacuted Duaacutelis NRZ 16-bites - DAC

1 0 1 5 moacuted Duaacutelis 8-bites PWM-jel

1 1 0 6 moacuted Duaacutelis RZ 16-bites - DAC

1 1 1 Foglalt

5 MD1

4 MD0

Created by XMLmind XSL-FO Converter

PWM-jelek

3 CDIV1 A PWM-generaacutetor oacuterajelosztoacutejaacutenak bitjei

CDIV1 CDIV0 Leiacuteraacutes

0 0 Kivaacutelasztott oacuterajel 1

0 1 Kivaacutelasztott oacuterajel 4

1 0 Kivaacutelasztott oacuterajel 16

1 1 Kivaacutelasztott oacuterajel 64

2 CDIV0

1 CSEL1 A PWM-generaacutetor oacuterajelforraacutesaacutenak bitjei

CSEL1 CSEL0 Leiacuteraacutes

0 0 Kuumllső oacuterajel 15

0 1 Kuumllső oacuterajel

1 0 Kuumllső bemenet P34T0-n

1 1 fvco = 16 777 216 Hz

0 CSEL0

Az 1 uumlzemmoacuted ismerteteacuteseacutehez vaacuteltozatlan formaacuteban vesszuumlk aacutet a szemleacuteltető aacutebraacutet a gyaacuteri leiacuteraacutesboacutel [1 p 43 Figure 48] Tekintsuumlk tehaacutet a [A PWM-generaacutetor 1 uumlzemmoacutedja] aacutebraacutet

182 aacutebra - A PWM-generaacutetor 1 uumlzemmoacutedja

A PWM-generaacutetorhoz tartozik egy szaacutemlaacuteloacute Ezt nevezik az aacutebraacuten PWM Counter-nek Nos amikor ez a

Created by XMLmind XSL-FO Converter

PWM-jelek

szaacutemlaacuteloacute elindul a P27-es laacutebon előaacutelloacute jel magas szintre vaacutelt Amikor a szaacutemlaacuteloacute eleacuteri a PWM0HPWM0L regiszterek aacuteltal meghataacuterozott 16-bitesnek tekintendő eacuterteacuteket akkor a jel alacsony szintre vaacutelt A szaacutemlaacuteloacute viszont ketyeg tovaacutebb Amikor eleacuteri a PWM1HPWM1L regiszterek aacuteltal meghataacuterozott 16-bites eacuterteacuteknek tekintendő eacuterteacuteket akkor fog kezdődni a PWM-jel koumlvetkező perioacutedusa eacutes ekkor a szaacutemlaacuteloacute uacutejraindul nullaacuteroacutel (A regiszterek megnevezeacuteseacuteben szereplő H ill L betűk itt is a felső baacutejt (H) eacutes alsoacute baacutejt (L) elrendezeacutesre utalnak) Az aacutebra alapjaacuten vilaacutegosnak kell lennie hogy a jel frekvenciaacutejaacutet a PWM1HPWM1L regiszterek hataacuterozzaacutek meg miacuteg a PWM0HPWM0L regiszterek eacuterteacuteke a kitoumllteacutesi teacutenyezőeacutert felelős

Az 1 uumlzemmoacuted ismerteteacutese utaacuten fogalmazzunk meg egy a PWM-jelekre vonatkozoacute egyszerű kis feladatot

28 feladat

PWM-jel felhasznaacutelaacutesaacuteval villogtassunk egy LED-et a LED-soron 3 Hz eacutes 6 Hz koumlzoumltti frekvenciaacuteval [Code39]

A frekvenciaacutet azeacutert vaacutelasztottuk ilyen kicsinek a feladatban hogy szabad szemmel is laacutessuk műkoumldeacutes koumlzben a PWM-jelet Az emberi szem tulajdonsaacutegai miatt 50 Hz foumlloumltt maacuter biztosan oumlsszefolyna egyetlen fokozattaacute a LED villoacutedzaacutesa 100 Hz foumlloumltt pedig maacuter akkor se nagyon detektaacutelhatnaacutenk a villoacutedzaacutest ha ide-oda raacuteznaacutenk a panelt

A PWMCON regisztert konfiguraacuteljuk az alaacutebbi moacutedon

MOV PWMCON00011111b

A [A PWMCON SFR parameacuteterei] alapjaacuten ez azt jelenti hogy az 1 uumlzemmoacutedot vaacutelasztjuk (zoumlld jelzeacutes) Mivel igen kis frekvenciaacutet szretneacutenk előaacutelliacutetani alkalmazzuk a lehető legnagyobb oacuterajelosztaacutest azaz 64-et Ezt mutatja a saacuterga jelzeacutes Iacuterjuk elő a sajaacutet belső oacuterajelkristaacutely hasznaacutelataacutet hiszen egyelőre eszuumlnk aacutegaacuteban sem volt kuumllső oacuterajelforraacutesokat csatlakoztatni a panelunkhoz Ez a vaacutelasztaacutes laacutethatoacute a tuumlrkiz mezőben Veacuteguumll meacuteg meg kell jegyeznuumlnk hogy a 7 bit jelen esetben eacuterdektelen hiszen csak egyetlen PWM-jeluumlnk lesz (szuumlrke mező)

A PWM1HPWM1L regiszterpaacuter eacuterteacutekeacutenek vaacutelasszunk valami kellőkeacuteppen nagy eacuterteacuteket legyen mondjuk F000h A PWM0HPWM0L regiszterpaacuter eacuterteacuteke legyen ennek pontosan a fele hogy a kitoumllteacutesi teacutenyezőnk pontosan 05 legyen 7800h

Szaacutemoljuk ki a fenti beaacutelliacutetaacutesaink mellett adoacutedoacute jelfrekvenciaacutet Az oacuterajelkristaacutely frekvenciaacuteja 16 777 216 Hz A szaacutemlaacuteloacute F000h = 61 440-ig kuacuteszik Ezzel az eacuterteacutekkel elosztva az oacuterajelkristaacutely frekvenciaacutejaacutet 27307 Hz-et kapunk Mivel 64-es oacuterajelosztaacutest fogunk beaacutelliacutetani ezt az eacuterteacuteket meacuteg 64-gyel el kell osztanunk A veacutegeredmeacuteny tehaacutet 427 Hz Eacutes ez az eacuterteacutek megfelel a feladat kiacutevaacutenalmainak A koacuted az uacutejdonsaacuteg tehaacutet a PWM hasznaacutelata elleneacutere rendkiacutevuumll roumlvid lesz paacuter sor az egeacutesz Leacutenyeges hogy a PWM-jel elindiacutetaacutesa utaacuten a főprogram olyan feladatot veacutegez amilyent csak akarunk a PWM-jel előaacutelliacutetaacutesa ugyanis teljes egeacuteszeacuteben hardveresen toumlrteacutenik Az alaacutebbi megoldaacutesnaacutel a főprogram feladata tovaacutebbi tennivaloacute hiaacutenyaacuteban a helyben jaacuteraacutes

Code39asmMOV PWM1H0F0h Az 1 uumlzemmoacutedban ez a keacutet baacutejt (alsoacute illMOV PWM1L000h felső) hataacuterozza meg az előaacutelliacutetandoacute PWM- jel frekvenciaacutejaacutet Itt a felső eacutes alsoacute baacutejt egyuumlttes eacuterteacuteke F000h = 61440 Az ADuC magjaacutenak oacuterajele 16 777 216 Hz iacutegy a PWM- jel frekvenciaacuteja 1677721661440 = 27307 Hz lesz (Ezt meacuteg leosztjuk majd hogy szemmel is laacutessunk valamit kuumlloumlnben nem tudunk oumlruumllni)MOV PWM0H078h Ez a keacutet baacutejt (szintuacutegy alsoacute eacutes felső baacutejtMOV PWM0L000h formaacuteban) a PWM-jel kitoumllteacutesi teacutenyezőjeacutet aacutelliacutetja beMOV PWMCON00011111b Ez a PWM-jelek legfontosabb konfiguraacutecioacutes regisztere Magyaraacutezat az eacuterteacutekekhez 7 bit - Az 1 uumlzemmoacutedban eacuterdektelen 6-5-4 bit - Uumlzemmoacuted kivaacutelasztaacutesa Naacutelunk 001 lesz ami az 1 uumlzemmoacutedot definiaacutelja 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa Naacutelunk 11 ami 64-gyel valoacute osztaacutest jelent Iacutegy lesz a PWM-jeluumlnk veacutegső frekvenciaacuteja 427 Hz 1-0 bit - Oacuterajel kivaacutelasztaacutesa Naacutelunk 11

Created by XMLmind XSL-FO Converter

PWM-jelek

ami a mag oacuterajeleacutet jelentiJMP $ Keacutesz Veacutegtelen ciklus

Egy nagyon gyakorlatias kis huacutezaacutes kedveacuteeacutert moacutedosiacutetsuk egy kicsit a [28 feladat]ot

29 feladat

PWM-jel felhasznaacutelaacutesaacuteval villogtassuk az oumlsszes LED-et a LED-soron 3 Hz eacutes 6 Hz koumlzoumltti frekvenciaacuteval [Code40]

E feladat megoldaacutesa a PWM-jel előaacutelliacutetaacutesaacuteig toumlkeacuteletesen megegyezik a [28 feladat]eacuteval A kuumlloumlnbseacuteg az hogy a PWM-jelet az oumlsszes LED-en meg kellene jeleniacutetenuumlnk Ezt uacutegy tesszuumlk hogy egy veacutegtelen ciklusban a P27-es bitet tehaacutet a PWM-jel szintjeit keacutepviselő bitet beraacutemoljuk a Carry bitbe majd ennek eacuterteacuteke alapjaacuten magasra vagy alacsonyra aacutelliacutetjuk az oumlsszes toumlbbi bitet a 2-es porton Tesszuumlk ezt logikai maszkolaacutessal Roumlvidseacutege miatt Code40-et teljes terjedelmeacuteben ismertetjuumlk de a PWM-jel beaacutelliacutetaacutesait most csak nagyon szűkszavuacutean kommentezzuumlk

Code40asmMOV PWM1H0F0h Az 1 uumlzemmoacutedban ez a keacutet baacutejt hataacuterozzaMOV PWM1L000h meg a PWM-jel frekvenciaacutejaacutet F000h = 61440 fvco = 16 777 216 Hz iacutegy a PWM-jel frekvenciaacuteja 1677721661440 = 27307 Hz lesz (Ezt meacuteg leosztjuk majd 64-gyelMOV PWM0H078h Ez a keacutet baacutejt a PWM-jel kitoumllteacutesiMOV PWM0L000h teacutenyezőjeacutet aacutelliacutetja beMOV PWMCON00011111b 6-5-4 bit - 1 uumlzemmoacuted 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa 64-gyel 1-0 bit - A mag oacuterajelebitekMOV CP27 A PWM-jelet keacutepviselő portbit eacuterteacutekeacutenek beraacutemolaacutesa a C bitbeJC magas Ha C=1 ugrunk inteacutezkedniANL P210000000b Ha C=0 toumlroumlljuumlk a P2-es port toumlbbi bitjeacutetJMP bitek Ugraacutes vissza a PWM-jel figyeleacuteseacutehezmagasORL P201111111b A P2-es port toumlbbi bitjeacutenek magasra aacutelliacutetaacutesaJMP bitek Ugraacutes vissza a PWM-jel figyeleacuteseacutehez

2 Pulzaacuteloacute LED-ekLED-ek digitaacutelis meghajtaacutesakor elő lehet olyan hataacutest ideacutezni amit a laikus aki csak azt tudja hogy egy LED vagy be van kapcsolva vagy ki van kapcsolva mindig varaacutezslatnak tart Ez a hataacutes a LED-ek pulzaacutelaacutesa azaz folytonos aacutetmenetűnek tűnő foumllizziacutetaacutesa eacutes elhalvaacutenyiacutetaacutesa Az ilyen eacutes ehhez hasonloacute megoldaacutesokhoz igazaacuten joacutel tudnak joumlnni a PWM-jelek Miről is van szoacute Pillantsunk vissza a [Neacutegyszoumlgjel] aacutebraacutera Ha neacutegyszoumlgjellel hajtunk meg egy LED-et akkor a LED bizonyos ideig be van kapcsolva bizonyos ideig meg ki Kis frekvenciaacutenaacutel a LED nyilvaacuten villogni fog Eacutes a helyzet az hogy nagy frekvenciaacutenaacutel is villogni fog de a szem időbeli felbontaacutesaacutenak korlaacutetai miatt neacutehaacutenyszor 10 Hz-es villogaacutest maacuter nem eacuteszleluumlnk Amit eacuteszleluumlnk az az hogy a LED vilaacutegiacutet de kicsit (vagy sokkal) halvaacutenyabban mintha aacutellandoacute egyenaacuterammal hajtanaacutenk meg 100 Hz koumlruumlli frekvenciaacutet maacuter a perifeacuterikus laacutetaacutesunkkal sem eacuteszleluumlnk bdquoLebukaacutesrdquo ilyenkor meacuteg előfordulhat ha valaki a PWM-jellel meghajtott LED-et tartalmazoacute panelt keacutezbe veszi eacutes joacutel megraacutezza (nem erősen csak gyorsan) akkor a villoacutedzaacutes meacuteg tetten eacuterhető 200 Hz-neacutel maacuter iacutegy sem nagyon Amennyiben tehaacutet adott egy megfelelően nagy frekvenciaacutejuacute neacutegyszoumlgjel akkor a kitoumllteacutesi teacutenyező variaacutelaacutesaacuteval ugyanazokkal a jelszintekkel laacutetszoacutelag kisebb vagy nagyobb feacutenyerősseacuteggel uumlzemeltethetuumlnk LED-eket Ha a kitoumllteacutesi teacutenyező variaacutelaacutesaacutera elegendően nagy felbontaacutest alkalmazunk (30-40 fokozat akaacuter eleacuteg is lehet) akkor a LED feacutenyerősseacutegeacutenek noumlveleacutese eacutes csoumlkkenteacutese folytonosnak fog tűnni Erről az oumltletről szoacutel a koumlvetkező feladatunk

30 feladat

PWM-jel felhasznaacutelaacutesaacuteval folytonosnak tűnő aacutetmenettel izziacutetsuk foumll eacutes halvaacutenyiacutetsuk el az oumlsszes LED-et a LED-soron azaz pulzaacuteljanak a LED-ek [Code41 Code42]

A koraacutebban elmondottak alapjaacuten a feladat megoldaacutesa a PWM-jel kitoumllteacutesi teacutenyezőjeacutenek leacutepeacutesenkeacutenti

Created by XMLmind XSL-FO Converter

PWM-jelek

vaacuteltoztataacutesa Arra azeacutert figyelnuumlnk kell hogy a vaacuteltozaacutes ne ugraacutesszerűnek tűnjoumln Aacutelliacutetsuk be tehaacutet a PWM-jel eacuterteacutekeit uacutegy hogy 32+1 fokozatunk legyen A +1 kuumlloumln feltuumlnteteacutese azeacutert indokolt mert a teljesen kikapcsolt aacutellapot is fokozatnak szaacutemiacutet ahogy azt hamarosan laacutetni fogjuk

Aacutelliacutetsuk be a PWM1HPWM1L regiszterpaacuter eacuterteacutekeacutet 2000h-ra Ez decimaacutelisan 8 192-t jelent iacutegy a jel frekvenciaacuteja 16 777 216 Hz 8 192 = 2 048 Hz lesz mindaddig ameddig tovaacutebbi beaacutelliacutetaacutessal nem osztjuk tovaacutebb Osztoacutenak a vaacuteltozatossaacuteg kedveacuteeacutert vaacutelasszuk most a 16-os eacuterteacuteket iacutegy a teacutenyleges jelfrekvenciaacutenk 2 048 16 = 128 Hz lesz ami egeacuteszen bdquoemberkoumlzelirdquo eacuterteacuteknek mondhatoacute (Tanulni azeacutert lehet belőle mert ezt maacuter a perifeacuterikus laacutetaacutesunkkal sem eacuteszleljuumlk viszont ha megraacutezzuk a panelt akkor a villoacutedzaacutes meacuteg tetten eacuterhető)

A kitoumllteacutesi teacutenyezőt a PWM0HPWM0L regiszterpaacuterral aacutelliacutetjuk be Mi most azt fogjuk tenni hogy a PWM0H regiszter eacuterteacutekeacutet 00h eacutes 20h koumlzoumltt noumlveljuumlk eacutes csoumlkkentjuumlk szisztematikusan Mivel 20h = 32 ezeacutert a kikapcsolt aacutellapottal oumlsszesen 32+1 = 33 fokozatunk lesz Azt azonban ne felejtsuumlk el hogy a panel LED-jei fordiacutetott logikaacuteval műkoumldnek iacutegy a kitoumllteacutesi teacutenyező noumlveleacutese fogja halvaacutenyiacutetani a LED-eket eacutes a csoumlkkenteacutese okoz erősoumldeacutest

Egy dolgot kell meacuteg megoldanunk a P27-es bit eacuterteacutekeacutet szeacutepen aacutet kell maacutesolgatnunk a toumlbbi portbitbe is Ezt megtehetneacutenk uacutegy is mint a [29 feladat]naacutel de kiveacutetelesen vaacutelasszuk a favaacutegoacute megoldaacutest eacutes maacutesolgassuk a P27-es bit eacuterteacutekeacutet egyeseacutevel a toumlbbi portbitbe Ezt uacutegyis egy időhuacutezoacute szubrutinba fogjuk aacutegyazni iacutegy meacuteg joacutel is joumln aacutettekinthető toumllteleacutek gyanaacutent az időhuacutezoacute programreacutesz legbelső ciklusmagjaacutehoz Az időhuacutezoacute szubrutin ciklusainak veacutegrehajtaacutesi szaacutemaacutet most uacutegy hataacuteroztuk meg hogy A=10 meghiacutevaacutessal 001 s a vaacuterakozaacutesi idő Ennek ellenőrzeacuteseacutet az olvasoacutera biacutezzuk A program elejeacuten az EQU fordiacutetoacutei direktiacutevaacutet arra fogjuk hasznaacutelni hogy eacuterteacuteket adjunk egy szimboacutelumnak (wait) Ezt a megoldaacutest azeacutert vaacutelasztottuk hogy amikor vaacuteltoztatni akarunk az időhuacutezaacutes meacuterteacutekeacuten ne kelljen azt toumlbb helyen is aacutetiacuternunk a koacuted uacutejrafordiacutetaacutesa előtt A szubrutint ugyanis a wait szimboacutelum eacuterteacutekeacutevel fogjuk meghiacutevni

MOV AwaitCALL SDELAY

A koacuted meacuteg a most alkalmazott időhuacutezoacute szubrutin feltuumlnteteacuteseacutevel sem lesz hosszuacute

Code41asmMOV PWM1H020h Az 1 uumlzemmoacutedban ez a keacutet baacutejt hataacuterozzaMOV PWM1L000h meg a PWM-jel frekvenciaacutejaacutet 2000h = 8192 fvco = 16 777 216 Hz iacutegy a PWM-jel frekvenciaacuteja 167772168192 = 2048 Hz lesz (Ezt meacuteg leosztjuk majd 16-tal)MOV PWM0H020h Ez a keacutet baacutejt a PWM-jel kitoumllteacutesiMOV PWM0L000h teacutenyezőjeacutet aacutelliacutetja be Mivel a LED-ek fordiacutetott logikaacuteval műkoumldnek ez a kikapcsolt aacutellapotMOV PWMCON00011011b 6-5-4 bit - 1 uumlzemmoacute 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa 16-tal 1-0 bit - A mag oacuterajelesignal1 MOV Await Konstans betoumllteacutese a vaacuterakozaacuteshozCALL SDELAY Vaacuterakozoacute eacutes bitteriacutető szubrutinMOV APWM0H PWM0H vizsgaacutelata koumlvetkezikCJNE A0down Eleacuterte maacuter a 0-tJMP signal2 Ha igen ugrunk a kitoumllteacutesi teacutenyező csoumlkkenteacuteseacutehezdownMOV PWMCON0 PWM-generaacutelaacutes lekapcsolaacutesaDEC PWM0H A kitoumllteacutesi teacutenyező regisztereacutenek csoumlkkenteacuteseMOV PWMCON00011011b PWM-generaacutelaacutes engedeacutelyezeacuteseJMP signal1 A felizziacutetaacutes folytataacutesasignal2MOV Await Konstans betoumllteacutese a vaacuterakozaacuteshozCALL SDELAY Vaacuterakozoacute eacutes bitteriacutető szubrutinMOV APWM0H PWM0H vizsgaacutelata koumlvetkezikCJNE A020hup Eleacuterte maacuter 20h-tJMP signal1 Ha igen ugrunk a kitoumllteacutesi teacutenyező noumlveleacuteseacutehez

Created by XMLmind XSL-FO Converter

PWM-jelek

upMOV PWMCON0 PWM-generaacutelaacutes lekapcsolaacutesaINC PWM0H A kitoumllteacutesi teacutenyező regisztereacutenek noumlveleacuteseMOV PWMCON00011011b PWM-generaacutelaacutes engedeacutelyezeacuteseJMP signal2 A halvaacutenyiacutetaacutes folytataacutesa Szubrutin SDELAY Parameacuteteraacutetadaacutes A Ha A=10 akkor 001 s a vaacuterakozaacutes SDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezik Ha A=10 akkor 001 s a vaacuterakozaacutescik7MOV R6111cik6MOV CP27 A PWM-jel eacuterteacutekeacutenek C-be toumllteacuteseMOV P26C Favaacutegoacute moacutedon szeacutetteriacutetjuumlk a P2-es portMOV P25C oumlsszes toumlbbi bitjeacutenMOV P24CMOV P23CMOV P22CMOV P21CMOV P20CDJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel

A figyelmes olvasoacutenak foumlltűnhet hogy a PWM0H regiszter eacuterteacutekeacutenek noumlveleacutese eacutes csoumlkkenteacutese előtt kikapcsoljuk a PWM-jelet majd utaacutena azonnal uacutejra elindiacutetjuk Erre valoacutejaacuteban nem lenne szuumlkseacuteg viszont az a tapasztalat hogy ha nem iacutegy jaacuterunk el akkor a LED-ek feacutenye a pulzaacutelaacutes koumlzben időnkeacutent bdquoraacutengatrdquo egy kicsit Ennek oka valoacutesziacutenűleg az lehet hogy a kitoumllteacutesi teacutenyező menet koumlzbeni vaacuteltoztataacutesaacuteval a PWM-hez tartozoacute szaacutemlaacuteloacute aloacutel a veacutegeacuterteacutekneacutel bdquokihuacutezzuk a talajtrdquo Hiszen ha meacuteg menne tovaacutebb a szaacutemlaacuteloacute de menet koumlzben csoumlkkentetjuumlk a veacutegeacuterteacuteket akkor keacutenytelen meacuteg egy koumlrt leszaacutemlaacutelni Ha viszont a koacutedban leiacutertakat alkalmazzuk semmi ilyesmi nem tapasztalhatoacute

Ha maacuter ilyen joacutel belejoumlttuumlnk a LED-ek pulzaacuteltataacutesaacuteba csavarjunk meacuteg egyet a dolgon Eacuterjuumlk most el azt hogy amiacuteg a LED-sor egyik fele foumllizzik a maacutesik fele eacuteppen elhalvaacutenyul Eacutes fordiacutetva Enneacutel a vaacuteltozatnaacutel maga a főprogram toumlkeacuteletesen megegyezik a [30 feladat] koacutedjaacuteban szereplő reacutesszel Az elteacutereacutes az időhuacutezoacute szubrutinban lesz Keacutet aproacute reacuteszlet Az egyik az hogy a LED-ek portbitjeinek feleacutere nem a PWM-jel C-bitbe toumlltoumltt eacuterteacutekeacutet tesszuumlk ki hanem annak az inverzeacutet Ez plusz egy utasiacutetaacutest jelent (CPL C) iacutegy az időhuacutezaacutes ciklusainak is moacutedosiacutetanunk kell az ismeacutetleacutesszaacutemaacutet (Az időhuacutezaacutes pontossaacutegaacutenak ellenőrzeacuteseacutet ismeacutet az olvasoacutera biacutezzuk) Mivel a vaacuteltozaacutesok csak az időhuacutezoacute szubrutint eacuterintik a most koumlvetkező vaacuteltozatnaacutel csak ezt ismertetjuumlk A keacutet elteacutereacutest sziacutenessel jeloumlljuumlk

Code42asmSDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezik Ha A=10 akkor 001 s a vaacuterakozaacutescik7MOV R6105cik6MOV CP27 A PWM-jel eacuterteacutekeacutenek C-be toumllteacuteseMOV P26C Favaacutegoacute moacutedon szeacutetteriacutetjuumlk a P2-es portMOV P25C oumlsszes toumlbbi bitjeacutenMOV P24CCPL C A C bit invertaacutelaacutesaMOV P23CMOV P22CMOV P21CMOV P20CDJNZ R6cik6DJNZ R7cik7

Created by XMLmind XSL-FO Converter

PWM-jelek

RET Visszateacutereacutes a szubrutinboacutel

Created by XMLmind XSL-FO Converter

19 fejezet - AD-aacutetalakiacutetaacutesA tankoumlnyvben eddig elemi feladatocskaacutek soraacuten keresztuumll megtanulhattuk hogy hogyan programozunk assemblyben hogyan adhatunk ki vezeacuterlőjeleket kuumllső aacuteramkoumlroumlk szaacutemaacutera hogyan fogadhatunk keacutetaacutellapotuacute kuumllső jeleket eacutes hogy hogyan generaacutelhatunk PWM-jeleket raacuteadaacutesul szinte tetszőleges felbontaacutesuacute eacutes frekvenciaacutejuacute PWM-jeleket melyekkel maacuter fokozatokat is megvaloacutesiacutethatunk Ez idaacuteig rendben is lenne de hiaacutenyzik meacuteg valami Nagyon hiaacutenyzik meacuteg valami Ez pedig kuumllső jelek keacutetaacutellapotuacutetoacutel elteacuterő eacutertelmezeacutese A valoacutesaacutegban ugyanis nem minden binaacuteris hiaacuteba reacutesze a mikrovezeacuterlő digitaacutelis vilaacutegunknak tehaacutet kuumllső jeleket (pl feszuumlltseacuteget) is megfelelő felbontaacutessal kell detektaacutelnunk rengeteg probleacutemaacutenaacutel Az ilyen elektronikai megoldaacutest hiacutevjaacutek analoacutegndashdigitaacutel-aacutetalakiacutetaacutesnak az eszkoumlzt pedig ami ezt meg tudja valoacutesiacutetani analoacutegndashdigitaacutel aacutetalakiacutetoacutenak

1 Az ADuC 842-es AD-aacutetalakiacutetoacutejaAz ADuC 842-es analoacutegndashdigitaacutel-aacutetalakiacutetoacutejaacutenak blokkja gyors 8-csatornaacutes 12 bit felbontaacutesuacute feacuteloldali taacutepellaacutetaacutesuacute (nem kell negatiacutev taacutep is) aacutetalakiacutetaacutest tesz lehetőveacute A profi felhasznaacuteloacutenak meacuteg kalibraacutelaacutesi lehetőseacutege is van Az AD-aacutetalakiacutetoacute a szukcessziacutev approximaacutecioacute elveacuten műkoumldik melynek haacutettere egy AD-aacutetalakiacutetaacutesra valoacute kondenzaacutetor Az aacutetalakiacutetaacutes lehet egyszeri (ez persze ismeacutetelhető) vagy folytonos uumlzemmoacuteduacute a referenciafeszuumlltseacuteg lehet belső vagy kuumllső jel Az AD-aacutetalakiacutetoacute az esetlegesen csatlakoztatott kuumllső memoacuteria eleacutereacuteseacuteben is szerepet jaacutetszik Az ADuC 842-es AD-aacutetalakiacutetoacuteja gyaacuterilag kalibraacutelt bekapcsolaacuteskor a kalibraacutecioacutes konstansok betoumlltődnek hogy optimaacutelis műkoumldeacutes legyen biztosiacutethatoacute

Az AD-aacutetalakiacutetoacute belső referenciafeszuumlltseacutege 25 V iacutegy a 12-bites felbontaacutessal (212 = 4 096) 061 mV pontossaacuteg eacuterhető el (25 4 095 = 061) Ez nagyon sok alkalmazaacutesnaacutel elegendő A digitalizaacutelt feszuumlltseacutegeacuterteacutekek ismeacutet csak egy kettős regiszterben eacuterhetők el (ADCDATAHADCDATAL) de figyeljuumlnk ara hogy az ADCDATAH regiszter felső 4 bitje csatornaazonosiacutetaacutesra szolgaacutel Ezt szemleacutelteti az alaacutebbi aacutebra

191 aacutebra - Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei

Az AD-aacutetalakiacutetaacuteshoz haacuterom konfiguraacutecioacutes regiszter tartozik ADCCON1 ADCCON2 eacutes ADCCON3 Ez utoacutebbi kizaacuteroacutelag a konverter kalibraacutecioacutejaacutenaacutel kap szerepet iacutegy ennek taacutergyalaacutesaacutetoacutel eltekintuumlnk mert a tankoumlnyvben csak neacutehaacuteny elemei megoldaacutest taacutergyalunk A keacutet maacutesik regiszter leiacuteraacutesaacutet a [Az ADCCON1 SFR parameacuteterei] eacutes a [Az ADCCON2 SFR parameacuteterei] tartalmazza

191 taacuteblaacutezat - Az ADCCON1 SFR parameacuteterei

ADCCON1 AD Conversion Control Register

Az AD-aacutetalakiacutetaacutes vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 40h = 0100 0000 b

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 MD1 1 ndash bekapcsoljuk

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

az AD-aacutetalakiacutetoacutet 0 ndash kikapcsoljuk az AD-aacutetalakiacutetoacutet

6 EXT_REF 1 ndash kuumllső referencia hasznaacutelata 0 ndash a belső referencia hasznaacutelata Nem taacutergyaljuk

5 CK1 Az oacuterajel osztoacuteeacuterteacutekeacutenek bitjei az AD-aacutetalakiacutetaacutes sajaacutet oacuterajeleacutehez Az AD-aacutetalakiacutetoacute hibamentes műkoumldeacuteseacutehez 838 MHz-es vagy annaacutel kisebb oacuterajel szuumlkseacuteges A tipikus AD-aacutetalakiacutetaacutes 16 AD-aacutetalakiacutetaacutesi oacuterajelet koumlvetel plusz a kivaacutelasztott adateleacutereacutesi idő Az osztaacutesi araacutenyt az alaacutebbiak koumlzuumll vaacutelaszthatjuk

CK1 CK0 Oacuterajelosztoacute

0 0 32

0 1 4 (Ne hasznaacuteljuk akkor ha az oacuterajel CD

osztoacutebitje 0)

1 0 8

1 1 2

4 CK0

3 AQ1 Az adateleacutereacutesi bitekkel

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

kivaacutelaszthatjuk azt az időt amely rendelkezeacutesre fog aacutellni a bemeneti koumlvető- eacutes tartoacuteerősiacutető szaacutemaacutera hogy lekeacuterdezze a bemeneti jelet Az adateleacutereacuteshez 3 vagy toumlbb AD-aacutetalakiacutetaacutesi oacuterajel javasolt

AQ1 AQ0 AD-aacutetalakiacutetaacutesi oacuterajelek szaacutema

0 0 1

0 1 2

1 0 3

1 1 4

2 AQ0

1 T2C Timer 2 hasznaacutelata Nem taacutergyaljuk

0 EXC Kuumllső triggerjel hasznaacutelata Nem taacutergyaljuk

192 taacuteblaacutezat - Az ADCCON2 SFR parameacuteterei

ADCCON2 AD Conversion Control Register 2

Az AD-aacutetalakiacutetaacutes 2 vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Leiacuteraacutes

7 ADCI Az AD-aacutetalakiacutetaacutes megszakiacutetaacutesaacutenak bitje

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

Aacutetalakiacutetaacutesi ciklus veacutegezteacutevel 1-re aacutell Ha a program megszakiacutetaacutesi rutinra ugrik a sajaacutet megszakiacutetaacutesi vektoraacuten keresztuumll hardveresen toumlrlődik Kuumlloumlnben a felhasznaacuteloacutenak kell toumlroumllnie

6 DMA A DMA-moacuted engedeacutelyezőbitje Nem taacutergyaljuk

5 CCONV A folytonos uumlzemmoacuted bitje 1-re aacutelliacutetva folyamatos AD-aacutetalakiacutetaacutes toumlrteacutenik azaz uacutej aacutetalakiacutetaacutesi ciklus indul az előző veacutegezteacutevel

4 SCONV Az egyszeri aacutetalakiacutetaacutes bitje Egyetlen aacutetalakiacutetaacutesi ciklus toumlrteacutenik eacutes annak veacutegeacuten a bit automatikusan 0-ra vaacutelt

3 CS3 Csatornakivaacutelasztoacute bitek

CS3 CS2 CS1 CS0 Csatorna szaacutemaegyeacuteb megjegyzeacutes

0 0 0 0 0

0 0 0 1 1

0 0 1 0 2

0 0 1 1 3

0 1 0 0 4

0 1 0 1 5

0 1 1 0 6

0 1 1 1 7

1 0 0 0 Hőmeacuterseacutekletmonitorozaacutes Nem

taacutergyaljuk

1 0 0 1 DAC0 Nem taacutergyaljuk

1 0 1 0 DAC1 Nem

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

taacutergyaljuk

1 0 1 1 AGND Nem taacutergyaljuk

1 1 0 0 VREF Nem taacutergyaljuk

1 1 1 1 DMA STOP Nem taacutergyaljuk

A toumlbbi kombinaacutecioacute foglalt

2 CS2

1 CS1

0 CS0

2 Egyszerű AD-aacutetalakiacutetaacutesEbben az alfejezetben AD-aacutetalakiacutetaacutest veacutegzuumlnk tetszőleges feszuumlltseacutegforraacuteson egyszeri aacutetalakiacutetaacutesi ciklusokat hasznaacutelva Nagyon leacutenyeges hogy az aacutetalakiacutetandoacute feszuumlltseacuteg ne legyen nagyobb +25 V-naacutel Erről egyeacutebkeacutent mindig a felhasznaacuteloacutenak kell gondoskodnia iacutegy ha sajaacutet alkalmazaacutest eacutes aacuteramkoumlrt keacutesziacutetuumlnk nagyon-nagyon figyeljuumlnk erre a szabaacutelyra eacutes ennek megfelelően tervezzuumlk aacuteramkoumlreinket Az ADuC 842-es chip egyeacutebkeacutent akkor sem megy toumlnkre ha kicsivel tuacutelleacutepjuumlk a +25 V feszuumlltseacutegkorlaacutetot kezdeni azonban a korlaacutetot meghaladoacute eacuterteacutekkel uacutegysem tudunk semmit mert ekkor az aacutetalakiacutetott eacuterteacutek maacuter reacuteg eleacuterte a maximumot A feszuumlltseacutegforraacutes polaritaacutesa meacuteg keacutenyesebb uumlgy ha azt veacuteletlenuumll foumllcsereacuteljuumlk amikor raacutekapcsoljuk az AD-aacutetalakiacutetoacute bemeneteacutere a feszuumlltseacuteget akkor bizony felszaacutell a meacuterőfuumlsthellip A [Az AD-aacutetalakiacutetaacutes szabaacutelyai] aacutebra az AD-aacutetalakiacutetaacuteshoz tartozoacute szabaacutelyokat ismeacutetli meg nagy betűkkel sziacutenesbenhellip

192 aacutebra - Az AD-aacutetalakiacutetaacutes szabaacutelyai

Mindezek utaacuten maacuter nekiveselkedhetuumlnk első AD-aacutetalakiacutetoacute alkalmazaacutesunknak

31 feladat

Meacuterjuumlnk feszuumlltseacuteget a mikrovezeacuterlővel a 0 V - +25 V tartomaacutenyban eacutes a meacutert eacuterteacuteket kuumlldjuumlk el a soros porton a PC-nek de az AD-aacutetalakiacutetoacutenak csak a legeacuterteacutekesebb 8 bitjeacutet hasznaacuteljuk [Code43]

Előszoumlr is gondoljuk veacutegig mit jelent az hogy az AD-aacutetalakiacutetoacute legeacuterteacutekesebb 8 bitje A [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei] aacutebra mutatja hogy mely regiszterekben eacutes azokon beluumll hol talaacuteljuk a digitalizaacutelt jelszint 12 bitjeacutet Nekuumlnk most a 8 legeacuterteacutekesebb kell azaz az alsoacute neacutegyet kihajiacutetjuk Kezdeti proacutebaacutelkozaacutesnak ez is bőven megfelel hiszen a felbontaacutesunk meacuteg iacutegy is 00098 V lesz A leacutenyeg az hogy a

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

szuumlkseacuteges bitjeink fele az ADCDATAH maacutesik fele az ADCDATAL regiszterben lapul A [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei] aacutebra mutatja hogy mely bitekre van szuumlkseacuteguumlnk

193 aacutebra - Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei

A keacutet regiszterből a 8 szuumlkseacuteges bit kihalaacuteszaacutesa egyszerűbb lesz mint gondolnaacutenk A 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben van egy erre igen alkalmas utasiacutetaacutes

SWAP A

Az utasiacutetaacutes egyszerűen felcsereacuteli az akkumulaacutetor keacutet feacutelbaacutejtjaacutet Maga a mnemonik iacutegy ahogy van toumlrteacutenetesen eacutertelmes szoacute angolul azt jelenti hogy kicsereacutel megcsereacutel Ha tehaacutet az akkumulaacutetor eacuterteacuteke mondjuk A=10010110 akkor a SWAP A utasiacutetaacutes veacutegrehajtaacutesa utaacuten A=01101001 aacutell elő Ennek ismereteacuteben azt fogjuk tenni hogy betoumlltjuumlk az akkumulaacutetorba az ADCDATAH regiszter tartalmaacutet lenullaacutezzuk annak felső neacutegy bitjeacutet megcsereacuteljuumlk a keacutet feacutelbaacutejtot majd a kapott eacuterteacuteket elmentjuumlk egy vaacuteltozoacuteba (voltage) Iacutegy a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 4 bitje (11-8) a helyeacutere keruumllt Ez utaacuten betoumlltjuumlk az akkumulaacutetorba az ADCDATAL regiszter tartalmaacutet kitoumlroumlljuumlk annak alsoacute neacutegy bitjeacutet megcsereacuteljuumlk a keacutet feacutelbaacutejtot majd a kapott eacuterteacutekhez hozzaacuteadjuk voltage tartalmaacutet eacutes maacuter elő is aacutellt az az eacuterteacutek amely helyieacuterteacutek szerint helyes sorrendben tartalmazza a digitalizaacutelt feszuumlltseacutegeacuterteacutek 11-4 bitjeacutet azaz a 8 legeacuterteacutekesebbet Eacutes ezt az eacuterteacuteket maacuter elmenthetjuumlk akaacuter vissza a voltage vaacuteltozoacuteba Mindez assembly nyelven iacutegy fest

MOV AADCDATAHANL A00001111bSWAP AMOV voltageAMOV AADCDATALANL A11110000bSWAP AADD AvoltageMOV voltageA

Ezek utaacuten tehaacutet megkaparintottuk a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfontosabb 8 bitjeacutet ami termeacuteszetesen vaacuteltozatlanul 0 V eacutes +25 V koumlzoumltti jelszintet reprezentaacutel csak kisebb felbontaacutessal annaacutel mintha 12 bituumlnk lenne Az a helyzet hogy a +25 V maximaacutelis feszuumlltseacutegszinttel egeacuteszen nagy szerencseacutenk van Egy 8 biten aacutebraacutezolt binaacuteris szaacutem legnagyobb eacuterteacuteke ugyanis 255 ami majdnem a szaacutezszorosa 25-nek Iacutegy nem koumlvetuumlnk el tuacutel nagy hibaacutet ha a feszuumlltseacutegszint gyanaacutent kapott 8-bites szaacutemot egyszerűen elosztjuk 100-zal eacutes azt tekintjuumlk a bdquomeacutertrdquo feszuumlltseacutegeacuterteacuteknek termeacuteszetesen voltban kifejezve A hiba amit elkoumlvetuumlnk 1ndash250255 = 00196 lt 2 ami sok alkalmazaacutesnaacutel meacuteg mindig bőven megfelelő (Mindez persze akkor igaz ha a mikrovezeacuterlő gyaacuteri kalibraacutecioacuteja megfelelően pontos)

Az egybaacutejtos eacuterteacutek elosztaacutesa 100-zal eacutes az eacuterteacutek tizedes jegyeinek elkuumlloumlniacuteteacutese nem nagy műveacuteszet Felhasznaacuteljuk a maacuter ismert DIV AB osztoacute utasiacutetaacutest meacuteghozzaacute sorozatban Előszoumlr is elosztjuk a voltage vaacuteltozoacutenk eacuterteacutekeacutet 100-zal Ekkor A-ban maacuteris előaacutell a szaacutezasok eacuterteacuteke A maradeacutek ugyebaacuter B-ben lesz Ezt aacutettesszuumlk A-ba majd elosztjuk 10-zel Ez utaacuten A-ban a tiacutezesek eacuterteacutekeacutet kapjuk meg B-ben pedig az egyesek maradnak Eacutes ennyi az egeacutesz A szaacutezasok tiacutezesek eacutes egyesek eacuterteacutekeacutet el kell mentenuumlnk egy-egy vaacuteltozoacuteba (value100 value10 eacutes value1) hiszen azokat el kell majd kuumlldenuumlnk a PC-nek A szaacutemeacuterteacutekeket termeacuteszetesen ASCII szaacutemjegy-karakterekkeacute kell majd alakiacutetanunk Eacutes azt se felejtsuumlk el hogy a szaacutezasok szaacutemjegye utaacuten kuumlldenuumlnk kell egy pontot is (rsquorsquo) hogy szeacutep legyen a formaacutetumunk Az egyesek utaacuten pedig meacuteg azt kuumlldjuumlk el hogy rsquo Vrsquo Az AD-aacutetalakiacutetaacutest a [31 feladat] megoldaacutesaacutenaacutel egyszeres uumlzemmoacutedban fogjuk hasznaacutelni az oacuterajelosztoacutet eacutes az adateleacutereacutesi időt pedig a lehető legnagyobbra vesszuumlk hiszen jelen esetben semmi sem suumlrgőshellip A kivaacutelasztott AD-csatorna a nullaacutes lesz Arra nagyon figyeljuumlnk hogy a panelon mely tuumlskeacuteket kell hasznaacutelnunk Hogy veacuteletlenuumll se nyuacuteljunk melleacute a [A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is)] aacutebraacutet szaacutenjuk uacutetmutatoacutenak

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

194 aacutebra - A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is)

Az AD-aacutetalakiacutetaacutesnaacutel az SCONV indiacutetoacutebitet fogjuk hasznaacutelni (laacutesd [Az ADCCON2 SFR parameacuteterei]) Ennek 1-re aacutelliacutetaacutesaacutenaacutel elindul az AD-aacutetalakiacutetaacutes eacutes ez a bit csak akkor vaacutelt vissza 0-ra ha az aacutetalakiacutetaacutesi ciklus veacuteget eacutert Iacutegy koumlnnyedeacuten tudunk erre vaacuterakozni a programban

SETB SCONVJB SCONV$

Ha a program ezen a keacutet soron (a koacutedban sziacutenessel kiemeljuumlk) tuacuteljut vidaacuteman kibaacutenyaacuteszhatjuk a digitalizaacutelt feszuumlltseacutegeacuterteacuteket az ADCDATAH eacutes ADCDATAL regiszterekből

A koacuted a soros porti kommunikaacutecioacute miatt nem nevezhető roumlvidnek de semmi csavar vagy bravuacuteros truumlkk sincsen benne A joacute oumlreg DELAY szubrutinunkat most sem tuumlntetjuumlk foumll A soros porti kommunikaacutecioacute

Code43asmvoltage DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejavalue100 DATA 031h A szaacutezasok eacuterteacutekedarabszaacutemavalue10 DATA 032h A tizesek eacuterteacutekedarabszaacutemavalue1 DATA 033h Az egyesek eacuterteacutekedarabszaacutemaMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutet az ADCCON1 regiszterrel Magyaraacutezat 7 bit 1 bekapcsoljuk az aacutetalakiacutetoacutet 6 bit 0 nem hasznaacutelunk kuumllső referenciaacutet 5-4 bit 00 a legnagyobb oacuterajel-osztoacutet hasznaacuteljuk (32) hogy biztosan legyen eleacuteg idő az aacutetalakiacutetaacutesra 3-2 bit 11 a lehető legtoumlbb időt hagyjuk az adatgyűjteacuteshez is 1-2 bit 00 nem hasznaacuteljuk a tovaacutebbi funkcioacutekatnextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutes Addig tehaacutet vaacuterakozunkMOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageA Elmentjuumlk az eddigi aacutellaacutestMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-etADD Avoltage Ehhez pedig csak hozzaacute kell adni voltage tartalmaacutet eacutes keacuteszen is vagyunkMOV voltageA Itt maacuter a kiacutevaacutent baacutejtot mentjuumlk elMOV Avoltage Elosztjuk a feszuumlltseacutegeacuterteacuteketMOV B100 100-zal Iacutegy előaacutell a szaacutezasokDIV AB szaacutemaMOV value100A Elmentjuumlk a szaacutezasokat

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

MOV AB A-ba tesszuumlk a 100-zal valoacute osztaacutes maradeacutekaacutetMOV B10 Most 10-zel osztunkDIV ABMOV value10A A-ban az eredmeacuteny azaz a tiacutezesek szaacutemaMOV value1B B-ben a maradeacutek azaz az egyesek szaacutemaMOV Avalue100 Elkuumlldjuumlk a PC-nek a szaacutezasokatADD A030h de ASCII karakterkeacutentCALL SENDCHARMOV A Megy utaacutena a tizedespontCALL SENDCHARMOV Avalue10 Aztaacuten a tiacutezesekADD A030hCALL SENDCHARMOV Avalue1 Aztaacuten az egyesekADD A030hCALL SENDCHARMOV DPTRfarok A kuumlldeni kiacutevaacutent szoumlvegreacutesz veacutegeacutenekCALL SENDSTRING elkuumlldeacutese karakterlaacutenckeacutentMOV A100 1 maacutesodpercig vaacuterakozunk hogy neCALL DELAY oumlmoumlljoumln a PC-nek tuacutel gyorsan a meacutert eacuterteacutekek sorozataJMP next Ugrunk vissza a koumlvetkező meacutereacuteshez A karakterlaacutenc veacutege farok DB V10130$INCLUDE(UARTIOASM)

A program műkoumldeacuteseacutet most nem videoacuteval hanem kicsit elteacuterő esettanulmaacutennyal mutatjuk be A [Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel] aacutebraacuten laacutethatoacute moacutedon ceruzaelemek feszuumlltseacutegeacutet meacuteregettuumlk mert az garantaacuteltan nem leacutepi tuacutel a +25 V-ot Keacutet ceruzaelemuumlnk volt digitaacutelis multimeacuteterrel meacuterve egyiknek 135 V maacutesiknak 083 V volt az uumlresjaacuteraacutesi feszuumlltseacutege A mikrovezeacuterlővel veacutegzett meacutereacutesek sorozata a [Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek] aacutebraacuten laacutethatoacute A pirossal bekeretezett adatok a keacutet ceruzaelemre vonatkoznak Laacutethatoacute hogy az elteacutereacutesek csak 2 koumlruumlliek ami pont oumlsszhangban van a tizedes toumlrt előaacutelliacutetaacutesakor kapott szisztematikus elteacutereacutessel

A keacutet bekeretezett adatsor koumlzoumltti eacuterteacutekek kisseacute zagyvaacutenak tűnnek de azonnal megadjuk a magyaraacutezatot Ekkor csereacuteltuumlk le a kezuumlnkben leacutevő ceruzaelemet eacutes a meacuterővezeteacutekek egyszerűen csak bdquoloacutegtak a levegőbenrdquo Ilyenkor neacutemi veacuteletlenszerű eacuterteacuteksorozat utaacuten a meacutert eacuterteacutek beaacutell a maximumra Ez laacutethatoacute a [Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek] aacutebraacuten is

195 aacutebra - Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel

196 aacutebra - Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

Veacuteguumll azt a megjegyzeacutest kiacutevaacutenjuk meacuteg hozzaacutefűzni az alfejezetben leiacutertakhoz hogy a pontos feszuumlltseacutegeacuterteacutek előaacutelliacutetaacutesaacutehoz vagy megiacuterjuk a bonyolult aritmetikai rutinokat assemblyben vagy a C nyelvhez fordulunk vagy a lebegőpontos szaacutemiacutetaacutest maacuter sokkal inkaacutebb a PC-n veacutegezzuumlk el alkalmas koumlrnyezetben Lebegőpontos műveletekbe vagy egyeacuteb nehezen eacuterthető matematikai truumlkkoumlk alkalmazaacutesaacuteba assemblyben ezen a szinten nem kiacutevaacutentunk belebonyoloacutedni

Created by XMLmind XSL-FO Converter

20 fejezet - AlkonykapcsoloacuteMegfigyeleacutesek alapjaacuten elmondhatoacute hogy az elektronika iraacutent eacuterdeklődni kezdő gyerekek eacutes tineacutedzserek előbb mindenaacuteron villogoacutekat keacutesőbb akusztikus erősiacutetőket akarnak eacutepiacuteteni Az előbbi nyilvaacuten egyszerűbb viszont szoacute szerint laacutetvaacutenyosabb Villogoacutet csinaacuteltunk maacuter eacuteppen eleget a tankoumlnyvben de maradjunk meacuteg egy kicsit az optoelektronika teruumlleteacuten eacutes keacutesziacutetsuumlnk olyan alkalmazaacutest amely sok optoelektronikai kurzusban az aacutellatorvosi loacute szerepeacutet jaacutetssza Ez az alkalmazaacutes az alkonykapcsoloacute Meg lehet valoacutesiacutetani tranzisztoros billenőkoumlroumlkkel műveleti erősiacutetős alapkapcsolaacutesokkal eacuterzeacutekelőkeacutent pedig felhasznaacutelhatunk fotoellenaacutellaacutest fotodioacutedaacutet eacutes fototranzisztort Vaacutelasszuk most ez utoacutebbit eacutes hasznaacuteljuk ki a mikrovezeacuterlőnk nyers erejeacutet azaz meacuterjuumlk az alkalmazaacuteshoz eacutepiacutetett aacuteramkoumlr valamely reacuteszeacuten a feszuumlltseacuteget majd ennek megfelelően kapcsoljuk be vagy ki a feacutenyforraacutest

A tankoumlnyvben az a ceacutelunk hogy mindig a lehető legegyszerűbb elektronikai megoldaacutest vaacutelasszuk Iacutegy műveleti erősiacutető elő sem keruumll Minden a tankoumlnyvben szereplő komolyabb alkalmazaacutest termeacuteszetesen sokkal igeacutenyesebben is meg lehetne tervezni uumlgyelve a linearitaacutesra jelkorlaacutetozaacutesra stb de a ceacutel eacuteppen a lehető legegyszerűbb elkeacutesziacutethetőseacuteg hogy csak egy mareacutek alkatreacuteszt kelljen felhasznaacutelnunk (eacutes legrosszabb esetben sajaacutet zsebből megvaacutesaacuterolnunk)

1 Besugaacuterzaacutesmeacutereacutes fototranzisztorralFototranzisztorokroacutel sok leacutenyeges ismeretet megtudhatunk a megfelelő elektronikai szakkoumlnyvekből [2] [3] [4] [5] [6] Itt most csupaacuten oumlsszefoglaloacute jelleggel emliacutetjuumlk meg főbb tulajdonsaacutegaikat ill az alkalmazaacuteshoz vaacutelasztott tiacutepus parameacutetereit

Fototranzisztoroknaacutel az eszkoumlz a baacutezisndashemitter aacutetmeneten a besugaacuterzaacutes hataacutesaacutera generaacuteloacutedoacute fotoaacuteramot erősiacuteti foumll Uacutegy is tekinthetuumlnk a fototranzisztorra mint egy szokvaacutenyos tranzisztorra csak a baacutezisaacuteramot a fotoaacuteram jelenti Eacuteppen ezeacutert a legtoumlbb fototranzisztor-tiacutepusnak csak az emittere eacutes a kollektora van kivezetve A baacutezist csak olyan tiacutepusoknaacutel vezetik ki amelyeket munkapont-beaacutelliacutetaacutesra szaacutennak A besugaacuterzaacutes aacuteltal generaacutelt fotoaacuteram szinte toumlkeacuteletes lineaacuteris araacutenyban van magaacuteval a besugaacuterzaacutessal A tranzisztorhataacutes pedig ezt a fotoaacuteramot erősiacuteti foumll Ha tehaacutet a kollektorndashemitter-aacutegba ellenaacutellaacutesokat koumltuumlnk akkor az azokon eső feszuumlltseacuteg meacutereacuteseacutevel figyelhetjuumlk a fototranzisztort eacuterő besugaacuterzaacutest Ilyenkor viszont a meacutert feszuumlltseacuteg maacuter nem lesz lineaacuterisan araacutenyos a besugaacuterzaacutessal attoacutel a tranzisztor jelleggoumlrbeacuteinek megfelelően kisebb-nagyobb meacuterteacutekben el fog teacuterni

Meg kell jegyeznuumlnk hogy a kataloacutegusok toumlbbnyire nem a besugaacuterzaacutes (Ee Wm2) fuumlggveacutenyeacuteben ismertetnek eszkoumlzkarakterisztikaacutekat hanem a megvilaacutegiacutetaacutes (Ev lx) fuumlggveacutenyeacuteben Ehhez azonban mindig illik megadni a karakterisztika felveacuteteleacuteneacutel hasznaacutelt feacutenyforraacutes sziacutenkeacutepeacutet vagy a felhasznaacutelt szabvaacutenyos megvilaacutegiacutetoacutet (pl CIE A) Igeacutenyes gyaacutertoacutek ezt megteszik A keacutet mennyiseacuteg nem ekvivalens hiszen a detektorok sziacutenkeacutepi eacuterzeacutekenyseacutege aacuteltalaacuteban nem egyezik meg a fotometriai mennyiseacutegek definiacutecioacutejaacutehoz szuumlkseacuteges laacutethatoacutesaacutegi fuumlggveacutennyel azaz V()-val [2] A koumlvetkező alkalmazaacuteshoz mi a TEPT4400 tiacutepusuacute fototranzisztort vaacutelasztottuk melynek sziacutenkeacutepi eacuterzeacutekenyseacutege a [A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege] aacutebraacuten laacutethatoacute (A diagram az adatlaproacutel szaacutermazik) Az aacutebraacutet tanulmaacutenyozva vilaacutegosnak kell lennie hogy a fototranzisztor a teljes laacutethatoacute sziacutenkeacuteptartomaacutenyban (380 nm - 780 nm) eacuterzeacutekeny de a koumlzeli infraacuteban is

201 aacutebra - A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

Tekintsuumlk most a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute rendkiacutevuumll egyszerű kis kapcsolaacutest A kollektor- ill emitteraacutegba koumltoumltt ellenaacutellaacutesok azonos meacuteretezeacuteseacuteből nyilvaacutenvaloacute hogy a meacuterendő UE feszuumlltseacuteg soha nem lehet nagyobb 25 V-naacutel Ha a mikrovezeacuterlővel UE-t figyeljuumlnk akkor a meacutert eacuterteacutek fuumlggveacutenyeacuteben ki-be kapcsolgathatunk egy laacutempaacutet eacutes maacuter keacuteszen is van az alkonykapcsoloacutenk Az az előnyuumlnk is meglesz hogy nagyon taacuteg tartomaacutenyban szoftveresen vaacutelaszthatjuk meg a kapcsolaacutesi jelszint eacuterteacutekeacutet Egyeacuteb esetekben a keacutet ellenaacutellaacuteseacuterteacutek araacutenyaacuteval jaacutetszhatunk de akkor figyelnuumlnk kell UE +25 V-os korlaacutetozaacutesaacutera

202 aacutebra - Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten

Eacutepiacutetsuumlk meg a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute egyszerű aacuteramkoumlrt de hagyjuk ki belőle a kondenzaacutetort Toumlltsuumlk le mikrovezeacuterlőnkre az egyszerű AD-aacutetalakiacutetaacutesra megiacutert Code43-at majd figyeljuumlk a kijelzett feszuumlltseacutegadatokat A vizsgaacutelatot a szerző otthoni aacutelloacutelaacutempaacuteja alatt veacutegezte amelybe egy spiraacutelis kompakt feacutenycső volt becsavarva Laacutethatoacute hogy a [Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt] aacutebraacuten bemutatott jelszint eleacuteg nagy ingadozaacutest mutat Keacuterdeacutes hogy mi ennek az oka Talaacuten nem hasznaacutelhatoacute az egyszerű kis kapcsolaacutesunk A vaacutelasz az hogy semmi baja a kapcsolaacutesnak az eacuterteacutekek azeacutert ugraacutelnak ennyire mert a kompakt feacutenycső toumlbb kilohertzes villoacutedzaacutesaacutet eacuterjuumlk tetten amit az emberi szem maacuter semmi esetre sem tud koumlvetni az AD-aacutetalakiacutetoacute viszont e szerint igenhellip Ennyire gyors az ADuC 842-es AD-aacutetalakiacutetoacuteja Ilyen esetekre gyoacutegyiacuter ha a meacuterőellenaacutellaacutessal paacuterhuzamosan bekoumltuumlnk egy megfelelően nagy kondenzaacutetort uacutegy 3-10 F kapacitaacutessal A tapasztalat szerint ez maacuter elegendő Ilyen nagy kapacitaacutesoknaacutel szinte kizaacuteroacutelag elektrolitkondenzaacutetort hasznaacutelhatunk de uumlgyeljuumlnk annak polaritaacutesaacutera mert fordiacutetott bekoumlteacutesneacutel az alkatreacutesz erősen foumllmelegedhet toumlnkremehet sőt foumll is robbanhat (Annyira azeacutert ez sem veszeacutelyes de szeacutethasad a tokozaacutes eacutes irtoacute buumldoumls lesz a helyiseacutegben) A kondenzaacutetor hataacutesaacutet (C = 10 F) a [Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben] aacutebra szemleacutelteti A feszuumlltseacutegingadozaacutes gyakorlatilag megszűnt

203 aacutebra - Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

204 aacutebra - Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben

2 Az alkonykapcsoloacute programjaA [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute kapcsolaacutes eacutes a kondenzaacutetor szerepeacutenek taacutergyalaacutesa utaacuten megfogalmazhatjuk a feladatot az alkonykapcsoloacutehoz

32 feladat

Keacutesziacutetsuumlnk alkonykapcsoloacutet amelyneacutel a detektor fototranzisztor a laacutempaacutet pedig a mikrovezeacuterlő valamely kimeneti bitje jelenti (A kapcsolaacutesi jelszint meghataacuterozaacutesa toumlrteacutenhet a koumlrnyezetnek megfelelően eacutes tapasztalati uacuteton) [Code44 Code45]

A feladat szoumlvegeacuteben az aacutell hogy a laacutempaacutet egy kimeneti bit fogja szimbolizaacutelni Ez a 2-es porton lesz majd (P20) eacutes az aacuteramkoumlr oumlsszeaacutelliacutetaacutesaacutenaacutel ide ceacutelszerűen egy LED-et fogunk koumltni a hozzaacute tartozoacute ellenaacutellaacutessal egyetemben Ezt a bitet azutaacuten maacuter komolyabb megvaloacutesiacutetaacutesnaacutel is fel tudjuk hasznaacutelni vezeacuterlőjel formaacutejaacuteban Ehhez a [TTL IC-k eacutes tranzisztorok a portokon] fejezetben talaacutelunk hasznos tanaacutecsokat

A koacuted egeacuteszen roumlvid lesz az aacuteramkoumlr műkoumldeacuteseacutehez pedig csak arra van szuumlkseacuteguumlnk hogy leaacuternyeacutekoljuk ill ne aacuternyeacutekoljuk le a fototranzisztort A kapcsolaacutesi szint megvaacutelasztaacutesa (a koacutedban sziacutenessel kiemelve) tapasztalati uacuteton toumlrteacutent előfordulhat hogy maacutes helyiseacutegben maacutes megvilaacutegiacutetaacutesi koumlruumllmeacutenyek koumlzoumltt joacutecskaacuten elteacuterő eacuterteacuteket eacuterdemes (kell) beaacutelliacutetanunk Az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa eacutes a regiszterek kezeleacutese eacuteppen uacutegy toumlrteacutenik mint a [31 feladat]naacutel Ennek reacuteszletes leiacuteraacutesa ott megtalaacutelhatoacute A koacutedban a hiszt ciacutemkeacutenek semmi szerep nincs ez csak viszonyiacutetaacutesi pontot jelent a koumlvetkező alfejezetben ismertetett Code45-houmlz

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

Code44asmMOV ADCCON110001100b Az AD-konverter konfiguraacutelaacutesanextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutes Addig tehaacutet vaacuterakozunkMOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageA Elmentjuumlk az eddigi aacutellaacutestMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-ethisztADD Avoltage Ehhez pedig csak hozzaacute kell adni voltage tartalmaacutet eacutes keacuteszen is vagyunk A-ban most maacuter a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 8 bitjeacutet talaacuteljukCJNE A30eval1 Ha Alt30 akkor bekapcsoljuk aeval1JC ledon vilaacutegiacutetaacutest Kuumlloumlnben kikapcsoljukSETB P20 LED kikapcsolaacutesaJMP nextledonCLR P20 LED bekapcsolaacutesaJMP next

A program ugyan ez egy kapcsolaacutesi szint moacutedszereacutenek megfelelő moacutedon műkoumldik de amikor az ember jaacutetszani kezd a műkoumldő aacuteramkoumlrrel hamar raacutejoumln hogy ez iacutegy nem biztos hogy joacute lesz nekuumlnk ugyanis ha a feszuumlltseacutegszint csak egy kicsit is ingadozik a kapcsolaacutesi eacuterteacutek koumlruumll a laacutempaacutenk aacutellandoacute jelleggel ki-be kapcsol Ez a LED-re neacutezve semmifeacutele koumlvetkezmeacutenyekkel nem jaacuter de a viselkedeacutes meacuteg ebben az esetben sem nevezhető szeacutepnek Ha maacutes tiacutepusuacute feacutenyforraacutest izzoacutelaacutempaacutet feacutenycsoumlvet stb kiacutevaacutenunk az alkonykapcsoloacuteval vezeacuterelni akkor viszont a gyakori ki-be kapcsolgataacutes kifejezetten kaacuteros lehet Ennek kikuumlszoumlboumlleacuteseacutere az alaacutebbi alfejezetben talaacutelunk megoldaacutest

3 HisztereacutezisA műszaki tudomaacutenyokban maacuter alapszinten talaacutelkozunk a hisztereacutezis fogalommal Ez azt jelenti hogy adott rendszer aacutellapotai koumlzoumltti aacutetmenet nem ugyanannaacutel a jelszinteacutel koumlvetkezik be egyik ill a maacutesik iraacutenyban A tovaacutebbi magyaraacutezathoz tekintsuumlk az [Hisztereacutezis keacutetaacutellapotuacute rendszerben] aacutebraacutet Ezen egy keacutetaacutellapotuacute rendszer aacutetmeneteihez tartozoacute hisztereacutezist szemleacuteltetjuumlk

205 aacutebra - Hisztereacutezis keacutetaacutellapotuacute rendszerben

A rendszernek keacutet aacutellapota van S1 eacutes S2 Az S1 aacutellapotboacutel az S2 aacutellapotba valoacute aacutetmenet az L mennyiseacuteg noumlvekedeacutesekor L2 szintneacutel koumlvetkezik be a fordiacutetott iraacutenyuacute aacutellapotvaacuteltaacutes viszont L1 szintneacutel Ezzel kikuumlszoumlboumllődik az a jelenseacuteg hogy a rendszer a keacutet aacutellapot koumlzoumltt vergődjoumln amikor is az aacutellapotok koumlzoumltti vaacuteltaacutes mindkeacutet iraacutenyban ugyanannaacutel a jelszinteacutel koumlvetkezik be Az L2 ndash L1 kuumlloumlnbseacuteget a hisztereacutezis szeacutelesseacutegeacutenek nevezzuumlk

Code44 minimaacutelis moacutedosiacutetaacutesaacuteval hisztereacutezist valoacutesiacutethatunk meg a programmal A betoldaacutest tartalmazoacute reacuteszt

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

maradeacutektalanul koumlzzeacutetesszuumlk a koacutedot azonban csak attoacutel a sortoacutel kezdve listaacutezzuk ahovaacute a hiszt ciacutemkeacutet helyeztuumlk A hisztereacutezist jelentő jelszintekre ugyanaz eacuterveacutenyes mint amit az előző alfejezetben is leiacutertunk tapasztalati uacuteton hataacuteroztuk meg őket eacutes maacutes koumlrnyezetben maacutes eacuterteacutekekre lehet (eacutes nagy valoacutesziacutenűseacuteggel lesz is) szuumlkseacuteg

Code45asmhisztADD Avoltage A-ban most maacuter a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 8 bitjeacutet talaacuteljukCJNE A20eval1 Ha A lt 20 akkor bekapcsoljuk aeval1JC ledon vilaacutegiacutetaacutestCJNE A40eval2 Ha A gt= 40 akkor kikapcsoljuk aeval2JNC ledoff vilaacutegiacutetaacutestJMP next Ugraacutes vissza meacuterniledonCLR P20 LED bekapcsolaacutesaJMP next Ugraacutes vissza meacuterniledoffSETB P20 LED kikapcsolaacutesaJMP next Ugraacutes vissza meacuterni

Az aacuteramkoumlruumlnk ezzel a programmal maacuter szebben műkoumldik a hisztereacutezis aacuteldaacutesos hataacutesa joacutel megfigyelhető az aacutellapotok koumlzoumltti vergődeacutes megszűnik (Laacutesd az alkalmazaacuteshoz tartozoacute videoacutet)

Created by XMLmind XSL-FO Converter

21 fejezet - TTL IC-k eacutes tranzisztorok a portokonAmennyiben valaki koumlzeacutepiskolai vagy egyetemi tanulmaacutenyai esetleg elektronikai hobbiteveacutekenyseacutege soraacuten foglalkozott logikai aacuteramkoumlroumlkkel valoacutesziacutenűleg ismeri a Texas TTL receptkoumlnyveacutet [7] Ha nem akkor tiszta sziacutevvel ajaacutenljuk mert nagyszerű munka (Antikvaacuteriumokban eacutes internetes piactereken meacuteg beszerezhető A szerző is ez utoacutebbi moacutedon tett szert raacute) Nos akaacuter iacutegy akaacuter uacutegy aacutell a helyzet a mikrovezeacuterlőhoumlz előbb-utoacutebb nem csak LED-ekből eacutes fototranzisztorokboacutel aacutelloacute aacuteramkoumlroumlket szeretneacutenk csatlakoztatni hanem ezekneacutel sokkal komolyabbakat is termeacuteszetesen akaacuter nagyobb teljesiacutetmeacutennyel Ilyenkor koumlzbuumllső fokozatokra meghajtoacutefokozatokra lesz szuumlkseacuteguumlnk Ezek a fokozatok jelenthetnek erre a ceacutelra tervezett TTL IC-ket eacutes kapcsoloacuteuumlzemben műkoumldtetett tranzisztorokat esetleg Darlington-kapcsolaacutesokat optocsatoloacutekat vagy releacuteket

Ebben a fejezetben elsősorban arra szeretneacutenk raacutemutatni hogy az eddig csupaacuten LED-ek meghajtaacutesaacutera hasznaacutelt P0-s eacutes P2-es portok koumlzoumltt van egy igen leacutenyeges kuumlloumlnbseacuteg Azt is meacuteg egyszer hangsuacutelyozni szeretneacutenk hogy aktiacutev kimenetkeacutent egyiket sem eacuterdemes hasznaacutelnunk A portok laacutebait foumlldre gond neacutelkuumll huacutezhatjuk szoftveresen abboacutel nem lesz baj Ilyenkor joacuteformaacuten csak a taacutepellaacutetaacutes (soros port) terhelhetőseacutege szab korlaacutetot az aacuteramerősseacutegnek 150-200 mA koumlruumlli aacuteramerősseacuteg eseteacuten maacuter eacuterdemes kuumllső taacutepegyseacuteget hasznaacutelnunk A keacutesőbbiekben erre is laacutetunk majd peacuteldaacutet Szeretneacutenk tovaacutebbaacute visszanyuacutelni a tranzisztorokhoz is eacutes megmutatni hogy milyen egyszerűen lehet veluumlk kuumllső egyseacutegeket kapcsolgatni

1 A felhuacutezoacute-ellenaacutellaacutesok szerepeA tankoumlnyvben LED-eket (termeacuteszetesen az előteacutet-ellenaacutellaacutesokat is mindig ide kell eacuterteni) kapcsolgattunk mind a P0-s mind a P2-es port bitjeivel Ilyenkor a LED akkor vilaacutegiacutetott ha a portok megfelelő laacutebaacutet foumlldre huacuteztuk azaz a LED katoacutedja neacutezett a port megfelelő laacuteba feleacute Hasznaacuteljuk most a portokat arra hogy TTL IC-knek adunk veluumlk bemeneti jelszinteket (Ki fog deruumllni hogy meacuteg a TTL IC-k bemenetei koumlzoumltt is akad kuumlloumlnbseacuteg) A peacuteldaacutekban ismeacutet csak LED-ekkel fogjuk jelezni az adott meghajtoacutefokozat műkoumldeacuteseacutet de innentől maacuter baacutetran mereacuteszkedhetuumlnk tovaacutebb is kijjebb ishellip

33 feladat

Kapcsolgassunk egy LED-et az SN74541-es vonalmeghajtoacuten keresztuumll Hasznaacuteljuk ehhez a mikrovezeacuterlő keacutet gombjaacutet [Code46]

A vaacutelasztaacutes azeacutert esett pont erre az IC-re mert ennek nem open collector-os kimenetei vannak hanem a kimenetei aktiacutev kimenetkeacutent hasznaacutelhatoacutek Akaacuter egy heacutetszegmenses kijelzőt is meghajthatunk veluumlk de uacutegy hogy ezek adjaacutek a kijelzőnek az aacuteramot Az ADuC 842-es P0-s eacutes P2-es portjaacuteval eacutes az IC bemeneteivel kapcsolatban irtoacute fontos tanulsaacuteggal fogunk szembesuumllni Előszoumlr is tekintsuumlk az [Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel] aacutebraacuten laacutethatoacute aacuteramkoumlrt

A TI74LS541-es IC tulajdonkeacuteppen 8 puffert vagy maacutes neacuteven vonalmeghajtoacutet tartalmaz Mi most ezek koumlzuumll egyetlen egyet fogunk hasznaacutelni A LED-nek az IC Y1-es kimenete ad aacuteramot amennyiben az A1-es bemenetnek magas logikai jelszintet adunk

211 aacutebra - Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

Mivel most az aacuteramkoumlr a leacutenyeges a koacutedot nagyon roumlvidre iacutertuk Az 1 gombbal bekapcsoljuk a 2 gombbal kikapcsoljuk a LED-et Most nem inverz logikaacuteroacutel van szoacute iacutegy a kimeneti bit magasra aacutelliacutetaacutesa jelenti a LED bekapcsolaacutesaacutet A koacutedban egyszerre kezeljuumlk a P20-s eacutes a P00-s biteket hogy ugyanazt a koacutedot hasznaacutelhassuk a koumlvetkezőkben bemutatandoacute elemzeacutesekhez

Code46asmORG 0060h A program helye a memoacuteriaacutebanbut1 BIT P32 Elnevezzuumlk az 1 gomb bitjeacutetbut2 BIT P33 Elnevezzuumlk a 2 gomb bitjeacutetout2 BIT P20 Az out2 bit definiaacutelaacutesaout0 BIT P00 Az out0 bit definiaacutelaacutesaMAINCLR out2 A kimeneti bitek toumlrleacuteseCLR out0waitJNB but1egy Ugrunk ha az 1 gomb le van nyomvaJNB but2nulla Ugrunk ha a 2 gomb le van nyomvaJMP wait Uacutejra gombnyomaacutesra vaacuterunknullaCLR out2 A kimeneti bitek toumlrleacuteseCLR out0JMP waitegySETB out2 A kimeneti bitek felaacutelliacutetaacutesaSETB out0JMP wait

Amennyiben az [Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel] aacutebraacuten laacutethatoacute moacutedon a vonalmeghajtoacute A1-es bemeneteacutet a P20-s laacutebra koumltjuumlk a mikrovezeacuterlő gombjaival egeacuteszseacuteges moacutedon kapcsolgathatoacute a LED Most joumln a meglepeteacutes Koumlssuumlk aacutet az A1-es bemenetet a P00-s laacutebra Azt fogjuk tapasztalni hogy hiaacuteba nyomogatjuk a gombokat a LED bizony meg se nyekken (nem vilaacutegiacutet) Eacutes most eacuterkeztuumlnk el a keacutet port koumlzoumltti igen leacutenyeges kuumlloumlnbseacuteghez Ez a kuumlloumlnbseacuteg az hogy a P2-es port tartalmaz felhuacutezoacute-ellenaacutellaacutesokat a P0-s viszont nem Ez utoacutebbinak a kimenete stabil magas jelszint helyett lebeg ami nem teszi lehetőveacute a 74541-es IC bemeneteacutenek magas jelszintre huacutezaacutesaacutet Erre van gyoacutegyiacuter hasznaacuteljunk kuumllső felhuacutezoacute-ellenaacutellaacutest ha maacuter a portba nincsen gyaacuterilag beeacutepiacutetve laacutesd [Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten] aacutebra A felhuacutezoacute-ellenaacutellaacutesok eacuterteacuteke 10 kΩ koumlruumlli legyen ezzel messze 1 mA alatt maradunk eacutes nem leacutepjuumlk aacutet a port terhelhetőseacutegeacutet Baj termeacuteszetesen akkor sem toumlrteacutenik ha P2-es port laacutebaira is felhuacutezoacute-ellenaacutellaacutesokat koumltuumlnk de erre a belső felhuacutezoacute-ellenaacutellaacutesok miatt nincs szuumlkseacuteg

Ha P00-s laacutebra az [Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten] aacutebraacuten laacutethatoacute moacutedon raacutekoumltjuumlk a felhuacutezoacute-ellenaacutellaacutest (legyen ez most 10 kΩ-os) a LED-uumlnk ismeacutet egeacuteszseacutegesen kapcsolgathatoacute a gombokkal A felhuacutezoacute-ellenaacutellaacutes műkoumldeacutese a koumlvetkező amennyiben a P00-s laacutebat foumlldre huacutezzuk foumlldpotenciaacutelra keruumll a vonalmeghajtoacute A1-es bemenete is a port laacutebaacuten pedig 05 mA folyik keresztuumll Amennyiben a P00-s laacuteb

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

jelszintjeacutet magasra aacutelliacutetjuk nem lebegni fog hanem az ellenaacutellaacuteson keresztuumll kiuumll stabil +5 V potenciaacutelra Eacutes ez a szint jelenik meg a vonalmeghajtoacute A1-es bementeacuten is

212 aacutebra - Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten

Eacuterdekes moacutedon nem mindegyik 74-es sorozatuacute IC bemeneteacutenek ilyen a kialakiacutetaacutesa mint a fent bemutatotteacute Ha vonalmeghajtoacutenak a 7406-os vagy 7407-es IC-t hasznaacuteltuk volna akkor azok vezeacuterleacutese felhuacutezoacute-ellenaacutellaacutes hasznaacutelata neacutelkuumll is ment volna a P0-s portroacutel Ennek okaacutenak taacutergyalaacutesa azonban maacuter tuacutelmutat e tankoumlnyv keretein A tanulsaacuteg az hogy taacutejeacutekozoacutedjuk a hasznaacutelni kiacutevaacutent vonalmeghajtoacutek bemeneteiről eacutes ha kell baacutetran hasznaacuteljunk felhuacutezoacute-ellenaacutellaacutesokat

2 Tranzisztorok mint kapcsoloacutekKuumllső aacuteramkoumlroumlk egyes reacuteszeinek meghajtaacutesaacutehoz tranzisztorokat is alkalmazhatunk Az előző alfejezetben koumlzreadott Code46-ot felhasznaacutelva egy-egy peacuteldaacutet mutatunk be npn- ill pnp-tranzisztor mint kapcsoloacuteelem hasznaacutelataacutera Mindkeacutet port eseteacuten

Tekintsuumlk az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel] aacutebraacutet Legyen most U = +5 V Ez egyaacuteltalaacuten nem kellene hogy iacutegy legyen hiszen akaacuter maacutes feszuumlltseacutegeacuterteacutekű taacutepellaacutetaacutest is hasznaacutelhatnaacutenk az aacuteramkoumlrhoumlz +12 V-ot +24 V-ot stb de az egyszerűseacuteg kedveacuteeacutert most ez is legyen +5 V Legyen a baacutezisellenaacutellaacutes eacuterteacuteke a tranzisztor erősiacuteteacutesi teacutenyezőjeacutenek megfelelően (A asymp 300) most R = 10 kΩ (RD eacuterteacuteke lehet baacutermi amit egy LED-hez adott U feszuumlltseacuteg eseteacuten hasznaacutelhatunk) Ekkor ha P20 magas jelszinten van (+5 V) akkor a tranzisztor teljesen kivezeacuterlődik iacutegy vilaacutegiacutetani fog a LED Ha P20-t foumlldpotenciaacutelra huacutezzuk akkor a tranzisztor lezaacuter eacutes a LED kialszik

213 aacutebra - Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

Az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel] aacutebraacuten laacutethatoacute aacuteramkoumlr a P00 laacuteb hasznaacutelataacuteval ebben az esetben sem műkoumldik Ennek megint csak a port laacuteba jelszintjeacutenek lebegeacutese az oka Felhuacutezoacute-ellenaacutellaacutes uumlgyes alkalmazaacutesaacuteval azonban ezen a helyzeten is segiacutethetuumlnk Figyeljuumlk meg az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal] aacutebraacuten laacutethatoacute aacuteramkoumlrt Amennyiben U = +5 V R1 eacutes R2 eacuterteacutekeacutet vaacutelaszthatjuk R2-nek azaz jelen esetben 5 kΩ-nak (56 kΩ eseteacuten sem lesz aacutem semmi kuumlloumlnbseacuteg a veacutegeredmeacutenyben) Ebben az esetben a P00-s laacuteb maacuter uacutegy tudja vezeacuterelni a tranzisztort ahogy azt az elejeacuten elterveztuumlk Ha U eacuterteacuteke nagyobb +5 V-naacutel akkor R1 eacutes R2 eacuterteacutekeacutenek meghataacuterozaacutesa csak nagyon keveacutessel igeacutenyel toumlbb figyelmesseacuteget

214 aacutebra - Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal

Ha pnp-tranzisztort akarunk hasznaacutelni akkor vessuumlnk egy pillantaacutest az [Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese] aacutebraacutera Ebben esetben nem lesz szuumlkseacuteguumlnk felhuacutezoacute-ellenaacutellaacutesra meacuteg akkor sem ha a P0-s portot hasznaacuteljuk a vezeacuterleacutesre Viszont most az U feszuumlltseacuteg maacuter nem lehet akaacutermilyen nagy hiszen ha az csak egy kicsivel is nagyobb 5 V-naacutel akkor a tranzisztor mindenkeacuteppen kinyit iacutegy elvesziacuteti kapcsoloacute jellegeacutet Ha azonban U = +5 V ebben az esetben is akkor azeacutert előnyoumls pnp-tranzisztor vaacutelasztaacutesa mert semmikor sem kell felhuacutezoacuteellenaacutellaacutest hasznaacutelnunk Mivel pnp-tranzisztort hasznaacutelunk az akkor nyit ki ha a vezeacuterleacuteseacutere hasznaacutelt portlaacutebat foumlldre huacutezzuk eacutes akkor zaacuter le amikor a vezeacuterlőlaacuteb jelszintje magas (+5 V)

215 aacutebra - Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

A BC182-es eacutes BC212-es univerzaacutelis jelerősiacutető-tranzisztorok kollektoraacuterama folytonos uumlzemmoacutedban 100 mA lehet Ha enneacutel is nagyobb aacuteramuacute eszkoumlzt kiacutevaacutenunk hasznaacutelni akkor maacuter valoacuteban indokolt a toumlbbfokozatuacute meghajtaacutes melyre tankoumlnyvi peacutelda szokott lenni a Darlington-kapcsolaacutes [4] [5] [6] Eacutes ahogy maacuter iacutertuk 100-200 mA aacuteramfelveacutetel eseteacuten maacuter kuumllső taacutepot hasznaacuteljunk hogy ne terheljuumlk tuacutel az USB-portot

Created by XMLmind XSL-FO Converter

22 fejezet - Hőmeacuterseacuteklet-meacutereacutesHisztereacutezises alkonykapcsoloacutet maacuter keacutesziacutetettuumlnk a [Alkonykapcsoloacute] fejezetben Maacuter az az alkalmazaacutes is olyan volt ami a gyakorlatban is minden tovaacutebbi neacutelkuumll hasznosiacutethatoacute tehaacutet maacuter nem tankoumlnyviacutezű gyermeteg peacuteldaacuteroacutel volt szoacute Most neacutezzuumlnk egy maacutesik olyan alkalmazaacutest amelyre szinteacuten sokszor lehet igeacuteny a gyakorlatban ez pedig a hőmeacuterseacuteklet-meacutereacutes Ezuacutettal nyilvaacuten valamilyen hőmeacuterseacuteklet-szenzorra lesz szuumlkseacuteguumlnk

1 TermisztorokHőmeacuterseacuteklet eacuterzeacutekeleacuteseacutere szaacutemtalan feacutele szenzort vaacutesaacuterolhatunk Az alkatreacutesz aacutera sok prameacutetertől fuumlgg elsődlegesen a pontossaacutegtoacutel eacutes a linearitaacutestoacutel Szeretneacutenk hűek maradni a tankoumlnyvben megfogalmazott elveinkhez iacutegy a legegyszerűbb legolcsoacutebb megoldaacutest vaacutelasztjuk azaz nem preciacutezioacutes eszkoumlzt de meacuteg csak nem is Pt100-ast fogunk hasznaacutelni hanem egy nagyon egyszerű kis termisztort A termisztorok hőmeacuterseacutekletfuumlggő ellenaacutellaacutesnak tekinthetők Vannak koumlzoumlttuumlk pozitiacutev ill negatiacutev hőfokteacutenyezőjű tiacutepusok Az előbbi azt jelenti hogy a hőmeacuterseacuteklet noumlvekedeacuteseacutevel noumlvekszik az eszkoumlz ellenaacutellaacutesa miacuteg az utoacutebbinaacutel ez pont fordiacutetva van

Hőmeacuterseacutekletmeacutereacutesre mi a KTY81-120 termisztort vaacutelasztottuk Az eszkoumlz olcsoacute koumlnnyen beszerezhető pozitiacutev hőfokteacutenyezőjű viszont karakterisztikaacuteja nem toumlkeacuteletesen lineaacuteris laacutesd [A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja] aacutebra No de semmi baj ebből meacuteg talaacuten tőkeacutet is kovaacutecsolhatunk ha uumlgyesek vagyunkhellip

221 aacutebra - A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja

Az eszkoumlz karakterisztikaacutejaacutet az adatlap 10 Celsius-fokonkeacutent tartalmazza hellyel-koumlzzel 5 fokonkeacutent Ez az adatsor iacutegy eleacuteggeacute heacutezagos ezeacutert interpolaacutecioacutet hajtunk veacutegre rajta A harmadfokuacute termeacuteszetes spline-interpolaacutecioacutet vaacutelasztjuk melyneacutel az alappontrendszert a 10-zel oszthatoacute hőmeacuterseacutekleteacuterteacutekek jelentik hogy az interpolaacutecioacutenaacutel a nagyon keacutenyelmesen megoldhatoacute ekvidisztaacutens esetet kapjuk Ekkor ugyan eacuteppen a kuumlloumlnleges jelentőseacutegű 25 degC-hoz tartozoacute eacuterteacuteket hagyjuk ki (elvileg pont itt 1 000 Ω a termisztor ellenaacutellaacutesa) de laacutetni fogjuk hogy ezzel hibaacutet gyakorlatilag nem veacutetuumlnk Az interpolaacutelt karakterisztikaacutet az [A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja] aacutebra mutatja Az interpolaacutecioacutes fuumlggveacuteny a T = 25 degC helyen 1 00011 Ω-ot vesz foumll ami az 1 000 Ω-hoz keacutepest csak 0011 -os elteacutereacutest jelent Mivel maga az adatlap 2 -os toleranciasaacutevot ad meg az ellenaacutellaacuteseacuterteacutekekhez ekkora kis hibaacuteval egyaacuteltalaacuten nem kell foglalkoznunk

222 aacutebra - A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Itt aacutelljunk meg egy pillanatra eacutes neacutezzuumlk meg hogy tudjuk-e korrigaacutelni a karakterisztikaacutet ha az esetleg arra szorulna Multimeacuteterrel raacutemeacuterve a szerző asztalaacuten oacuteraacutek oacuteta pihenő termisztorra 990 Ω-os ellenaacutellaacutes-eacuterteacutek volt meacuterhető 22 degC-os hőmeacuterseacutekletet felteacutetelezve az interpolaacutecioacutes fuumlggveacuteny ehhez az eacuterteacutekhez 9765 Ω-ot ad A keacutet eacuterteacutek haacutenyadosa 9909765 asymp 10138 iacutegy ezzel az eacuterteacutekkel szorozhatjuk a teljes interpolaacutecioacutes fuumlggveacutenyt a nagyobb pontossaacuteg eacuterdekeacuteben Az 10138 haacutenyadost kalibraacutecioacutes egyuumltthatoacutenak nevezzuumlk

A termisztoron aacutetfolyoacute aacuteram erősseacutegeacutet a gyakorlati alkalmazaacutesok soraacuten ceacutelszerű 1-2 mA alatt tartani Ha nem akarunk aacuteramgeneraacutetort keacutesziacuteteni ez megoldhatoacute uacutegy hogy a termisztorral sorosan koumltuumlnk egy maacutesik ellenaacutellaacutest a hőmeacuterseacuteklet megaacutellapiacutetaacutesaacutehoz pedig a termisztoron eső feszuumlltseacuteget meacuterjuumlk laacutesd alaacutebbi aacutebra

223 aacutebra - A termisztor soros kapcsolaacutesban

A soros ellenaacutellaacutes-paacuterra foumlliacutert feszuumlltseacutegosztoacute szerint

Vaacutelasszuk az U feszuumlltseacuteget 49 V-nak (A szerző oumlreg asztali szaacutemiacutetoacutegeacutepeacuten ennyit tudott nyuacutejtani az USB port) Tegyuumlk fel tovaacutebbaacute hogy a 0 degC - 60 degC tartomaacutenyban kell hőmeacuterseacutekletet meacuternuumlnk Kiacutevaacutencsisaacutegboacutel vizsgaacuteljuk meg hogy hogyan fog kineacutezni a hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika ha az RS ellenaacutellaacutes eacuterteacutekeacutet egyszer 500 Ω-nak ([A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal] aacutebra) maacutesszor 10 kΩ-nak ([A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal] aacutebra) vesszuumlk Szabad szemmel is laacutethatoacute hogy egyik karakterisztika sem toumlkeacuteletesen lineaacuteris ill hogy az egyik konkaacutev a maacutesik konvex fuumlggveacuteny Az egyeacutebkeacutent is probleacutemaacutet jelentene hogy RS = 500 Ω eseteacuten a termisztor feszuumlltseacutege joacutecskaacuten 25 V foumlloumltt van iacutegy a mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutet nem is hasznaacutelhatnaacutenk tovaacutebbi jelkondicionaacutelaacutes neacutelkuumll

224 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

225 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal

Proacutebaacuteljuk most RS eacuterteacutekeacutet megvaacutelasztani uacutegy hogy a fuumlggveacuteny a saacutergaacuteval jeloumllt darabja a lehető legnagyobb meacuterteacutekben megkoumlzeliacutetse a lineaacuteris alakot Tovaacutebbi reacuteszletezeacutes neacutelkuumll ehhez joacute oumltletnek tűnik ha a karakterisztika első derivaacuteltjaacutet numerikusan kiszaacutemoljuk azaz veacuteges differenciaacutekkal koumlzeliacutetjuumlk Ha most ezeknek a differenciaeacuterteacutekeknek vesszuumlk a szoacuteraacutesaacutet akkor az joacutel kifejezi a lineaacuteris alaktoacutel valoacute globaacutelis elteacutereacutest Mindezt persze csak akkor ha ezt a szoacuteraacuteseacuterteacuteket elosztjuk a differenciaeacuterteacutekek aacutetlagaacuteval ugyanis iacutegy tesszuumlk invariaacutenssaacute az ily moacutedon feleacutepiacutetett ceacutelfuumlggveacutenyuumlnket a fuumlggveacuteny amplituacutedoacutejaacuteval szemben Numerikus szeacutelsőeacuterteacutek-kereseacutest alkalmazva RS eacuterteacutekeacutere 2 385 Ω adoacutedik optimumkeacutent Ennek eseteacutet mutatja a [A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel] aacutebra Az optimummal meacuteg a feszuumlltseacutegeacuterteacutekre neacutezve is szerencseacutenk van a termisztor feszuumlltseacutege az előiraacutenyzott hőmeacuterseacuteklet-tartomaacutenyban bőven 25 V alatt marad A saacutergaacuteval jeloumllt fuumlggveacutenydarab gyakorlatilag lineaacuterisnak tekinthető

Amennyiben a saacutergaacuteval rajzolt fuumlggveacutenydarabot lineaacuteris fuumlggveacutennyel akarjuk helyettesiacuteteni meg kell hataacuteroznunk annak meredekseacutegeacutet (m) eacutes fuumlggőleges eltolaacutesaacutet (b) az

oumlsszefuumlggeacuteshez Az m meredekseacuteget keacutepezhetjuumlk uacutegy hogy vesszuumlk a numerikusan szaacutemolt differenciaeacuterteacutekek aacutetlagaacutet b-nek pedig egyszerűen a 0 degC-naacutel foumllvett eacuterteacuteket tekintjuumlk A [A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel] aacutebraacuten laacutethatoacute veacutekony fekete szakasz ezt a lineaacuteris fuumlggveacutenyt mutatja

226 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Az olvasoacutet megnyugtatjuk semmilyen fontos szaacutemiacutetaacutesroacutel nem maradt le az alfejezetben taacutergyalt oumlsszes szaacutemiacutetaacutesi reacuteszlet megtalaacutelhatoacute a KTY81-120xls faacutejlban azzal mindent reprodukaacutelni tud

2 HőmeacuterőAz előző alfejezetben eleacuteg reacuteszletesen foglalkoztunk a termisztor karakterisztikaacuteival iacutegy veacutegre megfogalmazhatunk egy hőmeacuterseacuteklet-meacutereacutesi feladatot

34 feladat

Meacuterjuumlk a mikrovezeacuterlővel 02 degC felbontaacutessal a szobaacutenk hőmeacuterseacutekleteacutet a 20 degC - 30 degC tartomaacutenyban A meacutert hőmeacuterseacuteklet-eacuterteacuteket kuumlldjuumlk el a soros porton a PC-nek A tartomaacutenyon kiacutevuumlli hőmeacuterseacuteklethez kuumlloumln uumlzenetet kuumlldjuumlnk [Code47]

Az előző alfejezetben is hivatkozott KTY81-120xls faacutejlban meghataacuteroztuk hogy az U = 49 V feszuumlltseacuteg eacutes az optimaacutelis RS = 2 385 Ω mellett mekkora termisztorfeszuumlltseacuteg tartozik adott hőmeacuterseacuteklethez A

feszuumlltseacutegeacuterteacutekekhez koumlnnyen meghataacuterozhatjuk a digitaacutelis aacutetalakiacutetaacutes eacuterteacutekeit a formulaacuteval Az előiacutert hőmeacuterseacuteklet-tartomaacuteny elejeacutet eacutes veacutegeacutet mutatja a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] feszuumlltseacutegeacuterteacutekkel AD-eacuterteacutekkel egyetemben Ez utoacutebbit decimaacutelisan eacutes hexadecimaacutelisan is

221 taacuteblaacutezat - A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata

T degC UR(T) V D dec D hex

200 14215 2328 918

202 14231 2331 91B

204 14247 2334 91E

206 14263 2336 920

208 14279 2339 923

hellip hellip hellip hellip

292 14955 2450 992

294 14971 2452 994

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

296 14987 2455 997

298 15003 2457 999

300 15019 2460 99C

Ha szemuumlgyre vesszuumlk a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] utolsoacute oszlopaacuteban leacutevő eacuterteacutekeket akkor foumll kell tűnnie annak a teacutenynek hogy valamennyi hexadecimaacutelis szaacutem első szaacutemjegye 9-es Ez most oacuteriaacutesi ajaacutendeacutek nekuumlnk az AD-aacutetalakiacutetaacutesnaacutel ugyanis a 12 bitből csak az alsoacute 8-ra lesz szuumlkseacuteguumlnk Tizenhatos szaacutemrendszerben ugyanis egy szaacutemjegy 4 bitet igeacutenyel ha aacutetiacuterjuk kettes szaacutemrendszerbe Ha tehaacutet tizenhatos szaacutemrendszerben foumlliacutert haacuteromjegyű szaacutemok helyett csak keacutetjegyűekre lesz szuumlkseacuteguumlnk akkor az mindig csak 8 bitet igeacutenyel kettes szaacutemrendszerben Ez pedig azt jelenti hogy egy az egyben hasznaacutelhatjuk az AD-aacutetalakiacutetoacute ADCDATAL regisztereacutet eacutes hogy az ADCDATAH regiszterre nem is lesz szuumlkseacuteguumlnk hiszen abban az aacutetalakiacutetott eacuterteacutek felső 4 bitje van (vouml [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei] aacutebra)

A tapasztalat azt mutatja hogy az AD-aacutetalakiacutetaacutes soraacuten kapott 12-bites eacuterteacutek alsoacute egy-keacutet bitje meacuteg nagyon stabil feszuumlltseacuteg mellett is eleacuteggeacute ingadozhat Ennek koumlvetkezteacuteben a kijelzett hőmeacuterseacuteklet-eacuterteacutek is kisebb-nagyobb ingadozaacutest mutat laacutesd [Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll] aacutebra Ezen oknaacutel fogva nem egy-egy meacutereacutes eredmeacutenye alapjaacuten eacuterdemes kiiacuteratnunk a hőmeacuterseacutekletet hanem toumlbb meacutereacutes eacuterteacuteket lenne joacute aacutetlagolnunk

227 aacutebra - Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll

Az aacutetlagolaacuteshoz toumlbbnyire maacuter lebegőpontos műveletekre lenne szuumlkseacuteguumlnk aminek megiacuteraacutesa assemblyben nem eacuteppen leaacutenyaacutelom Megtehetjuumlk hogy C fordiacutetoacuteeacutert sikoltunk de inkaacutebb gondolkodjunk egy kicsit Ha az ADCDATAL regiszterből kiemelt eacuterteacuteket nem egyedileg elszigetelten kezeljuumlk hanem tovaacutebbi vaacuteltozoacutek bevezeteacuteseacutevel toumlbb ilyet oumlsszeadunk majd a veacutegeacuten az oumlsszeget a meacutereacutesek darabszaacutemaacuteval elosztjuk akkor megvaloacutesiacutethatjuk az aacutetlagolaacutest Ehhez hasznaacuteljunk egy keacutetbaacutejtos vaacuteltozoacutet melynek lesz ugyebaacuter egy felső baacutejtja (datah) eacutes egy alsoacute baacutejtja (datal) E keacutet vaacuteltozoacute aacuteltal reprezentaacutelt 16-bites eacuterteacuteket nullaacutezzuk le majd adjuk hozzaacute a fuumlggetlen meacutereacutesek 8-baacutejtos eacuterteacutekeit de nagyon leacutenyeges hogy a hozzaacuteadaacutesok darabszaacutema kettő hatvaacutenya legyen Ennek a koumlvetelmeacutenyek a magyaraacutezataacutera hamarosan feacuteny deruumll Adjunk oumlssze peacuteldaacuteul 32 meacutereacutesi eacuterteacuteket Amikor a keacutetbaacutejtos regiszteruumlnk alsoacute baacutejtjaacutehoz hozzaacuteadjuk az aktuaacutelisan meacutert 8-bites eacuterteacuteket akkor mindig lehet aacutetvitel A felső baacutejthoz adjunk hozzaacute nullaacutet plusz az aacutetvitelt Menet koumlzben mentsuumlk mindig el a moacutedosult alsoacute ill felső baacutejtot iacutegy az eljaacuteraacutes veacutegeacutere kapunk egy 16-bites eacuterteacuteket amely 32 db 8-bites meacutereacutesi adat oumlsszegeacutet hordozza Assemblyben mindez iacutegy fest

MOV datal0 Nullaacutezzuk a datahdatalMOV datah0 regiszterpaacutertMOV R432 32-szoumlr meacuteruumlnk ebből keacutepezzuumlk az aacutetlagotmeasureSETB SCONV Egyszeri AD-konverzioacutetJB SCONV$ keacuteruumlnkMOV jelADCDATAL Kiolvassuk az ADCDATAL regisztertMOV Adatal Hozzaacuteadjuk datal-hez az aktuaacutelis

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

ADD Ajel kiolvasott eacuterteacuteketMOV datalA Elmentjuumlk a kapott alsoacute baacutejtotMOV Adatah Az aacutetviteli bittel egyuumltt 0-t adunkADDC A0 rsquodatahrsquo-hozMOV datahA Elmentjuumlk a kapott felső baacutejtotDJNZ R4measure Folytatjuk a meacutereacutest

A fenti koacutedreacuteszlet tehaacutet 32 meacutereacutesi adatot ad oumlssze az eredmeacuteny pedig a 16-bitesnek tekintendő datahdatal regiszterpaacuterban van Most joumln a kettő hatvaacutenyaacutera megfogalmazott igeacuteny magyaraacutezata A datahdatal regiszterpaacuter eacuterteacutekeacutet el kellene osztanunk 32-vel Szedjuumlk elő mindazt amit a kettes szaacutemrendszerről tudunk Ha egy akaacuterhaacutenybites eacuterteacuteket egy bittel balra leacuteptetuumlnk az uumlres helyre pedig nullaacutet iacuterunk akkor kettővel szorozzuk a szaacutemeacuterteacuteket Ha egy bittel jobbra leacuteptetuumlnk akkor kettővel osztunk eacutes egyuacutettal keacutepezzuumlk az egeacutesz reacuteszt Ha keacutet bittel leacuteptetuumlnk jobbra akkor 4-gyel osztunk eacutes keacutepezzuumlk az egeacutesz reacuteszt Iacutegy aztaacuten mivel 32 = 25 ezeacutert a keacutet regiszter tartalmaacutet egyuumlttesen 5 bittel kell jobbra leacuteptetnuumlnk

Vegyuumlnk egy peacuteldaacutet a fent leiacutert leacutepteteacutesre de az egyszerűseacuteg kedveacuteeacutert most csak 4 db 8-bites szaacutemot adunk oumlssze (eacutes iacutegy majd keacutet bittel leacuteptetuumlnk jobbra) Ezek decimaacutelis eacuterteacuteke legyen rendre 77 76 79 81 iacutegy az oumlsszeguumlk 313 Az oumlsszegzeacutest kettes szaacutemrendszerben iacutegy szemleacuteltetjuumlk

01001101 01001100 01001111 + 01010001 ---------- 100111001

Az eredmeacuteny maacuter keacutet baacutejtot igeacutenyel Egymaacutes mellett elteacuterő sziacutennel feltuumlntetve az eredmeacuteny felső eacutes alsoacute baacutejtjaacutet ezt kapjuk

datahdatal

00000001 00111001

Ha most keacutet bittel jobbra leacuteptetjuumlk a regiszterpaacuter egyuumlttes eacuterteacutekeacutet akkor ezt kapjuk

datahdatal hulladeacutek

xx000000 01001110 01

A fenti műveletneacutel a keacutet bdquoxrdquo azt akarja szimbolizaacutelni hogy teljesen mindegy milyen bitek joumlnnek be oda balroacutel hiszen a felső baacutejtra nem lesz a tovaacutebbiakban szuumlkseacuteguumlnk A bdquohulladeacutekrdquo szoacute pedig arra utal hogy az alsoacute baacutejtboacutel keacutet bitet elvesziacutetuumlnk de emiatt ne keseregjuumlnk hiszen ez jelenti az egeacutesz reacutesz keacutepzeacuteseacutet Ami most az alsoacute baacutejtban előaacutellt az 01001110 binaacuterisan ami decimaacutelisan 78 Ha pedig elosztjuk a neacutegy eredeti szaacutem oumlsszegeacutet 4-gyel akkor 3134 = 7825-oumlt kapunk aminek egeacutesz reacutesze 78 Imiacutegyen assemblyben tudtunk egyfajta aacutetlagolaacutest veacutegezni eacutes most maacuter eacuterthető hogy mieacutert volt fontos hogy az aacutetlagolni kiacutevaacutent adatok darabszaacutema kettő hatvaacutenya legyen

A leacutepteteacutesi művelethez azokat a bitforgatoacute utasiacutetaacutesokat hasznaacuteljuk amelyek C-n keresztuumll leacuteptetnek Iacutegy tudjuk megoldani azt hogy a felső baacutejtboacutel jobbra kinyomott bit megőrződjeacutek C-ben majd onnan beszippanthassuk balroacutel az alsoacute baacutejtba Ez assemblyben nem is olyan bonyolult

MOV R45 5-szoumlr leacuteptetuumlnk jobbraleptetMOV Adatah A-ba toumlltjuumlk a felső baacutejtot RRC A Jobbra forgatjuk Iacutegy legalsoacute bitje C-be keruumll Hogy mi leacutep be balroacutel az eacuterdektelenMOV datahA A moacutedosult felső baacutejtot elmentjuumlk MOV Adatal A-ba toumlltjuumlk az alsoacute baacutejtotRRC A Jobbra forgatjuk ezt is Balroacutel beleacutep a C-ben aacutelloacute bit Jobbra taacutevozik a foumlloumlslegesseacute vaacutelt legalsoacute bit C-be leacutep de ennek maacuter nincs jelentőseacutegeMOV datalA A moacutedosult alsoacute baacutejtot elmentjuumlkDJNZ R4leptet Folytatoacutedik a leacutepteteacutes ciklusa

A [Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal] aacutebra az aacutetlagolaacutes kellemes hataacutesaacutet a mutatja Az itt laacutetottakat eacuterdemes oumlsszehasonliacutetani a [Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll] aacutebraacuteval

228 aacutebra - Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

A [34 feladat] megoldaacutesaacutehoz meacuteg egy nagyon fontos momentumot tisztaacuteznunk kell Az aacutetlagolaacutest ugyan meguacutesztuk lebegőpontos műveletek neacutelkuumll de a hőmeacuterseacuteklet-eacuterteacutekek kiszaacutemiacutetaacutesaacutet a meacutert feszuumlltseacutegből maacuteshogy maacuter nem tudnaacutenk megoldani Ez akkor van iacutegy ha szaacutemolni akarjuk a hőmeacuterseacuteklet-eacuterteacutekeket Ha azonban maacutes megoldaacutest vaacutelasztunk akkor nem lesz szuumlkseacuteguumlnk szaacutemiacutetaacutesokra Ez a bdquomaacutes megoldaacutesrdquo az uacuten look-up table hasznaacutelata A look-up table olyan taacuteblaacutezatot jelent amelyben minden teacutetelesen benne van amire csak szuumlkseacuteguumlnk lehet Look-up table-t hasznaacutelni assemblyben egyeacutebkeacutent nem is akkora bdquoeacutegeacutesrdquo mint amekkoraacutenak elsőre hinneacutenk Sokszor meg lehet veluumlk keruumllni bonyolult szaacutemiacutetaacutesokat melyeket assemblyben gyoumltrelmes lenne megiacuterni Majdnem olyan ez mint a klasszikus eacutertelemben vett fuumlggveacutenytaacuteblaacutezat Ha visszatekintuumlnk a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata]ra akkor koumlnnyű meggondolni hogy a feladat megoldaacutesaacutera alkalmazott uacutej taacuteblaacutezatban csak a keacutetjegyűre csupasziacutetott hexadecimaacutelis szaacutemokra (hiszen a harmadik jegy mindig 9 lenne) eacutes a hőmeacuterseacuteklet szoumlveges eacuterteacutekeacutere lesz szuumlkseacuteguumlnk Valahogy ilyenformaacuten

DB 018h2000DB 01Bh2020DB 01Eh2040DB 020h2060DB 023h2080DB DB

Az adatbaacutejtokkeacutent megadott adathalmaz alkotja a programhoz szuumlkseacuteges look-up table-t Valamely sor első eleme első baacutejtja a felismerendő lecsupasziacutetott feszuumlltseacutegeacuterteacutek (laacutesd [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] 4 oszlop) Ez utaacuten minden sorban tovaacutebbi 5 baacutejt koumlvetkezik 4 baacutejtboacutel aacutell az első elemhez tartozoacute szoumlveges hőmeacuterseacuteklet-eacuterteacutek az oumltoumldik baacutejt pedig a karakterlaacutencot lezaacuteroacute 0 Ezek utaacuten semmi maacutesra nincs szuumlkseacuteguumlnk mint az előaacutelloacute aacutetlagolt meacutereacutesi adatot megkeresni a taacuteblaacutezatban majd kijelezni a hozzaacute tartozoacute hőmeacuterseacuteklet-eacuterteacuteket Hogy meglepeteacutes ne eacuterjen bennuumlnket ceacutelszerű megvizsgaacutelnunk hogy az aacutetlagolt eacuterteacutek egyaacuteltalaacuten szerepel-e a taacuteblaacutezatban Vagyis ha tuacutel alacsony vagy tuacutel magas a hőmeacuterseacuteklet akkor azt kuumlloumln kell jeleznuumlnk Ha ez nem aacutell fenn akkor kereshetuumlnk a taacuteblaacutezatban A kereseacutes koacuted-indirekt ciacutemzeacutessel toumlrteacutenik eacutes az aacutetlagolt meacutereacutesi adat ill a taacuteblaacutezat soraiban szereplő első elemek oumlsszehasonliacutetaacutesaacuteval Ha valamely sorban az első elem eacuterteacuteke nagyobb vagy egyenlő az aacutetlagolt meacutereacutesi adattal akkor az abban a sorban szereplő eacuterteacuteket jelezzuumlk ki Mivel a taacuteblaacutezat sorai rendezettek az első elemre neacutezve mindig egyeacutertelműen megtalaacuteljuk a helyes hőmeacuterseacuteklet-eacuterteacuteket Ehhez persze szuumlkseacuteg van a taacuteblaacutezatba foglaltakon kiacutevuumll eső hőmeacuterseacuteklet felismereacuteseacutere eacutes kuumlloumln kezeleacuteseacutere

Az adatmutatoacute kezeleacutese most kuumlloumlnoumls figyelmet igeacutenyel Tegyuumlk fel hogy ez most a taacuteblaacutezat valamely soraacutenak első elemeacutere mutat Ezt az elemet onneacutet ezek szerint gond neacutelkuumll kiolvashatjuk koacuted-indirekt ciacutemzeacutessel Amennyiben ezt az eacuterteacuteket kerestuumlk 1-gyel megnoumlveljuumlk az adatmutatoacute eacuterteacutekeacutet amely iacutegy a megfelelő hőmeacuterseacuteklet-eacuterteacutekre mint szoumlvegdarabra mutat majd meghiacutevhatjuk a szoumlvegkuumlldő szubrutint A koumlvetkező sor első elemeacutehez azonban nem 1-gyel hanem 6-tal kell megnoumlvelnuumlnk az adatmutatoacute eacuterteacutekeacutet hiszen 5 baacutejtot kell aacutetugranunk (a hőmeacuterseacuteklet-eacuterteacuteket eacutes a szoumlvegzaacuteroacute nullaacutet)

A [34 feladat] megoldaacutesaacutet jelentő koacuted maacuter nem lesz roumlvid de meacuteg mindig nem kell megijednuumlnk tőle A joacute oumlreg DELAY szubrutint most is kihagyjuk a tankoumlnyvbe beemelt reacuteszből A soros porti kommunikaacutecioacute eacutes az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa uacutegy toumlrteacutenik mint a koraacutebbi alkalmazaacutesokban ezeacutert azokat maacuter nem magyaraacutezzuk A

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

look-up table-nek a helytakareacutekossaacuteg veacutegett csak kis reacuteszleteacutet koumlzoumlljuumlk A koacuted teljes egeacuteszeacuteben eacutes reacuteszletes magyaraacutezatokkal egyetemben megtalaacutelhatoacute a koacutedkoumlnyvtaacuterban

A tankoumlnyv ezen pontjaacuten a 80518052-es processzormagoknak maacuter majdnem az oumlsszes geacutepi utasiacutetaacutesaacutet ismerjuumlk Az egyik ami meacuteg hiaacutenyzik a koumlvetkező

CLR A

Ez ekvivalens a

MOV A0

utasiacutetaacutessal csak fele olyan hosszuacute (egybaacutejtos) eacutes fele annyi oacuterajelciklust (egyet) igeacutenyel A mnemonikot maacuter eacutertjuumlk hiszen ilyennel a bitműveletek utasiacutetaacutesainaacutel maacuter talaacutelkoztunk eacutes pontosan ugyanazt jelenti (Clear ndash toumlroumll) Ez az uacutej utasiacutetaacutest a demonstraacutecioacute kedveacuteeacutert felbukkan a koacutedban is

Code47asmjel DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejadatah DATA 031h Az oumlsszeg vaacuteltozoacutejaacutenak felső baacutejtjadatal DATA 032h Az oumlsszeg vaacuteltozoacutejaacutenak alsoacute baacutejtjakorr EQU 12 A korrekcioacutes eacuterteacutek Tapasztalai uacuteton hataacuterozhatoacute megMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutetnextMOV datah0 Nullaacutezzuk az aacutetlagolaacutes vaacuteltozoacutejaacutenakMOV datal0 mindkeacutet baacutejtjaacutetMOV R432 Ennyiszer meacuteruumlnk ebből keacutepezzuumlk az aacutetlagotmeasureSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutesMOV jelADCDATAL A sajaacutetos hőmeacuterseacuteklettartomaacuteny miatt nekuumlnk most az aacutetalakiacutetott eacuterteacutek alsoacute 8 bitje kell csakMOV Adatal Hozzaacuteadjuk datal-hez az aktuaacutelisADD Ajel AD-eacuterteacuteketMOV datalA Elmentjuumlk a kapott alsoacute baacutejtotMOV Adatah Az aacutetviteli bittel egyuumltt 0-t adunkADDC A0 rsquodatahrsquo-hozMOV datahA Elmentjuumlk a kapott felső baacutejtotDJNZ R4measure Folytatjuk a meacutereacutest az aacutetlaghozMOV R45 Ennyiszer jobbra leacuteptetjuumlk aleptet datahdatal 16-bites eacuterteacuteket azazMOV Adatah tulajdonkeacuteppen 2-az-ennyiediken-nelRRC A osztjuk vagyis aacutetlagot keacutepezuumlnk a meacutereacutesiMOV datahA adatokboacutel A felső baacutejtboacutel a C bit segiacutetseacutegeacutevel aacutetleacuteptetjuumlkMOV Adatal a biteket az alsoacute baacutejtba Annak alsoacute bitjeiRRC A elvesznek de ne sirassuk őket A veacutegeacutenMOV datalA datal-ben az aacutetlageacuterteacutek szerepelDJNZ R4leptet Folytatjuk a bitek leacutepteteacuteseacutetMOV Adatal Korrigaacuteljuk a kapott aacutetlageacuterteacuteket aCLR C tapasztalati uacuteton meghataacuterozott korrekcioacutesSUBB Akorr konstanssalMOV datalA Elmentjuumlk a korrigaacutelt eacuterteacuteketMOV Adatal Ha 20 C-naacutel kisebb a meacutert hőmeacuterseacutekletCJNE A016hrelac1 akkor erről uumlzenetet kuumllduumlnk a PC-nekrelac1JC alacsonyCJNE A09Ehrelac2 Ha 30 C-naacutel nagyobb a meacutert hőmeacuterseacutekletrelac2 akkor erről uumlzenetet kuumllduumlnk a PC-nekJNC magasMOV DPTRlookup A look-up table ketdőciacutemeacutenek betoumllteacutese az adatmutatoacutebakeres

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

CLR A A-t nullaacutezukMOVC AA+DPTR Betoumlltjuumlk A-ba a look-up table adott soraacutenak hőmeacuterseacutekleteacuterteacutekeacutet jelentő szaacutemotCJNE Adatalrelac3 Oumlsszehasonliacutetjuk a meacutert aacutetlageacuterteacutekkelrelac3JNC kijelez Ha a taacuteblaacutezat eacuterteacuteke nagyobb vagy egyenlő az aacutetlageacuterteacutekneacutel akkor eleacutertuumlnk a kiiacuterandoacute hőmeacuterseacuteklethezINC DPTR Kuumlloumlnben a koumlvetkező sor joumln a taacuteblaacutezatbanINC DPTR de a koumlvetkező eacuterteacutekhez 6-szor meg kellINC DPTR noumlvelnuumlnk az adatmutatoacutet hiszen a 200INC DPTR stiacutelusuacute adat 4 baacutejt a szoumlvegzaacuteroacute 0 pedigINC DPTR az oumltoumldik Iacutegy a hatodik lesz a koumlvetkezőINC DPTR sor szaacutemadata a koumlvetkező vizsgaacutelathozJMP keres Folytatjuk a look-up table-ben valoacute kereseacutestkijelezINC DPTR Ha joacute sorban voltunk csak 1-gyel kellCALL SENDSTRING noumlvelni az adatmutatoacuten eacutes mehet is a hőmeacuterseacuteklet-eacuterteacutek a PC-nekMOV DPTRfok A kuumlldeni kiacutevaacutent szoumlvegreacutesz veacutegeacutenekCALL SENDSTRING elkuumlldeacutese karakterlaacutenckeacutentidohuzas MOV A100 1 maacutesodpercig vaacuterakozunk hogy neCALL DELAY oumlmoumlljoumln a PC-nek tuacutel gyorsan a meacutert eacuterteacutekek sorozataJMP next Ugrunk vissza a koumlvetkező meacutereacutesi blokkhozalacsonyMOV DPTRhideg A 20 C alatti hőmeacuterseacutekletre vonatkozoacuteCALL SENDSTRING uumlzenet elkuumlldeacutese a PC-nekJMP idohuzasmagasMOV DPTRmeleg A 30 C foumlloumltti hőmeacuterseacutekletre vonatkozoacuteCALL SENDSTRING uumlzenet elkuumlldeacutese a PC-nekJMP idohuzas Az uumlzenetek eacutes a look-up table fok DB C10130hideg DB Tlt198 C10130meleg DB Tgt30 C10130lookupDB 018h2000DB 01Bh2020DB 01Eh2040DB 020h2060DB 023h2080DB DB 092h2920DB 094h2940DB 097h2960DB 099h2980DB 09Ch3000$INCLUDE(UARTIOASM)

Vegyuumlk eacuteszre hogy a tuacutel alacsony ill tuacutel magas hőmeacuterseacutekletek megaacutellapiacutetaacutesaacutenaacutel hagytunk egy kis reacutest a look-up table első eacutes utolsoacute eacuterteacutekeacutehez keacutepest Ennek abban van szerepe hogy mindig biztosan sikeres legyen a look-up table-ben valoacute kereseacutes ill minden eacuterteacutek szerephez is tudjon jutni Ezek a kis reacutesek egyeacutebkeacutent kb 02 degC-t jelentenek a look-up table-ben szereplő eacuterteacutekek leacutepeacuteskoumlze alapjaacuten A koacutedban a reacuteseket jelentő eacuterteacutekeket saacutergaacuteval kiemeltuumlk

A koacuted tartalmaz egy korr nevű korrekcioacutes konstanst (zoumllddel kiemelve) eacutes neacutegy erre vonatkozoacute sort a bitleacutepteteacutes művelete utaacuten (sziacutenessel jeloumllve) Nos az optimaacutelisnak meghataacuterozott ellenaacutellaacutes 2 385 Ω az aacuteramkoumlri panelra viszont csak 2 374 Ω-ot tudtunk foumlltűzni azt is csak keacutet ellenaacutellaacutes kombinaacutecioacutejaacuteval Ez maacuter neacutemi elteacutereacutest eredmeacutenyez a szaacutemolt eacuterteacutekekhez keacutepest Sokkal nagyobb baj azonban az hogy uacutegy tűnik a szaacutemiacutetaacutesnaacutel felteacutetelezett 22 degC nem volt igaz sokkal inkaacutebb lehetett 23-24 degC a szaacutemiacutetoacutegeacutep asztalaacuten amikor megmeacutertuumlk a termisztor ellenaacutellaacutesaacutet Iacutegy amikor előszoumlr bdquoszoacutelalt megrdquo a hőmeacuterőnk kicsit toumlbbet mutatott mint egy bdquorendesrdquo hőmeacuterő amit ellenőrzeacutesi ceacutellal helyeztuumlnk keacutesőbb az asztalra Keacutenyszermegoldaacuteskeacutent vezettuumlk be a korr nevű korrekcioacutes konstanst viszont ezzel a kijelzett hőmeacuterseacuteklet-eacuterteacutekek szinkronizaacutelhatoacutevaacute vaacuteltak az asztalra

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

helyezett bdquorendesrdquo hőmeacuterő eacuterteacutekeivel Tanulsaacuteg legkoumlzelebb előszoumlr a gyakorlatban hozzaacutefeacuterhető ellenaacutellaacutest hataacuterozzuk meg eacutes annak eacuterteacutekeacutevel szaacutemoljunk illetve meacutereacutesek eacutes ne felteacutetelezeacutesek alapjaacuten kalibraacuteljuk a termisztorunkat eacutes akkor nem a veacutegeacuten kell korrigaacutelnunk A tankoumlnyvben meacutegis szaacutendeacutekosan hagytuk benne ezt a kis malőrt hiszen ilyen baacuterkivel előfordulhat akaacuter ceacuteges munka soraacuten is eacutes ilyenkor bizony azt kell neacuteznuumlnk hogy hogyan lehet korrigaacutelni az amuacutegy joacutel megalkotott bdquorendszertrdquo (Gondoljunk csak arra hogy mi toumlrteacutent akkor amikor a Hubble űrteleszkoacutep optikai elemeit tervezteacutek eacutes hogy hogyan hoztaacutek azt helyre)

3 Hőmeacuterseacuteklet-szabaacutelyozaacutesAz előző alfejezetben peacuteldaacutet laacutethattunk arra hogy hogyan meacuterhetuumlnk hőmeacuterseacutekletet a mikrovezeacuterlővel ha termisztort vaacutelasztunk szenzornak Most tűzzuumlnk ki olyan feladatot amely sokkal egyszerűbben megoldhatoacute eacutes tulajdonkeacuteppen sokkal laacutetvaacutenyosabb is lesz (Ennek fejeacuteben persze itt preciacutezkedeacutesről keveacutesbeacute beszeacutelhetuumlnk)

35 feladat

Keacutesziacutetsuumlnk hűtőventilaacutetoros hőmeacuterseacutekletszabaacutelyozoacutet a koumlvetkező moacutedon ha egy adott teacuterreacutesz hőmeacuterseacuteklete (termisztorral meacuterjuumlk) eleacuteri vagy meghaladja a 33 degC-ot akkor ezt a teacuterreacuteszt kezdje el hűteni a hűtőventilaacutetor Ha a hőmeacuterseacuteklet 28 degC alaacute csoumlkken akkor kapcsoljon ki a ventilaacutetor de ne azonnal hanem paacuter maacutesodperc keacuteslelteteacutessel A hőmeacuterseacuteklet 28 degC alatti mivoltaacutet egy zoumlld LED 33 degC feletti mivoltaacutet piros LED a koumlztes tartomaacutenyt narancssaacuterga LED jelezze [Code48]

A feladat szoumlvegeacuteből azonnal koumlvetkezik hogy a szabaacutelyozaacutes szempontjaacuteboacutel itt is hisztereacutezises keacutetaacutellapotuacute megoldaacutest kell megvaloacutesiacutetanunk Ez maacuter nem jelent kihiacutevaacutest hiszen az alkonykapcsoloacutenaacutel sikeresen kezeltuumlk ezt a probleacutemaacutet (laacutesd [32 feladat] [Hisztereacutezis] alfejezet Code45) Ami most eacuterdekesebb lesz az az a teacuteny hogy egy ventilaacutetort illesztuumlnk az aacuteramkoumlruumlnkbe eacutes azt iraacutenyiacutetjuk a termisztorra Ez fogja jelenteni a feladatban előiacutert bdquoteacuterreacuteszrdquo hőmeacuterseacutekleteacutenek befolyaacutesolaacutesaacutet

Ventilaacutetornak baacutetran vaacutelaszthatunk egy leselejtezett asztali PC taacutepegyseacutegeacuteből kioperaacutelt peacuteldaacutenyt ([Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor] aacutebra) Az ilyen ventilaacutetorok aacuteltalaacuteban 12 V taacutepfeszuumlltseacuteget igeacutenyelnek de a toumlbbseacuteguumlk 5 V taacutepfeszuumlltseacuteggel is szeacutepen muzsikaacutel A szerző kezeacutebe keruumllt ventilaacutetoron a koumlvetkező adatok vannak foumlltuumlntetve bdquoDC12V ndash 012Ardquo Nyilvaacutenvaloacutean 012 A 120 mA-t jelent Tűzzuumlk ki a feladatban előiacutertak melleacute most meacuteg azt a ceacutelt is hogy a ventilaacutetort maacuter kuumlloumln taacutepegyseacuteggel hajtsuk meg hogy lehetőleg ne terheljuumlk agyon a szaacutemiacutetoacutegeacutepuumlnk USB portjaacutet Az internetes forraacutesok zoumlme 500 mA terhelhetőseacuteget ad meg egyetlen USB portra Ebbe meacuteg belefeacuterne a mikrovezeacuterlő a haacuterom LED eacutes a ventilaacutetor aacuteramfelveacutetele is de meacutegis hasznaacuteljunk kuumllső taacutepegyseacuteget Veacuteguumll is eljoumltt az ideje ennek ishellip A tapasztalat amuacutegy is azt mutatja hogy ha a mikrovezeacuterlőt ugyanaz az USB port laacutetja el taacutepfeszuumlltseacuteggel mint amelyik a kuumllső aacuteramkoumlrt akkor a kuumllső aacuteramkoumlrnek maacuter 150-200 mA-es aacuteramfelveacuteteleacuteneacutel a mikrovezeacuterlő egyszerűen elaacutejul vagy egyeacuteb anomaacutelis műkoumldeacutesbe kezd Iacutegy LED-ek villogtataacutesaacuten eacutes egy-keacutet fotokapun tuacutel iraacuteny a kuumllső taacutepellaacutetaacutes

229 aacutebra - Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor

Baacuter a ventilaacutetor 12 V-ot igeacutenyelne mi most az emliacutetettek alapjaacuten kuumllső taacutepegyseacutegkeacutent meacutegis +5 V-ot szolgaacuteltatoacute kis egyseacuteget fogunk felhasznaacutelni Hasznaacutelhatnaacutenk teacutenylegesen +12 V-ot adoacute taacutepot is de előkotorhatnaacutenk fioacutekjaink meacutelyeacuteről a reacutegi mobiltelefonjaink mind a mai napig műkoumldő toumlltőtaacutepegyseacutegeit is De megproacutebaacuteljuk a legolcsoacutebban meguacuteszni Olyan megoldaacutessal amit maacutes logikai aacuteramkoumlroumlkhoumlz is minden tovaacutebbi neacutelkuumll

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

hasznaacutelhatunkhellip

Kereskedelmi forgalomban kaphatoacute olyan haacuteloacutezati feszuumlltseacuteggel műkoumldő adapter amely USB csatlakozoacuteval van felszerelve (laacutesd [USB csatlakozoacutes haacuteloacutezati adapter] aacutebra) Hasznaacuteljunk most ilyet Ezt olyan kaacutebellal kapcsolhatjuk a proacutebapanelra amelyet mi magunk fabrikaacutelunk Szerezzuumlnk egy USB-s nyomtatoacutekaacutebelt vagy vaacutegjunk le egyet egy bdquodoumlgloumltt egeacuterrőlrdquo vagy egyeacuteb toumlnkrement eszkoumlzről A kaacutebel szuumlkseacutegtelenneacute vaacutelt veacutegeacutet hasiacutetsuk foumll eacutes a piros (+5 V) eacutes fekete (GND) belső eacuterre (vouml [USB-kaacutebel belső vezeteacutekei] aacutebra) forrasszunk egy-egy tuumlskeacutet eacutes maacuter keacuteszen is vagyunk A pozitiacutev polaritaacutesuacute tuumlske oldalaacutet eacuterdemes megjeloumllnuumlnk nehogy bajt okozzunk a taacutep eacutes a foumlld figyelmetlenseacutegből eredő felcsereacuteleacuteseacutevel (A nyomtatoacutekaacutebel preparaacutelaacutesaacutenaacutel azeacutert legyuumlnk oacutevatosak Taacutevol-keleti gyaacutertmaacutenyoknaacutel ugyanis maacuter laacutettak olyat hogy szegeacuteny agyondolgoztatott meloacutesok felcsereacutelteacutek a vezeteacutekeket eacutes pont a fekete szigeteleacutesű volt a +5 V-os Ezeacutert multimeacuteterrel mindig taacutejeacutekozoacutedjunk)

2210 aacutebra - USB csatlakozoacutes haacuteloacutezati adapter

A kuumllső taacutepellaacutetaacutessal tehaacutet megvolnaacutenk Soha ne felejtsuumlk azonban minden esetben oumlsszefoumlldelni a kuumllső taacutepot eacutes a mikrovezeacuterlőt ([Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera] aacutebra) E neacutelkuumll a leacutepeacutes neacutelkuumll ugyanis aacuteltalaacuteban nem fognak műkoumldni az alkalmazaacutesaink

2211 aacutebra - Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera

A ventilaacutetort tartalmazoacute aacuteramkoumlr a [A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr] aacutebraacuten laacutethatoacute A taacutepfeszuumlltseacuteg sziacutenes jeloumlleacutese a kuumllső taacutepegyseacutegre utal Az aacuteramkoumlr műkoumldeacutese roppant egyszerű A [Tranzisztorok mint kapcsoloacutek] alfejezetben leiacutertak eacutertelmeacuteben a P0-s port laacutebaival felhuacutezoacute-ellenaacutellaacutes neacutelkuumll is vezeacuterelhetuumlnk pnp-tranzisztorokat Ha meggyőződtuumlnk arroacutel hogy a ventilaacutetor aacuteramfelveacutetele 100 mA-neacutel kevesebb akkor baacutetran hasznaacutelhatjuk a BC212-es univerzaacutelis jelerősiacutető tranzisztort (Esetuumlnkben ez a helyzet aacutell fenn) Nagyobb aacuteramfelveacutetelneacutel teljesiacutetmeacutenytranzisztoros Darlington-kapcsolaacutes vagy egyeacuteb erősiacutetőfokozat ajaacutenlhatoacute

2212 aacutebra - A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

A P00-s laacuteb foumlldre huacutezaacutesaacuteval nyitjuk a tranzisztort amely ilyenkor aacuteramot ad a ventilaacutetor motorjaacutenak Tanuljuk meg hogy minden esetben amikor tekercset tartalmazoacute eszkoumlzt vezeacuterluumlnk feacutelvezetőkkel veacutedődioacutedaacutet vagy veacutedődioacutedaacutekat kell alkalmaznunk ([Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera] aacutebra) Ennek oka az hogy amikor a tekercs elenged akkor az egy az addigi aacuteramiraacutennyal ellenteacutetes iraacutenyuacute feszuumlltseacutegimpulzust generaacutel az aacuteramkoumlrben (Ezt egyeacutebkeacutent Laplace-transzformaacutecioacuteval nagy eacutelvezet kiszaacutemolni) A veacutedődioacuteda szerepe az hogy ezt az impulzust levezesse Ennek hiaacutenyaacuteban szaacutemiacutetanunk kell a zaacuteroacuteiraacutenyuacute feacutelvezető-alkatreacutesz vagy -alkatreacuteszek aacutetuumlteacuteseacutere Veacutedődioacutedaacutenak gyengeaacuteramuacute haacuteloacutezatokban gyakorlatilag baacutermilyen dioacutedaacutet vaacutelaszthatunk Ha azonban igen gyors műkoumldeacutesre van szuumlkseacuteg mert peacuteldaacuteul nagy frekvenciaacuteval műkoumldtetuumlnk leacuteptetőmotorokat akkor Schottky-dioacutedaacutek hasznaacutelata javasolt

2213 aacutebra - Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera

Az asztali PC taacutepegyseacutegeacuteből kiműtoumltt ventilaacutetor egyeacutebkeacutent nem igeacutenyel veacutedődioacutedaacutet mert elektromosan kommutaacutelt megoldaacutest tartalmaz De ha ilyen reacuteszleteket nem tudunk az egyseacutegről akkor a dioacutedaacutet soha ne hagyjuk el Aacutertani semmikeacuteppen sem aacutertunk vele az aacuteramkoumlrnek hiaacutenya viszont nagy kaacutert okozhat

A hőmeacuterseacuteklet meacutereacuteseacutere ismeacutet a KTY81-120-as termisztort hasznaacuteljuk Pont uacutegy ahogy az az [A termisztor soros kapcsolaacutesban] aacutebraacuten laacutethatoacute Az aacuteramkoumlri panelunkon ugyanazt a 2 374 Ω-os ellenaacutellaacutes-kombinaacutecioacutet hasznaacuteljuk mint az előző alfejezetben A mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutet (0 csatorna) ismeacutet a termisztorra kapcsoljuk Digitaacutelis multimeacuteterrel a haacuteloacutezati USB-s adapter kimeneti egyenfeszuumlltseacutegeacutet 505 V-nak meacutertuumlk A jelszintek szaacutemiacutetaacutesaacutera keacutesziacutetett KTY81-120xls faacutejlban is ezt aacutelliacutetottuk be a feszuumlltseacutegosztoacute parameacutetereineacutel Ezekkel az adatokkal a [A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek]ban bemutatott eredmeacutenyeket kapjuk

222 taacuteblaacutezat - A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek

T degC UR(T) V D dec D hex D felső 8 bitje hex

28 1522 2 493 9BD 9B

33 1563 2 560 A00 A0

Az AD-aacutetalakiacutetaacutes most is uacutegy fog toumlrteacutenni mint az alkonykapcsoloacutenaacutel ([Egyszerű AD-aacutetalakiacutetaacutes] alfejezet [31 feladat] Code43) azaz a 12-bites eacuterteacuteknek csak a felső 8 bitjeacutet hasznaacuteljuk foumll mert ezekben is adoacutedik akkora

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

kuumlloumlnbseacuteg ami azonosiacutethatoacutevaacute teszi a hőmeacuterseacuteklet-eacuterteacutekekhez tartozoacute feszuumlltseacutegszinteket A koacutedban a koraacutebban maacuter ismertetett megoldaacutes miatt az AD-aacutetalakiacutetoacute konfiguraacutecioacutejaacutet itt maacuter nem magyaraacutezzuk A koacutedkoumlnyvtaacuterban viszont teljes reacuteszletesseacuteggel szerepelnek a kommentek

A hőmeacuterseacuteklet-tartomaacutenyok jeloumlleacuteseacutere 3 LED-et hasznaacutelunk ezeket a keacutenyelmesebb helykihasznaacutelaacutes eacuterdekeacuteben a P2-es port 1 3 eacutes 5 laacutebaacutera koumltjuumlk termeacuteszetesen a megfelelő előteacutet-ellenaacutellaacutessal Ehhez a leacutepeacuteshez maacuter nem eacutereztuumlk szuumlkseacutegesnek kuumlloumln aacuteramkoumlri rajz keacutesziacuteteacuteseacutet hiszen a tankoumlnyvben eddig leiacutertak alapjaacuten a LED-ek bekoumlteacuteseacutenek maacuter magaacutetoacutel eacutertetődőnek kell lennie

A hardveres uumlgyletek taacutergyalaacutesa utaacuten joumljjenek most a szoftveres finomsaacutegok A LED-es kijelzeacutes kuumlloumln kezelhető ez haacuteromaacutellapotuacute rendszert jelent de fuumlggetlen lesz a ventilaacutetor kapcsolgataacutesaacutetoacutel A ventilaacutetor bekapcsolt aacutellapotaacutehoz kuumlloumln jelzőbitet rendeluumlnk (forog) hogy teljesiacuteteni tudjuk a keacutesleltetett kikapcsolaacutest a visszahűteacutes utaacuten Az alsoacute hőmeacuterseacutekletszinthez a [A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek]ban a 9B hexadecimaacutelis eacuterteacutek tartozik A programban majd enneacutel 1-gyel nagyobb eacuterteacuteket adunk meg hataacuternak mert a kisebb relaacutecioacutet hasznaacuteljuk az oumlsszehasonliacutetaacuteskor (Veacuteletlenuumll uacutegy joumltt ki a leacutepeacutes hogy 1 degC kuumlloumlnbseacuteg igen joacute koumlzeliacuteteacutessel egyseacutegnyi elteacutereacutest jelent a 8 biten aacutebraacutezolt eacuterteacutekek koumlzoumltt) A hőmeacuterseacuteklet-szabaacutelyozaacuteshoz melleacutekeluumlnk folyamataacutebraacutet de abban csak a hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacuteseacutet taglaljuk A LED-ek kapcsolgataacutesaacutet sajaacutetos moacutedon de egyeacutertelműen jeloumlljuumlk laacutesd [A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese] aacutebra

2214 aacutebra - A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Az alkalmazaacutes laacutetvaacutenyossaacutega elleneacutere a koacuted roumlvidnek nevezhető A joacute oumlreg DELAY szubrutinunkat most sem tuumlntetjuumlk foumll

Code48asmORG 0060hvoltage DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejagreen BIT P25 A zoumlld LED bitjeorange BIT P23 A narancssaacuterga LED bitjered BIT P21 A piros LED bitjefan BIT P00 A ventilaacutetor kapcsoloacutebitje (0=ON 1=OFF)hideg EQU 09Ch Az alsoacute hőmeacuterseacuteklet-hataacuternaacutel (28 C) 1-gyel nagyobb eacuterteacutek (Majd a kisebb (lt) relaacutecioacutera jaacutetszunkmeleg EQU 0A0h A felső hőmeacuterseacuteklet-hataacuter (33 C) eacuterteacutekeforog BIT 00h A ventilaacutetor bekapcsolt aacutellapotaacutet őrző jelzőbit

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

MAINMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutetCLR forog A ventilaacutetor nem forognextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnkJB SCONV$MOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageAMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-etADD Avoltage A-ban maacuter a helyes feszuumlltseacutegeacuterteacutek lesz az oumlsszeadaacutes utaacutenCJNE Ahidegeval1 Kisebb a hőmeacuterseacuteklet mint az alsoacute hataacutereval1JC cold Ha igen ugrunk a hideg helyzet kezeleacuteseacutehezCJNE Amelegeval2 Nagyobbegyenlő a hőmeacuterseacuteklet mint a felső hataacutereval2JNC warm Ha igen ugrunk a meleg helyzetet kezelniSETB green Ide a koumlztes esetben csorog a programSETB red Zoumlld eacutes piros LED-ek OFFCLR orange Narancs LED ONMOV A50 05 s vaacuterakozaacutesCALL DELAYJMP next Ugraacutes vissza meacuterniwarm A meleg helyzet kezeleacuteseSETB orange Narancs eacutes zoumlld LED OFFSETB greenCLR red Piros LED ONJNB forogbekapcs Ha meacuteg nem forog a ventilaacutetor akkor bekapcsoljukMOV A50 Kuumlloumlnben 05 sCALL DELAY vaacuterakozaacutes eacutesJMP next iraacuteny vissza meacuternibekapcsCLR fan Bekapcsoljuk a ventilaacutetortSETB forog Beaacutelliacutetjuk a bekapcsolt aacutellapot jelzőbitjeacutetMOV A200 2 s vaacuterakozaacutesCALL DELAYJMP next Iraacuteny vissza meacuternicold A hideg helyzet kezeleacuteseSETB orange Narancs eacutesSETB red piros LED-ek OFFCLR green Zoumlld LED ONJB forogfujmeg Ha be van kapcsolva a ventilaacutetor akkor nem kapcsoljuk ki azonnal Kis vaacuterakozaacutes joumlnMOV A50 Kuumlloumlnben 05 sCALL DELAY vaacuterakozaacutes majdJMP next Iraacuteny vissza meacuternifujmegMOV A200 4 x 2 s vaacuterakozaacutes majdCALL DELAYCALL DELAYCALL DELAYCALL DELAYSETB fan a ventilaacutetor kikapcsolaacutesaCLR forog A kikapcsolt aacutellapot beaacutelliacutetaacutesaJMP next Iraacuteny vissza meacuterni

Az alkalmazaacutes gyakorlati kiproacutebaacutelaacutesa soraacuten azt tapasztaltuk hogy amikor a ventilaacutetor lehűti a termisztort eacutes a hőmeacuterseacuteklet uacutejra eleacuteri az alsoacute hataacutert akkor a ventilaacutetor tovaacutebbi 8 maacutesodperces uumlzeme utaacuten meacuteg előfordul hogy a hőmeacuterseacuteklet uacutejra foumllkuacuteszik az aacutetmeneti tartomaacutenyba de utaacutena maacuter szeacutepen stabilizaacuteloacutedik az alacsony hőmeacuterseacuteklet Ezt a zoumlld eacutes narancssaacuterga LED-ek ki-be kapcsoloacutedaacutesa mutatja Olyan is előfordult hogy a narancssaacuterga LED meacuteg keacutetszer-haacuteromszor is foumllvillant egyre roumlvidebb ideig mire a zoumlld LED feacutenye aacutellandoacutesult

Created by XMLmind XSL-FO Converter

23 fejezet - MegvilaacutegiacutetaacutesszabaacutelyozoacuteA [Alkonykapcsoloacute] fejezetben alkonykapcsoloacutet keacutesziacutetettuumlnk Maacuter az is szabaacutelyozaacutes volt raacuteadaacutesul hisztereacutezissel de meacuteg nem bdquovolt az igazirdquo Ezeket a szavakat azeacutert hasznaacuteljuk mert keacutet jelszintneacutel billent a rendszer ide vagy oda aztaacuten ezzel el is inteacuteztuumlk a szabaacutelyozaacutest Igaz pontosan ez volt a feladat ([32 feladat]) iacutegy szoacute nem eacuterheti a haacutez elejeacutet Amit viszont most fogunk alkotni az maacuter sokkal kifinomultabb lesz Folyamatos feszuumlltseacutegkoumlvető szabaacutelyozaacutest fogunk megvaloacutesiacutetani Elvileg mindent tudunk is hozzaacute hardveres uacutejdonsaacuteg nem lesz Az algoritmus lesz az eddigiektől elteacuterő

36 feladat

Keacutesziacutetsuumlnk folytonos uumlzemmoacuteduacute megvilaacutegiacutetaacutesszabaacutelyozoacutet A feacutenyforraacutes 3 feheacuter LED-ből aacutelljon melyek egy feacutenyeacuterzeacutekelőre iraacutenyulnak A 3 LED-del tartsuk aacutellandoacute szinten a megvilaacutegiacutetaacutest a szenzor poziacutecioacutejaacuteban (a fizikailag lehetseacuteges hataacuterokon beluumll) [Code49]

A szenzor aacuteramkoumlre pontosan ugyanaz lesz mint amit a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten bemutattunk azzal a kuumlloumlnbseacuteggel hogy most nem lesz szuumlkseacuteguumlnk az emitter-ellenaacutellaacutessal paacuterhuzamosan kapcsolt kondenzaacutetorra Ennek oka eacuteppen a gyors feszuumlltseacutegkoumlveteacutesben keresendő a kondenzaacutetor keacuteslelteteacutest okozna jel stabilizaacuteloacutedaacutesaacuteban ami feacutelrevinneacute a szabaacutelyozaacutesunkat A haacuterom LED-hez kuumlloumln aacuteramkoumlri rajz megadaacutesaacutet most is foumlloumlslegesnek tartjuk ezt az olvasoacute maacuter maga is foumll tudja eacutepiacuteteni az eddigiek utaacuten A feszuumlltseacuteg meacutereacutese az emitter-ellenaacutellaacuteson pontosan ugyanuacutegy toumlrteacutenik mint Code44-ben eacutes Code45-ben Ami most izgalmasabb lesz az az algoritmus Az bdquoizgalmasrdquo szoacute persze relatiacutev annyit mindenesetre elmondhatunk hogy ebben a tankoumlnyvben ilyet meacuteg nem csinaacuteltunk Műkoumldjoumln ugyanis az alkalmazaacutes uacutegy hogy ha a szenzor besugaacuterzaacutesa adott szint alaacute csoumlkken akkor fokozzuk a LED-ek feacutenyerősseacutegeacutet Mindaddig amiacuteg el nem eacuterjuumlk a kiacutevaacutent besugaacuterzaacutesi szintet Ha a koumlrnyezeti feacutenyviszonyok miatt a szenzor besugaacuterzaacutesa emelkedik akkor a LED-ek feacutenyerősseacutegeacutet csoumlkkentjuumlk Mindaddig amiacuteg el nem eacuterjuumlk a kiacutevaacutent szintet Egy nagyon keskeny hisztereacutezisnek helyet hagyunk a szoftverben haacutetha a gyakorlati tesztek soraacuten szuumlkseacutegesseacute vaacutelik A noumlveleacutes eacutes a csoumlkkenteacutes leacutepeacutesről leacutepeacutesre toumlrteacutenik eacutes ez lesz a fő kuumlloumlnbseacuteg a mostani megoldaacutes eacutes az egyszerű alkonykapcsoloacute koumlzoumltt A LED-ek feacutenyerősseacutegeacutenek vaacuteltoztathatoacutesaacutegaacutet PWM-jellel oldjuk meg

A gyakorlati megvaloacutesiacutetaacutes soraacuten a LED-ek a proacutebapanelon kb 6 cm-re helyezkedtek el a fototranzisztortoacutel (tokozaacutes homlokpontjaacutetoacutel tokozaacutes homlokpontjaacuteig laacutesd [A LED-ek elhelyezkedeacutese a fototranzisztorral szemben] aacutebra) Mindhaacuterom LED-et a fototranzisztorra iraacutenyiacutetottuk A LED-ek aacutellandoacute bekapcsolt aacutellapotaacuteban a Code43 programmal meacutertuumlk a fototranzisztor emitter-ellenaacutellaacutesaacuten a feszuumlltseacuteget (Code43-ba eacuteppen csak a LED-ek bekapcsolaacutesaacutenak soraacutet szuacutertuk be) Azt tapasztaltuk hogy ha a LED-ek ellenaacutellaacutesaacutet 1 kΩ-nak vaacutelasztjuk akkor a meacutert feszuumlltseacuteg 24 V Ezzel az eacuterteacutekkel eleacutegedettek lehettuumlnk mert nem eacuteri el a maximaacutelis eacuterteacuteket de koumlzel aacutell ahhoz

231 aacutebra - A LED-ek elhelyezkedeacutese a fototranzisztorral szemben

A PWM-jel beaacutelliacutetaacutesainaacutel nagyobb frekvenciaacutet vaacutelasztunk mint a [PWM-jelek] fejezetben bemutatott megoldaacutesoknaacutel Vessuumlnk uacutejra egy pillantaacutest a [A PWMCON SFR parameacuteterei]ra eacutes a [A PWM-generaacutetor 1 uumlzemmoacutedja] aacutebraacutera A

MOV PWMCON00010011b

beaacutelliacutetaacutes a sziacutenes teacutetelek sorrendjeacuteben azt jelenti hogy (eacuterdektelen bit) 1 PWM-uumlzemmoacuted nincs tovaacutebbi frekvenciaosztaacutes a mag oacuterajeleacutet hasznaacuteljuk Legyen a PWM1HPWM1L regiszterpaacuter eacuterteacuteke 0800h Ez decimaacutelisan 2 048-at jelent A jel frekvenciaacuteja ezek szerint 16 777 216 Hz 2 048 = 8 192 Hz lesz eacutes ez is marad mert nem alkalmazunk tovaacutebbi frekvenciaosztoacutet A LED-ek feacutenyerősseacutegeacutet pedig nem maacutessal mint a PWM-jel kitoumllteacutesi eacuterteacutekeacutevel fogjuk szabaacutelyozni (Ne felejtsuumlk hogy alacsony jelszint eseteacuten vilaacutegiacutetanak a LED-

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

ek) A kitoumllteacutesi teacutenyezőhoumlz 129 fokozatot rendeluumlnk A PWM0HPWM0L regiszterpaacuter eacuterteacutekeacutet oly moacutedon fogjuk aacutelliacutetani hogy az a koumlvetkező eacuterteacutekeket vegye foumll 0000h 0010h 0020h hellip 07F0h 0800h Vegyuumlk eacuteszre hogy ezeknek a neacutegyjegyű hexadecimaacutelis szaacutemoknak csak a keacutet koumlzeacutepső szaacutemjegyeacutet eacuterinti a fokozatok aacutelliacutetaacutesa (zoumllddel kiemelve) iacutegy ez az elkuumlloumlniacutetett eacuterteacutek egy baacutejton taacuterolhatoacute sőt csak 0-toacutel 80h-ig azaz 128-ig terjed A kitoumllteacutesi teacutenyező ilyeteacuten beaacutelliacutetaacutesaacutet hasonloacutean fogjuk megoldani mint az AD-jel feacutelbaacutejtjainak kiemeleacuteseacutet eacutes azokboacutel uacutejabb baacutejt oumlsszeszereleacuteseacutet A [A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese] aacutebra erre mutat peacuteldaacutet konkreacutet eacuterteacutekkel (6Ah) ahol a kitoumllteacutesi teacutenyező vaacuteltozoacutejaacutet a funkcioacutejaacutenak megfelelően lumint-nak neveztuumlk el (Luminous Intensity magyarul feacutenyerősseacuteg)

232 aacutebra - A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese

A kitoumllteacutesi teacutenyező beaacutelliacutetaacutesaacutet roumlgtoumln komplett szubrutinkeacutent (PWMVALUE) mutatjuk be az alaacutebbiakban

A PWM-jel kitoumllteacutesi teacutenyezőjeacutet beaacutelliacutetoacute szubrutin PWMVALUEMOV PWMCON0 A PWM-jel leaacutellMOV Alumint A-ba toumlltjuumlk lumint eacuterteacutekeacutetANL A11110000b Megtartjuk a felső feacutelbaacutejtot toumlroumlljuumlk az alsoacutetSWAP A Megcsereacuteljuumlk a keacutet feacutelbaacutejtotMOV PWM0HA A kapott eacuterteacuteket betesszuumlk a PWM0H regiszterbeMOV Alumint Ismeacutet A-ba toumlltjuumlk lumint eacuterteacutekeacutetANL A00001111b Megtartjuk az alsoacute feacutelbaacutejtot toumlroumlljuumlk a felsőtSWAP A Megcsereacuteljuumlk a keacutet feacutelbaacutejtotMOV PWM0LA A kapott eacuterteacuteket betesszuumlk a PWM0L regiszterbeMOV PWMCON00010011b Bekapcsoljuk a PWM-jeletRET

A PWM-jel kitoumllteacutesi teacutenyezőjeacutenek szubrutinkeacutent valoacute alkalmazaacutesa javiacutetja a főprogram aacutettekinthetőseacutegeacutet A koacuted e neacutelkuumll sem lenne bonyolult vagy zavaros de eacuteppen ideje a bdquostrukturaacutelt assemblyrdquo iraacutenyaacuteba mutatoacute programiacuteraacutes feleacute mozdulnunk

Ha maacuter ilyen nagy kedvet kaptunk a szubrutinokhoz iacuterjuk meg ilyen formaacuteban az AD-aacutetalakiacutetaacutesi reacuteszt is A koacutedreacuteszlet nagyon-nagyon hasonliacutet a [Egyszerű AD-aacutetalakiacutetaacutes] alfejezetben megadott a 12-bites eacuterteacutekből a felső 8 bitet levaacutelasztoacute reacuteszhez de a rend kedveacuteeacutert teljes terjedelmeacuteben koumlzoumlljuumlk magaacutet a szubrutint legfoumlljebb a kommenteket fogjuk roumlvidebbre Az AD-eacuterteacutek felső 8 bitje visszateacutereacuteskor az akkumulaacutetorban talaacutelhatoacute ez lesz a parameacuteteraacutetadaacutes a rutin eacutes főprogram koumlzoumltt

AD-aacutetalakiacutetaacutes eacutes a jeleacuterteacutek felső 8 bitjeacutenek betoumllteacutese az akkumulaacutetorba MEASURESETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnkJB SCONV$ MOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageAMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felső

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

SWAP A 4-etADD Avoltage A-ban most maacuter a kiacutevaacutent jeleacuterteacutek leszRET

A [36 feladat] megoldaacutesaacutet jelentő koacuted a keacutet szubrutinnal maacuter rendkiacutevuumll toumlmoumlrnek fog hatni Az eleacuterni kiacutevaacutent megvilaacutegiacutetaacutesi szint megadaacutesaacutehoz a koacutedban az EQU fordiacutetoacutei direktiacutevaacutet hasznaacuteljuk a keacutet eacuterteacutek pedig a level1 eacutes level2 neacutevre fog hallgatni Egymaacuteshoz keacutepesti elteacutereacutesuumlk jelenti a hisztereacutezist Ha kuumlloumlnbseacuteguumlk pontosan 1 akkor level1 eacuterteacuteke jelenti az eleacuterni kiacutevaacutent szintet A P27-es laacutebon megjelenő PWM-jelet a C bit segiacutetseacutegeacutevel maacutesoljuk aacutet a haacuterom vilaacutegiacutetaacutesra hasznaacutelt feheacuter LED-nek megfelelő portbitre (Ezeknek a biteknek a szaacutemozaacutesa most is a keacutenyelmesebb helykihasznaacutelaacutes eacuterdekeacuteben alakult uacutegy ahogy az az alaacutebbiakban laacutethatoacute)

Code49asmORG 0060h A teacutenyleges programkoacuted kezdetelumint DATA 030h A feacutenyerősseacuteg vaacuteltozoacutejavoltage DATA 031h A meacutert feszuumlltseacuteglevel1 EQU 80 Az eleacuterni kiacutevaacutent feszuumlltseacutegszint Ha enneacutel kisebbet meacuteruumlnk noumlveljuumlk a LED-ek feacutenyerősseacutegeacutetlevel2 EQU 81 Ha ezt a feszuumlltseacutegszintet eleacutertuumlk (vagy enneacutel nagyobbat) csoumlkkentjuumlk a LED-ek feacutenyerősseacutegeacutetMAINMOV ADCCON110001100b Az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa Bekapcsolaacutes eacutes 4 oacuterajelciklus hagyaacutesa az aacutetalakiacutetaacutesra 0 csatornaMOV PWM1H008h A PWM-generaacutetor konfiguraacutelaacutesaMOV PWM1L000h Az alapfrekvencia meghataacuterozaacutesa 0800h = = 2048 azaz f = 167772162048 Hz = = 8192 HzMOV lumint64 Kezdeti PWM-eacuterteacutek (0-toacutel 128-ig mehet)CALL PWMVALUE A PWM-jelhez szuumlkseacuteges eacuterteacutekek beiacuteraacutesa a regiszterekbe SzubrutinsignalMOV CP27 A PWM-jel leemeleacutese a P27 bitrőlMOV P21C Ennek az eacuterteacuteknek a kirakaacutesa a haacuteromMOV P23C LED portbitjeacutereMOV P25CCALL MEASURE Feszuumlltseacutegmeacutereacutes AD-aacutetalakiacutetaacutessalCJNE Alevel1eval3 Ha a jelszint level1 alatt van akkoreval3JC lighten noumlveljuumlk a feacutenyerőtCJNE Alevel2eval4 Ha a jelszint level2 vagy annaacutel nagyobbeval4JNC darken csoumlkkentjuumlk a feacutenyerőtJMP signal Uacutejra meacuteruumlnkdarkenMOV Alumint Soumlteacutetiacutetuumlnk a LED-enCJNE A128eval1 Eleacutert maacuter a maximumot a kitoumllteacutesi teacutenyezőeval1JNC signal Ha igen visszaugrunkINC lumint Ha nem noumlveljuumlk a kitoumllteacutesi teacutenyezőt azaz csoumlkkentjuumlk a LED-ek feacutenyerősseacutegeacutetCALL PWMVALUE A PWM-jel beaacutelliacutetaacutesaacutenak rutinja koumlvetkezikJMP signal Ugraacutes vissza meacuternilightenMOV Alumint Vilaacutegosiacutetunk a LED-enCJNE A1eval2 Eleacuterte maacuter a minimumot a kitoumllteacutesi teacutenyezőeval2JC signal Ha igen (0lt1) akkor visszaugrunkDEC lumint Ha nem akkor csoumlkkentjuumlk a kitoumllteacutesi teacutenyezőt azaz noumlveljuumlk a LED-ek feacutenyerősseacutegeacutetCALL PWMVALUE A PWM-jel beaacutelliacutetaacutesaacutenak rutinja koumlvetkezikJMP signal Ugraacutes vissza meacuterni

Lehet hogy első laacutetaacutesra nem tűnik biztosnak az hogy a PWM-jel frekvenciaacutejaacutet tartani tudja a főprogram a bitek maacutesolgataacutesaacuteval eacutes a szubrutinok hiacutevogataacutesaacuteval de a gyakorlati proacuteba azonnal megadja a vaacutelaszt A program

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

meglehetősen gyorsan fut iacutegy semmifeacutele perioacutedusveszteacutes vagy elcsuacuteszaacutes nem fog bekoumlvetkezni A PWM-jel 8 192 Hz-es frekvenciaacuteja eltoumlrpuumll az ADuC 842-es default 2 097 152 Hz-es oacuterajele mellett iacutegy mindenre jut idő Leacutenyegesen hosszabb főprogram termeacuteszetesen maacuter okozhatna probleacutemaacutet a frekvencia tartaacutesaacuteban

Created by XMLmind XSL-FO Converter

24 fejezet - Leacuteptetőmotor vezeacuterleacuteseA leacuteptetőmotorok nagy aacuteltalaacutenossaacutegban olyan egyenaacuteramuacute villamos motorok melyek fő feladata nem a folyamatos forgaacutes hanem meghataacuterozott szoumlgelfordulaacutessal jaacuteroacute leacutepeacutesek veacutegrehajtaacutesa Haacuterom fő tiacutepusukat szokaacutes megkuumlloumlnboumlztetni vaacuteltozoacute reluktanciaacutejuacute (tipikusan 75deg 15deg leacutepeacuteskoumlzzel) aacutellandoacute maacutegnesű (tipikusan 18deg 75deg 15deg 30deg leacutepeacuteskoumlzzel) eacutes hibrid leacuteptetőmotorok (tipikusan 09deg eacutes 18deg leacutepeacuteskoumlzzel) A leacuteptetőmotorok feleacutepiacuteteacuteseacutenek taacutergyalaacutesa nem ennek a tankoumlnyvnek a feladat sokkal inkaacutebb azok vezeacuterleacutese lesz az A leacuteptetőmotorok tiacutepusainak feleacutepiacuteteacuteseacutenek uumlzemmoacutedjaacutenak eacutes vezeacuterleacuteseacutenek hatalmas szakirodalma van Roumlvid oumlsszefoglaloacutet talaacutelunk peacuteldaacuteul a [8] eacutes [9] szakkoumlnyvben eacutes szeacutep illusztraacutecioacutekkal ellaacutetott magyaraacutezatokat a [10] weboldalon

A leacuteptetőmotor forgoacutereacuteszeacutet az aacutelloacutereacuteszre telepiacutetett jellemzően egyenaacuteramuacute tekercsekkel veszik koumlrbe A tekercsek megfelelő sorrendű be- eacutes kikapcsolaacutesaacuteval eleacuterhető hogy a forgoacutereacutesz mindig meghataacuterozott meacuterteacutekű elfordulaacutest veacutegezzen Ezekben a motorokban kefeacutere nincsen szuumlkseacuteg Egy-egy meghataacuterozott poziacutecioacuteba valoacute beaacutellaacuteskor alakul ki a maacuter emliacutetett szakszoacuteval a minimaacutelis maacutegneses reluktancia Ilyenkor a legroumlvidebbek a maacutegneses erővonalak

A leacuteptetőmotorokat előszeretettel hasznaacuteljaacutek mechatronikai alkalmazaacutesokban robotkarokban olvasoacutefejek iacuteroacutefejek mozgataacutesaacutenaacutel nyomtatoacutekban rajzgeacutepekben aacuteramkoumlrmaroacute geacutepekben preciacutezioacutes esztergaacutekban stb Preciacutezioacutes alkalmazaacutesokhoz jellemzően hibrid leacuteptetőmotorokat hasznaacutelnak Ezekre igaz az az aacutelliacutetaacutes hogy ha a motor aacutelloacutereacuteszeacuten n faacutezis (tekercspaacuter vagy ketteacuteosztott tekercs) a forgoacutereacuteszeacuten pedig m fog talaacutelhatoacute akkor a teljes koumlrbefordulaacutes nm leacutepeacutesből aacutell

Ebben a tankoumlnyvben keacutet szaacutemunkra fontos elvi tiacutepus roumlvid leiacuteraacutesaacutet adjuk meg hasznaacutelni pedig bipolaacuteris leacuteptetőmotort fogunk

1 Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorokAz aacuteramiraacuteny szempontjaacuteboacutel a leacuteptetőmotorok keacutet nagy osztaacutelyaacutet keacutepezik az unipolaacuteris eacutes a bipolaacuteris leacuteptetőmotorok Az unipolaacuteris szoacute azt jelenti hogy baacutermely tekercsről legyen is szoacute abban uumlzem koumlzben az aacuteram iraacutenya nem vaacuteltozik meg Ki- eacutes bekapcsolaacutes termeacuteszetesen toumlrteacutenhet eacutes toumlrteacutenik is A [Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra unipolaacuteris leacuteptetőmotor veacutegtelenuumll leegyszerűsiacutetett szemleacuteleteacutet mutatja A forgoacutereacuteszt jelkeacutepező nyilat itt aacutellandoacute maacutegneskeacutent kell eacutertelmeznuumlnk Az egyes vezeacuterlőjelek (1a 1b 2a 2b) alacsony feszuumlltseacutegszintre (foumlldre) toumlrteacutenő aacutelliacutetaacutesaacuteval mindig egyetlen tekercsben indul meg az aacuteram azaz egyetlen tekercs műkoumldik elektromaacutegneskeacutent A toumlbbi vezeacuterlőjel ekoumlzben magas feszuumlltseacutegszinten uumll Az aacutebraacuten a nyiacutellal jelkeacutepezett forgoacutereacutesz egyszeri koumlrbefordiacutetaacutesaacutehoz a koumlvetkező jelsorozatra van szuumlkseacuteg (a nevezett jel mindig foumlldpotenciaacutelt jelent) 1a 2a 1b 2b A jelsorozat ismeacutetleacuteseacutenek kezdeteacuten a koumlrbefordulaacutes megtoumlrteacutent

241 aacutebra - Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

Ha mindig csak egyetlen tekercs műkoumldik elektromaacutegneskeacutent akkor egeacuteszleacutepeacuteses uumlzemmoacutedroacutel beszeacuteluumlnk Ha ellenben keacutet szomszeacutedos tekercs is elektromaacutegneskeacutent uumlzemel akkor a forgoacutereacutesz a kettő koumlzeacute fog beaacutellni eacutes feacutelleacutepeacuteses uumlzemmoacuted valoacutesul meg A szemleacuteltetőaacutebraacuten az ehhez szuumlkseacuteges jelsorozat 1a 1a-2a 2a 2a-1b 1b 1b-2b 2b 2b-1a A jelsorozat ismeacutetleacuteseacutenek első elemeacuteneacutel lesz a koumlrbefordulaacutes teljes

Unipolaacuteris leacuteptetőmotort olcsoacuten beszerezni (esetleg toumlnkrement heacutetkoumlznapi eszkoumlzből kioperaacutelni) meglehetősen neheacutezkes Eacuterdekes moacutedon ritkaacuten fordul elő otthoni eszkoumlzeinkben Bipolaacuteris leacuteptetőmotort azonban igen joacute eseacutellyel talaacutelunk reacutegebbi CD-iacuteroacutekban eacutes tintasugaras nyomtatoacutekban Mindkeacutet eszkoumlzben a fej mozgataacutesaacutehoz hasznaacuteljaacutek (Ezekben esetben preciacutezioacutes alkalmazaacutesroacutel van szoacute iacutegy gyaniacutethatoacutean hibrid leacuteptetőmotorokkal talaacutelkozunk)

A [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra bipolaacuteris leacuteptetőmotor leegyszerűsiacutetett modelljeacutet mutatja A forgoacutereacuteszt jelkeacutepező nyilat itt is aacutellandoacute maacutegneskeacutent kell eacutertelmeznuumlnk Enneacutel az elrendezeacutesneacutel nincsen szuumlkseacuteg kuumlloumln taacutepvezeteacutekre viszont az aacuteramiraacuteny műkoumldeacutes koumlzben vaacuteltozni fog a tekercsekben Iacutegy aacutellandoacute aacuteramerősseacuteget felteacutetelezve haacuterom eset aacutellhat elő egyik iraacutenyba folyik az aacuteram maacutesik iraacutenyba folyik az aacuteram nem folyik aacuteram A [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten bemutatott modell szerint a teljes koumlrbefordulaacuteshoz egeacuteszleacutepeacuteses uumlzemmoacutedban a koumlvetkező jelszintek szuumlkseacutegesek (a toumlbbi nulla szinten uumll) (ndash1a +1b) (ndash2a +2b) (+1a ndash1b) (+2a ndash2b) Feacutelleacutepeacuteses uumlzemmoacuted itt is megvaloacutesiacutethatoacute (ndash1a +1b)

(ndash1a +1b ndash2a +2b) (ndash2a +2b) (ndash2a +2b +1a ndash1b) (+1a ndash1b) (+1a ndash1b +2a ndash2b) (+2a ndash2b) (+2a ndash2b ndash1a +1b) Az előbbi keacutet jelsorozatnaacutel a negatiacutev előjel csak hangsuacutelyozza a polaritaacutest a negatiacutev jelet kiveacutetelesen azonosiacutethatjuk a foumlldpotenciaacutellal (GND) is Figyeljuumlk meg a [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten hogy keacutet-keacutet tekercs nem fuumlggetlen egymaacutestoacutel iacutegy ezekneacutel sokkal inkaacutebb indokolt a tekercspaacuter megnevezeacutes

242 aacutebra - Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve

Leacuteptetőmotorok parameacutetereineacutel talaacutelkozunk meacuteg a keacutetfaacutezisuacute haacuteromfaacutezisuacute stb szakszavakkal is Ez azt jelenti hogy haacuteny fuumlggetlen tekercset (vagy tekercspaacutert) tartalmaz a motor Ennek eacutertelmeacuteben a [Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten laacutethatoacute seacutema neacutegyfaacutezisuacute (de unipolaacuteris) leacuteptetőmotort a [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten laacutethatoacute seacutema viszont csak keacutetfaacutezisuacute (de bipolaacuteris) leacuteptetőmotort szemleacuteltet

2 Bipolaacuteris leacuteptetőmotorok vezeacuterleacuteseA bipolaacuteris leacuteptetőmotorok tekercsein mindkeacutet iraacutenyban folyhat aacuteram Ennek biztosiacutetaacutesa nem magaacutetoacutel eacutertetődő de valakinek egyszer kipattant az agyaacuteboacutel az a megoldaacutes amit ma H-hiacutednak nevezuumlnk A [H-hiacuted] aacutebraacuten a H-hiacuted leacutenyegi vaacutezlata laacutethatoacute baacutermifeacutele ellenaacutellaacutesok neacutelkuumll A H-hiacuteddal egyetlen tekercsen tudjuk vaacuteltoztatni az aacuteram iraacutenyaacutet Ha az A jelszint alacsony eacutes a B magas akkor a bal felső eacutes a jobb alsoacute tranzisztor kinyit a maacutesik kettő lezaacuter Ekkor a tekercsen az aacutebra szerinti elrendezeacutesben jobbra folyik az aacuteram Amennyiben a keacutet jelszintet megcsereacuteljuumlk A-n eacutes B-n akkor az aacuteram a tekercsen balra folyik Azonos jelszintneacutel nem folyik aacuteram a tekercsen Nagyon fontos hogy veacutedődioacutedaacutek alkalmazaacutesaacutera itt is szuumlkseacuteg van Ezek hiaacutenyaacuteban a tekercs aacuteramaacutenak kikapcsolaacutesakor vagy eacuteppen iraacutenyaacutenak megvaacuteltoztataacutesakor a keletkező feszuumlltseacutegimpulzus aacutetuumltheti a tranzisztorokat

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

243 aacutebra - H-hiacuted

Annyi megjegyzeacutest meacuteg szeretneacutenk a H-hiacutedhoz hozzaacutefűzni hogy ha ilyen elvi kapcsolaacutes utaacuten kutakodunk a neten akkor igen gyakran azt a megoldaacutest talaacuteljuk amikor mind a neacutegy tranzisztor npn (vagy eacuteppen fordiacutetva pnp) tiacutepusuacute a tranzisztorok baacutezisai pedig nincsenek oumlsszekoumltve Aki azonban rakott maacuter oumlssze tranzisztorokboacutel H-hidat az garantaacuteltan belefutott abba a probleacutemaacuteba hogy neacutegy azonos tranzisztor eseteacuten elteacuterő baacutezisellenaacutellaacutesokat kell vaacutelasztanunk a bdquofelsőrdquo ill bdquoalsoacuterdquo tranzisztorokhoz eacutes meacuteg iacutegy sem tudjuk teljes aacuterammal hajtani a motort a koumlzbuumllső feszuumlltseacutegeseacutesek miatt Eacuterthetetlen de a keacutet npn eacutes keacutet pnp tranzisztort tartalmazoacute aacuteramkoumlri rajzok sokkal kisebb araacutenyban fordulnak elő Pedig enneacutel megszűnnek a neacutegy azonos tranzisztorboacutel eacutepiacutetett aacuteramkoumlrneacutel foumllmeruumllő probleacutemaacutek A duaacutelis tranzisztorpaacuterok baacutezisainak (termeacuteszetesen az ellenaacutellaacutes a gyakorlati kapcsolaacutesoknaacutel nem hagyhatoacute el) oumlsszekoumlteacutese akkor nyuacutejt keacutenyelmes műkoumldteteacutest ha ugyanakkora a motor taacutepfeszuumlltseacutege mint a vezeacuterlőjelekeacute A [H-hiacuted] aacutebraacuten ez azt jelenti hogy az A eacutes B vezeacuterlőjelek is +U vagy GND szintet vehetnek foumll

H-hidat oumlsszerakni olyasmi mint kaacutertyavaacuterat eacutepiacuteteni Előszoumlr szoacuterakoztatoacute de valoacutesziacutenűleg hamar leszokunk roacutela Ez iacutegy is van joacutel hiszen bipolaacuteris leacuteptetőmotorok vezeacuterleacuteseacutere szaacutemos ceacutel-IC kaphatoacute ilyen peacuteldaacuteul a tankoumlnyvben foumllhasznaacutelt L293D Ebben eleve benne vannak a veacutedődioacutedaacutek iacutegy nagyon keveacutes alkatreacutesszel tudjuk vezeacuterelni a leacuteptetőmotorunkat Keacutet tekercshez raacuteadaacutesul keacutet komplett H-hiacuted szuumlkseacuteges eacutes a

ceacutel-IC-k jellemzően eacuteppen ennyit tartalmaznak Nem veacuteletlenuumll

A fentebb leiacutertak utaacuten eleacuterkeztuumlnk ahhoz a ponthoz hogy szerezzuumlnk magunknak leacuteptetőmotort Ha főkeacutent hobbiceacutelokra eacutes gyakorlaacutesra gyakorlatozaacutesra gondolunk akkor a szerző tapasztalata alapjaacuten a legegyszerűbb eset az ha keriacutetuumlnk magunknak egy reacutegebbi szaacutemiacutetoacutegeacutephez hasznaacutelt CD-olvasoacutet Ezekbe annak idejeacuten joacutel kezelhető leacuteptetőmotort eacutepiacutetettek laacutesd [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebra (A beszerzeacuteshez javasolhatoacute leselejtezett geacutepek megkaparintaacutesa szervizes haverok bdquokoumlnyvjutalombanrdquo valoacute reacuteszesiacuteteacutese vagy lomis piacok intenziacutev laacutetogataacutesahellip) A reacutegebbi tiacutepusok hangsuacutelyozaacutesa azeacutert indokolt mert az uacutejabbakban jellemzően DC-motorokat hasznaacutelnak eacutes csaloacutedni fogunk A motor tiacutepusa sajnos kiacutevuumllről nem laacutetszik az egyseacutegen Tovaacutebbi lehetőseacuteg lehet meacuteg toumlnkrement tintasugaras nyomtatoacutekboacutel kiszerelni a fejmozgatoacute leacuteptetőmotort

244 aacutebra - CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

A [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebraacuten laacutethatoacute CD-olvasoacuteboacutel kiszerelt egyseacuteg leacuteptetőmotorja tehaacutet bipolaacuteris Erre a teacutenyre a neacutegy kivezeteacutes utal vouml [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra Az aacutebra felső reacuteszeacuten laacutethatoacute sziacutenes bevonatuacute vezeteacutekneacutegyes maacuter utoacutelagos forrasztaacutes eredmeacutenye A tovaacutebbiakra neacutezve nagyon fontos adat lesz szaacutemunkra hogy a motor tekercseinek ellenaacutellaacutesa 10 Ω ami 5 V-os taacutepfeszuumlltseacuteg eseteacuten tekercsenkeacutent 500 mA-es aacuteramfelveacutetelt jelenthet Az USB-port terhelhetőseacutegeacutet ez maacuter joacutecskaacuten meghaladja

3 A motor leacutepteteacuteseAz előző alfejezetek utaacuten eleacuterkezett az idő a tankoumlnyv utolsoacute feladatainak megfogalmazaacutesaacutera Most maacuter nem csak villogtatunk kijelezuumlnk adatokat fogadunk eacutes kuumlldoumlzgetuumlnk kapcsolgatunk szabaacutelyozunk hanem mozgatunk

37 feladat

Mozgassunk az ADuC-panel keacutet nyomoacutegombjaacuteval egyik ill maacutesik iraacutenyban leacuteptetőmotort egeacuteszleacutepeacuteses uumlzemmoacutedban [Code50]

A feladat megoldaacutesaacutenaacutel maradunk a [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebraacuten laacutethatoacute eszkoumlzneacutel a reacutegebbi tiacutepusuacute CD-olvasoacute egyseacutegből kiszerelt taacutelcaacutenaacutel amelyen nem csak a leacuteptetőmotor tanyaacutezik hanem az annak tengelyeacutere tapadoacute viacutezszintesen mozgathatoacute olvasoacutefej is Ez utoacutebbi naacutelunk funkcioacutejaacutet veszti csak abban fogunk gyoumlnyoumlrkoumldni hogy ide-oda tovaacutebbiacutetjuk a fejet eacutes raacuteuumlltetuumlnk egy LEGO-figuraacutet

Az L293D IC laacutebkiosztaacutesaacutet eacutes a motor tekercseinek bekoumlteacuteseacutet a [A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese] aacutebra mutatja A C1 eacutes C2 jelű tekercs a leacuteptetőmotor keacutet tekercseacutet (vagy tekercspaacuterjaacutet) szimbolizaacutelja A VS szimboacutelum az adatlappal oumlsszhangban a motor taacutepfeszuumlltseacutegeacutet jelenti Naacutelunk ez is +5 V nem csak a logikai jelek jelszintje

245 aacutebra - A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

A motorboacutel kijoumlvő neacutegy vezeteacutek szerepeacutenek meghataacuterozaacutesa sokszor egyedi taacutejeacutekozoacutedaacutest igeacutenyel Multimeacuteterrel azt koumlnnyen megaacutellapiacutethatjuk hogy melyik keacutet vezeteacutek tartozik egy tekercshez (vagy tekercspaacuterhoz) hiszen ezeken meacuterhetuumlnk veacutegesen kicsiny ellenaacutellaacutest Ha nem egymaacuteshoz tartozoacute keacutet vezeteacuteket markolunk foumll akkor azok nyilvaacuten szakadaacuteskeacutent viselkednek A leacutepteteacutesi szekvencia meghataacuterozaacutesaacutera sokszor az a legjobb moacuted ha a motor kivezeteacuteseit vezeacuterlő-IC-neacutelkuumll keacutezzel dugiszaacuteljuk a proacutebapanelon a taacutepra eacutes a foumlldre Hibaacutes szekvenciaacutenaacutel a motor csak előre-haacutetra fog cincogni miacuteg ha eltalaacuteljuk a helyes sorrendet akkor egyeacutertelműen foumllismerhető moacutedon elindul az egyik iraacutenyba A biztonsaacuteg kedveacuteeacutert fordiacutetott sorrendben is jaacutetsszuk le a jeleket hogy minden rendben lesz-e az ellenkező iacuteraacutenyuacute leacutepteteacuteseacuteneacutel is A joacutenak tűnő sorrendet jegyezzuumlk foumll eacutes uumlltessuumlk be a programunkba

Az előző alfejezetben emliacutetettuumlk hogy a leacuteptetőmotor tekercseinek ellenaacutellaacutesa 10 Ω ami +5 V-os taacutepfeszuumlltseacuteg eseteacuten 500 mA-es aacuteramfelveacutetelt jelent Keacutet tekercsneacutel ez 1 A iacutegy egy mezei PC USB portja ezt maacuter nem biacuterja el hiszen az aacuteltalaacuteban csak 500 mA-rel terhelhető De semmi baj a [USB csatlakozoacutes haacuteloacutezati adapter] aacutebraacuten laacutethatoacute adapter terhelhetőseacutege 12 A ami nekuumlnk toumlkeacuteletesen megfelel Maga az elrendezeacutes a [A leacuteptetőmotoros alkalmazaacutes elrendezeacutese] aacutebraacuten laacutethatoacute

246 aacutebra - A leacuteptetőmotoros alkalmazaacutes elrendezeacutese

A program a kivezeteacutesekhez aktuaacutelis sorrendjeacutehez tartozoacute leacutepteteacutesi szekvencia megaacutellapiacutetaacutesa utaacuten maacuter szinte semmiseacuteg Keacutet gombnyomaacutes koumlzoumltt szuumlkseacutegszerűen eltelő időt az EQU direktiacutevaacuteval a var szimboacutelumhoz rendeljuumlk hogy ha moacutedosiacutetani akarunk a leacutepteteacutes frekvenciaacutejaacuten akkor azt csak egyszer kelljen megtennuumlnk az uacutejrafordiacutetaacuteshoz Az SDELAY szubrutint most uacutegy moacutedosiacutetottuk hogy ha azt az A=100 eacuterteacutekkel hiacutevjuk meg akkor toumlrteacutenik 01 s vaacuterakozaacutes Ami itt eacuterdekes az az ahogyan a koacutedmemoacuteriaacuteboacutel toumlrteacutenő ciklikus olvasaacutest megoldjuk Neacutegyfeacutele bemeneti jelkombinaacutecioacutet kell adnunk a vezeacuterlő-IC-nek egy ciklusban (laacutesd [Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorok] alfejezet) Ezt kihasznaacuteljuk eacutes a koumlvetkező truumlkkoumlt alkalmazzuk ha egy regiszter eacuterteacutekeacutet (a koacutedban ez az R2) folyamatosan noumlveljuumlk de minden noumlveleacutes utaacuten csak az alsoacute keacutet bitjeacutet tartjuk meg a toumlbbit kihajiacutetjuk akkor a regiszter eacuterteacuteke koumlrbe-koumlrbe jaacuter 0 eacutes 3 koumlzoumltt A programban konkreacutetan 1 2 3 0 1 2 3 0 hellip Ez affeacutele moduloacutearitmetika A maacutesik iraacutenyban toumlrteacutenő leacutepteteacuteskor a regisztert folyamatosan csoumlkkentetni kell de az alsoacute keacutet bit kimaszkolaacutesa eacuteppen iacutegy műkoumldik a hataacutes ugyanez A koacutedban a koumlvetkező alkalmazaacutes roumlvid taacutergyalhatoacutesaacutega eacuterdekeacuteben keacutet sort sziacutenessel kiemeluumlnk A koacutedkoumlnyvtaacuterban talaacutelhatoacute videoacutefelveacutetelek koumlzoumltt az alkalmazaacutesok műkoumldeacuteseacutet eleacuteg nagy (var=10 200 Hz) frekvenciaacuteval mutatjuk be Ezt a frekvenciaacutet sokkal nagyobbra maacuter nem lehet venni mert a motor elkezdi teacuteveszteni a leacutepeacuteseket eacutes csak zuumlmmoumlg oumlssze-visszahellip

Code50asmORG 0060hgomb1 BIT P32 Elnevezzuumlk az 1 gomb bitjeacutetgomb2 BIT P33 Elnevezzuumlk a 2 gomb bitjeacutetvar EQU 200 A fordiacutetoacute szaacutemaacutera eacuterteacuteket rendeluumlnk a var szimboacutelumhozMAINMOV DPTRphase Betoumlltjuumlk az adatmutatoacuteba a phase ciacutemke ciacutemeacutetMOV R20 R2-be 0-t toumlltuumlnkwaitJNB gomb1forward Ugrunk ha az 1 gombot nyomtuk megJNB gomb2backward Ugrunk ha a 2 gombot nyomtuk meg

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

JMP waitforward Leacutepteteacutes az egyik iraacutenybaINC R2 Noumlveljuumlk R2-eacuterteacutekeacutetMOV AR2 A-ba tesszuumlkANL A00000011b Kimaszkoljuk az alsoacute keacutet bitetMOV R2A Visszaiacuterjuk a degradaacutelt eacuterteacuteket R2 iacutegy gyakorlatilag moduloacutearitmetikaacuteval megy 1230 1230 MOVC AA+DPTR Koacuted-indirekt ciacutemzeacutessel betoumlltjuumlk a vezeacuterlő-IC-nek szoacuteloacute bitmintaacutezatotMOV P2A Kitesszuumlk a P2 portraMOV AvarCALL SDELAY var eacuterteacutekeacutenek megfelelő vaacuterakozaacutes koumlvetkezikJMP wait Ugraacutes vissza a gombok figyeleacuteseacutehezbackward Leacutepteteacutes az egyik iraacutenybaDEC R2 Csoumlkkentjuumlk R2-eacuterteacutekeacutetMOV AR2 A-ba tesszuumlkANL A00000011b Kimaszkoljuk az alsoacute keacutet bitetMOV R2A Visszaiacuterjuk a degradaacutelt eacuterteacuteket R2 iacutegy gyakorlatilag moduloacutearitmetikaacuteval megy 3210 3210 MOVC AA+DPTR Koacuted-indirekt ciacutemzeacutessel betoumlltjuumlk a vezeacuterlő-IC-nek szoacuteloacute bitmintaacutezatotMOV P2A Kitesszuumlk a P2 portraMOV AvarCALL SDELAY var eacuterteacutekeacutenek megfelelő vaacuterakozaacutes koumlvetkezikJMP wait Ugraacutes vissza a gombok figyeleacuteseacutehez Szubrutin SDELAY Parameacuteteraacutetadaacutes A Ha A=100 akkor 01 s a vaacuterakozaacutesi idő SDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik7MOV R620cik6MOV R525cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel A vezeacuterlő-IC-nek (L293D) szoacuteloacute jelek a koacutedmemoacuteriaacuteban phaseDB 00010000bDB 00000100bDB 00001000bDB 00000010b

Az egeacuteszleacutepeacuteses uumlzemmoacuted utaacuten azonnal adoacutedik a koumlvetkező feladat

38 feladat

Mozgassunk az ADuC-panel keacutet nyomoacutegombjaacuteval egyik ill maacutesik iraacutenyban leacuteptetőmotort feacutelleacutepeacuteses uumlzemmoacutedban [Code51]

A [37 feladat]hoz keacutepest egyetlen elteacutereacutes lesz csupaacuten de ezt kihangsuacutelyozzuk feacutelleacutepeacuteses uumlzemmoacutedban hajtjuk meg a motort A helyzet az hogy itt 4 helyett 8 eleme lesz a leacutepteteacutesi szekvenciaacutenak hiszen a feles leacutepeacutesekben mindkeacutet tekercspaacuter aacuteram alatt van Ez a koacutedmemoacuteriaacuteban roumlgziacutetett bitmintaacutezatok szempontjaacuteboacutel az alaacutebbi listaacutet eredmeacutenyezi (eacutes ez a Code51 nevű programban talaacutelhatoacute meg)

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

phaseDB 00010000bDB 00010100bDB 00000100bDB 00001100bDB 00001000bDB 00001010bDB 00000010bDB 00010010b

Figyeljuumlk meg hogy minden maacutesodik sor a keacutet szomszeacutedos elem unioacuteja Sőt inkaacutebb a VAGY művelettel előaacutelloacute eacuterteacutek Mivel most 8 elemuumlnk van a koacuted a fentieken tuacutel mindoumlsszesen keacutet soraacuteban moacutedosul Amit Code50-ben saacutergaacuteval kiemeltuumlnk azt most erre kell aacutetiacuternunk

ANL A00000111b Kimaszkoljuk az alsoacute haacuterom bitet

Eacutes keacutesz hiszen az alsoacute haacuterom biten 0-toacutel 7-ig aacutebraacutezolhatunk szaacutemokat eacutes jelen esetben pont erre van szuumlkseacuteg A motor mozgataacutesa műkoumldik meacuteghozzaacute kifogaacutestalanul műkoumldik Eacutes ezt most maacuter baacutermikor nagyjaacuteboacutel baacutermilyen leacuteptetőmotorral meg tudjuk oldanihellip

Created by XMLmind XSL-FO Converter

25 fejezet - UtoacuteszoacuteA szerző tarsolyaacuteban szaacutemtalan oumltlet szaacutemtalan finomiacutetaacutesi lehetőseacuteg maradt meacuteg Azonban a tankoumlnyv maacuter iacutegy is tuacuteldagadt a szerződeacutesben meghataacuterozott karakterleuumlteacutesi szaacutemon Szaacutemiacutetaacutestechnikai koumlnyvet befejezni nem lehet csak abbahagyni Egy azonban biztos ha azok akiknek a szerző a tankoumlnyvet szaacutenta pozitiacutev visszacsatolaacutest indiacutetanak akkor lehet folytataacutesa Ha ismeacutet lesz TAacuteMOP paacutelyaacutezati lehetőseacuteg eacutes a szerző taacutemogataacutest kap lesz is folytataacutesa Az majd kideruumll hogy milyen tiacutepusuacute mikrovezeacuterlővel milyen programozaacutesi nyelven milyen alkalmazaacutesokkalhellip

Az olvasoacute ha teacutenyleg figyelmesen veacutegigkoumlvetett mindent maacuter uacutegy eacuterezheti hogy egy kicsit eacutert a dolgokhoz Megaacutellni itt persze nem eacuterdemes eacutes nem is szabad Hiszen nagyjaacuteboacutel most kezd laacutetszani az hogy meacuteg egy kis energiabefekteteacutes eacutes mindent bdquomegprogramozunkrdquo magunk koumlruumllhellip A szerző arra biztat mindenkit hogy folytassa az utat ha kell haacutet egyeduumll mert meg fogja eacuterni

A tankoumlnyv nyilvaacuten nem lett toumlkeacuteletes Lehet hogy ha meacuteg egyszer meg kellene iacuterni maacuter kicsit maacuteskeacuteppen alakulna Veacutelemeacutenyeket kunstruktiacutev kritikaacutekat a szerző mindenesetre sziacutevesen fogad hiszen az eacutelet oumlroumlk tanulaacutes Mindenkinek Ha a tankoumlnyv meacutegis a javaacutera vaacutelt a kedves olvasoacutenak akkor a szerzőnek csak annyi koumlzlendője maradt hogy kedves egeacuteszseacutegeacutere eacutes most neacutezzen koumlruumll a koumlrnyezeteacuteben hogy mire lehetne egy joacute kis mikrovezeacuterlős alkalmazaacutest keacutesziacuteteni

VEacuteGE

Created by XMLmind XSL-FO Converter

26 fejezet - Az Analog Devices hozzaacutejaacuterulaacutesaA tankoumlnyv iacuteraacutesaacutenak finiseacuteben a szerző levelet vaacuteltott az Analog Devices ceacuteggel hogy hozzaacutejaacuterulaacutesukat keacuterje neacutehaacuteny a ceacuteg aacuteltal forgalmazott oktatoacutekeacuteszletekhez tartozoacute

CD-n szereplő koacuted felhasznaacutelaacutesaacutehoz eacutes a tankoumlnyvbe valoacute integraacutelaacutesaacutehoz Az Analog Devices az engedeacutelyt megadta Kiacutevaacutensaacutegukra melleacutekeljuumlk a mintakoacutedokhoz tartozoacute aacutellaacutesfoglalaacutesukat

All ADuC842 code provided by ADI including this file is provided AS IS without warranty of any kind either expressed or implied You assume any and all risk from the use of this code It is the responsibility of the person integrating this code into an application to ensure that the resulting application performs as required and is safe

Ennek magyar fordiacutetaacutesa eacutertelmeacutet tekintve koumlvetkező

Az Analog Devices Reacuteszveacutenytaacutersasaacuteg (ADI Analog Devices Incorporated) aacuteltal koumlzzeacutetett valamennyi ADuC842-es koacuted uacutegy tekintendő ahogyan azt koumlzzeacutetetteacutek Ezekre semmifeacutele garancia sem koumlzvetlen sem koumlzvetett nem vonatkozik Ezen koacuted hasznaacutelataacutenak baacuterminemű eacutes valamennyi felelősseacutegeacutet annak felhasznaacuteloacuteja viseli A koacutedot baacutermifeacutele alkalmazaacutesba beeacutepiacutető szemeacutely felelősseacutege annak biztosiacutetaacutesa hogy az eredmeacutenykeacutent előaacutelloacute alkalmazaacutes az azzal szemben taacutemasztott koumlvetelmeacutenyeknek megfelelően eacutes biztonsaacutegosan műkoumldjoumln

Az ilyesfeacutele jogi megfogalmazaacutesok időnkeacutent ijesztők de itt ezt koumltelesseacuteguumlnk volt koumlzoumllni A fentiek mindoumlsszesen egyetlen szubrutinlistaacutera eacutes a 842-es architektuacuteraacutehoz tartozoacute szimboacutelumlistaacutera vonatkoznak UARTIOASM eacutes MOD842 A ceacuteg engedeacutelyeacutevel ezeket csatolhattuk a tankoumlnyvhoumlz

Created by XMLmind XSL-FO Converter

27 fejezet - KoumlszoumlnetnyilvaacuteniacutetaacutesA műszaki tankoumlnyvhoumlz illő jobbaacutera taacutergyilagos stiacutelust feacutelreteacuteve szeretneacutem felsorolni azoknak az embereknek a neveacutet akiknek nagyon sokat koumlszoumlnhettem a programozaacutesi eacutes elektronikai szaacuternyproacutebaacutelgataacutesaim soraacuten

Koumlszoumlnoumlm Bőczeacuten Csabaacutenak eacutes Bőczeacuten Laacuteszloacutenak mindazt amit tőluumlk a szaacutemiacutetaacutestechnikai nyaacuteri TIT-taacuteborban aacuteltalaacutenos iskolaacutes koromban megtanultam Koumlszoumlnoumlm Koltay Peacuteternek (kezdetben annaacutel a ceacutegneacutel a Keriparnaacutel volt programozoacute ahol eacutedesapaacutem is dolgozott) azt az eacuteveken aacutet tartoacute biztataacutest eacutes terelgeteacutest ami igen csak a hasznomra vaacutelt a keacutesőbbiekben Koumlszoumlnoumlm Kispitye Attilaacutenak hogy nagyon sokat aacutetadott nekem a maacuter akkor is kaacutepraacutezatos programozoacutei tudaacutesaacuteboacutel eacutes megtaniacutetott a Commodore 64 assembly nyelvű programozaacutesaacutenak rengeteg forteacutelyaacutera Koumlszoumlnoumlm Matisz Attilaacutenak a koumlzeacutepiskolaacutes fizikatanaacuteromnak hogy az aacuteltala vezetett szakkoumlroumln megismerkedhettem a Pascal nyelvvel eacutes olyasmivel is amire keacutesőbb ismertem csak raacute hogy nahaacutet hiszen az maacuter numerikus matematika volt csak meacuteg nem uacutegy hiacutevtuk

Az egyetemi eacutevek alatti eacutelmeacutenyekeacutert eacutes az akkor megszerzett tudaacuteseacutert a legőszinteacutebb koumlszoumlnetemet szeretneacutem kifejezni Jamniczky Aacuterpaacuted tanaacuter uacuternak Aki tőle tanulta a villanytant annak baacuterhol baacutermikor joumlhetett a meacutely viacutez Horvaacuteth Laacuteszloacute eacutes Szeacutekely Saacutendor analiacutezis tanaacuteraim neacutelkuumll pedig eseacutelyem se lett volna uacutegy megtanulni a matematikaacutet hogy Laplace-trafoacuteval toumlbbnyire meacuteg mindig gond neacutelkuumll tudjam aacuteramkoumlroumlk viselkedeacuteseacutet szaacutemolni De uacutegy hogy eacutertsem is amit csinaacutelok Sok segiacutetseacuteget eacutes oumltletet kaptam Csizmadia Ferenctől eacutes Bognaacuter Endreacutetől a gyakorlati elektronikaacuteba tett kalandjaim soraacuten A mechatronika iraacutenyaacuteba indiacutetoacute bogarat pedig Szalai Istvaacuten tette a fuumllembe Ezen az uacuteton joacutel joumltt Gurin Peacuteter logikai aacuteramkoumlroumlk oacuteraacuteja eacutes bizony sokszor nem boldogultam volna Molnaacuter Gergely tapasztalata eacutes segiacutetseacutege neacutelkuumll

Kedves tanaacuteraim kolleacutegaacuteim Haacutelaacutes vagyok Nektek minden aproacutesaacutegeacutert is

Kuumlloumln koumlszoumlnet illeti Molnaacuter Gergőt eacutes Szalai Istvaacutent neacutehaacuteny speciaacutelis teacutemakoumlr aacutetneacutezeacuteseacuteeacutert Burgundi Daacutevidot az ADuC-panel dokumentaacutelaacutesaacuteeacutert eacutes Koumlrmendy Gaacutebort a tankoumlnyv kritikus aacutetolvasaacutesaacuteeacutert

Veacuteguumll koumlszoumlnetet kell mondanom feleseacutegemnek Eacutevaacutenak eacutes a kis Babadeacuteknak Attila Benceacutenek azeacutert hogy tuumlrelmesen kivaacutertaacutek amiacuteg elkeacutesziacutetem a tankoumlnyvet eacutes deacutelutaacutenonkeacutent esteacutenkeacutent bizony kevesebb időt tudtam raacutejuk szaacutenni mint amennyit megeacuterdemeltek volna

Created by XMLmind XSL-FO Converter

28 fejezet - Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei paneljaEbben a fuumlggeleacutekben aacuteramkoumlri ill beuumllteteacutesi rajzokkal alkatreacuteszlistaacuteval kiacutevaacutenunk segiacuteteni annak aki konkreacutetan a tankoumlnyvhoumlz hasznaacutelt mikrovezeacuterlős panelt oacutehajtja megeacutepiacuteteni vagy legyaacutertatni ilyen megrendeleacuteseket vaacutellaloacute ceacuteggel A tankoumlnyvhoumlz melleacutekeljuumlk a gyaacutertaacuteshoz szuumlkseacuteges uacuten Gerber-faacutejlokat eacutes a Drill-faacutejlokat Ettől a kezdő olvasoacute nem lesz sokkal boldogabb iacutegy az alaacutebbiakban tovaacutebbi segiacutetseacuteget adunk a panel elkeacutesziacuteteacuteseacutehez

Letoumllthető melleacutekletek toumlmoumlriacutetett formaacutetumban(telepiacutetők forraacuteskoacutedok rajzok stb) Mellekletzip

A [A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből] eacutes [A hallgatoacutei panel NYAacuteK-terve alulneacutezetből] aacutebra a tankoumlnyvben hasznaacutelt panel nyomtatott aacuteramkoumlri (NYAacuteK-) terveacutet mutatja mind feluumll- mind alulneacutezetből A [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] eacutes [A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza] aacutebraacuten a panel beuumllteteacutesi rajza laacutethatoacute a keacutet neacutezetből Ezek a rajzok akkor nyuacutejtanak oacuteriaacutesi segiacutetseacuteget amikor megrendeljuumlk az alkatreacuteszeket eacutes magunk akarjuk őket raacuteforrasztani a panelra Meg kell jegyeznuumlnk hogy neacutehaacuteny poziacutecioacute a tankoumlnyvben hasznaacutelt panelon uumlresen maradt Ilyen a [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] aacutebra jobb felső traktusaacuteban laacutethatoacute U8 jelű eacutes a kuumllső taacutepellaacutetaacutes biztosiacutetaacutesaacutera szolgaacuteloacute alkatreacuteszek C2 C5 IC2 eacutes X1 jelű poziacutecioacuteja A panel a tankoumlnyvben bemutatott alkalmazaacutesokban ezek uumlresen hagyaacutesaacuteval is toumlkeacuteletesen műkoumldoumltt

Joacutetanaacutecskeacutent azt javasoljuk az olvasoacutenak hogy ha nincs kellő gyakorlata az aproacute alkatreacuteszek forrasztaacutesaacuteban akkor ezt a műveletet ne az ADuC 842-es chip laacutebaival kezdje Ugyanez igaz az FT232-es USB-soros aacutetalakiacutetoacute-IC-re is A toumlbbi alkatreacutesz maacuter koumlnnyebben kezelhető

Az alkatreacuteszlistaacutet a [A hallgatoacutei panel alkatreacuteszlistaacuteja] tartalmazza A keacutet kritikus teacutetel maga az ADuC 842-es chip ill a MAX4478ASD tiacutepusjelű műveleti erősiacutető Ez utoacutebbi veacutedelmi feladatot laacutet el befeleacute neacutezve vedi a mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutenak első keacutet csatornaacutejaacutet (a toumlbbit nem) kifeleacute neacutezve puffert testesiacutet meg a DA-aacutetalakiacutetaacuteshoz (szintuacutegy annak első keacutet csatornaacutejaacutehoz) E keacutet teacutetel neacutelkuumll az alkatreacuteszlista oumlsszes eleme a legkedvezőbb aacuterakkal dolgozoacute hazai mikroelektronikai csomagkuumlldő szolgaacutelatok tarifaacuteit figyelembe veacuteve 2013 tavaszaacuten 5 000 - 6 000 Ft-eacutert beszerezhető volt A MAX4478ASD műveleti erősiacutető keveacutes hazai ceacutegneacutel kaphatoacute viszont nem tuacutelsaacutegosan draacutega kb 1 000 Ft Az ADuC 842-es chip maacuter borsosabb aacuteron kaphatoacute ha uacutegy akarjuk megvenni aacutera kb 6 500 Ft Viszont e keacutet kritikus alkatreacutesz beszerzeacuteseacutet megoldhatjuk oly moacutedon is hogy ingyenes mintaacutet rendeluumlnk a ceacutegtől Ennek az eljaacuteraacutesnak a bemutataacutesa azonban maacuter nem ennek a tankoumlnyvnek a feladata Akaacuterhogyan is szerezzuumlk be a 842-es mikrovezeacuterlőt figyeljuumlnk oda a tiacutepusmegjeloumlleacutesre A tankoumlnyvben hasznaacutelt panelon az ADUC842BSZ62-5 tiacutepusuacute mikrovezeacuterlő foglalt helyet A BSZ jeloumlleacutes a tokozaacutest azonosiacutetja ennek 52 laacuteba van Magaacutera a tokozaacutesra az MQFP betűszoacutet hasznaacuteljaacutek Ez a Metric Quad Flat Package (metrikus neacutegyszoumlgletű lapos tokozaacutes) kifejezeacutesből szaacutermazik A 62-es szaacutem a 62 kbyte koacutedmemoacuteriaacutera utal az 5-oumls szaacutemjegy pedig a taacutepfeszuumlltseacutegre (+5 V) Az MQFP tokozaacutes rajzaacutet a [Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők] aacutebraacuten laacutethatjuk az adatok millimeacuteterben eacutertendők Maga a rajz az Analog Devices aacuteltal koumlzzeacutetett faacutejlboacutel szaacutermazik

A [A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel] eacutes [A keacutesz panel alulneacutezetben] aacutebraacuten a keacutesz panel laacutethatoacute feluumll- eacutes alulneacutezetből immaacuteron nem tervrajzkeacutent hanem lefeacutenykeacutepezve Az eacuterintkezőtuumlskeacutek funkcionaacutelis leiacuteraacutesaacutehoz a [A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel] aacutebraacuten a [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] aacutebra szaacutemozaacutesaacuteval oumlsszhangban megszaacutemoztuk a tuumlskeacuteket Ezek leiacuteraacutesaacutet a [A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja]ban talaacuteljuk

A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesaacutet a [A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra] aacutebra eacutes a [A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa] mutatja Ezen a csatlakozoacuten keresztuumll kapcsolhatjuk a mikrovezeacuterlő paneljaacutet proacutebapanelokhoz vagy baacutermihez amihez csak akarjuk Konkreacutet szalagkaacutebel elkeacutesziacuteteacuteseacutet azonban maacuter az olvasoacutera biacutezzuk A Fuumlggeleacutekben leiacutertak alapjaacuten ez maacuter nem fog neheacutezseacuteget okozni

281 aacutebra - A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

281 taacuteblaacutezat - A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa

Szalagkaacutebel-csatlakozoacute laacuteba Hozzaacuterendeleacutes az ADuC 842-esen (laacutebsorszaacutem)

1 +5 V

2 GND

3 P07 (52 laacuteb)

4 P06 (51 laacuteb)

5 P05 (50 laacuteb)

6 P04 (49 laacuteb)

7 P03 (46 laacuteb)

8 P02 (45 laacuteb)

9 P01 (44 laacuteb)

10 P00 (43 laacuteb)

11 P27 (39 laacuteb)

12 P26 (38 laacuteb)

13 P25 (37 laacuteb)

14 P24 (36 laacuteb)

15 P23 (31 laacuteb)

16 P22 (30 laacuteb)

17 P21 (29 laacuteb)

18 P20 (28 laacuteb)

19 P37 (25 laacuteb)

20 P36 (24 laacuteb)

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

282 aacutebra - A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből

283 aacutebra - A hallgatoacutei panel NYAacuteK-terve alulneacutezetből

284 aacutebra - Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők

285 aacutebra - A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

286 aacutebra - A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza

287 aacutebra - A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

288 aacutebra - A keacutesz panel alulneacutezetben

282 taacuteblaacutezat - A hallgatoacutei panel alkatreacuteszlistaacuteja

Mennyiseacuteg EacuterteacutekTiacutepus Tokozaacutes Poziacutecioacuteszaacutemok

2 47u E35-10 C2 C5

2 22p C0603 C11 C12

1 10n C0805 C32

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

7 100n C0805 C1 C6 C10 C13 C16 C30 C31

2 100n C1206 C7 C8

6 100R R0805 R5 R6 R9 R10 R13 R16

3 1k R0805 R1 R2 R3

2 1R R0805 R15 L2

2 47k R0805 R14 R17

1 1R R1206 R4

1 47K ellenaacutellaacutes-haacuteloacute SIL9 RN2

1 32768 kHz-es oacuterakvarc

TC26V Q1

4 nyomoacutegombok B3F-10XX 6x6 tact S5 S6 S7 S8

1 20-poacutelusuacute 90deg-os aljzat

ML20L SV1

1 taacutepcsatlakozoacute 733989-5 X1

1 USB-B aljzat USB-B-SMT X2

1 LM7805 stabilizaacutetor-IC

TO220 IC2

1 ADuC 842 PQFP52 IC1

1 MAX4478ASD SO14 IC3

1 FT232RL SSOP28 IC4

9 LED18MM 18 mm LED1 ndash LED9

4 JUMPER 254 mm 6 mm JP1-9

1 Tuumlskesor 254 mm 63 JP

283 taacuteblaacutezat - A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja

Tuumlske Leiacuteraacutes

1B +5 V

1J RESET (15 laacuteb)

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

2B (41 laacuteb)

2J 1 kΩ-os ellenaacutellaacuteson keresztuumll foumlldre koumltve ha esetleg kuumllső aacuteramkoumlrrel szaacutendeacutekozunk letoumllteacutesi funkcioacutekat megvaloacutesiacutetani

3B GND

3J P32 (18 laacuteb) 47 kΩ-os felhuacutezoacute-ellenaacutellaacutessal taacutepra koumltve

4 A USB-soros konverter-IC oumlsszekoumlteacutese az ADuC 842-es mikrovezeacuterlővel Amennyiben kuumllső taacutepot akarunk hasznaacutelni akkor a 6-os blokkra keruumll keacutet jumper de akkor a 4-es blokk valamennyi jumpereacutet le kell vennuumlnk

5B GND

5J P33 (19 laacuteb) 47 kΩ-os felhuacutezoacute-ellenaacutellaacutessal taacutepra koumltve

61B Kuumllső taacutep eseteacuten e keacutet tuumlskeacutere kell jumpert tenni Ekkor a 4-es blokk valamennyi jumpereacutet el kell taacutevoliacutetani

61J

62B Kuumllső taacutep eseteacuten e keacutet tuumlskeacutere kell jumpert tenni Ekkor a 4-es blokk valamennyi jumpereacutet el kell taacutevoliacutetani

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

62J

71B GND

71J +5 V

72B ADC 7 (14 laacuteb)

72J ADC 6 (13 laacuteb)

73B ADC 5 (12 laacuteb)

73J ADC 4 (11 laacuteb)

74B ADC 3 (4 laacuteb)

74J ADC 2 (3 laacuteb)

75B ADC 1 erősiacutetővel pufferelt AD-csatorna Nem koumlzvetlenuumll kapcsoloacutedik a 2 laacutebhoz

75J ADC 0 erősiacutetővel pufferelt AD-csatorna Nem koumlzvetlenuumll kapcsoloacutedik az 1 laacutebhoz

81B GND

81J +5 V

82B Ezek a tuumlskeacutek semmihez sincsenek koumltve Nincs funkcioacutejuk

82J

83B

83J

84B

84J

85B DAC 1 pufferelve az erősiacutetővel Nem koumlzvetlenuumll kapcsoloacutedik az 10 laacutebhoz

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

85J DAC 0 pufferelve az erősiacutetővel Nem koumlzvetlenuumll kapcsoloacutedik a 9 laacutebhoz

9B P35 (23 laacuteb)

9J P34 (22 laacuteb)

Created by XMLmind XSL-FO Converter

Irodalomjegyzeacutek[1] Analog Devices MicroConverterreg 12-Bit ADCs and DACs with Embedded High Speed 62-kB Flash MCU

ADuC841ADuC842ADuC843 p 65 Table 32

[2] Szentiday Klaacutera Feacutelvezető fotodetektorok Műszaki Koumlnyvkiadoacute Budapest 1977 ISBN 963 10 1742 7

[3] Texas Optoelektronikai receptek Műszaki Koumlnyvkiadoacute Budapest 1979 ISBN 963 10 2683 2

[4] Tietze U Schenk Ch Analoacuteg eacutes digitaacutelis aacuteramkoumlroumlk Műszaki koumlnyvkiadoacute Budapest 5 javiacutetott kiadaacutes 1993 ISBN 963 16 0010 6

[5] Beuth K Beuth O Az elektronika alapjai ndash II Feacutelvezetők Műszaki koumlnyvkiadoacute Budapest 1994 ISBN 963 16 0427 6

[6] Kovaacutecs Csongor Elektronikus aacuteramkoumlroumlk General Press Budapest 1997 ISBN 978 963 9076 32 7

[7] Texas TTL receptek Műszaki Koumlnyvkiadoacute Budapest 1978 ISBN 963 10 2491 1

[8] Bolton W Mechatronics Pearson Harlow England 5th edition 2011 Chapter 97 ISBN 978 0 273 74286 9

[9] Chapman S J Electric Machinery Fundamentals WCBMcGraw-Hill Boston 3rd edition 1999 p 640-644 ISBN 0 07 011950 3

[10] wwwstepperworldcom

Created by XMLmind XSL-FO Converter

Page 3: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és

Tartalom1 Előszoacute eacutes ars poetica 12 Ismerkedeacutes az assembly programozaacutesi nyelvvel 4

1 Az assembly nyelvről aacuteltalaacuteban 42 Memoacuteria 53 Regiszterek 54 Koumlzvetlen ciacutemzeacutes 65 Direkt ciacutemzeacutes 66 Oumlsszehasonliacutetaacutesok eacutes ugraacutesok 7

3 Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr 94 Első programunk villogtassuk a panel LED-jeit 11

1 Portok eacutes funkcioacuteregiszterek 112 Egyszerű ciklusszervezeacutes 113 Szubrutinok 124 Ugraacutes a koacutedon beluumll 135 Oacuterajel veacutegrehajtaacutesi idő 136 Az első alkalmazaacutes koacutedja 14

5 Csiacutek a LED-eken 161 Bitek sorszaacutemozaacutesa 162 Logikai eacutes aritmetikai utasiacutetaacutesok 163 Parameacuteteraacutetadaacutes szubrutinnak 174 A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkel 18

6 Csiacutek a LED-eken toumlmoumlren Error Reference source not found1 A Carry bit 222 Bitforgataacutes C-n keresztuumll 22

7 Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel 241 Az adatmutatoacute 242 Eacuterteacutekek noumlveleacutese eacutes csoumlkkenteacutese 243 A koacuted-indirekt ciacutemzeacutes 254 Adatok elhelyezeacutese a koacutedban 265 Az adatmutatoacute automatikus noumlveleacutese 27

8 Felteacutetelek kezeleacutese 301 Oumlsszeadaacutes eacutes kivonaacutes 302 Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesok 313 Hat variaacutecioacute egy feladatra 31

9 Nyomoacutegombok a panelon 381 Gombnyomaacutes detektaacutelaacutesa 382 Logikai műveletek bitekkel 383 Elaacutegazaacutesok bitek alapjaacuten 404 Logikai műveletek baacutejtokkal 405 Bitek moacutedosiacutetaacutesa baacutejton beluumll 416 Gombnyomaacutesok vizsgaacutelata 427 Leacutepteteacutes nyomoacutegombbal 438 Bitvaacuteltozoacutek hasznaacutelata 449 A prellegeacutes kikuumlszoumlboumlleacutese vaacuterakozaacutessal 4710 A teljes alsoacute RAM 48

10 A belső oacutera hasznaacutelata 5111 Megszakiacutetaacutesok 55

Created by XMLmind XSL-FO Converter

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

1 Az ADuC 842 megszakiacutetaacutesai 552 Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes 573 Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutes 604 A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok 63

12 Kuumllső aacuteramkoumlroumlk LED-ekkel 671 Jelzőlaacutempa vezeacuterleacutese 672 Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedja 713 Jelzőlaacutempa toumlbb uumlzemmoacuteddal 72

13 Kuumllső aacuteramkoumlr fotokapuval 7714 Heacutetszegmenses kijelző meghajtaacutesa 8015 Kommunikaacutecioacute az UART-tal 84

1 Az UART soros interfeacutesz 842 Baacutejtok fogadaacutesa eacutes kuumlldeacutese assemblyben 903 Soros porti kommunikaacutecioacute pollozaacutessal 924 Soros porti kommunikaacutecioacute megszakiacutetaacutessal 955 Koacutedreacuteszletek beeacutepiacuteteacutese sajaacutet programunkba 966 Az ADuC vezeacuterleacutese PC-vel 99

16 Iacuteraacutes a memoacuteriaacuteba 1011 Iacuteraacutes az alsoacute eacutes a felső RAM-ba 1022 Iacuteraacutes a belső adatmemoacuteriaacuteba 105

17 Időziacutetőkszaacutemlaacuteloacutek 1081 Egyszerű időmeacutereacutes az időziacutetővel 1112 Stopperoacutera keacutet fotokapuval 113

18 PWM-jelek 1171 PWM-jel előaacutelliacutetaacutesa a mikrovezeacuterlő jelgeneraacutetoraacuteval 1172 Pulzaacuteloacute LED-ek 121

19 AD-aacutetalakiacutetaacutes 1251 Az ADuC 842-es AD-aacutetalakiacutetoacuteja 1252 Egyszerű AD-aacutetalakiacutetaacutes 129

20 Alkonykapcsoloacute 1341 Besugaacuterzaacutesmeacutereacutes fototranzisztorral 1342 Az alkonykapcsoloacute programja 1363 Hisztereacutezis 137

21 TTL IC-k eacutes tranzisztorok a portokon 1391 A felhuacutezoacute-ellenaacutellaacutesok szerepe 1392 Tranzisztorok mint kapcsoloacutek 141

22 Hőmeacuterseacuteklet-meacutereacutes 1441 Termisztorok 1442 Hőmeacuterő 1473 Hőmeacuterseacuteklet-szabaacutelyozaacutes 153

23 Megvilaacutegiacutetaacutesszabaacutelyozoacute 15924 Leacuteptetőmotor vezeacuterleacutese 163

1 Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorok 1632 Bipolaacuteris leacuteptetőmotorok vezeacuterleacutese 1643 A motor leacutepteteacutese 166

25 Utoacuteszoacute 17026 Az Analog Devices hozzaacutejaacuterulaacutesa 17127 Koumlszoumlnetnyilvaacuteniacutetaacutes 17228 Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja 173Irodalomjegyzeacutek Error Reference source not found

Created by XMLmind XSL-FO Converter

Az aacutebraacutek listaacuteja11 A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll 112 A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek 231 A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll 932 Az Analog Devices soros porti letoumlltőprogramjaacutenak feluumllete 933 A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete 1051 Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire 1761 Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor bitjeire 2281 Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval 3282 Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel 3283 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő 3384 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő 3485 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk 3586 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk 3691 A 8 feladat (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja 4392 A Lower RAM bitenkeacutent ciacutemezhető teruumllete 4493 A 9 feladat (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja 4594 Az alsoacute RAM neacutegy regiszterbankja 4895 Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete 49101 A 12 feladat (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja 53111 A 13 feladat (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja 58112 A 15 feladatban megkoumlvetelt LED-leacutepteteacutes 63113 A 15 feladat (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja 64121 Fontos tudnivaloacute a portokkal kapcsolatban 67122 A 16 feladat (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 67123 A 16 feladat megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef 68124 A 16 feladat moacutedosiacutetott megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef 70125 A 17 feladat megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek 72131 A 18 feladat (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 77132 Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel 78133 A fototranzisztor foumlldre huacutezza a P21-es laacutebat iacutegy az arra koumltoumltt LED vilaacutegiacutet 78141 A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese 80142 Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa 80143 Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel 80144 A 20 feladat (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja 82151 USB-kaacutebel belső vezeteacutekei 84152 A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten 88153 A 21 feladat (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja 92154 Az ASCII karakterkeacuteszlet 32-től 126-ig 94161 Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese 101162 A 25 feladat (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja 102171 A 27 feladat (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 113181 Neacutegyszoumlgjel 117

Created by XMLmind XSL-FO Converter

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

182 A PWM-generaacutetor 1 uumlzemmoacutedja 119191 Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei 125192 Az AD-aacutetalakiacutetaacutes szabaacutelyai 129193 Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei 130194 A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is) 131195 Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel 132196 Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek 132201 A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege 134202 Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten 135203 Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt 135204 Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben 136205 Hisztereacutezis keacutetaacutellapotuacute rendszerben 137211 Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel 139212 Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten 141213 Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel 141214 Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal 142215 Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese 142221 A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja 144222 A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja 144223 A termisztor soros kapcsolaacutesban 145224 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal 145225 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal 146226 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel 146227 Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll 148228 Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal 149229 Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor 1532210 USB csatlakozoacutes haacuteloacutezati adapter 1542211 Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera 1542212 A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr 1542213 Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera 1552214 A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese 156231 A LED-ek elhelyezkedeacutese a fototranzisztorral szemben 159232 A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese 160241 Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve 163242 Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve 164243 H-hiacuted 165244 CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral 165245 A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese 166246 A leacuteptetőmotoros alkalmazaacutes elrendezeacutese 167281 A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra 173282 A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből 175283 A hallgatoacutei panel NYAacuteK-terve alulneacutezetből 175284 Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők 175285 A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza 175286 A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza 176287 A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel 176288 A keacutesz panel alulneacutezetben 177

Created by XMLmind XSL-FO Converter

A taacuteblaacutezatok listaacuteja21 A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese 451 Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll 1652 Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten 2071 Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese 2472 A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese 2573 A DPCON SFR taacutergyalt bitjei 2791 Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata 3992 A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata 3993 A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata 3994 A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata 4195 A PSW SFR parameacuteterei 49101 Az időegyseacutegek SFR-jeinek parameacuteterei 51102 A TIMECON SFR parameacuteterei 52111 A kuumllső megszakiacutetaacutesok jellemzői 57112 Az IE SFR parameacuteterei 57113 Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei 60114 A TIMECON SFR parameacuteterei reacuteszletesebben 60115 Az IEIP2 SFR parameacuteterei (reacuteszlet) 61151 Az USB-kaacutebel vezeteacutekeinek funkcioacuteja 84152 Az SCON SFR parameacuteterei 85153 Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese 86154 Az T3CON SFR parameacuteterei 87155 A soros porti kommunikaacutecioacute tipikus eacuterteacutekei 90156 Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai 90157 A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz 96171 A TMOD SFR parameacuteterei 108172 A TCON SFR parameacuteterei 110181 A PWMCON SFR parameacuteterei 117191 Az ADCCON1 SFR parameacuteterei 125192 Az ADCCON2 SFR parameacuteterei 127221 A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata 147222 A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek 155281 A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa 174282 A hallgatoacutei panel alkatreacuteszlistaacuteja 177283 A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja 178

Created by XMLmind XSL-FO Converter

1 fejezet - Előszoacute eacutes ars poeticaE tankoumlnyv szerzője jelen fejezet elkezdeacuteseacutenek pillanataacuteban 38 eacuteves eacutes 298 napos Toumlrteacutent az hogy az aacuteltalaacutenos iskola 7 osztaacutelyaacutenak elveacutegzeacutese utaacuten a nyaacuteri szuumlnetben szuumllei beiacuterattaacutek szaacutemiacutetoacutegeacutepes TIT-tanfolyamra ahol a meacuteltaacuten legendaacutevaacute vaacutelt Commodore szaacutemiacutetoacutegeacutepek BASIC nyelvű programozaacutesaacuteval ismerkedhetett Deacutelelőttoumlnkeacutent Deacutelutaacutenonkeacutent aztaacuten ment a jaacuteteacutek amiacuteg ki nem dobtaacutek a csoportot hogy bdquomost maacuter joacute lenne haza mennirdquohellip

Innentől kezdve nem volt megaacutellaacutes egy joacute darabig Szaacutemiacutetoacutegeacutepes szakkoumlr nyolcadikban (BASIC) sajaacutet Commodore 64-es (laacutesd [A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll] aacutebra) vaacutesaacuterlaacutesa Ausztriaacuteban az assembly nyelvű programozaacutes elsajaacutetiacutetaacutesa szaacutemiacutetoacutegeacutepes szakkoumlr gimnaacuteziumban (ott maacuter egy idő utaacuten XT eacutes Pascal) veacuteguumll az akkori Veszpreacutemi Egyetem Műszaki Informatika szakja (eljoumltt a C ideje)

11 aacutebra - A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll

A szerző egyetemi tanulmaacutenyai utaacuten ott maradt az egyetemen megszerezte a PhD fokozatot taniacutetott a Műszaki Informatika Karon majd a Meacuternoumlki Kar Fizika eacutes Mechatronika Inteacutezeteacuteben koumltoumltt ki Ott nagy lelkesedeacutessel uumllt be egyik kolleacutegaacuteja Mikrovezeacuterlők oacuteraacutejaacutera eacutes roppant moacuted eacutelvezte hogy uacutejra assemblyben programozhat eacutes sok-sok hardverkoumlzeli eacutelmeacutenye lehet Ezt a kurzust keacutesőbb a kolleacutega versenyszfeacuteraacuteba toumlrteacutenő taacutevozaacutesa utaacuten legnagyobb oumlroumlmeacutere meg is oumlroumlkoumllte 2012-ben eljoumltt az idő hogy a TAacuteMOP paacutelyaacutezatcsalaacuted kereteacuteben elektronikus tankoumlnyvet keacutesziacutethessen a mikrovezeacuterlők mechatronikai alkalmazaacutesaacuteroacutel

Egyetemi jegyzetet tankoumlnyvet iacuterni nem is olyan koumlnnyű Előszoumlr a szerzőnek el kell doumlntenie hogy kikből aacutell a ceacutelcsoport majd azt hogy mely konkreacutet hardveren eacutes milyen alkalmazaacutesokon keresztuumll igyekszik bemutatni a mikrovezeacuterlők programozaacutesaacutet Ez a tankoumlnyv ugyanis nem aacuteltalaacutenossaacutegban kiacutevaacuten foglalkozni a mikrovezeacuterlők mechatronikai alkalmazaacutesaacuteval hanem a koumlvetkező haacuterom ceacutelkitűzeacutest proacutebaacutelja megvaloacutesiacutetani

bull Az ADuC 842-es mikrovezeacuterlő lehetőseacutegeinek megismereacutese

bull Az assembly nyelv alapjainak elsajaacutetiacutetaacutesa

bull Elemi aacuteramkoumlri kapcsolaacutesokkal egyszerű mechatronikai alkalmazaacutesok megoldaacutesa

A fenti haacuterom ponthoz kieleacutegiacutető magyaraacutezat kiacutevaacutenkozik Vegyuumlk haacutet őket sorba

A vaacutelasztaacutes azeacutert esett az Analog Devices ADuC 842-es mikrovezeacuterlőjeacutere (wwwanalogcom) mert a Pannon Egyetem Fizika eacutes Mechatronika Inteacutezeteacuteben ilyen tiacutepusuacute eszkoumlzoumlkkel toumlrteacutent a Mikrovezeacuterlők taacutergy oktataacutesa maacuter a szerző csatlakozaacutesa előtt A mikrovezeacuterlőkhoumlz Kaacutentor Zoltaacuten docens uacuter tervezett univerzaacutelisan hasznaacutelhatoacute sok feladat megoldaacutesaacutera alkalmas oktataacutesi ceacutelokra remekuumll hasznaacutelhatoacute panelt Aztaacuten taacutevozott a versenyszfeacuteraacuteba

Előfordulhat hogy az ADuC 842-es mikrovezeacuterlőt sokan maacuter elavultnak tartjaacutek azonban szeretneacutenk megnyugtatni a keacutetkedőket az eszkoumlz kivaacuteloacutean alkalmas arra hogy az egyetemi hallgatoacutek megfelelő szakmai ismereteket szerezzenek a mikrovezeacuterlők lelkivilaacutegaacuteroacutel A megleacutevő bdquogeacutepparkotrdquo iacutegy nagy veacutetek lenne egyszerűen kihajiacutetani Az elektronikus tankoumlnyv aacuteltal szolgaacuteltatott bdquokurzusrdquo elveacutegezeacutese utaacuten baacuterki koumlnnyedeacuten aacutetnyergelhet maacutes tiacutepusuacute mikrovezeacuterlőre Olyan ez mintha megfelelő neacutemet nyelvtudaacutes utaacuten arra keacutenyszeruumllneacutenk esetleg oumlnkeacutent doumlnteneacutenk uacutegy hogy paacuter hoacutenapon beluumll eacutertelmesen kommunikaacuteljunk hollandul vagy eacuteppen sveacuteduumll Higgyeacutek el menni fog Oumltoumldannyi erőfesziacuteteacutessel mint az első nyelvneacutel

Az assembly nyelv emlegeteacutese sokakban kellemetlen eacuterzeacuteseket leneacutezeacutest vagy eacuteppen paacutenikreakcioacutet vaacutelt ki Valoacute igaz ceacuteges koumlrnyezetben ritkaacuten hasznaacuteljaacutek sokkal inkaacutebb koumlvetelik meg a C nyelv vagy tovaacutebbi script-nyelvek

Created by XMLmind XSL-FO Converter

Előszoacute eacutes ars poetica

ismereteacutet Ennek nyilvaacuten megvan a maga oka A szerző viszont uacutegy gondolja hogy ha maacuter egyszer mikrovezeacuterlővel fogunk egyszerű kis aacuteramkoumlroumlket szenzorokat eacutes leacuteptetőmotort műkoumldtetni mindenkeacuteppen eacuterdemes az assembly nyelvvel kezdeni Ezen keresztuumll eacutertjuumlk meg ugyanis igazaacuten a hardverkoumlzeli programozaacutes leacutenyegeacutet eacutes eacutelhetjuumlk aacutet azt az eacutelmeacutenyt amikor joacuteformaacuten keacutet ujjunk koumlzeacute csippenthetjuumlk a biteket Termeacuteszetesen koumlnnyen belefuthatunk olyan probleacutema melynek megoldaacutesa sokkal keacutenyelmesebb C nyelven iacutert programmal de a mikrovezeacuterlőkkel toumlrteacutenő ismerkedeacutesneacutel maradunk az assemblyvel nyelvneacutel

A mikrovezeacuterlő mechatronikai alkalmazaacutesaacutehoz kuumllső aacuteramkoumlroumlkre lesz szuumlkseacuteg Ebben a tananyagban nem taacutergyalunk bonyolult bdquopoacutekhaacuteloacutekatrdquo az aacuteramkoumlroumlk egeacuteszen csekeacutely villamossaacutegtani elektronikai ismeretek alapjaacuten koumlnnyen aacutetlaacutethatoacutek lesznek műkoumldeacutesuumlk koumlnnyen megeacuterthető lesz

A tankoumlnyv termeacuteszetesen nem lesz teljes Egyetlen szaacutemiacutetaacutestechnikai jegyzet vagy koumlnyv sem lehet teljes Viszont toumlrekedni fogunk arra hogy az ADuC 842-es mikrovezeacuterlő csaknem valamennyi utasiacutetaacutesaacutet ciacutemzeacutesmoacutedjaacutet hasznaacuteljuk ill lehetőseacutegeinek nagyjaacuteboacutel a feleacutere műkoumldő programot alkalmazaacutest ismertessuumlnk A tananyag feleacutepiacuteteacutese iteratiacutev jellegű lesz Ez azt jelenti hogy nem kimeriacutető moacutedon ismertetuumlnk egy-egy teacutemakoumlrt (pl portokat megszakiacutetaacutesokat vagy időziacutetőket) hanem mindig csak olyan meacuterteacutekben ahogyan azt az adott reacutesz megkiacutevaacutenja Aztaacuten a koumlvetkező feladatnaacutel meacutelyebben Aztaacuten meacuteg meacutelyebbenhellip

Lassan az előszoacute veacutegeacutehez eacuteruumlnk A szerző szeretne meacuteltoacute emleacuteket aacutelliacutetani neacutehaacuteny szakkoumlnyvnek (laacutesd [A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek] aacutebra) melyek neacutelkuumll nem sokra ment volna a joacute oumlreg Commodore 64-es programozaacutesaacuteval eacutes a nagyon egyszerű LED-ek villogtataacutesaacutera alkalmas kuumllső aacuteramkoumlr barkaacutecsolaacutesaacuteval gimnazista koraacuteban Ezek a koumlnyvek feleacutepiacuteteacutesuumlk egyes reacuteszeik peacuteldakeacutent aacutellnak a szerző előtt A mai kor hallgatoacutei maacuter nem biztos hogy foumllismerik őket de idősebb csalaacutedtagjaik baraacutetaik koumlzoumltt bizonyaacutera akadnak ilyenek

12 aacutebra - A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek

A szerző őszinteacuten remeacuteli hogy elektronikus tankoumlnyveacutet eacuterdeklődeacutessel eacutes haszonnal fogjaacutek forgatni (goumlrgetni) mechatronikus hallgatoacutek villamosmeacuternoumlk hallgatoacutek informatikus hallgatoacutek de akaacuter eacuterdeklődő koumlzeacutepiskolaacutesok is

Ez a tankoumlnyv nem szakkoumlnyv Nem szakembereknek keacuteszuumllt Egyetemi hallgatoacuteknak keacuteszuumllt akik a tankoumlnyvben leiacutertak elsajaacutetiacutetaacutesa utaacuten joacute eseacutellyel a szakember-jeloumllt szinten talaacuteljaacutek majd magukat Eacutes ha lesz hozzaacute erejuumlk eacutes kitartaacutesuk akkor nem is olyan sokkal keacutesőbb igazi szakemberek lesznek

Joacute tanulaacutest programozaacutest aacuteramkoumlreacutepiacuteteacutest eacutes meacuteg toumlbb oumlnaacutelloacute megvaloacutesiacutetott oumltletet kiacutevaacutenva

Kraacutenicz Balaacutezs

Created by XMLmind XSL-FO Converter

Előszoacute eacutes ars poetica

szerző

Veszpreacutem 2013 aacuteprilisa

Created by XMLmind XSL-FO Converter

2 fejezet - Ismerkedeacutes az assembly programozaacutesi nyelvvel1 Az assembly nyelvről aacuteltalaacutebanSzaacutemiacutetoacutegeacutepek programozaacutesaacutera szaacutemos programnyelvet fejlesztettek ki a hőskor oacuteta A legalacsonyabb szintű programozaacutesi nyelv a geacutepi koacuted Ez a nyelv a programot alkotoacute binaacuteris utasiacutetaacutesok azaz puszta szaacutemeacuterteacutekek sorozataacuteboacutel aacutell A geacutepi koacutedban valoacute programozaacutes meglehetősen neheacutezkes lenne (a hőskorban viszont egy ideig teacutenylegesen iacutegy csinaacuteltaacutek) ezeacutert egy-egy roumlvidiacuteteacutest uacutegynevezett mnemonikot rendelnek minden egyes utasiacutetaacuteshoz A mnemonik aacuteltalaacuteban az utasiacutetaacutes jelenteacuteseacutet leiacuteroacute toumlmoumlr toumlbbnyire angol kifejezeacutesből alkotott betűszoacute Ezeket a mnemonikokat oumlnmagukban szokaacutes assembly utasiacutetaacutesoknak nevezni Az ADuC 842-es mikrovezeacuterlő 8052-es tiacutepusuacute magjaacutenak keacuteszleteacuteből neacutehaacuteny utasiacutetaacutest az [A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese] mutat be melyben a hexadecimaacutelis szaacutemokat a szaacutem utaacuten iacutert h-val jeloumlljuumlk

21 taacuteblaacutezat - A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese

Geacutepi koacuted Assembly mnemonik Angol kifejezeacutes Magyar jelenteacutes

14h DEC A Decrement Accumulator Az akkumulaacutetor eacuterteacutekeacutenek csoumlkkenteacutese eggyel

74h MOV Adata Move Data to Accumulator A data eacuterteacutekű adatbaacutejt (be)mozgataacutesa az akkumulaacutetorba

23h RL A Rotate Accumulator Left Az akkumulaacutetor elforgataacutesa egy bittel balra

Az [A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese] alapjaacuten magaacutetoacutel eacutertetődő hogy assembly nyelven koumlnnyebb programozni mint geacutepi koacutedban Geacutepi koacutedban ugyanis teacutenylegesen puszta szaacutemokat kellene iacuterogatnunk egymaacutes utaacuten program gyanaacutent A keacutet kifejezeacutest egyeacutebkeacutent eacuterdekes moacutedon sokszor sok helyen oumlsszekeverik Uumlgyeljuumlnk tehaacutet a helyes megnevezeacutesre mi assembly nyelven fogunk programokat iacuterni

A fentiek utaacuten baacuterki megkeacuterdezheti hogy hogyan lesz az assembly utasiacutetaacutesokboacutel teacutenylegesen geacutepi koacuted amit maacuter meg lehet etetni a processzorral Nos erre valoacute a fordiacutetoacuteprogram azaz az assembler Az assembler teacutenylegesen geacutepi koacutedot aacutelliacutet elő amit aztaacuten alkalmas letoumlltőprogrammal raacutetoumllthetuumlnk a mikrovezeacuterlőre eacutes futtathatjuk azt Iacutegy kel tehaacutet eacuteletre az assembly nyelven iacutert programunk

Az assembly nyelvű programozaacutesroacutel azt lehet mondani hogy olyan ez mint amikor egy haacutezat az utolsoacute teacuteglaacuteig eacutes csavarig mi aacutelliacutetunk oumlssze miacuteg magas szintű programozaacutesi nyelvekneacutel keacuteszen kapjuk a falakat esetleg az egeacutesz helyiseacutegeket Az assembly nyelvvel baacutermelyik memoacuteriaciacutemet eleacuterhetjuumlk eacutes kizaacuteroacutelag tőluumlnk fuumlgg hogy annak tartalmaacutet mikeacutent eacutertelmezzuumlk mire hasznaacuteljuk Nincsenek tehaacutet kuumlloumlnfeacutele vaacuteltozoacutetiacutepusaink egyaacuteltalaacuten vaacuteltozoacuteink sincsenek csak memoacuteriarekeszeink Ez furcsaacuten hangozhat annak aki maacuter tanult valamilyen magas szintű programozaacutesi nyelvet (BASIC PASCAL C) de ez az igazsaacuteg Mindenesetre ettől nem kell megijedni

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

assembly nyelven is minden megoldhatoacute eacutes bizonyos probleacutemakoumlrre mint peacuteldaacuteul erősen hardverkoumlzeli uumlgyek kezeleacuteseacutere sokszor alkalmasabb mint a magas szintű nyelvek

2 MemoacuteriaAzt a hardverelemet vagy modult amely keacutepes adatok taacuterolaacutesaacutera memoacuteriaacutenak nevezzuumlk Tulajdonkeacuteppen akaacuter egyetlen kondenzaacutetort is memoacuteriaacutenak nevezhetuumlnk egy aacuteramkoumlrben hiszen taacuteroloacuteroacutel van szoacute A digitaacutelis szaacutemiacutetaacutestechnika vilaacutegaacuteban enneacutel persze sokkal toumlbbre van szuumlkseacuteg Ebben az esetben memoacuteriaacutenak azt a hardveregyseacuteget nevezzuumlk amelyik toumlbbnyire azonos meacuteretű digitaacutelis informaacutecioacuteegyseacutegeket keacutepes rendezett moacutedon taacuterolni A legegyszerűbb esetben ez az informaacutecioacuteegyseacuteg egy baacutejt ami nyolc bitből aacutell A memoacuteriaegyseacuteg meacutereteacutet a szerint adjuk meg hogy az haacuteny darabot keacutepes taacuterolni a vaacutelasztott informaacutecioacuteegyseacutegből jelen esetben a baacutejtboacutel A memoacuteriaegyseacutegeket aacuteltalaacuteban uacutegy tervezik hogy a teljes meacuteret a kettő valamely hatvaacutenyaacuteval egyezzen meg A memoacuteria meacutereteacutenek megadaacutesakor az SI-prefixumokat hasznaacuteljaacutek ami persze nem teljesen korrekt hiszen peacuteldaacuteul az 1 kilobaacutejt a szaacutemiacutetaacutestechnikaacuteban szigoruacutean 1 024 baacutejtot jelent a kilo (k) SI-prefixum viszont 103 = 1 000-rel egyenlő Volt proacutebaacutelkozaacutes ide passzoloacute prefixumok bevezeteacuteseacutere (kibi = 210 = 1 024 mebi = 220 = 1 048 576 gibi = 230 stb) csak ez valamieacutert egyelőre nem tudott elterjedni

A memoacuteria rendezett mivolta azt jelenti hogy a memoacuteriarekeszek egyeacutertelműen azonosiacutethatoacutek toumlbbnyire sorszaacutem alapjaacuten Ezt a sorszaacutemot hiacutevjuk egyszerűen memoacuteriaciacutemnek Aacuteltalaacutenos iskolaacutes szakkoumlroumlkoumln ezt a megszaacutemozott fioacutekok metaforaacutejaacuteval szoktaacutek szemleacuteltetni eacutes valljuk be ez a szeacutep analoacutegia egyetemi szinten is kifogaacutestalanul megaacutellja a helyeacutet

Az ADuC mikrovezeacuterlők memoacuteriaszervezeacutese egeacuteszen sajaacutetos Ennek taacutergyalaacutesa az iteratiacutev feleacutepiacuteteacutesuumlnknek megfelelően a keacutesőbbi fejezetekben toumlrteacutenik Ha maacuter a memoacuteriaacuteknaacutel tartunk emliacutetsuumlk meg hogy keacutet sajaacutetos memoacuteriafeleacutepiacuteteacutes terjedt el a szaacutemiacutetaacutestechnikaacuteban Az egyiket Neumann-architektuacuteraacutenak hiacutevjaacutek a Magyarorszaacutegon szuumlletett zsidoacute szaacutermazaacutesuacute elkeacutepesztően briliaacutens elmeacutejű matematikus tiszteleteacutere Enneacutel az architektuacuteraacutenaacutel koumlzoumls memoacuteriaacuteban taacuteroljuk a programkoacutedot eacutes az adatokat is Iacutegy tehaacutet egy koacuted minden tovaacutebbi neacutelkuumll aacutetiacuterhatja sajaacutet magaacutet A maacutesik tiacutepus a Harvard-architektuacutera Enneacutel az architektuacuteraacutenaacutel kuumlloumln memoacuteria szolgaacutel a programkoacuted eacutes az adatok taacuterolaacutesaacutera A mikrovezeacuterlőkneacutel sokkal inkaacutebb ez utoacutebbi megoldaacutes terjedt el Ilyen a mieacutenk is

3 RegiszterekAz assembly nyelvről szoacuteloacute aacuteltalaacutenos leiacuteraacutesban azt a hasonlatot hasznaacuteltuk hogy olyan ez mintha az utolsoacute teacuteglaacuteig eacutes csavarig mi magunk raknaacutenk oumlssze egy haacutezat Ehhez nyilvaacuten kell betonkeverő talicska vakoloacutekanaacutel kalapaacutecs eacutes meacuteg sok minden maacutes Baacutermilyen alacsony szintű program veacutegrehajtaacutesaacutenaacutel is segeacutedeszkoumlzoumlkre van szuumlkseacuteguumlnk hiszen magaacuteval az assembly nyelvvel oumlnmagaacuteban nem tudnaacutenk mivel műveleteket veacutegrehajtani Ezek a segeacutedeszkoumlzoumlk a mikroprocesszoroknaacutel elsősorban a memoacuteriarekeszek a regiszterek eacutes a jelzőbitek vagy flag-ek Ez utoacutebbiakroacutel keacutesőbb lesz majd szoacute

A memoacuteriarekeszek koumlzvetlen eacutes gyors eleacutereacutese az assembly nyelv nagy előnye Egy-egy mikroprocesszor architektuacuteraacutejaacutenaacutel toumlbbfeacutele memoacuteriaciacutemnek lehet kituumlntetett szerepe hiszen a memoacuteriarekeszek tartalmaacuteval aacuteltalaacuteban kezdeni akarunk valamit meg akarjuk vizsgaacutelni eacuterteacutekuumlket logikai vagy algebrai műveletet akarunk veacutegrehajtani rajtuk el akarjuk menteni tartalmukat stb Az ilyesfeacutele műveletek megkoumlnnyiacuteteacuteseacutere eacutes a lehető leggyorsabb veacutegrehajtaacutesaacutera a mikroprocesszorok kituumlntetett memoacuteriarekeszekkel biacuternak ezek megnevezeacutese a regiszter

Baacuter ezt a fejezetet meacuteg mindig eleacuteggeacute aacuteltalaacutenos leiacuteraacutesnak szaacutenjuk a konkreacutet peacuteldaacutek bemutataacutesa maacuter a 80518052-es processzormag utasiacutetaacuteskeacuteszleteacutevel toumlrteacutenik Jegyezzuumlk meg hogy valamennyi memoacuteriarekesz ill

regiszter egybaacutejtos azaz eacuterteacuteke a legegyszerűbb eacutertelmezeacutes szerint a halmazboacutel szaacutermazik Olyan eset azonban előfordulhat hogy keacutet egybaacutejtos regiszter oumlsszetartozik eacutes inkaacutebb azt mondjuk hogy keacutetbaacutejtos regiszterről van szoacute

Aacuteltalaacutenossaacutegban elmondhatoacute hogy a mikroprocesszoroknak van egy elsődleges fontossaacuteguacute regiszteruumlk amit akkumulaacutetornak hiacutevnak Az assembly nyelvek erre szinte minden esetben az A szimboacutelummal hivatkoznak Egyszerűbb mikroprocesszorok eseteacuteben az akkumulaacutetor meacuterete mindoumlsszesen egyetlen baacutejt azaz nyolc bit A program veacutegrehajtaacutesa soraacuten joacuteformaacuten minden szaacutemiacutetaacutes eacutes művelet az akkumulaacutetorban toumlrteacutenik eacutes ide keruumll vissza a szaacutemiacutetaacutes vagy művelet veacutegeredmeacutenye is

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

A 80518052-es processzormagnak az akkumulaacutetoron kiacutevuumll van meacuteg heacutet darab kiemelt fontossaacuteguacute regisztere R0 R1 R7 Ezeket nagyon sok feladatra alkalmazhatjuk ahogy azt majd a keacutesőbbiekben laacutetni fogjuk

4 Koumlzvetlen ciacutemzeacutesCiacutemzeacutesmoacutedon azt a moacutedot eacutertjuumlk ahogyan egy memoacuteriarekesz tartalmaacutet eleacuterjuumlk Az assembly nyelveknek minden olyan ciacutemzeacutesmoacutedot tartalmazniuk kell melyekkel meacuteg a legbonyolultabb probleacutema is megoldhatoacute Az persze maacuter maacutes keacuterdeacutes hogy ez mekkora erőfesziacuteteacutest ill programbonyolultsaacutegot jelent A gyaacutertoacutek azonban sokszor keacutenyelmesebbeacute teszik a programozoacute eacuteleteacutet eacutes olyan ciacutemzeacutesmoacutedot is megvaloacutesiacutetanak amelyre tulajdonkeacuteppen nem is lenne okvetlenuumll szuumlkseacuteg de felhasznaacutelaacutesaacuteval szaacutemos probleacutema esetleg sokkal gyorsabban eacutes koumlnnyebben oldhatoacute meg

Az előző alfejezet utaacuten maacuter mutathatunk peacuteldaacutet arra az esetre amikor az akkumulaacutetorba egy a programozoacute aacuteltal roumlgziacutetett eacuterteacuteket mondjuk 28-at kell betoumllteni Ehhez megtanuljuk azt az utasiacutetaacutest amellyel adatokat lehet mozgatni Ennek mnemonikja MOV a mnemonik pedig az angol Move (mozgat) szoacuteboacutel szaacutermazik Az utasiacutetaacutes szintaxisaacutenaacutel nagyon fontos hogy előszoumlr azt a memoacuteriarekeszt nevezzuumlk meg amelyikbe az adatot mozgatni akarjuk maacutesodikkeacutent pedig azt a memoacuteriarekeszt amelyikből mozgatni akarjuk az adatot A fenti feladat tehaacutet iacutegy oldhatoacute meg

MOV A75

Ezt a ciacutemzeacutesmoacutedot koumlzvetlen ciacutemzeacutesnek (angolul Immediate Addressing) nevezzuumlk Azeacutert koumlzvetlen a ciacutemzeacutes mert az akkumulaacutetorba vagy aacuteltalaacutenosan a kijeloumllt helyre toumlrteacutenő adatmozgataacuteshoz nem kell eleacuterni semmilyen maacutes memoacuteriarekeszt hiszen az adatot koumlzvetlenuumll mozgatjuk a kijeloumllt helyre Ezt mindig a kettős kereszt () szimboacutelummal jeloumlljuumlk Ezt az assemblernek fel kell ismernie eacutes helyesen kell lefordiacutetania a programkoacutedot Geacutepi koacutedban az utasiacutetaacutest koacutedoloacute szaacutemeacuterteacutek eacutes a konkreacutet adat egymaacutest koumlvető memoacuteriarekeszekben helyezkedik el vagyis az adat koumlzvetlenuumll az utasiacutetaacutes koacutedjaacutet koumlveti

Ha maacuter itt tartunk tanuljuk meg hogy koumlzvetlen ciacutemzeacutesekneacutel hogyan hasznaacutelhatunk binaacuteris hexadecimaacutelis vagy akaacuter karakteres eacuterteacutekmegadaacutest Az alaacutebbi koumlzvetlen ciacutemzeacutesek mind szinonimaacutek a 80518052-es processzormagok assembly nyelven toumlrteacutenő programozaacutesaacutehoz hasznaacutelhatoacute assemblerekneacutel

MOV A75 MOV A04Bh MOV A01001011b MOV ArsquoKrsquo

Jegyezzuumlk meg a szintaxist Decimaacutelis eacuterteacuteket a felhasznaacutelt szaacutemjegyek szaacutemaacutetoacutel fuumlggetlenuumll mindenfeacutele egyeacuteb jeloumlleacutes neacutelkuumll iacuterunk a kettős kereszt utaacuten A hexadecimaacutelis eacuterteacutekek megadaacutesa mindig egy 0-val kezdődik majd az azt koumlvető teacutenylegesen a hexadecimaacutelis szaacutemot jeloumllő keacutet karakter (hexadecimaacutelis szaacutemjegy) utaacuten egy h betűt iacuterunk Binaacuteris eacuterteacutekmegadaacutesnaacutel a nyolc szaacutemjegyet (1-et vagy 0-t) egy b betű koumlveti ASCII koacuted megadaacutesaacutenaacutel pedig nyugodtan hasznaacutelhatjuk magaacutet a karaktert csak tegyuumlk aposztroacutefok koumlzeacute A koumlzvetlen ciacutemzeacutes szerencseacutere az Rn regiszterekre is műkoumldik

MOV RnrsquoKrsquo

Itt az n betű indexkeacutent eacutertelmezendő csak a programkoacutedok stiacutelusa szerint nem suumlllyesztett betűtiacutepussal iacuterjuk Az előző alfejezet utolsoacute bekezdeacuteseacuteben bemutatott R regiszterek darabszaacutema szerint n eacuterteacuteke 0 eacutes 7 koumlzoumltti egeacutesz szaacutem lehet

5 Direkt ciacutemzeacutesKeacutepzeljuumlnk el egy olyan memoacuteriamodult melynek meacuterete mindoumlsszesen 256 baacutejt (Azeacutert ilyet keacutepzeljuumlnk el mert az ADuC 842-es architektuacuteraacutejaacutenaacutel ez meacuteg sokszor vissza fog koumlszoumlnni ugyanis pontosan ilyen modulokboacutel eacutepuumll foumll a memoacuteria) A memoacuteriarekeszek ciacutemei ezek szerint 0-toacutel 255-ig terjednek hexadecimaacutelisan iacuterva 00h-toacutel FFh-ig Ha valamelyik speciaacutelis regiszterbe szeretneacutenk betoumllteni valamelyik memoacuteriaciacutemen talaacutelhatoacute eacuterteacuteket akkor direkt ciacutemzeacutest (angolul Direct Addressing) hasznaacutelunk

Neacutezzuumlk a koumlvetkező peacuteldaacutet

MOV A030h

Ennek veacutegrehajtaacutesa utaacuten az akkumulaacutetorba az az eacuterteacutek keruumll amelyik a 30h-s ciacutemen talaacutelhatoacute A 30h-s ciacutemen talaacutelhatoacute eacuterteacutek ettől szerencseacutere nem vaacuteltozik meg

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

Az adatmozgataacutes sorrendje fordiacutetott is lehet termeacuteszetesen

MOV 030hR2

Ennek veacutegrehajtaacutesa utaacuten a 30h memoacuteriaciacutemre az az eacuterteacutek keruumll amelyik az R2-es regiszterben talaacutelhatoacute Ekkor az R2-es regiszter tartalma szintuacutegy vaacuteltozatlanul marad

Direkt ciacutemzeacutessel az akkumulaacutetor eacutes az R0 R1 R7 regiszterek valamelyike koumlzoumltt is koumlnnyen bonyoliacutethatoacute az adatmaacutesolaacutes peacuteldaacuteul

MOV AR5

vagy

MOV R6A

Jegyezzuumlk azonban meg hogy ha az egyik R regiszter tartalmaacutet akarjuk a maacutesikba toumllteni akkor erre a műveletre nincsen elegaacutens utasiacutetaacutes Ha tehaacutet mondjuk R0 tartalmaacutet akarjuk R7-be maacutesolni akkor segiacutetseacuteguumll hiacutevhatjuk peacuteldaacuteul az akkumulaacutetort

MOV AR0MOV R7A

Direkt ciacutemzeacutessel egyik memoacuteriarekesz tartalmaacutet aacutetmaacutesolhatjuk a maacutesik memoacuteriarekeszbe

MOV 03Eh03Ah

Ennek veacutegrehajtaacutesa utaacuten a 3Ah ciacutemen talaacutelhatoacute eacuterteacutek a 3Eh ciacutemre maacutesoloacutedik A direkt ciacutemzeacutest tartalmazoacute adatmozgataacutest az utasiacutetaacuteskeacuteszlet leiacuteraacutesai toumlbbnyire a

MOV AdirectMOV directAMOV RndirectMOV directRnMOV directdirect

teacutetelekkel illetik a leacutenyeg hogy szerepel bennuumlk a direct utalaacutes

A maacuter sokat hasznaacutelt MOV utasiacutetaacutesnak van olyan variaacutensa is amelyben keveredik a direkt eacutes a koumlzvetlen ciacutemzeacutes

MOV 032h125

Ennek veacutegrehajtaacutesa utaacuten a decimaacutelisan 125-oumlt jelentő eacuterteacutek keruumll a 32h ciacutemre Aacuteltalaacutenos hivatkozaacutesa a koumlvetkező

MOV directdata

6 Oumlsszehasonliacutetaacutesok eacutes ugraacutesokMinden assembly nyelvben lennie kell olyan utasiacutetaacutesoknak melyek lehetőveacute teszik regiszterek vagy memoacuteriarekeszek tartalmaacutenak oumlsszehasonliacutetaacutesaacutet Ha ez nem iacutegy lenne nem lehetne programelaacutegazaacutest csinaacutelni eacutes csak primitiacutev koacutedokat tudnaacutenk iacuterni Ha maacuter szoacuteba keruumllt az elaacutegazaacutes akkor nyilvaacutenvaloacutean olyan utasiacutetaacutesokra is szuumlkseacuteg van amelyekkel a program vezeacuterleacuteseacutet a veacutegrehajtandoacute reacuteszekhez lehet ugratni Aki magas szintű programozaacutesi nyelvekkel kezdte a programozaacutes alapjait annak ez most nagyon idegen lesz de assemblyben mesteri moacutedon lehet oumlssze-vissza ugraacuteltatni a program veacutegrehajtaacutesaacutet eacutes mindezt uacutegy hogy annak meacuteg eacutertelme is legyen

Az oumlsszehasonliacutetaacutesok eredmeacutenyeacuteről sokszor uacutegy eacutertesuumlluumlnk hogy egy speciaacutelis regiszter valamely kituumlntetett bitje vagy bitjei adott jelenteacutes szerint aacutellnak be 0-ra vagy 1-re Az ilyen jelzőbiteket szoktaacutek angolul flag-nek nevezni Talaacutelkozni fogunk majd olyan jelzőbittel amelyik egy eacuterteacutek-oumlsszehasonliacutetaacutesnaacutel 1-re aacutell be ha az egyik eacuterteacutek kisebb mint a maacutesik eacutes 0-ra aacutell be ha ez nem iacutegy van azaz nagyobb vagy egyenlő Ezek utaacuten egy arra alkalmas utasiacutetaacutessal elugrathatjuk a programot akkor ha a jelzőbit eacuterteacuteke 1 kuumlloumlnben a program veacutegrehajtaacutesa szeacutepen csorog tovaacutebb Ez az elugrataacutes aacuteltalaacuteban a jelzőbit 0 eacuterteacutekeacutere is megfogalmazhatoacute Lesznek azutaacuten olyan utasiacutetaacutesok is amelyek egymagukban veacutegeznek oumlsszehasonliacutetaacutest majd az eredmeacuteny valamilyen tulajdonsaacutegaacutenak

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

megfelelően ugratjaacutek el a programvezeacuterleacutest vagy hagyjaacutek tovaacutebb csorogni a programot

Az olvasoacutet megnyugtatjuk hamarosan peacuteldaacutek oumlzoumlneacutevel tesszuumlk vilaacutegossaacute az [Ismerkedeacutes az assembly programozaacutesi nyelvvel] fejezetben leiacutertakat

Created by XMLmind XSL-FO Converter

3 fejezet - Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlrAz ADuC 842-es chiphez hasznaacutelhatoacute assembler a letoumlltőprogram eacutes egyeacuteb szoftverek ismerteteacutese nem e tankoumlnyv elsődleges feladata viszont nem is hiaacutenyozhat ha a teacutemaacuteval most ismerkedő hallgatoacutek teacutenylegesen hasznaacutelni akarjaacutek az eszkoumlzoumlket iacutegy roumlviden szoacutelnunk kell ezekről is

A hallgatoacutei panelt amelyre ezt a tankoumlnyvet alapozzuk Dr Kaacutentor Zoltaacuten a Fizika Inteacutezet egykori munkataacutersa tervezte Itt most csak a fő funkcioacuteit foglaljuk oumlssze a reacuteszletes aacuteramkoumlri terv a Fuumlggeleacutekben talaacutelhatoacute olyan reacuteszletesseacuteggel hogy az eszkoumlz reprodukaacutelhatoacute legyen A [A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll] aacutebra keacutet neacutezetből mutatja a panelt Talaacutelhatoacute rajta egy USB-csatlakozoacute eacutes egy 20-poacutelusuacute szalagkaacutebel-csatlakozoacute Az USB-csatlakozoacutehoz baacutetran hasznaacutelhatunk a nyomtatoacuteknaacutel megszokott USB-kaacutebelt Ezzel kapcsolhatjuk panelunkat a szaacutemiacutetoacutegeacutephez A 20-poacutelusuacute szalagkaacutebel-csatlakozoacute tuumlskeacuteire keacutet teljes IO-port laacutebai a +5 V-os taacutepfeszuumlltseacuteg eacutes a foumlld (GND) vannak kivezetve A csatlakozoacute tuumlskeacuteinek funkcioacutekiosztaacutesaacutet a fuumlggeleacutekben talaacuteljuk Ugyanez igaz a panelboacutel kiaacutelloacute egyeacuteb tuumlskeacutek ismerteteacuteseacutere is

31 aacutebra - A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll

A panelon joacutel foumllismerhető egy nyolcas LED-sor eacutes maga az ADuC 842-es mikrovezeacuterlő Talaacutelunk meacuteg neacutegy nyomoacutegombot a panel hosszabbik eacuteleacutehez (a Pannon Egyetem felirathoz) koumlzelebbi kettőnek baacutermilyen funkcioacutet adhatunk szoftveresen A szalagkaacutebel-csatlakozoacutehoz legkoumlzelebb elhelyezkedő gomb a resetgomb A negyedik a program letoumllteacuteseacutet lehetőveacute tevő uumlzemmoacutedba aacutelliacutetja a mikrovezeacuterlőt Ilyenkor uacutegy kell eljaacuternunk hogy egyik ujjunkkal lenyomjuk ezt a gombot majd ezt fel nem engedve lenyomjuk a resetgombot is Iacutegy aacutell az eszkoumlz letoumlltőuumlzemmoacutedba

Az ADuC 842-es processzormagja a 8052-es Ez csak nagyon keveacutes reacuteszletben (főkeacutent a memoacuteriateruumlletek meacutereteacuteben) kuumlloumlnboumlzik a 8051-es magtoacutel iacutegy nem veacuteletlen hogy az Analog Devices gyaacuteri CD-i is a 8051-es programozaacutesaacutera alkalmas assemblert tartalmazzaacutek Ennek neve asm51exe Gyaacuteri CD hiacutejaacuten az Internetről toumllthetjuumlk le ezt az alkalmazaacutest melyet meacuteg DOS alaacute fejlesztettek Windows XP-n meacuteg simaacuten futtathatoacute parancsuumlzemmoacutedban vagy valamely alkalmas Commander-t hasznaacutelva Keacutesőbbi Windows rendszer eseteacuten emulaacutetorra lesz szuumlkseacuteguumlnk Az asm51exe assemblerhez komplett leiacuteraacutesokat is koumlnnyen talaacutelunk az Interneten Ezeacutert itt csak annyit emliacutetuumlnk meg hogy assembly koacutedot tartalmazoacute faacutejl (aacuteltalaacuteban sima szoumlvegfaacutejl legfoumlljebb asm kiterjeszteacutest szokaacutes neki adni) lefordiacutetaacutesa utaacuten egy LST eacutes egy HEX kiterjeszteacutesű faacutejl generaacuteloacutedik Az LST faacutejlban (ez is egyszerű szoumlvegfaacutejl) taacutejeacutekozoacutedhatunk a fordiacutetoacute aacuteltal talaacutelt hibaacutekroacutel eacutes a memoacuteriaciacutemek hozzaacuterendeleacuteseacuteről Aacuteltalaacutenossaacutegban elmondhatoacute hogy az LST faacutejlba toumlbbnyire csak akkor kukkantunk bele ha a fordiacutetoacute hibaacuteba uumltkoumlzoumltt

A HEX kiterjeszteacutesű faacutejl az amit le kell toumlltenuumlnk a mikrovezeacuterlőre hogy ott futtatni tudjuk Ehhez megfelelő letoumlltőprogramra van szuumlkseacuteguumlnk Az Analog Devices honlapjaacuteroacutel (wwwanalogcom) ez az alkalmazaacutes szabadon letoumllthető a faacutejl neve wsd_setup_v705 az alkalmazaacuteseacute pedig Windows Serial Dowloader Első letoumllteacutes előtt a legfontosabb dolgunk az hogy a Configuration menuumlpontnaacutel beaacutelliacutetsuk a mikrovezeacuterlő aacuteltal lefoglalt Com Port szaacutemaacutet Ezt a Windows VezeacuterlőpultrarrRendszerrarrHardverrarrEszkoumlzkezelőrarrPortok (COM eacutes LPT) helyen talaacuteljuk Az alkalmazaacutes feluumlleteacutet az alaacutebbi aacutebra mutatja

32 aacutebra - Az Analog Devices soros porti letoumlltőprogramjaacutenak feluumllete

Created by XMLmind XSL-FO Converter

Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr

A keacutesőbbiekben a soros porti kommunikaacutecioacute lefolytataacutesaacutehoz eacutes a mikrovezeacuterlőről a PC-re eacuterkező uumlzenetek megjeleniacuteteacuteseacutehez szuumlkseacuteguumlnk lesz arra alkalmas szoftverre Az Interneten sok ilyen alkalmazaacutes eleacuterhető A szerző a Hercules nevű freeware alkalmazaacutest hasznaacutelta a tankoumlnyvbe bekeruumllt kommunikaacutecioacutes peacuteldaacutekat ezzel valoacutesiacutetotta meg Ennek az alkalmazaacutesnak a feluumlleteacutet az [A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete] aacutebraacuten laacutethatjuk A Serial menuumlpontnaacutel ugyanazt a COM Portot kell beaacutelliacutetanunk mint a letoumlltőprogramnaacutel Hasznaacutelat koumlzben arra azonban nagyon figyeljuumlnk hogy ha a Hercules alkalmazaacutesban nem zaacuterjuk be a koraacutebban megnyitott soros portot akkor nem tudunk uacutejabb programot letoumllteni a mikrovezeacuterlőre a Windows Serial Downloader-rel Ez a figyelmetlenseacuteg kaacutert nem bosszuacutesaacutegot viszont annaacutel inkaacutebb tud okoznihellip

33 aacutebra - A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete

Created by XMLmind XSL-FO Converter

4 fejezet - Első programunk villogtassuk a panel LED-jeit1 feladat

Az oktataacutesi ceacutelra tervezett panelon egy LED-sor talaacutelhatoacute amely 8 darab LED-ből aacutell Villogtassuk a LED-eket 1 Hz-es frekvenciaacuteval uacutegy hogy egyszer az egyik oldali neacutegy maacutesszor a maacutesik oldali neacutegy vilaacutegiacutetson [Code01]

A feladat megoldaacutesa nagyon egyszerű lesz csak paacuter sorboacutel fog aacutellni Ennek elleneacutere neacutehaacuteny dolgot meacuteg meg kell beszeacutelnuumlnk hogy eacutertsuumlk mi mieacutert keruumll a programba A magyaraacutezatokat a koumlvetkező neacutehaacuteny alfejezetben talaacuteljuk de mindig csak annyit amennyire eacuteppen szuumlkseacuteguumlnk van

1 Portok eacutes funkcioacuteregiszterekAz ADuC 842-es mikrovezeacuterlőnek neacutegy darab nyolcbites portja van melyek nagyon sokfeacutele ceacutelra toumlbbek koumlzt IO-műveletekre hasznaacutelhatoacutek A portoknak megfelelő neacutegy baacutejt a mikrovezeacuterlő memoacuteriaacutejaacutenak egy-egy ciacutemeacuten talaacutelhatoacute Emliacutetettuumlk maacuter hogy egy-egy speciaacutelis memoacuteriarekeszt regiszternek szoktunk nevezni Na haacutet mi lenne speciaacutelisabb egy szaacutemiacutetoacutegeacutepneacutel mint az IO-portok Az ADuC 842-es mikrovezeacuterlő műkoumldeacuteseacutet konfiguraacutecioacutejaacutet a portokon kiacutevuumll meacuteg nagyon sok tovaacutebbi memoacuteriarekesz tartalma befolyaacutesolja Eacuteppen a kituumlntetett szerepuumlk miatt ezek a bizonyos memoacuteriarekeszek a speciaacutelis funkcioacutejuacute regiszterek (angolul Special Function Register roumlvidiacutetve SFR) elnevezeacutest kaptaacutek

A hallgatoacutei panelon a 2 port felel a LED-ek műkoumldeacuteseacuteeacutert Ennek a portnak A0h a ciacuteme de hogy az ilyesfeacutele ciacutemeket ne kelljen fejben tartani programozaacutesnaacutel az assemblerben ehhez kuumlloumln szimboacutelumot rendeltek P2 Ismerve ezt a szimboacutelumot soha toumlbbet nem kell a konkreacutet ciacutemmel foglalkoznunk

A P2 SFR bitjei egy-egy LED-nek felelnek meg Tudnunk kell hogy az ADuC mikrovezeacuterlő portjai aacuteltalaacuteban nem hasznaacutelhatoacutek aktiacutev kimenetkeacutent ha meacutegis akkor is csak paacuter tized mA aacuteram leadaacutesaacutera keacutepesek kuumlloumlnben fuumlstjelenseacutegek leacutepnek foumll Iacutegy aztaacuten talaacuten nem meglepő hogy a P2-re koumltoumltt LED-ek fordiacutetott logikaacuteval fognak műkoumldni azaz akkor vilaacutegiacutetanak ha a nekik megfelelő bit eacuterteacuteke 0 Ha ez a bit 1 akkor a LED nem vilaacutegiacutet Ennek tudataacuteban az olvasoacute biztos lehet abban hogy a LED-ek katoacutedja neacutez a port laacutebai feleacute Azt is mondhatjuk hogy a P2 port laacutebaival a LED-ek katoacutedjait foumlldre huacutezzuk iacutegy tud folyni az aacuteram

Ha az első 4 LED-et akarjuk bekapcsolni akkor ezt kell tennuumlnk

MOV P211110000b

Ha az maacutesik 4 LED-et akkor ezt

MOV P200001111b

2 Egyszerű ciklusszervezeacutesA programozaacutes egyik legfontosabb eleme a ciklusszervezeacutes Mire joacute egy ciklus Talaacuteloacute lehet az a definiacutecioacute hogy egy ciklussal valamely programreacuteszt bizonyos felteacuteteleknek megfelelő moacutedon toumlbbszoumlr veacutegrehajtunk Ezt a bizonyos programreacuteszt ciklusmagnak szoktaacutek nevezni A ciklusokhoz toumlbbnyire szuumlkseacuteg van egy olyan memoacuteriarekeszre vagy regiszterre melynek eacuterteacuteke meghataacuterozza hogy haacutenyszor hajtoacutedik veacutegre a ciklusmag Ezt a memoacuteriarekeszt vagy regisztert ciklusvaacuteltozoacutenak is nevezhetjuumlk Ciklusokat szervezni mind magas szintű programozaacutesi nyelvekben mind assemblyben toumlbbfeacutelekeacuteppen lehetseacuteges A legegyszerűbb eset talaacuten az amikor a ciklusmagot előre definiaacutelt moacutedon n-szer hajtjuk veacutegre Ezt az n-t adjuk meg magaacuteban a programkoacutedban iacutegy az semmilyen kuumllső vagy belső felteacuteteltől nem fuumlgg

Az ADuC utasiacutetaacutesai koumlzoumltt van egy olyan amelyet remekuumll felhasznaacutelhatunk a fenti kiacutevaacutenalmak szerint Ez a DJNZ utasiacutetaacutes A mnemonik az angol Decrement and Jump if Not Zero (csoumlkkent eacutes ugrik ha nem nulla) kifejezeacutesből szaacutermazik Ennek az utasiacutetaacutesnak keacutet variaacutensa van az egyik szintaxisa a koumlvetkező

DJNZ Rnrel

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

Az Rn azt jelenti hogy ehhez az utasiacutetaacuteshoz baacutermelyik R regisztert hasznaacutelhatjuk Ez az utasiacutetaacutes felteacuteteles elaacutegazaacutest azaz felteacutetelhez koumltoumltt ugraacutest valoacutesiacutet meg A felteacutetel jelen esetben az hogy az Rn regiszter ne legyen egyenlő 0-val Ha a regiszter tartalma meacutegis 0 akkor a program szeacutepen csorog tovaacutebb Ha nem 0 akkor viszont ugraacutes toumlrteacutenik Azt hogy hovaacute ugrik a program vezeacuterleacutese a rel eacuterteacutek mutatja meg Nagyon leacutenyeges hogy ide ne akaacutermilyen memoacuteriaciacutemet keacutepzeljuumlnk Lesz utasiacutetaacutes arra is amelyikkel baacutermekkoraacutet lehet ugratni de itt most maacutesroacutel van szoacute relatiacutev ugraacutes toumlrteacutenik Azeacutert relatiacutev ugraacutes mert ahhoz a memoacuteriaciacutemhez keacutepest ugrik előre vagy haacutetra a program vezeacuterleacutese amelyiken a DJNZ utasiacutetaacutes talaacutelhatoacute Fontos megjegyeznuumlnk hogy baacutermely ilyesfeacutele relatiacutev ugraacutes előrefeleacute 127 baacutejtot visszafeleacute pedig 128 baacutejtot nem leacutephet tuacutel Kezdő programozoacutek sokszor meglepődnek azon (aztaacuten moacutedosult tudataacutellapotba keruumllnek eacutes oumlkoumllcsapaacutesokkal buumlntetik a billentyűzetet pedig az semmiről nem tehet) hogy a laacutetszoacutelag teljesen joacute programkoacutedjukra hibaacutet jelez a fordiacutetoacute Ez sokszor azeacutert van mert relatiacutev ugraacutessal tuacutelleacutepik a 127 ill 128 baacutejtot Ennek kiveacutedeacuteseacutet a keacutesőbbiekben szintuacutegy megtanuljuk

Az assemblyben iacutert koacutedban az ugraacutesok helyeacutenek megjeloumlleacuteseacutere ciacutemkeacuteket hasznaacutelunk Az alkalmazott assemblerben a ciacutemkeacutek eacutekezetes betűket nem tartalmazhatnak eacutes kettősponttal veacutegződnek Vegyuumlk peacuteldaacutenak a koumlvetkező nyuacutelfarknyi koacutedot

MOV R725

label

[ciklusmag]

DJNZ R7label

A fenti koacutedocska a [ciklusmag]-nak nevezett reacuteszt pontosan 25-szoumlr hajtja veacutegre Keacutepzeljuumlk el ugyanis hogy R7 tartalma maacuter csak 1 Ha lefut a ciklusmag akkor a DJNZ utasiacutetaacutes R7 tartalmaacutet 1-gyel csoumlkkenti azaz 1-ről 0-ra majd oumlsszehasonliacutetja azt 0-val Mivel egyezeacutes van ezeacutert maacuter nem toumlrteacutenik ugraacutes a label ciacutemkeacutere (ugraacutes akkor toumlrteacutenik amikor a vizsgaacutelt regiszter tartalma elteacuter 0-toacutel) hanem csorog tovaacutebb a program R7 tartalma ekkor garantaacuteltan 0

A ciklusokat termeacuteszetesen egymaacutesba is aacutegyazhatjuk Eacuteppen uacutegy ahogy a nagyobb hal megeszi a kisebb halat vagy halakat Olyan nincs hogy a halak szaacuteja oumlsszeakad eacutes egyik se tudja megenni a maacutesikat Ciklusok egymaacutesba aacutegyazaacutesaacutera hamarosan laacutetunk peacuteldaacutet

3 SzubrutinokTeacutetelezzuumlk foumll hogy a programunk valamely reacuteszeacutet sokszor (neacutehaacutenyszor igen sokszor ki tudja haacutenyszor stb) akarjuk veacutegrehajtani Ilyenkor nem ceacutelszerű ezt a reacuteszt favaacutegoacute moacutedon sokszor (neacutehaacutenyszor igen sokszor ki tudja haacutenyszor stb) beleiacuterni a programba mert van erre egy uumlgyes megoldaacutes Ezt az uumlgyes megoldaacutest szubrutinnak hiacutevjaacutek A program baacutermely helyeacuteről hiacutevhatunk szubrutinokat Ilyenkor az a memoacuteriaciacutem ahol a program vezeacuterleacutese tartott elmentődik egy meghataacuterozott memoacuteriateruumlletre (ezt hiacutevjaacutek veremnek erről bővebben keacutesőbb) majd a vezeacuterleacutes a szubrutinhoz ugrik Azt a keacutetbaacutejtos regisztert amelyben az aktuaacutelisan veacutegrehajtandoacute utasiacutetaacutes ciacuteme talaacutelhatoacute programszaacutemlaacuteloacutenak hiacutevjuk (angolul Program Counter) A szubrutin veacutegeacutet speciaacutelis utasiacutetaacutessal kell jeleznuumlnk Ha ezt elfelejtjuumlk akkor a vezeacuterleacutes nem ugrik vissza az eredeti helyre hanem a program fut tovaacutebb eacutes aacuteltalaacuteban anomaacutelis műkoumldeacutesbe kezd vagy joacutel lefagyhellip Ha ellenben a helyeacutere iacuterjuk a szubrutint lezaacuteroacute utasiacutetaacutest akkor a verembe keruumllt ciacutem visszatoumlltődik a programszaacutemlaacuteloacuteba eacutes a program futaacutesa a szubrutint megiacutevoacute utasiacutetaacutes utaacuteni ponttoacutel folytatoacutedik Szubrutin hiacutevaacutesaacutenak utasiacutetaacutesa

CALL subroutine

A mnemonik toumlrteacutenetesen teljes egeacuteszeacuteben az angol Call szoacute ami hiacutevaacutest jelent Ha valaki belekukkant az 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacutebe akkor nem is talaacutelja meg a CALL utasiacutetaacutest Talaacutel viszont keacutet maacutesikat ACALL (Absolute Call within 2K block) eacutes LCALL (Long Call) A helyzet az hogy az ACALL utasiacutetaacutessal olyan szubrutint hiacutevhatunk melynek kezdőciacuteme ugyanabban a 2 kilobaacutejtos memoacuteriablokkban van mint a hiacutevoacute utasiacutetaacutes Az LCALL utasiacutetaacutesnaacutel maacuter nincsen semmi ilyesfeacutele megkoumlteacutes Ennek a furcsasaacutegnak az eacutertelme az hogy az ACALL utasiacutetaacutes gyorsabban veacutegrehajtoacutedik eacutes raacuteadaacutesul geacutepi koacutedkeacutent egy baacutejttal kevesebb helyet foglal a memoacuteriaacuteban Ennek akkor van szerepe amikor olyan nagy programot iacuterunk hogy maacuter nagyon oda kell figyelni arra hogy azt bele tudjuk passziacuterozni a memoacuteriaacuteba esetleg eacuteppen azeacutert mert a memoacuteria meacuterete csak neacutehaacutenyszor 2 kilobaacutejt Azonban ha szerencseacutenk van olyan assemblerrel dolgozhatunk amelyik a ciacutemkeacutek elhelyezkedeacutese alapjaacuten uacutegyis eldoumlnti hogy melyiket jobb hasznaacutelni (mondjuk meacuteretre optimalizaacutel) iacutegy nyugodtan hasznaacutelhatjuk simaacuten csak a CALL-t

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

A szubrutinboacutel toumlrteacutenő visszateacutereacutes utasiacutetaacutesa a RET A mnemonik az angol Return from Subroutine (visszateacutereacutes a szubrutinboacutel) kifejezeacutesből szaacutermazik Peacutelda szubrutin hiacutevaacutesaacutera

MOV R725

label

CALL subroutineDJNZ R7label

subroutine

[szubrutin tartalma]

RET

Ez a kis peacuteldaprogramocska eacuteppen uacutegy tartalmaz egy a ciklust mint az előző fejezet peacuteldaacuteja Itt azonban a ciklusmag semmi egyebet nem csinaacutel mint meghiacutev egy szubrutint A ciklusvaacuteltozoacute gyanaacutent felhasznaacutelt R7 regiszter kezdeti eacuterteacuteke alapjaacuten tudhatjuk hogy a szubrutint a ciklus pontosan 25-szoumlr hiacutevja meg Aztaacuten hogy a szubrutin mit tartalmaz az maacuter a programozoacute dolgahellip

4 Ugraacutes a koacutedon beluumllAki eddig magas szintű strukturaacutelt programozaacutest tanult az nagyon joacutel tudja hogy ott hivatalboacutel utaacutelni kellett a koumlzvetlen ugraacutest megvaloacutesiacutetoacute utasiacutetaacutest Nem iacutegy az assemblyben Koumlzvetlen ugraacutesok vagy egyaacuteltalaacuten ugraacutesok neacutelkuumll valamire valoacute assembly koacuted elkeacutepzelhetetlen Ebbe jobb ha beletoumlrőduumlnk A koumlzvetlen ugraacutes utasiacutetaacutesaacutenak a mnemonikja a JMP amely az angol Jump (ugrik) szoacuteboacutel szaacutermazik Az utasiacutetaacutes egyik verzioacuteja utaacuten adott memoacuteriaciacutemet kell megadnunk amelyet termeacuteszetesen ciacutemkeacutevel is reprezentaacutelhatunk

JMP address

Erre az utasiacutetaacutesra ugyanaz az eacuterdekesseacuteg eacuterveacutenyes mint a CALL utasiacutetaacutesra Ezt sem talaacuteljuk meg a 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben Talaacutelunk viszont haacuterom maacutesikat AJMP (Absolute Jump within 2K block abszoluacutet ugraacutes 2K-os blokkon beluumll) LJMP (Long Jump taacutevoli ugraacutes) eacutes SJMP (Short Jump koumlzeli ugraacutes) Az AJMP 2 kilobaacutejtos blokkon beluumlli ugraacutest tud megvaloacutesiacutetani Az LJMP-ra ilyen megkoumlteacutes maacuter nem vonatkozik Az SJMP utasiacutetaacutes relatiacutev ugraacutest valoacutesiacutet meg Ez azt jelenti hogy ez is csak 128 baacutejtnyi taacutevolsaacutegot jelenthet visszafeleacute eacutes 127 baacutejtnyit előre Az utasiacutetaacutesok koumlzoumltt most is a hossz eacutes a veacutegrehajtaacutesi idő a kuumlloumlnbseacuteg Eacutes ha szerencseacutenk van az assembler a ciacutemkeacutek alapjaacuten uacutegyis meghataacuterozza melyik lesz az optimaacutelis amikor simaacuten csak JMP-ot iacuterunk

5 Oacuterajel veacutegrehajtaacutesi időA logikai aacuteramkoumlroumlkből alkotott haacuteloacutezatok a legtoumlbb esetben oacuterajellel műkoumldnek Ezeket hiacutevjuk szekvenciaacutelis haacuteloacutezatoknak A mikroprocesszorok szinteacuten oacuterajelet igeacutenyelnek műkoumldeacutesi sebesseacuteguumlket eacuteppen az oacuterajel frekvenciaacutejaacuteval szokaacutes megadni Az ADuC 842-es oacuterajele maximaacutelisan 16 777 216 Hz Bekapcsolaacuteskor azonban az oacuterajel nem ekkora hanem csak 2 097 152 Hz Ez az uacuten default oacuterajel Az ADuC oacuterajele megfelelő SFR-rel futaacutes koumlzben vaacuteltoztathatoacute (PLLCON SFR) Erre azonban kezdő szinten nem lesz szuumlkseacuteguumlnk

A geacutepi koacuteduacute utasiacutetaacutesok mindegyikeacutenek veacutegrehajtaacutesa egeacutesz szaacutemuacute oacuterajelciklust igeacutenyel Vannak 1 2 3 4 eacutes 9 oacuterajelciklust foumllemeacutesztő utasiacutetaacutesok Azzal hogy egy utasiacutetaacutes haacuteny oacuterajelciklus alatt hajtoacutedik veacutegre aacuteltalaacuteban nem kell toumlrődnuumlnk Egyszer azonban szaacutemoljuk ki hogy mennyi ideig tart egy roumlvidke koacuted peacuteldaacuteul az alaacutebbiak veacutegrehajtaacutesa Előtte azonban meacuteg megtanuljuk hogy a NOP utasiacutetaacutes ami az angol No Operation (nincs művelet) kifejezeacutesből szaacutermazik pontosan azt csinaacutelja hogy semmit sem csinaacutel Eacutes ehhez kemeacuteny 1 oacuterajelciklust emeacuteszt foumll

MOV R7100cik7MOV R622cik6MOV R5237cik5

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET

Az egyes utasiacutetaacutesok veacutegrehajtaacutesaacutenak ciklusszaacutemai a koumlvetkezők

MOV Rndata - 2NOP - 1DJNZ Rnrel ndash 3RET - 4

Ezek alapjaacuten a fenti program oumlsszesen oacuterajelciklust igeacutenyel A szaacutemiacutetaacutes aacutetgondolaacutesa nem neheacutez de inkaacutebb segiacutetuumlnk egy kicsit A legbelső zaacuteroacutejelben az aacutell hogy Ez a NOP utasiacutetaacutes eacutes a koumlzvetlenuumll utaacutena aacutelloacute DJNZ R5cik5 aacuteltal igeacutenyelt oacuterajelciklus A legbelső ciklus melynek R5 a ciklusvaacuteltozoacuteja a kezdeti eacuterteacutek szerint pontosan 237-szer hajtoacutedik veacutegre Innen joumln a 237-es szorzoacute Ahaacutenyszor veacutegrehajtoacutedik ez a ciklus annyiszor kell kieacuterteacutekelni a ciklusvaacuteltozoacutera eacuterveacutenyes kileacutepeacutesi felteacutetelt csakuacutegy mint az oumlsszes toumlbbi ciklusnaacutel Maga a kezdeti eacuterteacutek megadaacutesa R5-nek 2 oacuterajelciklust

igeacutenyel Emiatt szerepel a 2-es az előtt A legbelső ciklus be van aacutegyazva egy kijjebb leacutevő ciklusba ami 22-szer hajtoacutedik veacutegre eacutes aminek ciklusvaacuteltozoacuteja R6 Csakhogy R6 eacuterteacutekeacutenek kieacuterteacutekeleacutese azaz a

koumlvetkező DJNZ utasiacutetaacutes is mindig 3 oacuterajelciklust igeacutenyel Ebből szaacutermazik a 3-as szaacutem az utaacuten Ez előtt a 2-es szaacutem R6 kezdeti eacuterteacutekeacutenek megadaacutesaacutet jelenti Ez a kieacuterteacutekeleacutesekre vonatkozoacute fenti magyaraacutezat szerint meacuteg nyilvaacuten a 22-es szorzoacuten beluumll van Eacutes iacutegy tovaacutebb a teljes kifejezeacutes veacutegeacuteig Az utolsoacute 4-es a szubrutinboacutel valoacute visszateacutereacutes utasiacutetaacutesaacutenak a RET-nek a veacutegrehajtaacutesi ideje A default oacuterajel-frekvenciaacuteval azaz 2 097 152 Hz-cel szaacutemolva 2 097 106 oacuterajelciklus lefutaacutesi ideje 0999 978 maacutesodperc Iacutegy ezzel a kis szubrutinnal nagyjaacuteboacutel 1 maacutesodperces időkeacuteslelteteacutest valoacutesiacutethatunk meg a neacutelkuumll hogy ismerneacutenk az ADuC időziacutetőfunkcioacuteit A keacutesőbbiekben termeacuteszetesen azok koumlzuumll is toumlbbet kiveseacutezuumlnk

6 Az első alkalmazaacutes koacutedjaAz [1 feladat] megoldaacutesaacutehoz immaacuteron mindent tudunk maacuter csak az assemblerrel kapcsolatban kell neacutehaacuteny dolgot tisztaacuteznunk Ezt uacutegy fogjuk tenni hogy előszoumlr veacutegre megneacutezzuumlk magaacutet a koacutedot aztaacuten hozzaacutefűzzuumlk a magyaraacutezatot Az [1 feladat] megoldaacutesaacutet jelentő koacuted a koumlvetkező

Code01asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelataCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a program- vezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacutenORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacutedMAINMOV P211110000b Bekapcsoljuk az alsoacute 4 LED-etCALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintMOV P200001111b Bekapcsoljuk a felső 4 LED-etCALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintJMP MAIN Visszaugratjuk az elejeacutere a programot Tulajdonkeacuteppen veacutegtelen ciklust hozunk leacutetreDELAY Időhuacutezoacute szubrutinMOV R750 05 sec keacuteslelteteacutescik7MOV R622cik6MOV R5237cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

END

A magyaraacutezatok elkezdeacutese előtt felhiacutevjuk a figyelmet arra amit talaacuten az olvasoacute is kitalaacutelt maacuter a koacutedba szuacutert megjegyzeacutesek pontosvesszővel kezdődnek

A koacuted maacutesodik sora eddig ismeretlen teacutetelt tartalmaz $MOD842 Ez a fordiacutetoacutei direktiacuteva arra utasiacutetja az assemblert hogy az ADuC 842-es architektuacuteraacutehoz tartozoacute szimboacutelumlistaacutet hasznaacutelja Ebben a faacutejlban ugyanis joacutel eacuterthető szimboacutelumokat rendeltek a kituumlntetett memoacuteriaciacutemekhez regiszterekhez eacutes speciaacutelis funkcioacutejuacute regiszterekhez Ha maacuter kellő jaacutertassaacutegot szerzett az olvasoacute a teacutemaacuteban eacuterdemes egyszer belekukkantania ebbe a faacutejlba Az elektronikus tankoumlnyvben a tovaacutebbiakban a helytakareacutekossaacuteg veacutegett ezt a direktiacutevaacutet nem tuumlntetjuumlk foumll de jegyezzuumlk meg hogy minden lefordiacutetandoacute koacutednak ezzel kell kezdődnie amennyiben a 842-es architektuacuteraacutet hasznaacuteljuk

A maacutesodik uacutejdonsaacuteg a CSEG direktiacuteva Ezzel jelezzuumlk a fordiacutetoacuteak hogy innentől kezdődik a programkoacuted A koacutedszegmens az END direktiacutevaacuteval zaacuterul Ezekre a direktiacutevaacutekra ugyanaz lesz eacuterveacutenyes a tankoumlnyvben mint a $MOD842-ra

A harmadik uacutejdonsaacuteg az ORG direktiacuteva Ezzel jelezzuumlk az assemblernek hogy mely memoacuteriaciacutemre keruumlljoumln a lefordiacutetott koacuted Ennek fontos szerepe lesz a programok elhelyezeacuteseacuteneacutel Tudnunk kell ugyanis hogy amikor a mikrovezeacuterlő elindul vagy reset toumlrteacutenik akkor a programvezeacuterleacutes a 0000h ciacutemre ugrik Szokjunk hozzaacute ahhoz hogy innen azonnal elugratjuk a programot egy haacutetreacutebb talaacutelhatoacute ciacutemre ugyanis a keacutesőbb taacutergyalandoacute megszakiacutetaacutesok vektorai szeacutepen sorban a koacutedmemoacuteria elejeacuten helyezkednek el Ha semmifeacutele megszakiacutetaacutest sem hasznaacutelunk erre az elugrataacutesra nincs szuumlkseacuteg de jobb ha az oumlsszes koacutedunkat uacutegy iacuterjuk hogy annak eacuterdemi reacutesze kicsit haacutetreacutebb kezdődik mint 0000h Elmondhatjuk hogy a 0060h ciacutemtől kezdődően maacuter semmi veszeacutely nem leselkedik raacutenk a program szervezeacuteseacutenek szempontjaacuteboacutel iacutegy ezt a ciacutemet baacutetran vaacutelaszthatjuk a program eacuterdemi reacutesze kezdeteacutenek

A koacutedban az ORG 0000h sor utaacuten az aacutell hogy JMP MAIN A MAIN itt egy ciacutemke eacutes ide fog ugrani a program indulaacutes vagy reset utaacuten Most maacuter az is eacuterthető hogy mieacutert előzi meg a MAIN ciacutemkeacutet az ORG 0060h direktiacuteva eacutes eacuterteacutek ezen a ciacutemen kezdődik a program eacuterdemi reacutesze

A koacuted maga annyira egyszerű hogy foumlloumlsleges blokkdiagramban megadni az algoritmust A leiacuteraacutes roumlviden bekapcsoljuk az alsoacute 4 LED-et (a toumlbbit kikapcsoljuk) vaacuterakozunk feacutel maacutesodpercet bekapcsoljuk a felső 4 LED-et (a toumlbbit kikapcsoljuk) vaacuterakozunk feacutel maacutesodpercet aztaacuten kezdjuumlk eloumllről az egeacuteszet Az időhuacutezaacutest szubrutin veacutegzi uacutegy ahogyan azt a [Szubrutinok] eacutes [Oacuterajel veacutegrehajtaacutesi idő] alfejezetekben megtaacutergyaltuk

Itt eacutes most szeretneacutenk leszoumlgezni hogy a tovaacutebbiakban az elektronikus tankoumlnyvben szereplő koacutedokba magukba csak annyi kommentet iacuterunk amennyi okvetlenuumll szuumlkseacuteges Ez főkeacutent az uacutejdonsaacutegokat eacutes a főbb egyseacutegeket eacuterinti Az elektronikus tankoumlnyvhoumlz azonban koacutedtaacuter is tartozik amely az azonnal lefordiacutethatoacute ellenőrzoumltt keacutesz koacutedokat tartalmazza Ezeket a koacutedokat minden esetben eleacuteg nagy reacuteszletesseacuteggel kikommentezzuumlk hogy akkor is eacuterthető legyen ha majd a tankoumlnyvben leiacutertak megtanulaacutesa utaacuten mondjuk egy eacutevvel nyuacutelunk vissza valamelyik alkalmazaacuteshoz A koacutedtaacuter nem csak a koacutedokat tartalmazza hanem oumlsszetettebb alkalmazaacutesoknaacutel aacuteramkoumlri rajzokat feacutenykeacutepeket eacutes sok esetben meacuteg roumlvid videofelveacutetelt is

Created by XMLmind XSL-FO Converter

5 fejezet - Csiacutek a LED-ekenMi a legnagyobb kuumlloumlnbseacuteg az ADuC mikrovezeacuterlőnk eacutes egy heacutetkoumlznapi szaacutemiacutetoacutegeacutepes munkaaacutellomaacutes koumlzoumltt Az egyik az hogy a mikrovezeacuterlőn gyaacuterilag semmifeacutele operaacutecioacutes rendszer nem talaacutelhatoacute (Ez persze nem azt jelenti hogy nem is lehet raacute keacutesziacuteteni) A maacutesik leacutenyeges kuumlloumlnbseacuteg pedig a [Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr] fejezet alapjaacuten talaacuten maacuter nyilvaacutenvaloacutevaacute vaacutelt semmifeacutele monitor nem csatlakozik a panelhoz A jelenlegi szintuumlnkoumln a 8 LED-ből aacutelloacute sor az egyetlen visszajelzeacutesi lehetőseacuteguumlnk azonban meglepően sokatmondoacute lehet meacuteg ez is pedig mindoumlsszesen egyetlen baacutejt kijelzeacuteseacutere alkalmas

A LED-sort termeacuteszetesen sokfeacutele funkcioacutehoz tudjuk munkaacutera fogni kuumlloumlnfeacutele mintaacutezatokat jeleniacutethetuumlnk meg rajta Ennek meacuteg a mechatronikai alkalmazaacutesok szempontjaacuteboacutel nem sok haszna lesz viszont joacutekat fogunk szoacuterakozni tovaacutebbaacute rengeteget tanulunk vele aminek maacuter majd igen A bevezető utaacuten tekintsuumlk a koumlvetkező feladatot

2 feladat

Jeleniacutetsuumlnk meg a LED-soron egy egyre hosszabb csiacutekot amely noumlvekedeacutes koumlzben minden faacutezisnaacutel vaacuterakozik egy keveset teliacutetődeacutes utaacuten pedig uacutejraindul [Code02]

Kuumlloumlnfeacutele mintaacutezatoknak a LED-soron valoacute előaacutelliacutetaacutesaacutehoz keacutet moacutedszert alkalmazhatunk Az egyik az hogy a koacutedmemoacuteriaacuteban előre roumlgziacutetett bitmintaacutekat taacuterolunk majd kiolvassuk azokat Ezt a keacutesőbbiekben meg is tanuljuk A maacutesik moacutedszer az hogy aritmetikai truumlkkoumlkkel a program futaacutesa koumlzben aacutelliacutetjuk elő a mintaacutezatot Oldjuk meg a [2 feladat]ot most ilyen moacutedon

1 Bitek sorszaacutemozaacutesaA szaacutemiacutetaacutestechnikaacuteban heacutetkoumlznapi fogalmainkkal ellenteacutetben az objektumok szaacutemozaacutesaacutet nem 1-gyel kezdjuumlk hanem toumlbbnyire 0-val Ha egy baacutejt bitjeiről van szoacute akkor azok sorszaacutemozaacutesa szintuacutegy 0-val kezdődik iacutegy termeacuteszetes kifejezeacutes lesz az hogy nulladik bit Egy baacutejt bitjeinek helyieacuterteacutekeacutet decimaacutelis eacuterteacutekeacutet eacutes sorszaacutemaacutet a [Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll] mutatja

51 taacuteblaacutezat - Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll

Bit sorszaacutema Hatvaacuteny Decimaacutelis eacuterteacutek

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 eacutes aritmetikai utasiacutetaacutesok

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

A [2 feladat] megoldaacutesaacutehoz szuumlkseacuteguumlnk lesz arra az utasiacutetaacutesra amelyik a logikai negaacuteltjaacutet vagy maacutes szoacuteval komplementereacutet megint maacutes szoacuteval inverzeacutet keacutepezi az akkumulaacutetornak

CPL A

A mnemonik az angol Complement Register (regiszter komplementere) kifejezeacutesből szaacutermazik Ha az akkumulaacutetor tartalma peacuteldaacuteul 10001101 akkor a CPL A utasiacutetaacutes kiadaacutesa utaacuten az akkumulaacutetor tartalma 01110010 lesz vagyis csakugyan az eredeti tartalmaacutenak logikai negaacuteltja vagy komplementere esetleg inverze

A koumlvetkező utasiacutetaacutes amelyre szuumlkseacuteguumlnk lesz az aacutetvitel neacutelkuumlli oumlsszeadaacutes utasiacutetaacutesa ADD A mnemonik az angol Add Accumulator (hozzaacutead az akkumulaacutetorhoz) kifejezeacutesből szaacutermazik Ennek az utasiacutetaacutesnak ahogy azt maacuter a MOV utasiacutetaacutesnaacutel megiacutezlelhettuumlk toumlbb verzioacuteja van mi most haacuterommal ismerkeduumlnk meg Az utasiacutetaacutesok ciacutemzeacutesmoacutedja az elektronikus tankoumlnyvben eddig elmondottak alapjaacuten vilaacutegos kell hogy legyen

ADD ARn ADD Adirect ADD Adata

Mindhaacuterom esetben az akkumulaacutetor tartalmaacutehoz adjuk vagy valamelyik R regiszter tartalmaacutet vagy egy adott memoacuteriarekesz tartalmaacutet vagy a koumlzvetlenuumll megadott eacuterteacuteket Aacutetvitel neacutelkuumll Az aacutetvitelt is figyelembe vevő oumlsszeadaacutesroacutel keacutesőbb szoacutelunk

Ismerkedjuumlnk meg meacuteg keacutet utasiacutetaacutessal melyek igen nagy segiacutetseacuteguumlnkre lehetnek ha aritmetikai műveletekkel eacutes truumlkkoumlkkel szeretneacutenk adott bitmintaacutezatot mint eacuterteacuteket előaacutelliacutetani az akkumulaacutetorban Ez a keacutet utasiacutetaacutes a bitforgataacutes műveletet hajtja veacutegre az akkumulaacutetoron Az egyik balra forgat

RL A

A maacutesik jobbra forgat

RR A

A mnemonikok az angol Rotate Accumulator Left (akkumulaacutetor forgataacutesa balra) eacutes Rotate Accumulator Right (akkumulaacutetor forgataacutesa jobbra) kifejezeacutesekből szaacutermaznak A forgataacutes azt jelenti hogy az akkumulaacutetor tartalma egy bittel balrajobbra csuacuteszik a szeacuteleacuten kileacutepő bit pedig visszakeruumll a meguumlruumllt helyre a maacutesik oldalon Peacuteldaacuteul legyen az akkumulaacutetor tartalma 00001111 RL A utaacuten az akkumulaacutetor tartalma 00011110 RL R utaacuten pedig 10000111 lesz A [Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire] aacutebraacuten rajzos magyaraacutezattal szemleacuteltetjuumlk a bitforgatoacute utasiacutetaacutesok műkoumldeacuteseacutet Ezekkel az utasiacutetaacutesokkal sok huncutsaacutegot meg tudunk valoacutesiacutetani ahogy azt majd hamarosan laacutetni fogjuk

51 aacutebra - Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire

3 Parameacuteteraacutetadaacutes szubrutinnakAki valamely magas szintű programozaacutesi nyelvvel kezdett az nagyon joacutel tudja hogy parameacutetert aacutetadni valamely fuumlggveacutenynek vagy eljaacuteraacutesnak meglehetősen koumlnnyű Aki meacuteg nem tudja mit jelent ez keacutepzelje el azt a szituaacutecioacutet hogy a [Oacuterajel veacutegrehajtaacutesi idő] eacutes [Az első alkalmazaacutes koacutedja] alfejezetben bemutatott időhuacutezoacute szubrutint nem aacutellandoacutesult 05 vagy eacuteppen 1 maacutesodperces időhuacutezaacutesra akarjuk hasznaacutelni hanem rugalmasan aacuteltalunk tetszeacutes szerint megadott eacuterteacutekkel Assemblyben uacutegy megy ez hogy a szubrutinnak tudnia kell hogy a műkoumldeacuteseacutehez szuumlkseacuteges eacuterteacuteket honnan veszi (mely regiszterből vagy memoacuteriaciacutemről) a szubrutin meghiacutevaacutesa előtt viszont a szuumlkseacuteges eacuterteacuteket be kell toumllteni a keacuterdeacuteses regiszterbe majd ez utaacuten meghiacutevni a szubrutint Doumlntsuumlnk most uacutegy hogy a parameacuteteraacutetadaacutesra hasznaacutelt regiszter az akkumulaacutetor legyen Ezek utaacuten moacutedosiacutetsuk a [Az első alkalmazaacutes koacutedja] alfejezetben bemutatott szubrutint a koumlvetkező moacutedon

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

DELAYMOV R7Acik7MOV R622cik6MOV R5237cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET

Ezzel azt eacuterjuumlk el hogy a szubrutin a meghiacutevaacutesakor az akkumulaacutetorboacutel toumllti be a szuumlkseacuteges eacuterteacuteket az R7 regiszterbe Ez az eacuterteacutek az egybaacutejtos adatterjedelemnek megfelelően 0 eacutes 255 koumlzoumltt lehet A rutin műkoumldeacutese alapjaacuten ha 0-t adjunk neki az olyan lenne mintha 256-toacutel szaacutemlaacutelnaacutenk vissza Hiszen amikor a DJNZ a 0-t eggyel csoumlkkenti akkor az eacuterteacutek visszafeleacute aacutetfordul 255-re

A szubrutin meghiacutevaacutesa mondjuk 06 maacutesodperces vaacuterakozaacuteshoz iacutegy toumlrteacutenik

MOV A60CALL DELAY

Ha a szubrutinnak kell parameacutetert aacutetadnia a főprogramnak az assemblyben hasonloacutean toumlrteacutenik mint fordiacutetva a szubrutinnak valamely memoacuteriarekeszekbe vagy regiszterekbe kell iacuternia az aacutetadni kiacutevaacutent parameacutetereket a főprogramnak viszont tudnia kell hol keresse azokat A leacutenyeg az hogy bonyolultabb programoknaacutel a szubrutinok ne iacuterjaacutek foumlluumll egymaacutes parameacuteteraacutetadaacutesi adatteruumlleteit Erre nagyon figyelni kell assemblyben

4 A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkelAhhoz hogy a csiacutek egyes faacutezisait elő tudjuk aacutelliacutetani a maacuter ismert ill a [ Logikai eacutes aritmetikai utasiacutetaacutesok] alfejezetekben bemutatott utasiacutetaacutesokkal mindenekelőtt tisztaacutezzuk mire van szuumlkseacuteguumlnk Ha egy noumlvekvő csiacutekot szeretneacutenk a LED-ekkel kijelezni akkor a koumlvetkező bitmintaacutezatokra mint faacutezisokra lesz szuumlkseacuteguumlnk

11111111

11111110

11111100

11111000

11110000

11100000

11000000

10000000

00000000

Hogy lehet ilyen sort leacutetrehozni Erre nyilvaacuten szaacutezfeacutele megoldaacutes van de tekintsuumlk azt amikor előszoumlr is egyetlen 1-es bitet leacuteptetuumlnk sorban balra

00000001

00000010

00000100

00001000

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

00010000

00100000

01000000

10000000

Figyeljuumlk meg hogy az első listaacutenak 9 miacuteg a maacutesodiknak csak 8 tagja van Ha a maacutesodik listaacutenak az elemeit szeacutepen sorban hozzaacuteadjuk 00000000-hoz de uacutegy hogy a koumlvetkező listatagot mindig az addig megkapott eredmeacutenyhez adjuk hozzaacute akkor az egyes faacutezisok iacutegy alakulnak

00000000

00000001

00000011

00000111

00001111

00011111

00111111

01111111

11111111

Eacutes ha ennek a listaacutenak az elemeit negaacuteljuk (keacutepezzuumlk a komplementeruumlket invertaacuteljuk őket) maacuteris eleacuterkeztuumlnk a kiacutevaacutent eredmeacutenyhez

A koumlvetkező koacuted nem pofonegyszerű neacutemi ravaszkodaacutest tartalmaz A fontos parameacuteterek listaacutejaacutet eacutes eacuterteacutekeit azonban a koacuted utaacuten taacuteblaacutezatban foglaljuk oumlssze hogy koumlvetni lehessen mit toumlrteacutenik Az olvasoacutet arra biztatjuk hogy addig ne haladjon tovaacutebb amiacuteg ezt a koacutedot meg nem eacutertette A [Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten] ehhez nagy segiacutetseacuteget fog nyuacutejtani A koacutedban az R2 regiszterben azok az eacuterteacutekek aacutellnak elő amelyeket a fenti maacutesodik lista tartalmaz Az R3 regiszterben keacutepződnek azok az eacuterteacutekek amelyeket a fenti harmadik lista tartalmaz Nagyon fontos szerepet jaacutetszik a keacutet regiszter kezdeti eacuterteacuteke ill az hogy a regiszterek eacuterteacutekeacutet a LED-ek portjaacutenak vaacuteltoztataacutesa előtt vagy utaacuten manipulaacuteljuk A koacutedban a [Az első alkalmazaacutes koacutedja] alfejezetben roumlgziacutetettek szerint maacuter nem tuumlntetjuumlk foumll az aacutellandoacute fordiacutetoacutei direktiacutevaacutekat eacutes jelen esetben a [Parameacuteteraacutetadaacutes szubrutinnak] alfejezetben bemutatott parameacuteteraacutetadaacutest is teljesiacutető időhuacutezoacute DELAY szubrutint sem Iacuteme a koacuted

Code02asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a programvezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacutenORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacutedMAINMOV R30 Kezdeti eacuterteacutek R3-nak Ebben gyűlnek a csiacutek egyes faacutezisainak megfelelő eacuterteacutekek de ezt majd meacuteg negaacutelnunk kell A kezdeti eacuterteacutek 0 azaz egyetlen LED sem vilaacutegiacutetMOV R210000000b Kezdeti eacuterteacutek R2-nek Amikor ezt az eacuterteacuteket előszoumlr forgatjuk balra akkor kapjuk meg az első hasznaacutelhatoacute eacuterteacuteket azaz 00000001-t amit majd az addigi de meacuteg nem invertaacutelt eredmeacutenyhez adunkMOV R49 Kilencszer fut le ez a ciklus hiszen 9 faacutezisboacutel aacutell a csiacutekcsikMOV AR3 A-ba toumlltjuumlk R3-at azaz a csiacuteknak

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

megfelelő eacuterteacuteketCPL A Negaacuteljuk A-tMOV P2A Kitesszuumlk a LED-ek portjaacuteraMOV A10 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (01 s)MOV AR2 A-be toumlltjuumlk R2-tRL A Balra forgatjuk az eacuterteacuteketMOV R2A Visszatoumlltjuumlk R2-be R2-ben alakul ki a koumlvetkező lista 00000001 00000010 00000100 stbMOV AR3 A-ba toumlltjuumlk R3-at azaz a csiacutek aktuaacutelis faacutezisaacutetADD AR2 Hozzaacuteadjuk a balra leacuteptetett bitet Iacutegy alakul ki a koumlvetkező lista 00000001 00000011 00000111 stbMOV R3A Visszaiacuterjuk R3-ba a csiacutek koumlvetkező faacutezisaacutetDJNZ R4csik Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Visszaugratjuk az elejeacutere a programot

A [Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten]ban a program keacutet kritikus jelentőseacutegű vaacuteltozoacutejaacutenak azaz az R2 eacutes R3 regisztereknek eacuterteacutekeit tuumlntetjuumlk foumll leacutepeacutesről leacutepeacutesre bdquoKezdrdquo jelenti a kezdeti eacuterteacuteket bdquoBe1rdquo a ciklus első veacutegrehajtaacutesaacutenaacutel a beleacutepeacutesi bdquoKi1rdquo a kileacutepeacutesi eacuterteacuteket bdquoBe2rdquo eacutes bdquoKi2rdquo ugyaniacutegy a ciklus maacutesodik veacutegrehajtaacutesaacutenaacutel stb A P2-es portra a ciklus minden egyes veacutegrehajtaacutesaacutenaacutel az R3 regiszterben taacuterolt eacuterteacutek komplementere keruumll ki Ez utaacuten a regiszterek tartalma megvaacuteltozik Tulajdonkeacuteppen ez az utoacutemunkaacutelat jelenti a programban a ravaszkodaacutest hiszen ezzel a regisztereket előkeacutesziacutetjuumlk a ciklus koumlvetkező futaacutesaacutehoz Laacutethatoacute hogy amikor a ciklus valamely lefutaacutesa veacuteget eacuter a koumlvetkező lefutaacutes ugyanazokkal a regisztereacuterteacutekekkel kezdődik

52 taacuteblaacutezat - Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten

Programaacutellapot 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

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

Ki9 00000001 00000000

Created by XMLmind XSL-FO Converter

6 fejezet - Csiacutek a LED-eken toumlmoumlrenAz előző alfejezetben a [2 feladat] megoldaacutesaacutenak assembly koacutedja talaacuten egy kicsit nehezen volt emeacuteszthető Sebaj szokjunk hozzaacute ahhoz hogy az assemblyben ilyesfeacutele gondolatmentek sűrűn fordulnak elő Azonban meg szeretneacutenk nyugtatni az olvasoacutet egy joacute darabig sokkal egyszerűbb koacutedokkal fogjuk bemutatni az ADuC lehetőseacutegeit Vizsgaacuteljuk most meg hogy hogyan lehetne sokkal egyszerűbben megoldani a [2 feladat]ot akkor ha meacuteg neacutehaacuteny utasiacutetaacutest ismeruumlnk

1 A Carry bitAz [Regiszterek] alfejezetben maacuter emliacutetettuumlk hogy az assembly nyelvű programozaacutesnaacutel bizonyos az architektuacuteraacutera jellemző jelzőbitek vagy flag-ek is fontos szerephez jutnak Ismerkedjuumlnk meg haacutet azzal a bittel amelyik az ADuC mikrovezeacuterlőkneacutel kulcsszerepet jaacutetszik nagyon sok műveletneacutel Ezt a bitet Carry bitnek vagy roumlviden C bitnek hiacutevjaacutek A Carry angol szoacute magyarul aacutetvitelt (is) jelent Ez szoros oumlsszefuumlggeacutesben aacutell a C bit szerepeacutevel Mire hasznaacutelhatoacute a C bit Mit jelez Mit mutat Főbb hasznaacutelati teruumlletei a koumlvetkezők

1 Keacutet baacutejt oumlsszeadaacutesakor tartalmazhatja a kezdeti aacutetvitelt ill jelzi ha az eredmeacuteny aacutetvitelt tartalmaz

2 Keacutet baacutejt kivonaacutesakor tartalmazhatja a kezdeti aacutetvitelt ill jelzi ha az eredmeacuteny aacutetvitelt tartalmaz

3 Jelezheti a kieacuterteacutekelt relaacutecioacute mint logikai kifejezeacutes igaz vagy hamis mivoltaacutet oumlsszehasonliacutetoacute utasiacutetaacutesoknaacutel

4 Bitforgatoacute műveletekneacutel ideiglenes taacuteroloacutekeacutent műkoumldhet

5 Bitműveletekneacutel a logikai kifejezeacutesek egyik operandusa

Amint laacutethatoacute a C bit hasznaacutelhatoacutesaacutega nagyon szeacuteleskoumlrű Sokszor maacuter a miatt bizonytalanodnak el a kezdő programozoacutek hogy egyaacuteltalaacuten van-e olyan utasiacutetaacutes amelynek veacutegrehajtaacutesa nem befolyaacutesolja a C bit eacuterteacutekeacutet Termeacuteszetesen van aacutem csakugyan sok utasiacutetaacutes van hataacutessal a C bitre Iacutegy amikor valaki oumlnaacutelloacutean boumlngeacuteszi a 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacutet akkor azt is mindig neacutezze meg hogy egy adott utasiacutetaacutes mit tesz a C bittel

A C bit eacuterteacutekeacutet befolyaacutesoloacute legegyszerűbb utasiacutetaacutesok a koumlvetkezők

SETB C CLR C CPL C

Az első utasiacutetaacutes magasra aacutelliacutetja a C bitet tehaacutet C = 1 lesz A maacutesodik utasiacutetaacutes toumlrli a C bitet tehaacutet C = 0 lesz A harmadik utasiacutetaacutes eredmeacutenye maacuter sejthető invertaacutelja a C bitet A mnemonikok rendre az angol Set Bit (bit magasra aacutelliacutetaacutesa) kifejezeacutesből ill Clear (toumlroumll) eacutes Complement (komplementer) szavakboacutel szaacutermaznak

2 Bitforgataacutes C-n keresztuumllA maacuter bemutatott bitforgatoacute utasiacutetaacutesoknak tehaacutet RL-nek eacutes RR-nek van olyan vaacuteltozatuk is amely a C-biten keresztuumll veacutegzi a forgataacutest Ez azt jelenti hogy az akkumulaacutetor kileacuteptetett bitje C-be keruumll a beleacutepő bit viszont C-ből eacuterkezik A keacutet utasiacutetaacutes mnemonikja a koumlvetkező

RLC A

eacutes

RRC A

A mnemonikok az angol Rotate Accumulator Left through C (akkumulaacutetor forgataacutesa balra C-n keresztuumll) eacutes Rotate Accumulator Right through C (akkumulaacutetor forgataacutesa jobbra C-n keresztuumll) kifejezeacutesekből szaacutermaznak Koumlnnyű meggondolni hogy ha a C-bit eacuterteacutekeacutet szabadon aacutelliacutetgathatjuk akkor azt leacuteptethetuumlnk be az akkumulaacutetorba amit csak akarunk A C-biten keresztuumll dolgozoacute bitforgatoacute utasiacutetaacutesok hataacutesaacutet a [Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor bitjeire] aacutebra szemleacutelteti

61 aacutebra - Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken toumlmoumlren

bitjeire

Az uacutej utasiacutetaacutesok ismereteacuteben fogalmazzuk aacutet a [2 feladat]ot

3 feladat

Jeleniacutetsuumlnk meg a LED-soron egy egyre hosszabb csiacutekot amely noumlvekedeacutes koumlzben minden faacutezisnaacutel vaacuterakozik egy keveset teliacutetődeacutes utaacuten pedig uacutejraindul Hasznaacuteljuk a C-n keresztuumlli bitforgataacutes műveleteacutet [Code03]

A [A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkel] alfejezet első listaacuteja mutatja hogy milyen bitmintaacutezatokat kell a 2-es portra kitennuumlnk hogy előaacutelljanak a megjeleniacutetendő csiacutek egyes faacutezisai Laacutetni fogjuk hogy milyen hateacutekony eszkoumlzt ad a kezuumlnkbe a C-n keresztuumll toumlrteacutenő bitforgataacutes Teacutetelezzuumlk foumll ugyanis hogy az akkumulaacutetor tartalma 11111111 Ez ugyebaacuter az első faacutezis amikor egyetlen LED sem vilaacutegiacutet Ha ezek utaacuten toumlroumlljuumlk a C bitet (C = 0) majd kiadjuk az RLC A utasiacutetaacutest akkor az akkumulaacutetor tartalma 11111110 lesz Az eredeti eacuterteacutek bal szeacutelső azaz 7 bitje azaz aktuaacutelisan 1 leacutep be C-be Ezzel az eacuterteacutekkel a tovaacutebbiakban semmi dolgunk A koumlvetkező faacutezis előaacutelliacutetaacuteshoz uacutejra toumlroumlljuumlk a C bit eacuterteacutekeacutet uacutejra alkalmazzuk a C-n keresztuumlli bitforgataacutest eacutes iacutegy tovaacutebb Ezzel az eljaacuteraacutessal sokkal egyszerűbben aacutelliacutetjuk elő a csiacutek egyes faacutezisainak bitmintaacutezataacutes mint amikor aritmetikai eacutes logikai műveletekkel tettuumlk A koacuted is sokkal roumlvidebbeacute toumlmoumlrebbeacute eacutes koumlnnyebben eacuterthetőveacute vaacutelik Figyeljuumlnk arra hogy a csiacutek faacutezisainak megfelelő eacuterteacutekeket az R3 regiszterben taacuteroljuk hiszen az akkumulaacutetort az időhuacutezoacute szubrutin meghiacutevaacutesaacutehoz hasznaacutelni fogjuk Ez a szubrutin (DELAY) toumlkeacuteletesen megegyezik azzal amit a [Parameacuteteraacutetadaacutes szubrutinnak] alfejezetben keacutesziacutetettuumlnk Iacuteme a koacuted

Code03asm ORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a programvezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacuten ORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacuted MAIN MOV R311111111b Kezdeti eacuterteacutek R3-nak Ebben gyűlnek a csiacutek egyes faacutezisainak megfelelő eacuterteacutekek melyek a P2-es portra iacuterandoacutek A kezdeti eacuterteacutek az oumlsszes LED-et kikapcsolja MOV R49 Kilencszer fut le ez a ciklus hiszen 9 faacutezisboacutel aacutell a csiacutek csik MOV P2R3 Kitesszuumlk a LED-ek portjaacutera a csiacutek eacuterteacutekeacutet MOV A10 A megfelelő parameacuteterrel CALL DELAY meghiacutevjuk az időhuacutezaacutest (01 s) MOV AR3 A-ba toumlltjuumlk a csiacutek aktuaacutelis eacuterteacutekeacutet CLR C Toumlroumlljuumlk a C bitet RLC A Beleacuteptetjuumlk A-ba a C bitet jobbroacutel balra MOV R3A Visszaiacuterjuk R3-ba a csiacutek uacutej faacutezisaacutet DJNZ R4csik Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutet JMP MAIN Ugraacutes vissza a program elejeacutere

Created by XMLmind XSL-FO Converter

7 fejezet - Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutelA [Csiacutek a LED-eken] eacutes [Csiacutek a LED-eken toumlmoumlren] fejezetekben megtanultuk hogyan lehet szisztematikusan mintaacutezatokat alkotni melyeket aztaacuten kijeleztuumlnk az ADuC-panel LED-soraacuten Azonnal adoacutedik a keacuterdeacutes mi van ha tetszőlegesen vaacutelasztott mintaacutezatokat szeretneacutenk kijelezni A vaacutelasz erre az hogy ez is koumlnnyűszerrel megoldhatoacute csupaacuten egy igen fontos regisztert eacutes egy uacutej ciacutemzeacutesmoacutedot kell megismernuumlnk hozzaacute A koumlvetkező feladatot tehaacutet iacutegy fogalmazzuk meg

4 feladat

Jeleniacutetsuumlnk meg a LED-soron a koacutedmemoacuteriaacuteban előre roumlgziacutetett mintaacutezatokat [Code04 Code05]

1 Az adatmutatoacuteA 80518052-es processzormagoknak van olyan regiszteruumlk is amelyikkel a memoacuteriaacuteban talaacutelhatoacute adatokat eacuterhetjuumlk el szisztematikusan Ez a regiszter az adatmutatoacute angol neveacuten Data Pointer Nagyon fontos tudnunk hogy ez a regiszter valoacutejaacuteban haacuterombaacutejtos azaz haacuterom egybaacutejtos regiszterből aacutell Ezek megnevezeacutese DPP DPH DPL A roumlvidiacuteteacutesek az angol Data Pointer Page Data Pointer High eacutes Data Pointer Low kifejezeacutesekből szaacutermaznak A DPP regiszterrel ebben a tankoumlnyvben nem foglalkozunk (ez mutatja a megciacutemzendő memoacuteriateruumllet adott lapjaacutet) eleacuteg lesz most nekuumlnk a DPHDPL regiszterkettős Ez a keacutet regiszter szorosan oumlsszetartozik egyuumltt egy 16-bites ciacutemet alkot Ezzel a 16-bites ciacutemmel 64 kilobaacutejtos memoacuteriateruumllet ciacutemezhető A memoacuteriateruumlletek 256-baacutejtos egyseacutegeit nevezik lapoknak Iacutegy pl az 1 lap a 64 kbyte-on beluumll a 0100h ciacutemtől a 01FFh ciacutemig tart A DPH regiszter az adatmutatoacute felső baacutejtja miacuteg a DPL regiszter az alsoacute baacutejtja Ezek egyuumlttes eacutertelmezeacuteseacutehez nyuacutejt segiacutetseacuteget a [Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese] Magaacutet a regiszterkettőst innentől kezdve DPTR-nek fogjuk jeloumllni hiszen egyuumlttesen alkotjaacutek az adatmutatoacutet (Data Pointer-t) Laacutethatoacute hogy a DPTR adatmutatoacute iacutegy oumlsszesen 16-bites binaacuteris eacuterteacuteket reprezentaacutel Ha ezt memoacuteriaciacutemzeacutesre hasznaacuteljuk akkor iacutegy joumln ki a 64 kbyte hiszen 216 = 65 536 = 641 024 = 64210 (vouml [Memoacuteria] alfejezet)

71 taacuteblaacutezat - Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese

DPH bitjei DPL bitjei

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

A keacutetbaacutejtos DPTR regiszter

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

2 Eacuterteacutekek noumlveleacutese eacutes csoumlkkenteacuteseAz assembly nyelvek elemi utasiacutetaacutesi koumlzeacute tartozik a memoacuteriarekeszek tartalmaacutenak 1-gyel valoacute noumlveleacutese eacutes csoumlkkenteacutese Ezeket az utasiacutetaacutesokat szigoruacute eacutertelemben aritmetikai utasiacutetaacutesoknak kell tekintenuumlnk de enneacutel a besorolaacutesnaacutel azeacutert rezeg a leacutec No de semmi baj az egyszerű noumlvelő eacutes csoumlkkentő utasiacutetaacutesok neacutelkuumll neacuteha szinte keacuteptelenseacuteg de legalaacutebbis igen neheacutezkes lenne megiacuterni azt amit akarunk

A memoacuteriarekesz noumlveleacuteseacutet veacutegrehajtoacute utasiacutetaacutes mnemonikja INC ami az angol Increment Register (regiszter noumlveleacutese) kifejezeacutesből szaacutermazik a memoacuteriarekesz csoumlkkenteacuteseacutet veacutegrehajtoacute utasiacutetaacutes mnemonikja DEC ami az angol Decrement Register (regiszter csoumlkkenteacutese) kifejezeacutesből joumln Az eddig ismertetett ciacutemzeacutesmoacutedokkal a keacutet utasiacutetaacutes vaacuteltozatai a koumlvetkezők

INC AINC Rn

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

INC directINC DPTRDEC ADEC RnDEC direct

Laacutethatoacute hogy az adatmutatoacute noumlveleacuteseacutere leacutetezik utasiacutetaacutes de csoumlkkenteacuteseacutere nincs Ez azonban ne keseriacutetsen el bennuumlnket az ADuC 842-es a megfelelő SFR hasznaacutelataacuteval konfiguraacutelhatoacute uacutegy hogy az adatmutatoacuteval toumlrteacutenő ciacutemzeacutes veacutegrehajtaacutesa utaacuten annak eacuterteacuteke automatikusan 1-gyel nőjoumln vagy akaacuter 1-gyel csoumlkkenjen Egyeacuteb esetekben nekuumlnk kell gondoskodnunk DPTR noumlveleacuteseacuteről vagy csoumlkkenteacuteseacuteről

3 A koacuted-indirekt ciacutemzeacutesAz assembly nyelvekben aacuteltalaacuteban leacuteteznek olyan utasiacutetaacutesok melyekkel indirekt ciacutemzeacutes valoacutesiacutethatoacute meg Aki tanult maacuter magas szintű programozaacutesi nyelvet annak a mutatoacutek koncepcioacuteja jelenthet neacutemi fogoacutedzkodoacutet Az indirekt ciacutemzeacutes leacutenyege az hogy egy roumlgziacutetett ciacutemhez egy segeacutedregiszter vagy az adatmutatoacute tartalmaacutet meacuteg hozzaacuteadja a processzor eacutes az iacutegy kapott ciacutemen leacutevő memoacuteriarekeszhez nyuacutel hozzaacute A reacuteszletes magyaraacutezatot jelen esetben mindjaacutert egy konkreacutet ciacutemzeacutestiacutepussal ismertetjuumlk Ennek a ciacutemzeacutesnek a neve koacuted-indirekt ciacutemzeacutes (angolul Code Indirect Addressing) Azeacutert koacuted-indirekt mert a processzor a koacutedmemoacuteriaacutehoz feacuter hozzaacute eacutes maacutesol ki onnan adatot Iacuterni a megciacutemzett helyre nyilvaacuten nem tud hiszen a koacutedmemoacuteria futaacutes koumlzben csak olvashatoacute memoacuteriakeacutent műkoumldik Neacutezzuumlk milyen szintaxisa van annak a koacuted-indirekt ciacutemzeacutessel dolgozoacute utasiacutetaacutesnak amellyel foglalkozni fogunk

MOVC AA+DPTR

Kicsit csemegeacutezzuumlnk az utasiacutetaacutes megjeleneacuteseacuten A MOV utasiacutetaacutest maacuter ismerjuumlk toumlbbfeacutele ciacutemzeacutesmoacuteddal Azonnal feltűnhet hogy ehhez keacutepest a fenti utasiacutetaacutes meacuteg egy C karaktert tartalmaz Ez a C betű utal a koacutedhoz toumlrteacutenő hozzaacutefeacutereacutesre A MOVC mnemonik ugyanis az angol Move Code Byte to Accumulator (koacutedbaacutejt (be)mozgataacutesa az akkumulaacutetorba) kifejezeacutesből szaacutermazik Ami meacuteg feltűnhet az az a teacuteny hogy a ciacutemzeacutesneacutel szerepel a kukac karakter Ez a karakter nekuumlnk magyaroknak kukac a hollandoknak majomfarkinca (apenstaartje) aminek itt semmi eacutertelme eacutes egy angol anyanyelvű ember egy e-mail-ciacutem felolvasaacutesakor a kukac karakterhez eacuterve azt mondja hogy at ([aeligt] prepoziacutecioacute jelenteacutese -naacutel -neacutel) Helymegjeloumlleacutesre hasznaacutelja Gondolkodjunk most ezzel a logikaacuteval A MOVC utasiacutetaacutes a MOV előtag alapjaacuten adatot fog maacutesolni a koacutedboacutel erre a C karakter utal Az utasiacutetaacutes első operandusa az A iacutegy a maacutesolaacutes ceacutelaacutellomaacutesa az akkumulaacutetor Most joumln az hogy honneacutet toumlrteacutenik a maacutesolaacutes ennek ciacutemeacutet uacutegy hataacuterozzuk meg hogy az adatmutatoacutehoz (DPTR) hozzaacuteadjuk az akkumulaacutetor (A) aktuaacutelis eacuterteacutekeacutet DPTR+A Veacuteguumll a kukac karakter mutatja hogy a DPTR+A művelettel megadott ciacutem a forraacutesciacutem azaz onnan toumlrteacutenik az ott aacutellomaacutesozoacute adat kiolvasaacutesa Figyeljuumlnk oda arra hogy enneacutel az utasiacutetaacutesnaacutel az akkumulaacutetor tartalma foumlluumlliacuteroacutedik A koacuted-indirekt ciacutemzeacutes megeacuterteacuteseacutehez az [A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese] nyuacutejt segiacutetseacuteget

72 taacuteblaacutezat - A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese

Koacutedmemoacuteria ciacutemei Eacuterteacutekek

0200h 20

0201h 11

0202h 3

0203h 28

0204h 19

0205h 72

0206h 10

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

0207h 5

DPTR A A eacuterteacuteke a MOVC AA+DPTR utasiacutetaacutes veacutegrehajtaacutesa utaacuten

0200h 0 20

0200h 2 3

0200h 6 10

0200h 7 5

0204h 0 19

0204h 3 5

4 Adatok elhelyezeacutese a koacutedbanAdatok elhelyezeacutese a koacutedban viszonylag egyszerűen toumlrteacutenik Ehhez csak a DB (Data Byte magyarul adatbaacutejt) fordiacutetoacutei direktiacutevaacutet kell ismernuumlnk Az adatok felsorolaacutesaacutet jelentő teruumlletnek vagy konkreacutet ciacutemet vagy ciacutemkeacutet (ez a gyakoribb) kell adnunk amint azt az alaacutebbi koacutedreacuteszletben laacutethatjuk

adatok

DB 11111111b Az adattoumlmb elemeiDB 01111110bDB 00111100bDB 00011000bDB 00000000bDB

A DB direktiacutevaacutek megadaacutesa utaacuten az eacuterteacutekadaacutes pontosan azzal a szintaxissal toumlrteacutenhet mint amit a koumlzvetlen ciacutemzeacutesneacutel laacutettunk ([Koumlzvetlen ciacutemzeacutes] alfejezet) de most nincs szuumlkseacuteg a kettős keresztre ()

Az adatmutatoacuteba a ciacutemkeacutevel ellaacutetott memoacuteriateruumllet kezdőciacutemeacutet a koumlvetkező szintaxissal toumllthetjuumlk

MOV DPTRadatok

Ennek az utasiacutetaacutesnak az aacuteltalaacutenos megjeloumlleacutese a koumlvetkező

MOV DPTRdata16

A koumlzvetlen ciacutemzeacutes rendben is van de figyeljuumlnk oda arra hogy az adatmutatoacutenak 16-bites adatot kell megadnunk hiszen 64 kilobaacutejt megciacutemzeacuteseacutehez eacuteppen ennyi szuumlkseacuteges

Eleacuterkeztuumlnk haacutet ahhoz a ponthoz hogy megoldjuk a [4 feladat]ot A koacutedhoz folyamataacutebraacutet nem tartunk szuumlkseacutegesnek most sem mert ismeacutet csak nagyon egyszerű esettel aacutellunk szemben Nyolc bitmintaacutezatot fogunk kijelezni a LED-soron majd uacutejraindiacutetjuk a ciklust iacutegy joacutepofa mozgoacute mintaacutezatok hataacutesaacutet keltő alkalmazaacutest kapunk A koacutedboacutel eacuteppen uacutegy hiaacutenyozni fognak az aacutellandoacute direktiacutevaacutek eacutes az időhuacutezoacute szubrutin (DELAY) mint a koraacutebbi neacutehaacuteny esetben

Code04asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Ugraacutes a teacutenyleges programkezdethet ORG 0060h A teacutenyleges program kezdete

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

MAINMOV DPTRadatok Az adatok toumlmbjeacutenek ciacuteme az adatmutatoacuteba keruumllMOV R30 Az R3 regisztert hasznaacuteljuk indexregiszternek az indirekt ciacutemzeacuteshezMOV R48 8-szor fut le ez a ciklus mert 8 adatbaacutejtot akarunk kijeleznidisplMOV AR3 A-ba tesszuumlk a soros indexuumlnket R3-boacutelMOVC AA+DPTR Adat olvasaacutesa a koacutedmemoacuteriaacuteboacutel koacuted-indirekt ciacutemzeacutesselMOV P2A A beolvasott adat kihelyezeacutese a LED-sorraMOV A20 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (02 s)INC R3 Az indexregiszteruumlnk eacuterteacutekeacutenek noumlveleacutese a ciklus koumlvetkező lefutaacutesaacutehozDJNZ R4displ Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Ugraacutes vissza a program elejeacutereadatokDB 01111110b Az adattoumlmb elemeiDB 00111100bDB 10011001bDB 11000011bDB 11100111bDB 11000011bDB 10011001bDB 00111100b

5 Az adatmutatoacute automatikus noumlveleacuteseAz előző alfejezetben bemutatott koacutedban az adatmutatoacute eacuterteacutekeacutet nem vaacuteltoztattuk Indexeleacuteshez csak az akkumulaacutetorra volt szuumlkseacuteguumlnk Maacutes lenne a helyzet ha 255-neacutel toumlbb adatbaacutejtot szeretneacutenk kijelezni Ekkor az akkumulaacutetor oumlnmaga maacuter nem lenne eleacuteg az indexeleacutesre iacutegy gondoskodnunk kellene az adatmutatoacute noumlveleacuteseacuteről is Van viszont lehetőseacuteg arra hogy az ADuC 842-es minden egyes koacuted-indirekt ciacutemzeacutes utaacuten automatikusan 1-gyel noumlvelje DPTR-t Ehhez egy SFR-be kell elhelyeznuumlnk a megfelelő eacuterteacuteket

A speciaacutelis funkcioacutejuacute regiszterekről roumlviden maacuter tettuumlnk emliacuteteacutest a [Portok eacutes funkcioacuteregiszterek] alfejezetben Az elektronikus tankoumlnyv haacutetraleacutevő reacuteszeacuteben sokszor fogunk hasznaacutelni SFR-eket Ehhez elengedhetetlenuumll szuumlkseacuteges lesz az Analog Devices ceacuteg aacuteltal a 842-es architektuacuteraacutehoz melleacutekelt leiacuteraacutes tanulmaacutenyozaacutesa [1] Ennek a tankoumlnyvnek nem az a feladata hogy minden SFR minden funkcioacutejaacutet kimeriacutetően bemutassa Sok SFR-rel fogunk dolgozni de nem mindegyikkel Amelyekkel dolgozunk azoknak sem tudjuk mindig minden konfiguraacutecioacutejaacutet bemutatni Amennyire azonban lehetseacuteges tankoumlnyvhoumlz illő moacutedon proacutebaacuteljuk meg taglalni az aktuaacutelisan hasznaacutelt SFR kivaacutelasztott konfiguraacutecioacutejaacutenak hataacutesaacutet Az SFR-eknek aacuteltalaacuteban van sajaacutet nevuumlk melyekkel hivatkozhatunk raacutejuk Ezek a nevek is toumlbbnyire mnemonikok melyek angol kifejezeacutesekből szaacutermaznak Ezek a nevek szerepelnek toumlbbek koumlzoumltt az assemblerhez tartozoacute MOD842 faacutejlban is Szaacutemos SFR bitenkeacutent ciacutemezhető azaz minden bitjeacutenek kuumlloumln neve van melyeket a C bithez hasonloacutean aacutelliacutetgathatunk magasra vagy alacsonyra A toumlbbi SFR bitenkeacutent nem csak egeacutesz baacutejtkeacutent ciacutemezhető Ebben az esetben a mi felelősseacuteguumlnk az hogy minden bitnek pontosan azt az eacuterteacuteket adjuk ami a felhasznaacutelni kiacutevaacutent hataacutest kivaacuteltja Az [1] referenciakeacutent megadott ADuC841_2_3pdf faacutejlban mely a gyaacutertoacutetoacutel megvaacutesaacuterolt CD-ről szaacutermazik az SFR-ek taacutergyalaacutesnaacutel mindig koumlzlik azok mnemonikjaacutet teljes angol neveacutet memoacuteriaciacutemeacutet bekapcsolaacuteskor felvett default eacuterteacutekeacutet eacutes bitenkeacutenti ciacutemezhetőseacutegeacutet Uacutegy gondoljuk hogy ezek koumlzuumll a legfontosabbakat mi is mindig oumlsszefoglaljuk egy taacuteblaacutezatban kiegeacutesziacutetve a magyar megnevezeacutessel

Visszateacuterve az adatmutatoacutera az adatmutatoacute műkoumldeacuteseacutet befolyaacutesoloacute SFR adatait a [A DPCON SFR taacutergyalt bitjei]ban talaacuteljuk Kezdő szintuumlnk miatt csak keacutet bitjeacutenek hataacutesaacutet ismertetjuumlk

73 taacuteblaacutezat - A DPCON SFR taacutergyalt bitjei

DPCON Data Pointer Control

Adatmutatoacute-vezeacuterlő

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Bit neve Leiacuteraacutes

3 DP0m1 Az adatmutatoacute viselkedeacutese

DP0m1 DP0m0 Uumlzemmoacuted

0 0 Normaacutel (8052-es) viselkedeacutes

0 1 MOVX eacutes MOVC utasiacutetaacutesok utaacuten DPTR

noumlveleacutese 1-gyel

1 0 MOVX eacutes MOVC utasiacutetaacutesok utaacuten DPTR

csoumlkkenteacutese 1-gyel

1 1 DPTR alsoacute baacutejtjaacutenak kipeckeleacutese

(16-bites eszkoumlzoumlkneacutel lehet hasznos)

2 DP0m0

Az egyes SFR-ek lehetőseacutegeinek taacutergyalaacutesakor arra biztatjuk az olvasoacutet hogy ezzel az elektronikus tankkoumlnyvvel paacuterhuzamosan tanulmaacutenyozza az emliacutetett ADuC841_2_3pdf faacutejl megfelelő reacuteszeacutet Az adatmutatoacute műkoumldeacuteseacutet befolyaacutesoloacute DPCON SFR oumlsszes bitjeacutenek magyaraacutezata itt talaacutelhatoacute meg [1 p 51 Table 21] A hivatkozott taacuteblaacutezatboacutel kideruumll hogy a bemutatott adatmutatoacutet elsődleges adatmutatoacutenak kell neveznuumlnk mert van egy maacutesodlagos vagy hűbb fordiacutetaacutessal aacuternyeacutek-adatmutatoacute is Ez utoacutebbival azonban nem foglalkozunk Az elsődleges adatmutatoacute viselkedeacuteseacutet a DPCON 3 eacutes 2 bitje hataacuterozza meg Ha e keacutet bit eacuterteacuteke egyuumlttesen 01 akkor az azt a műkoumldeacutest vaacuteltja ki hogy minden egyes MOVC (eacutes MOVX de erről majd keacutesőbb) utasiacutetaacutes utaacuten DPTR eacuterteacuteke 1-gyel nő Ezek szerint ilyenkor az akkumulaacutetorra igaziboacutel nincs is szuumlkseacuteguumlnk a ciacutemzeacuteshez de mivel az mindig reacutesze a koacuted-indirekt ciacutemzeacutesnek ezeacutert ceacutelszerű az eacuterteacutekeacutet 0-n tartani (Rafinaacuteltabb programozoacutek persze kombinaacutelhatjaacutek a kettőthellip) Mindazt amit most elmondtunk a koumlvetkező koacutedban mutatjuk be Ez a koacuted a bemutatott reacutesztől eltekintve toumlkeacuteletesen megegyezik Code04-gyel laacutesd előző alfejezet Ezzel az adatmutatoacutes truumlkkel a koacuted meacuteg roumlvidebbeacute vaacutelik

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

Code05asmMAINMOV DPCON00000100b Annak beaacutelliacutetaacutesa hogy az elsődleges adatmutatoacute automatikusan 1-gyel nőjoumln valahaacutenyszor veacutegrehajtoacutedik a MOVC utasiacutetaacutesMOV DPTRadatok Az adatok toumlmbjeacutenek ciacuteme az adatmutatoacuteba keruumllMOV R48 8-szor fut le ez a ciklus mert 8 adatbaacutejtot akarunk kijeleznidisplMOV A0 A koacuted-indirekt ciacutemzeacuteshez 0-t teszuumlnk A-ba mert most majd a DPTR fog automatikusan nőniMOVC AA+DPTR Adat olvasaacutesa a koacutedmemoacuteriaacuteboacutel koacuted-indirekt ciacutemzeacutesselMOV P2A A beolvasott adat kihelyezeacutese a LED-sorraMOV A20 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (02 s)DJNZ R4displ Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Ugraacutes vissza a program elejeacutere

Created by XMLmind XSL-FO Converter

8 fejezet - Felteacutetelek kezeleacuteseA 80518052-es processzormagok utasiacutetaacuteskeacuteszlete nem bővelkedik oumlsszehasonliacutetaacutesokat lehetőveacute tevő utasiacutetaacutesokban Persze azzal a neacutehaacutennyal ami rendelkezeacutesuumlnkre aacutell mindent el lehet inteacutezni csak hozzaacute kell szokni a logikaacutejukhoz Felteacutetelek kezeleacuteseacutere egy programban szinte mindig szuumlkseacuteg van Ha maacuter akaacutercsak egyetlen ciklust is iacuterunk annak kileacutepeacutesi felteacutetele is felteacutetel Ez az egyik legfontosabb eset A maacutesik az amikor valamely logikai kifejezeacutes igaz vagy hamis mivolta alapjaacuten el kell aacutegaztatnunk a programot Ebben a fejezetben megmutatjuk hogy mikeacutent lehet pontosan ugyanuacutegy műkoumldő ciklusokat toumlbbfeacutelekeacuteppen megiacuterni A bemutatott moacutedszerek nem kimeriacutető elemzeacutest jelentenek ezek alapjaacuten (vagy eacuteppen ezektől fuumlggetlenuumll) tovaacutebbi ciklusszervezeacutesi gondolatmeneteket bizonyaacutera az olvasoacute is koumlnnyen ki tud talaacutelni

1 Oumlsszeadaacutes eacutes kivonaacutesAz aacutetvitel neacutelkuumlli oumlsszeadaacutes utasiacutetaacutesaacutet maacuter bemutattuk a [Logikai eacutes aritmetikai utasiacutetaacutesok] alfejezetben azonban a teljesseacuteg kedveacuteeacutert uacutejra felsoroljuk a maacuter ismert ciacutemzeacutesmoacuteduacute vaacuteltozatokat

ADD ARnADD AdirectADD Adata

Ez az utasiacutetaacutes befolyaacutesolja a C bit eacuterteacutekeacutet Ha az oumlsszeadaacutes eredmeacutenye nagyobb mint 255 akkor a C bit 1 lesz kuumlloumlnben 0 Ezeacutert hiacutevjaacutek aacutetviteli bitnek Ennek segiacutetseacutegeacutevel lehet toumlbb baacutejton aacutebraacutezolt szaacutemokat oumlsszeadni de akkor azt maacuter oumlsszeadaacutes koumlzben figyelembe kell venni amit az ADD utasiacutetaacutes nem tesz Az oumlsszeadaacutesnak van olyan vaacuteltozata is amely nem csak az operandust adja az akkumulaacutetorhoz hanem a C bit tartalmaacutet is Az aacutetviteles oumlsszeadaacutes mnemonikja ADDC ami az angol Add Accumulator with Carry (hozzaacutead az akkumulaacutetorhoz aacutetvitellel) kifejezeacutesből szaacutermazik A művelet veacutegrehajtaacutesa befolyaacutesolja a C bit eacuterteacutekeacutet baacutermi volt is az a művelet elveacutegzeacutese előtt Jelenteacutese a művelet utaacuten ugyanaz mint az ADD utasiacutetaacutesnaacutel Az aacutetviteles oumlsszeadaacutes utasiacutetaacutesa az eddig megtanult ciacutemzeacutesmoacutedokkal

ADDC ARnADDC AdirectADDC Adata

Hogy joacutel eacuterthető legyen megismeacuteteljuumlk a C bittel kapcsolatos tudnivaloacutekat Vannak olyan utasiacutetaacutesok melyek veacutegrehajtaacutesaacutenaacutel nem mindegy hogy mi volt a C bit eacuterteacuteke az utasiacutetaacutes veacutegrehajtaacutesa előtt Vannak aztaacuten olyan utasiacutetaacutesok amelyek veacutegrehajtaacutesa befolyaacutesolja a C bit eacuterteacutekeacutet de ez csak az utasiacutetaacutes veacutegrehajtaacutesa utaacuten deruumll ki A keacutet eset teljesen maacutest jelent eacutes figyeljuumlnk arra hogy bizonyos utasiacutetaacutesokra mind a keacutet megfogalmazaacutes igaz

A teljesseacuteg kedveacuteeacutert el kell mondanunk hogy a C bit mellett van meacuteg keacutet jelzőbit vagy flag melyek eacuterteacutekeacutet befolyaacutesoljaacutek az aritmetikai műveletek Ezek az AC ill OV bitek Az AC roumlvidiacuteteacutes az angol Auxiliary Carry (segeacuted- kiegeacutesziacutető aacutetvitel) kifejezeacutesből az OV pedig az Overflow (tuacutelcsordulaacutes) szoacuteboacutel szaacutermazik AC pont ugyanazt jelzi mint C csak nem a 7 bitneacutel hanem a 3 bitneacutel (a bitek szaacutemozaacutesaacutet 0-val kezdve) OV a kettes komplemensben aacutebraacutezolt előjeles szaacutemoknaacutel jut szerephez Ezekkel a jelzőbitekkel egyelőre nem foglalkozunk

A kivonaacutes utasiacutetaacutesaacutenak mnemonikja SUBB ami az angol Subtract from Accumulator with Borrow (kivonaacutes az akkumulaacutetorboacutel koumllcsoumlnzeacutessel) kifejezeacutesből szaacutermazik A borrow azaz koumllcsoumlnzeacutes szoacute magyaraacutezatra szorul Amerikaacuteban az terjedt el keacutet szaacutem papiacuteron toumlrteacutenő kivonaacutesaacutenaacutel hogy ha kisebb szaacutemjegyből kell nagyobbat kivonni valamely helyieacuterteacutekneacutel akkor a kisebbiacutetendő koumlvetkező jegyeacutet csoumlkkentik eggyel majd ezt a koumllcsoumlnvett eacuterteacuteket adjaacutek hozzaacute aacutetmenetileg a kisebbiacutetendő probleacutemaacutes szaacutemjegyeacutehez Az eggyel csoumlkkentett jegyet aacutet is huacutezzaacutek majd odaiacuterjaacutek az eggyel kisebb szaacutemjegyet Ez a koumllcsoumlnzeacutes szerepel az utasiacutetaacutes megnevezeacuteseacuteben A műveletet magyarul mi hiacutevjuk nyugodtan simaacuten aacutetviteles kivonaacutesnak A SUBB utasiacutetaacutes vaacuteltozatai a maacuter ismert ciacutemzeacutesmoacutedokkal

SUBB ARnSUBB AdirectSUBB Adata

A SUBB utasiacutetaacutes veacutegrehajtaacutesaacutenaacutel a C bit eredeti eacuterteacuteke is beszaacutemiacutet Ha az utasiacutetaacutes veacutegrehajtaacutesa előtt C = 1 akkor eleve lesz koumllcsoumlnzeacutes ha C = 0 akkor nem lesz (Foumlldi halandoacute ez utoacutebbi eacutertelemben gondolna elsőkeacutent a kivonaacutes műveletre) Kivonaacutesnaacutel ahogy az vaacuterhatoacute maga az eredmeacuteny is befolyaacutesolja a C bitet C akkor lesz 1

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

ha a kivonandoacute nagyobb mint a kisebbiacutetendő azaz az akkumulaacutetor eacuterteacuteke (AC eacutes OV eacuterteacuteke itt is ahhoz hasonloacutean alakul mint az oumlsszeadoacute utasiacutetaacutesoknaacutel) Ha nem akarunk magunknak meglepeteacutest a SUBB utasiacutetaacutes hasznaacutelataacutenaacutel nagyon figyeljuumlnk arra hogy mi a C bit eacuterteacuteke a veacutegrehajtaacutes előtt

2 Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesokEbben a fejezetben oumlsszeszedjuumlk azokat az oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesokat melyekkel ciklusokat lehet szervezni eacutes egyeacuteb programelaacutegazaacutesokat megvaloacutesiacutetani

A [Egyszerű ciklusszervezeacutes] alfejezetben maacuter taacutergyaltuk a DJNZ utasiacutetaacutest az R segeacutedregiszterekkel Ezt most megismeacuteteljuumlk a felsorlaacutesban eacutes most maacuter egy maacutesik ciacutemzeacutessel is eacuterteni fogjuk

DJNZ RnrelDJNZ directrel

Az utasiacutetaacuteshoz tartozoacute magyaraacutezat megtalaacutelhatoacute az emliacutetett alfejezetben

A maacutesik oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutes a CJNE A mnemonik az angol Compare and Jump if Not Equal (oumlsszehasonliacutet eacutes ugrik ha nem egyenlő) kifejezeacutesből szaacutermazik Ciacutemzeacutesmoacuted alapjaacuten az alaacutebbi verzioacutek leacuteteznek

CJNE AdirectrelCJNE AdatarelCJNE Rndatarel

A haacuterom operandusboacutel az első azt jelenti amit oumlsszehasonliacutetunk Ez lehet az akkumulaacutetor vagy valamelyik R regiszter tartalma A maacutesodik operandus az amihez hasonliacutetunk a harmadik pedig egy relatiacutev ugraacutes meacuterteacuteke azaz az ugraacutes meacuterteacuteke az utasiacutetaacutes poziacutecioacutejaacutehoz keacutepest +127 eacutes ndash128 baacutejt koumlzoumltt Assemblyben ezt aacuteltalaacuteban ciacutemkeacutekkel adjuk meg eacutes az assembler az ami a kokreacutet eacuterteacuteket meghataacuterozza Ugraacutes akkor toumlrteacutenik ha a keacutet oumlsszehasonliacutetott objektum eacuterteacuteke nem egyenlő Kuumlloumlnben a program csorog tovaacutebb

A harmadik eacutes negyedik oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutes a JZ eacutes a JNZ A mnemonikok az angol Jump if Accumulator Zero (ugrik ha az akkumulaacutetor nulla) eacutes Jump if Accumulator Not Zero (ugrik ha az akkumulaacutetor nem nulla) kifejezeacutesből szaacutermaznak Ezek csak az akkumulaacutetor eacuterteacuteke alapjaacuten ugratnak vagy nem ugratnak

JZ relJNZ rel

Ennyi Bitekre vonatkozoacutean meacuteg vannak elaacutegazaacutesi utasiacutetaacutesok azokat keacutesőbb vesszuumlk De toumlbb teacutenyleg nincs Neacutehaacuteny truumlkkoumlt azonban meacuteg a keacutesőbbiekben ismertetuumlnk az ugroacute utasiacutetaacutesokkal kapcsolatban

3 Hat variaacutecioacute egy feladatraAz előző alfejezetek utaacuten proacutebaacuteljunk kuumlloumlnfeacutele moacutedon ciklusokat szervezni valami laacutetszoacutelag eacutertelmes feladatot teljesiacutetve de uacutegy hogy a ciklusszervezeacutes moacutedjainak logikaacuteja akaacuter jelentősen elteacuterhet egymaacutestoacutel a laacutetszat azonban toumlkeacuteletesen ugyanaz maradjon

5 feladat

Szaacutemoljunk el a programmal 1-től 15-ig eacutes kis vaacuterakozaacutessal jeleniacutetsuumlk meg a LED-soron az eacuterteacutekeket a kettes szaacutemrendszerben [Code06 Code07 Code08 Code09 Code10 Code11]

Ennek a feladatnak a megoldaacutesaacutenaacutel hat elteacuterő ciklusszervezeacutest fogunk kielemezni Ezekhez most maacuter folyamataacutebraacutet is rajzolunk A megadott koacutedreacuteszletekben az időhuacutezoacute szubrutinunk meacuteg mindig az mint az előző neacutehaacuteny feladat megoldaacutesaacutenaacutel iacutegy ezt uacutejra ismeacutet csak foumlloumlsleges lenne megadnunk Jelenleacuteteacutere csak az azt meghiacutevoacute utasiacutetaacutes fog utalni

Az első megoldaacutesban a DJNZ utasiacutetaacutest hasznaacuteljuk A ciklusvaacuteltozoacute az R4 regiszter lesz a kijelezendő eacuterteacutekek vaacuteltozoacuteja pedig R3 Leacutenyeges hogy az első megoldaacutesban e keacutet vaacuteltozoacutenak semmi koumlze nem lesz egymaacuteshoz az egyik (R4) csak azeacutert lesz felelős hogy a ciklus 15-szoumlr fusson le miacuteg a maacutesik (R3) eacuterteacutekeacutet kuumlloumln kezeljuumlk A megoldaacutes folyamataacutebraacuteja az [Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval] aacutebraacuten laacutethatoacute Vegyuumlk eacuteszre hogy a DJNZ utasiacutetaacutes nem csak a felteacutetelt jelkeacutepező teacutetelt valoacutesiacutetja meg hanem az az előtt aacutelloacute

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

eacuterteacutekcsoumlkkenteacutest is

81 aacutebra - Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval

Az [Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval] aacutebraacuten laacutethatoacute folyamataacutebra koacutedja a koumlvetkező

Code06asmMOV R31 Kezdeti eacuterteacutek R3-nakMOV R415 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a kijelezendő eacuterteacuteketCPL A Vesszuumlk a komplementereacutetMOV P2A Kijelezzuumlk a LED-soronMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 Noumlveljuumlk a kijelezendő eacuterteacuteketDJNZ R4cik Lekezeljuumlk a ciklusvaacuteltozoacutet Ugrunk vissza ha R4 eacuterteacuteke meacuteg nem 0 Ha maacuter igen csorog tovaacutebb a program azaz kileacutepuumlnk a ciklusboacutelJMP $ Oumlnmagaacutera ugratjuk vissza a programot A program helyben jaacuter toumlbbet semmit sem csinaacutel

A koacutedban egyetlen aproacute uacutejdonsaacutegot laacutethatunk Ez a legutolsoacute utasiacutetaacutesnaacutel a $ jel a JMP utaacuten Ez azt jelenti hogy az ugraacutes az utasiacutetaacutesra oumlnmagaacutera toumlrteacutenik iacutegy igen toumlmoumlr alakjaacutet laacutetjuk egy veacutegtelen ciklusnak Itt a program megakad eacutes innentől kezdve helyben jaacuter

A feladat maacutesodik megoldaacutesaacuteban ugyanuacutegy szervezzuumlk a ciklust mint az előbb de a kijelezendő eacuterteacutekekhez most nem hasznaacutelunk kuumlloumln vaacuteltozoacutet hanem azokat kifejezetten a ciklusvaacuteltozoacuteboacutel aacutelliacutetjuk elő aritmetikai műveletekkel Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code07)

82 aacutebra - Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code07asmMOV R415 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV A16 A-ba tesszuumlk a kijelezendő eacuterteacuteketCLR C C-t toumlroumlljuumlk a kivonaacuteshozSUBB AR4 A=16-R4 lesz az eredmeacuteny azaz a kijelezendő eacuterteacutek 1-től megy 15-igCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintDJNZ R4cik Lekezeljuumlk a ciklusvaacuteltozoacutet Ugrunk vissza ha R4 eacuterteacuteke meacuteg nem 0 Ha maacuter igen csorog tovaacutebb a program azaz kileacutepuumlnk a ciklusboacutelJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat harmadik megoldaacutesaacuteban maacuteshogy szervezzuumlk a ciklust Most a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet Tulajdonkeacuteppen ez lesz a ciklusvaacuteltozoacute is A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet a ciklus veacutegeacuten eacuterteacutekeljuumlk ki azaz a ciklus haacutetul tesztelő lesz Ehhez a CJNE utasiacutetaacutest hasznaacuteljuk Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code08)

83 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code08asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetCJNE R316cik R3 utolsoacute eacuterteacuteke ami joacute nekuumlnk a 15 Ha ez utaacuten noumlveluumlnk rajta egyet akkor 16-ot kapunk Ez a 16-os eacuterteacutek lesz joacute kileacutepeacutesi felteacutetelnek Ha ezt meacuteg nem eacutertuumlk el ugrunk visszaJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat negyedik megoldaacutesaacuteban szintuacutegy a CJNE utasiacutetaacutest hasznaacuteljuk Most is a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet eacutes ismeacutet ez lesz a ciklusvaacuteltozoacute is A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet azonban a ciklus elejeacuten eacuterteacutekeljuumlk ki azaz a ciklus eloumll tesztelő lesz Ennek a megoldaacutesnak a folyamataacutebraacuteja a [ Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code09)

84 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code09asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikCJNE R316rendben Ha R3 meacuteg nem eacuterte el a 16-ot akkor joumlhet a ciklusmag Ugrunk a rsquorendbenrsquo ciacutemkeacutereJMP kiugrik Ha R3 maacuter 16-tal egyenlő akkor ide csorog a program Elhagyjuk a ciklust Kiugratjuk a ciklus moumlgeacute

rendben

MOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetJMP cik Visszaugrunk a ciklus elejeacutere az ott leacutevő vizsgaacutelathoz

kiugrik

JMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat oumltoumldik megoldaacutesaacuteban szintuacutegy a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet Ismeacutet ez lesz a ciklusvaacuteltozoacute A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet ismeacutet csak ciklus veacutegeacuten eacuterteacutekeljuumlk ki azaz a ciklus megint haacutetul tesztelő lesz Ehhez azonban most a JNZ utasiacutetaacutest hasznaacuteljuk Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code10)

85 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk

Code10asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutet kor kell kileacutepni ha R3-at 16-ra noumlveltuumlk hiszen utolsoacute hasznos eacuterteacuteke 15MOV AR3 A-ba tesszuumlk R3-atCLR C Toumlroumlljuumlk C-t a kivonaacuteshozSUBB A16 A=R3-16JNZ cik Ha az eredmeacuteny nem 0 akkor meacuteg nem eacutertuumlk el 16-ot azaz a kileacutepeacutesi felteacutetelt Ekkor ugrunk vissza a ciklus elejeacutereJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

Veacuteguumll a feladat hatodik megoldaacutesaacuteban az a kuumlloumlnbseacuteg az oumltoumldikhez keacutepest hogy itt a JZ utasiacutetaacutest hasznaacuteljuk Ehhez mind a folyamataacutebra ([Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk] aacutebra) mind a koacuted (Code11) neacutemileg moacutedosul hogy most akkor toumlrteacutenjen ugraacutes ha egy eredmeacuteny eacuteppen nulla Figyeljuumlk meg hogy e keacutet utolsoacute algoritmusnaacutel hol helyezkedik el a ciklusvaacuteltozoacute eacuterteacutekeacutenek noumlveleacutese a kileacutepeacutesi felteacutetel kieacuterteacutekeleacuteseacutehez keacutepest

86 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk

Code11asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintMOV AR3 A-ba tesszuumlk R3-atCLR C Toumlroumlljuumlk C-t a kivonaacuteshozSUBB A15 A=R3-15JZ kiugrik Ha az eredmeacuteny 0 akkor eleacutertuumlk R3 utolsoacute hasznos eacuterteacutekeacutet Ez a kileacutepeacutesi felteacutetel Kiugrunk a ciklusboacutelINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetJMP cik Ugraacutes vissza a ciklus elejeacutere

kiugrik

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

JMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

Az [5 feladat] megoldaacutesaacutera gyaacutertott hat elteacuterő oumltlet nem az oumlsszes lehetőseacuteget jelenti Sok-sok aproacute reacuteszletekben elteacuterő moacutedszert lehetne meacuteg bemutatni A ceacutel mindenesetre az volt hogy megmutassuk az olvasoacutenak hogy meacuteg a nagyon keveacutes elaacutegazaacutesi utasiacutetaacutessal is milyen ceacuteliraacutenyos moacutedon van lehetőseacuteg ciklusok szervezeacuteseacutere eacutes felteacutetelek kieacuterteacutekeleacuteseacutere Sajaacutet programban pedig az aktuaacutelis feladattoacutel fuumlggően baacutetran lehet uumlgyeskedni a legroumlvidebb koacuted leggyorsabb veacutegrehajtaacutes legkevesebb felhasznaacutelt regiszter stb eacuterdekeacuteben

Created by XMLmind XSL-FO Converter

9 fejezet - Nyomoacutegombok a panelonAz ADuC 842 egyik portjaacutenak keacutet laacuteba alkalmas arra hogy az azon toumlrteacutenő vaacuteltozaacutest kuumllső esemeacutenykeacutent eacuterteacutekelje a processzor Ezzel kicsit keacutesőbb behatoacutebban foglalkozunk de maacuter most is keacutepesek vagyunk arra hogy ezeket a laacutebakat programboacutel figyeljuumlk A hallgatoacutei panelon egy-egy nyomoacutegomb van koumltve a 3 port 2 eacutes 3 laacutebaacutera Amikor ezeket a nyomoacutegombokat lenyomjuk akkor foumlldre huacutezzuk a laacutebakat Ha a gombok nincsenek lenyomva akkor a laacutebak magas jelszinten uumllnek

A nyomoacutegombok keacutenyelmes hasznaacutelataacutehoz tanuljuk meg az assembler BIT fordiacutetoacutei direktiacutevaacutejaacutet Ezzel a direktiacutevaacuteval bitekhez rendelhetuumlnk szimboacutelumokat peacuteldaacuteul

led1 BIT P20led2 BIT P27but1 BIT P32but2 BIT P33

Az első keacutet sor a 2 port (a LED-sor portja) keacutet szeacutelső bitjeacutet rendeli a led1 ill led2 szimboacutelumhoz miacuteg az utolsoacute keacutet sor a nyomoacutegombok portbitjeit rendeli a but1 ill but2 szimboacutelumhoz Figyeljuumlk meg hogyan hivatkozunk adott port adott bitjeacutere A P jelenti a portot az utaacutena aacutelloacute szaacutem a port sorszaacutema a tizedespont utaacuteni szaacutem pedig a portbit sorszaacutema (0-val kezdve)

1 Gombnyomaacutes detektaacutelaacutesaEbben az alfejezetben egy nagyon elemi kis feladatot oldunk meg a nyomoacutegombokkal kapcsolatban

6 feladat

A panel nyomoacutegombjainak lenyomaacutesaacutera vilaacutegiacutetson egy-egy LED a panel LED-soraacuten Egyuumlttes megnyomaacutesukkor mindkeacutet LED vilaacutegiacutetson A LED-ek bekapcsolaacutesa pontosan a lenyomaacutes idejeacuteig tartson [Code12]

A feladat megoldaacutesaacutehoz a MOV utasiacutetaacutesnak keacutet uacutej verzioacutejaacutet tanuljuk meg azokat amelyekkel adott bitet mozgatunk a Carry bitbe ill fordiacutetva

MOV CbitMOV bitC

A [6 feladat] megoldaacutesa amilyen roumlvid annyira laacutetvaacutenyos lesz műkoumldeacutes koumlzben A koacuted teacutenyleg csak paacuter sor iacutegy teljes egeacuteszeacuteben koumlzoumlljuumlk A bitek definiaacutelaacutesa gyakorlatilag baacuterhol toumlrteacutenhet a koacutedon beluumll

Code12asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelatabut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaled1 BIT P20 Az egyik szeacutelső LED szimboacutelumaled2 BIT P27 A maacutesik szeacutelső LED szimboacutelumaCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV Cbut1 Az 1 gomb bitjeacutenek mozgataacutesa C-beMOV led1C Aztaacuten C kirakaacutesa a led1 portbitreMOV Cbut2 A 2 gomb bitjeacutenek mozgataacutesa C-beMOV led2C Aztaacuten C kirakaacutesa a led2 portbitreJMP MAIN Kezdjuumlk eloumllrőlEND

2 Logikai műveletek bitekkelEzzel az alfejezettel eleacuterkeztuumlnk ahhoz a ponthoz ami a szaacutemiacutetaacutestechnikaacuteban aacuteltalaacuteban elkeruumllhetetlen

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

oumlsszefoglaljuk a logikai műveleteket eacutes az azokhoz tartozoacute utasiacutetaacutesokat Egyelőre mindezt a bitek szintjeacuten A baacutejtokkal ezek alapjaacuten kicsit keacutesőbb maacuter egeacuteszen koumlnnyen el fogunk baacutenni

Az előző alfejezetben megismerkedtuumlnk az egyedileg kezelhető bitek fogalmaacuteval eacutes maacutesoltuk is őket ide-oda Ezeket a biteket termeacuteszetesen eacuteppen uacutegy lehet magasra aacutelliacutetani toumlroumllni eacutes invertaacutelni mint a C bitet (laacutesd [A Carry bit] alfejezet)

SETB bitCLR bitCPL bit

Egyedi bitekkel a keacutet legfontosabb logikai műveletet veacutegezhetjuumlk el az EacuteS ill VAGY műveletet A biztonsaacuteg kedveacuteeacutert a [Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata]ban eacutes a [A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata] felideacutezzuumlk e keacutet művelet igazsaacutegtaacuteblaacutezataacutet csak a műveletekre az angol szoacutet hasznaacuteljuk Ha maacuter itt tartunk ne maradjon ki a negaacutecioacute művelete sem ([A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata])

91 taacuteblaacutezat - Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata

A B A AND B

0 0 0

0 1 0

1 0 0

1 1 1

92 taacuteblaacutezat - A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata

A B A OR B

0 0 0

0 1 1

1 0 1

1 1 1

93 taacuteblaacutezat - A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata

A NOT A

0 1

1 0

A fenti keacutet logikai művelet utasiacutetaacutesa bit tiacutepusuacute operandusokra a koumlvetkező

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

ANL CbitORL Cbit

A mnemonikok első keacutet betűje nyilvaacutenvaloacute az utaacutenuk koumlvetkező L pedig valoacutesziacutenűleg az angol Logical (logikai) szoacuteboacutel szaacutermazik A 80518052-es processzormag programozaacutesaacuteval foglalkozoacute szakkoumlnyvek mindenesetre ezekre a mnemonikokra nem adnak kimeriacutető magyaraacutezatot

Nagyon fontos szem előtt tartanunk hogy az eredmeacuteny mindig a C bitbe keruumll Mintha a koumlvetkező moacutedon iacuternaacutenk foumll a műveleteket

C = C AND bit

C = C OR bit

Amennyiben uacutegy adoacutedik a helyzet hogy a logikai műveletek elveacutegzeacuteseacutehez nem a bit neacutevvel illetett bitre hanem annak komplementereacutere (negaacuteltjaacutera inverzeacutere) van szuumlkseacuteg akkor a koumlvetkező keacutet utasiacutetaacutes lehet a segiacutetseacuteguumlnkre

ANL CbitORL Cbit

Ez utoacutebbi keacutet utasiacutetaacutes nem azonos a fentebbi kettővel geacutepi koacutedjuk is elteacuterő A perjel () utal arra hogy a művelet a C biten eacutes a megciacutemzett bit negaacuteltjaacuten hajtoacutedik veacutegre

3 Elaacutegazaacutesok bitek alapjaacutenA JZ eacutes JNZ utasiacutetaacutesok logikaacutejaacutet koumlvetve bitek eacuterteacuteke alapjaacuten is leacutetrehozhatunk felteacuteteles ugraacutesokat

JC relJNC relJB bitrelJNB bitrel

A mnemonikok az angol Jump if CBit Set (ugraacutes ha Cbit magas) eacutes Jump if CBit Not Set (ugraacutes ha Cbit nem magas (tehaacutet alacsony)) kifejezeacutesekből szaacutermaznak Az ugraacutes meacuterteacuteke a relatiacutev ciacutemkeacutenek megfelelően megint csak ndash128 eacutes +127 baacutejt koumlzoumltti eacuterteacutek lehet A harmadik eacutes negyedik utasiacutetaacutesnaacutel az első operandus azaz a bit arra utal hogy konkreacutet bitre kell hivatkoznunk Hogy teljes legyen a lista megadjuk az oumltoumldik ide tartozoacute utasiacutetaacutest is

JBC bitrel

Ez a mnemonik az angol Jump if Bit Set and Clear Bit kifejezeacutesből szaacutermazik Akkor toumlrteacutenik ugraacutes ha a hivatkozott bit eacuterteacuteke 1 eacutes ugraacuteskor mindjaacutert toumlrlődik is ez a bit Ez az utasiacutetaacutes viszonylag ritkaacuten keruumll elő de attoacutel meacuteg bizonyos helyzetekben nagyon is hasznos lehet

4 Logikai műveletek baacutejtokkalA [Logikai műveletek bitekkel] alfejezetben aacutettekintettuumlk a legelemibb logikai műveleteket kuumlloumlnaacutelloacute bitek eseteacuteben Hasonloacute moacutedon lehet logikai műveleteket veacutegezni baacutejtokon egyszerűen arroacutel van szoacute hogy keacutet baacutejtnak mindig az azonos helyieacuterteacutekű bitjein veacutegezzuumlk a műveletet A baacutejtokon azaz regiszterek vagy memoacuteriarekeszek tartalmaacuten veacutegrehajthatoacute logikai műveletek listaacuteja a maacuter ismert ciacutemzeacutesmoacutedokkal a koumlvetkező

ANL ARnANL AdirectANL AdataANL directAANL directdataORL ARnORL AdirectORL AdataORL directAORL directdata

Baacutejtok eseteacuteben szerencseacutere leacutetezik utasiacutetaacutes arra a logikai műveletre amelyet talaacuten sok olvasoacute titokban maacuter

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

hiaacutenyolt is ez lesz a kizaacuteroacute VAGY Angolul exclusive OR-nak hiacutevjaacutek iacutegy mi is az ebből szaacutermazoacute XOR roumlvidiacuteteacutest hasznaacuteljuk a [A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata]ban Eacuterdekes hogy bitekre nem hoztak leacutetre a gyaacutertoacutek ilyen utasiacutetaacutest

94 taacuteblaacutezat - A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata

A B A XOR B

0 0 0

0 1 1

1 0 1

1 1 0

A kizaacuteroacute VAGY műveletre vonatkozoacute utasiacutetaacutesok listaacuteja iacutegy fest

XRL ARnXRL AdirectXRL AdataXRL directAXRL directdata

A mnemonik az Exclusive OR Logical (kizaacuteroacute vagy logikai) angol kifejezeacutesből szaacutermazhat

Az ebben a fejezetben felsorolt ciacutemzeacutesmoacutedoknaacutel a logikai művelet eredmeacutenye mindig az első operanduskeacutent megadott regiszterbe vagy memoacuteriaciacutemre keruumll

5 Bitek moacutedosiacutetaacutesa baacutejton beluumllA baacutejtokra vonatkozoacute logikai műveletekkel aproacute de igen fontos feladatokat oldhatunk meg Az EacuteS művelettel tetszőlegesen vaacutelasztott biteket toumlroumllhetuumlnk egy baacutejtban fuumlggetlenuumll attoacutel hogy mi volt azok eredeti eacuterteacuteke Mindezt uacutegy hogy a toumlbbi bit eacuterteacuteke nem vaacuteltozik meg Vegyuumlk peacuteldaacutenak azt az esetet amikor toumlroumllni akarjuk egy baacutejt 1 eacutes 3 bitjeacutet Ebben az esetben az EacuteS művelet egyik operandusa az 11110101 lesz tehaacutet oda iacuterunk nullaacutekat ahol a bit toumlrleacuteseacutet veacutegezzuumlk Az ilyen műveletekre hasznaacutelt bitmintaacutekat maszknak vagy logikai maszknak nevezzuumlk Konkreacutet peacutelda bitek toumlrleacuteseacutere

11001100

AND 11110101

--------

11000100

Laacutethatoacute hogy ami a kijeloumllt helyeken az eredeti baacutejtban 1 volt az csakugyan 0-vaacute vaacutelt ami 0 volt az maradt 0 a toumlbbi bit pedig vaacuteltozatlan maradt

Ha most az a ceacutelunk hogy az előbbi helyeken eacuteppen magasra aacutelliacutetsuk a biteket akkor az előbbi maszk inverzeacutet hasznaacuteljuk azaz 00001010-t Tehaacutet oda iacuterunk 1-et ahol a magasra aacutelliacutetaacutest veacutegezzuumlk EacuteS művelet helyett most a VAGY műveletre van szuumlkseacuteguumlnk

11001100

OR 00001010

--------

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

11001110

Laacutethatoacute hogy ami a kijeloumllt helyeken az eredeti baacutejtban 0 volt az csakugyan 1-gyeacute vaacutelt ami 1 volt az maradt 1 a toumlbbi bit pedig vaacuteltozatlan maradt

A kizaacuteroacute VAGY művelettel meacuteg a fentiekneacutel is nagyobb huncutsaacutegot tudunk kivitelezni invertaacutelhatjuk a kijeloumllt helyen leacutevő biteket

11001100

XOR 00001010

--------

11000110

Ezek a maszkolaacutesi truumlkkoumlk nagyon hasznos eszkoumlzt adnak a kezuumlnkbe assembly nyelvű programozaacutes soraacuten hiszen igen sokszor kell majd egyes regiszterek bitjeit elszigetelt a toumlbbitől fuumlggetlen moacutedon aacutelliacutetgatnunk

6 Gombnyomaacutesok vizsgaacutelataEbben az alfejezetben olyan feladatot fogalmazunk meg a nyomoacutegombokkal kapcsolatban melynek megoldaacutesaacutehoz szuumlkseacuteg lesz az előző keacutet alfejezetben ismertetett utasiacutetaacutesokra

7 feladat

A panel nyomoacutegombjainak lenyomaacutesaacutera vilaacutegiacutetson egy-egy LED a panel LED-soraacutenak egyik ill maacutesik szeacuteleacuten Egyuumlttes megnyomaacutesukkor az oumlsszes LED vilaacutegiacutetson A LED-ek bekapcsolaacutesaacutet a gombnyomaacutesok pillanatnyi aacutellapota hataacuterozza meg [Code13]

A [6 feladat] megoldaacutesaacutenaacutel nem volt maacutes dolgunk mint hogy beraacutemoljuk a nyomoacutegomboknak megfelelő biteket a LED-ek bitjeibe Ez annak volt koumlszoumlnhető hogy mind a nyomoacutegombok mind a LED-ek inverz logikaacuteval dolgoznak azaz ha az ezeknek megfelelő bit 0 akkor vilaacutegiacutet egy LED ill van lenyomott aacutellapotban a nyomoacutegomb Most azonban enneacutel toumlbbre lesz szuumlkseacuteg Az algoritmus nem bonyolult folyamataacutebraacutera nincs is szuumlkseacuteg Code12 szimboacutelumait alapul veacuteve figyeljuumlk meg csupaacuten az alaacutebbi haacuterom sort mert ez lesz a [6 feladat] megoldaacutesaacutenak a lelke

CLR CORL Cbut1ORL Cbut2

Mi toumlrteacutenik itt Előszoumlr toumlroumlljuumlk a C bitet Utaacutena VAGY műveletet hajtunk veacutegre C-n szeacutepen sorban mindkeacutet gomb bitjeacutevel Ha mindkeacutet gomb le van nyomva (but1=but2=0) akkor a haacuterom sor veacutegrehajtaacutesa utaacuten C eacuterteacuteke 0 Ha csak az egyik gomb van lenyomva (valamelyikuumlk bitjeacutenek eacuterteacuteke 1) akkor a haacuterom sor veacutegrehajtaacutesa utaacuten C = 1 Ha egyik gomb sincs lenyomva akkor is ugyanezt kapjuk Laacutethatoacute tehaacutet hogy a kritikus esetet vagyis azt amikor mindkeacutet gombot lenyomtuk az jelzi ha a haacuterom sor veacutegrehajtaacutesa utaacuten C = 0 Eacutes ezzel a felteacutetellel maacuter meg tudunk fogalmazni elaacutegazaacutest A koacutedot ismeacutet teljes terjedelmeacuteben koumlzoumlljuumlk Vegyuumlk eacuteszre hogy a bitek szimboacutelumainak definiacutecioacuteja most maacutes helyen aacutell mint Code12-ben hiszen azt aacutelliacutetottuk hogy az ilyen sorok gyakorlatilag baacuterhol elhelyezkedhetnek a koacutedban

Code13asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelataCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaled1 BIT P20 Az egyik szeacutelső LED szimboacutelumaled2 BIT P27 A maacutesik szeacutelső LED szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV Cbut1 Az 1 gomb bitjeacutenek mozgataacutesa C-beMOV led1C Aztaacuten C kirakaacutesa a led1 portbitreMOV Cbut2 A 2 gomb bitjeacutenek mozgataacutesa C-be

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

MOV led2C Aztaacuten C kirakaacutesa a led2 portbitreCLR C Toumlroumlljuumlk C-tORL Cbut1 VAGY műveletet hajtunk veacutegre a nyomoacutegombok keacutet bitjeacutevelORL Cbut2 Ha valamelyik gomb nincs lenyomva (azaz eacuterteacuteke 1) akkor a VAGY műveletek veacutegeredmeacutenye 1 Ha mindkeacutet gombot lenyomjuk (bitjeik eacuterteacuteke 0) akkor a VAGY műveletek veacutegeredmeacutenye 0JNC dupla Ugrunk ha mindkeacutet gomb le van nyomvaORL P201111110b Akaacutermi is volt eddig a LED-eken kikapcsoljuk a koumlzeacutepső hatot a keacutet szeacutelsőt nem baacutentjukJMP MAIN Ugraacutes vissza a program elejeacutereduplaMOV P20 Az oumlsszes LED bekapcsolaacutesaJMP MAIN Kezdjuumlk eloumllrőlEND

7 Leacutepteteacutes nyomoacutegombbalNyomoacutegombokat toumlbbnyire nem a nyomogataacutes oumlroumlmeacuteeacutert hasznaacutelunk hanem valamilyen funkcioacutet adunk nekik A koumlvetkező feladat egeacuteszen egyszerű kis alkalmazaacutest fogalmaz meg melyben egyetlen nyomoacutegombeacute lesz a főszerep

8 feladat

Az 1 nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Uacutej leacutepeacutes csak a gomb felengedeacutese eacutes uacutejboacuteli lenyomaacutesa utaacuten toumlrteacutenhet [Code14]

Ha veacutegiggondoljuk hogy mire lesz itt szuumlkseacuteguumlnk sejthetjuumlk hogy a gomb lenyomaacutesaacutenak teacutenyeacutet valahogyan roumlgziacutetenuumlnk kell eacutes uacutej leacutepeacutes csak akkor koumlvetkezhet be ha a gombot felengedtuumlk majd uacutejra lenyomtuk azaz a lenyomaacutes teacutenyeacutenek aacutellapota megszűnik majd uacutejra fennaacutell Ezt az aacutellapotjelzeacutest most a C bittel valoacutesiacutetjuk meg keacutesőbb tanulunk raacute jobban hasznaacutelhatoacute megoldaacutest is Magaacutehoz az elvhez azonban a C bit is toumlkeacuteletesen megfelel A megvaloacutesiacutetaacutes folyamataacutebraacuteja a [A (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute

91 aacutebra - A [8 feladat] (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A koacuted maga nem tuacutel hosszuacute a koumltelező direktiacutevaacutekat ismeacutet elhagyjuk

Code14asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesaCLR C A C bit toumlrleacutese Ebben a programban arra hasznaacuteljuk hogy jelezze a lenyomaacutes aacutellapotaacutetwaitJNB but1lenyom Ugrunk ha a gomb le van nyomvaCLR C Toumlroumlljuumlk C-t mert felengedtuumlk a gombotJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozlenyomJC wait Ha maacuter lenyomott aacutellapotban van a gomb akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB C Ha meacuteg nem volt lenyomva a gomb akkor most maacuter le van nyomva Jelezzuumlk ezt az aacutellapotot a C bitenMOV AP2 Eggyel odeacutebb leacuteptetjuumlk a LED-et aRL A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

Amikor nagy eacutelvezettel nyomogatjuk a gombot hogy a vilaacutegiacutetoacute LED laacutetszoacutelag szaladgaacuteljon koumlrbe-koumlrbe neacuteha eacuterdekes jelenseacuteget tapasztalunk A nyomoacutegomb mechanikai szerkezeteacutetől fuumlggően ugyanis sokszor nem csekeacutely valoacutesziacutenűseacuteggel előfordul az hogy a LED hirtelen kettőt ugrik egy helyett Eacutes ez nem programhiba A jelenseacuteg neve prellegeacutes A prellegeacutes neacutemet eredetű szoacute (prellen ndash csapoacutedik kocog pattog visszapattan) az elektronikaacuteban azt jelenti hogy valamely alkatreacutesz jellemzően kapcsoloacute vagy nyomoacutegomb nem stabilan vaacutelt aacutet egyik aacutellapotaacuteboacutel a maacutesikba hanem toumlbbszoumlr zaacuterja ill szakiacutetja meg az aacuteramkoumlrt Ez a jelenseacuteg a most keacutesziacutetett alkalmazaacutesunkban anomaacutelis viselkedeacutest ideacutezhet elő Nagyon fontos hogy a prellegeacutes lehetőseacutegeacutenek mindig tudataacuteban legyuumlnk eacutes amikor csak tehetjuumlk veacutedekezzuumlnk ellene Keacutesőbb arra is mutatunk peacuteldaacutet hogy ezt hogyan tehetjuumlk meg

8 Bitvaacuteltozoacutek hasznaacutelataA [Nyomoacutegombok a panelon] fejezet bevezetőjeacuteben bemutattuk hogy hogyan lehet szimboacutelumokat rendelni konkreacutet bitekhez mint nyomoacutegombokhoz eacutes portbitekhez A [7 feladat] megoldaacutesaacutenaacutel a C bitet hasznaacuteltuk aacuteltalaacutenos ceacuteluacute keacutetaacutellapotuacute vaacuteltozoacutenak azaz bitvaacuteltozoacutenak Ott meacuteg elegendő volt egynek a hasznaacutelata Ez azonban csak ritkaacuten tarthatoacute igen sokszor egyneacutel joacuteval toumlbb bitvaacuteltozoacutera lesz szuumlkseacuteguumlnk amelyek maacuter nem a C bitet fogjaacutek terhelni

Az ADuC 842-es architektuacutera memoacuteriaacuteja 0 lapjaacutenak első 128 baacutejtjaacutet Lower RAM-nak azaz alsoacute RAM-nak hiacutevjaacutek Ez a memoacuteriateruumllet kuumlloumlnoumlsen eacuterdekes Az elektronikus tankoumlnyvben toumlbbszoumlr elővesszuumlk a memoacuteria speciaacutelis teruumlleteinek teacutemakoumlreacutet most azonban csak azt a teruumlletet taacutergyaljuk amelyik bitenkeacutent ciacutemezhető laacutesd [A Lower RAM bitenkeacutent ciacutemezhető teruumllete] aacutebra

92 aacutebra - A Lower RAM bitenkeacutent ciacutemezhető teruumllete

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A bitenkeacutent ciacutemezhető teruumllet memoacuteriaciacutemei 20h-toacutel 2Fh-ig tartanak A 20h memoacuteriaciacutemen pl egy nyolcbites baacutejt talaacutelhatoacute eacuteppen uacutegy mint maacuteshol Megfelelő ciacutemzeacutessel ez a baacutejt teljes egeacuteszeacuteben feluumlliacuterhatoacute Azonban ezt a kincset eacuterő memoacuteriateruumlletet nem iacutegy szokaacutes hasznaacutelni hiszen az ADuC 842-es architektuacuteraacuteja lehetőveacute teszi hogy a 20h-toacutel 2Fh-ig terjedő ciacutemeken leacutevő baacutejtokat bitenkeacutent ciacutemezhessuumlk Vagyis az emliacutetett 20h ciacutemen elhelyezkedő baacutejt minden egyes bitjeacutehez kuumlloumln hozzaacutefeacuterhetuumlnk eacutes felhasznaacutelhatjuk őket a programjainkban Peacuteldaacuteul jelzőbitkeacutent bitvaacuteltozoacutekeacutent Az alaacutebbi lista a bitenkeacutent ciacutemezhető memoacuteriateruumllet hozzaacuterendeleacuteseacutere mutat peacuteldaacutekat

bit0 BIT 00h

bit1 BIT 01h

gomb BIT 1Fh

marker BIT 5Bh

last_bit BIT 7Fh

Ezek utaacuten baacutermelyik bitre vonatkozoacute utasiacutetaacutesba baacutetran beiacuterhatnaacutenk a bit aacuteltalaacutenos megnevezeacutes (laacutesd [Logikai műveletek bitekkel] eacutes [Elaacutegazaacutesok bitek alapjaacuten] alfejezet) helyeacutere a fenti listaacuteban megadott neveket

A bitvaacuteltozoacutek megismereacutese utaacuten megfogalmazzuk a [9 feladat]ot amely a [8 feladat] tovaacutebbfejleszteacutese mindkeacutet iraacutenyra

9 feladat

A keacutet nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Az 1 gombbal balra a 2 gombbal jobbra toumlrteacutenjen a leacutepteteacutes Uacutej leacutepeacuteshez a gombok felengedeacutese eacutes uacutejboacuteli lenyomaacutesa szuumlkseacuteges [Code15]

Enneacutel a feladatnaacutel uacutegy tűnik hogy nem lesz eleacuteg egyetlen jelzőbit De ez nem jelent probleacutemaacutet hiszen maacuter tudjuk hogyan hasznaacutelhatunk bitvaacuteltozoacutekat A [A (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatjuk a [9 feladat] folyamataacutebraacutejaacutet amelyen a kritikus bitvaacuteltozoacutek a koumlvetkezők le1 le2 Ha ezek a jelzőbitek magasak akkor az 1 ill 2 gomb lenyomott aacutellapotban van Minden tovaacutebbi uumlgylet uacutegy toumlrteacutenik mint a [8 feladat] megoldaacutesaacutenaacutel

93 aacutebra - A [9 feladat] (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A [A (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten szereplő folyamataacutebra baacuter terjedelmesebb mint az eddigiek a koacuted nem lesz ennyire ijesztő

Code15asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumale1 BIT 00h Az 1 gomb lenyomott aacutellapotaacutet jelző bitvaacuteltozoacutele2 BIT 01h A 2 gomb lenyomott aacutellapotaacutet jelző bitvaacuteltozoacute

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

ORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesaCLR le1 A gombok lenyomott aacutellapotaacutet jelzőCLR le2 bitvaacuteltozoacutek toumlrleacutesewaitJNB but1balra Ugrunk ha az 1 gomb le van nyomvaJNB but2jobbra Ugrunk ha a 2 gomb le van nyomvaCLR le1 Ha egyik gomb sincs lenyomva toumlroumlljuumlk azokCLR le2 jelzőbitjeitJMP wait Uacutejra gombnyomaacutesra vaacuterunkbalraJB le1wait Ha baacutermelyik gomb lenyomott aacutellapotban vanJB le2wait akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB le1 Ha meacuteg nem volt lenyomva az 1 gomb akkor most maacuter le van nyomva Jelezzuumlk ez az aacutellapototMOV AP2 Eggyel balra leacuteptetjuumlk a LED-et a RL A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozjobbraJB le1wait Ha baacutermelyik gomb lenyomott aacutellapotban vanJB le2wait akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB le2 Ha meacuteg nem volt lenyomva a 2 gomb akkor most maacuter le van nyomva Jelezzuumlk ez az aacutellapototMOV AP2 Eggyel jobbra leacuteptetjuumlk a LED-et a RR A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

A prellegeacutes jelenseacutege enneacutel az alkalmazaacutesnaacutel eacuteppen uacutegy megfigyelhető mint Code14-neacutel Eacuteppen uacutegy tudomaacutesul vettuumlk eacutes eacuteppen uacutegy nem tettuumlnk ellene semmit mint előzőleg Tudaacutesunk jelenlegi szintjeacuten meacuteg pironkodva tovaacutebbleacutephetuumlnk de komoly alkalmazaacutesoknaacutel ez maacuter nem maradhat ennyiben

9 A prellegeacutes kikuumlszoumlboumlleacutese vaacuterakozaacutessalEbben az alfejezetben a feladat legyen hasonloacute a [9 feladat]hoz de moacutedosiacutetsuk azt egy kicsikeacutet Most ne az legyen a leacutenyeg hogy fel kelljen engedni a nyomoacutegombokat a koumlvetkező leacutepeacuteshez hanem az hogy bizonyos időnek el kelljen telnie ahhoz hogy uacutejboacuteli kieacuterteacutekeleacutes koumlvetkezzeacutek be

10 feladat

A keacutet nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Az 1 gombbal balra a 2 gombbal jobbra toumlrteacutenik a leacutepteteacutes A gombok uacutejboacuteli kieacuterteacutekeleacuteseacutehez neacutemi időkeacuteslelteteacutesen keresztuumll vezessen az uacutet [Code16]

Enneacutel a feladatnaacutel nem lesz szuumlkseacuteguumlnk bitvaacuteltozoacutekra viszont uacutejra előhuacutezzuk a joacutel bevaacutelt időhuacutezoacute szubrutinunkat (laacutesd [Parameacuteteraacutetadaacutes szubrutinnak] alfejezet) Amikor nyomoacutegomb lenyomaacutesaacutet eacuterzeacutekeli a program akkor elveacutegzi azt a műveletet amit kell (jelen esetben a bitforgataacutest) utaacutena pedig neacutehaacuteny tized maacutesodpercig vaacuter Iacutegy a prellegeacutest kikuumlszoumlboumlljuumlk viszont a vaacuterakozaacutest jelentő idő holt idő mert ott tovaacutebbi beavatkozaacutesra esemeacutenykezeleacutesre egyelőre nem lesz lehetőseacuteguumlnk Egyszerűbb esetekben ez nem is baj de kifinomultabb igeacutenyek eacutes feladatok eseteacuteben ez a moacutedszer nem engedhető meg Amikor eleacuteruumlnk a megszakiacutetaacutesok taacutergyalaacutesaacuteig erre a helyzetre is mutatni fogunk megoldaacutest A gombnyomaacutes eacuteszleleacutese utaacuteni cselekveacutes eacutes vaacuterakozaacutes egyszerűbb mint az előző keacutet feladat megoldaacutesaacutenak gondolatmenete iacutegy folyamataacutebra megadaacutesa sem szuumlkseacuteges A koacuted koumlnnyen eacutertelmezhető Eacutes annak is nyilvaacutenvaloacutenak kell lennie hogy enneacutel a megoldaacutesnaacutel akaacuter raacute is tenyerelhetuumlnk a nyomoacutegombokra akkor is leacutepkedni fog koumlrbe a LED Ha mindkeacutet gomb le van nyomva akkor viszont visszaugratjuk a vezeacuterleacutest a vaacuterakozaacuteshoz A leacutepeacutesek maximaacutelis sebesseacutegeacutet egyeacutebkeacutent eacuteppen a prellegeacutest kikuumlszoumlboumllő vaacuterakozaacutes hataacuterozza meg Ezt a szubrutint eacuteppen uacutegy nem tuumlntetjuumlk foumll mint a koraacutebbi programoknaacutel mert az nem vaacuteltozik meg most is ugyanazt hasznaacuteljuk (DELAY)

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

Code16asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut1 BIT P33 A 2 gomb szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesawaitJNB but1balra Ugrunk ha az 1 gomb le van nyomvaJNB but2jobbra Ugrunk ha a 2 gomb le van nyomvaJMP wait Uacutejra gombnyomaacutesra vaacuterunkbalraJNB but2wait Ha a 2 gomb is le van nyomva (azaz itt eacuteppen mind a kettő) akkor visszaugrunk a vaacuterakozaacuteshozMOV AP2 Eggyel balra leacuteptetjuumlk a LED-et a RL A bitforgataacutes művelettelMOV P2AMOV A10 01 s időhuacutezaacutes joumln aCALL DELAY szubrutinnalJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozjobbraJNB but1wait Ha az 1 gomb is le van nyomva (azaz itt eacuteppen mind a kettő) akkor visszaugrunk a vaacuterakozaacuteshozMOV AP2 Eggyel jobbra leacuteptetjuumlk a LED-et a RR A bitforgataacutes művelettelMOV P2AMOV A10 01 s időhuacutezaacutes joumln aCALL DELAY szubrutinnalJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

10 A teljes alsoacute RAMAz alsoacute RAM-roacutel maacuter foumllvillantottunk neacutehaacuteny reacuteszletet a [Bitvaacuteltozoacutek hasznaacutelata] alfejezetben Ott kizaacuteroacutelag a bitenkeacutent ciacutemezhető teruumlletet taacutergyaltuk Az alsoacute RAM-nak azonban van meacuteg keacutet fontos teruumllete Az első ilyen teruumllet ciacutemei 00h-toacutel 1Fh-ig tartanak azaz oumlsszesen 32 memoacuteriarekeszről van szoacute Ezen a teruumlleten helyezkednek el a memoacuteriaacuteban az R regiszterek Eacutes az a helyzet hogy ezekből a regiszterekből oumlsszesen neacutegy peacuteldaacuteny leacutetezik nyolcasaacuteval rendezve Olyan ez mintha nyolcfioacutekos szekreacutenyből lenne oumlsszesen neacutegy darabunk a szobaacutenkban Az R regiszterek ciacutemeit a [Az alsoacute RAM neacutegy regiszterbankja] aacutebra mutatja Bal szeacutelen a decimaacutelis ciacutemek mellettuumlk a hexadecimaacutelis eacuterteacutekek majd a regiszterek nevei

94 aacutebra - Az alsoacute RAM neacutegy regiszterbankja

A neacutegy darab nyolcfioacutekos szekreacutenyuumlnkkel viszont lesz egy kis baj Mindig csak egyiket hasznaacutelhatjuk A 80518052-es processzormagnaacutel ez azt jelenti hogy a neacutegy regiszterbank koumlzuumll mindig pontosan egy lesz aktiacutev azaz ha peacuteldaacuteul kiadjuk a MOV AR3 utasiacutetaacutest akkor az akkumulaacutetorba vagy a 03h vagy a 0Bh vagy az 13h vagy az 1Bh ciacutemről toumlltődik be a tartalom vagyis az eacuteppen aktuaacutelis R3 regiszter tartalma A regiszterbank kivaacutelasztaacutesa a PSW (Program Status Word ndash programaacutellapot) SFR-rel toumlrteacutenik Default esetben a 0 regiszterbank aktiacutev Ebben a tankoumlnyvben a tovaacutebbiakban nem vaacuteltunk regiszterbankot a default beaacutelliacutetaacutest hasznaacuteljuk A PSW (Program Status Word) SFR viszont annyira fontos hogy teljes tartalmaacutet megadjuk (laacutesd [A PSW SFR parameacuteterei]) eacutes nem csak hivatkozunk az ADuC 842-es leiacuteraacutesaacutera [1 p 21 Table 5]

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

95 taacuteblaacutezat - A PSW SFR parameacuteterei

PSW Program Status Word

Programaacutellapot

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Angol neacutev Magyar neacutev

7 CY Carry Flag Aacutetviteli bit

6 AC Auxiliary Carry Flag

Kiegeacutesziacutető aacutetviteli bit

5 F0 General-Purpose Flag

Aacuteltalaacutenos ceacuteluacute jelzőbit

4 RS1 Register Bank Select Bits

Regiszterbankot kivaacutelasztoacute bitek

3 RS0 RS1

0

0

1

1

RS0

0

1

0

1

Bank

0

1

2

3

2 OV Overflow Flag Tuacutelcsordulaacutes-bit

1 F1 General-Purpose Flag

Aacuteltalaacutenos ceacuteluacute jelzőbit

0 P Parity Bit Paritaacutesbit

A [A Lower RAM bitenkeacutent ciacutemezhető teruumllete] eacutes [Az alsoacute RAM neacutegy regiszterbankja] aacutebra alapjaacuten laacutethatoacute hogy a 128 baacutejt meacuteretű alsoacute RAM-ban 00h-toacutel 1Fh-ig a regiszterbankok helyezkednek el 20h-toacutel 2Fh-ig pedig a bitenkeacutent ciacutemezhető teruumllet De mi van 30h-toacutel 7Fh-ig Ezt a teruumlletet aacuteltalaacutenos ceacuteluacute teruumlletnek hiacutevjuk laacutesd [Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete] aacutebra

95 aacutebra - Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete

Ez a teruumllet elvileg szabad arra hasznaacuteljuk amire akarjuk Kivaacuteloacutean alkalmas baacutejtmeacuteretű vaacuteltozoacutek definiaacutelaacutesaacutera csak most egy maacutesik a DATA direktiacutevaacutet kell hasznaacutelnunk az assemblerben peacuteldaacuteul

byte0 DATA 030hbyte1 DATA 031h

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

last_byte DATA 07Fh

Iacutegy tehaacutet maacuter nem csak bitvaacuteltozoacuteink hanem baacutejtvaacuteltozoacuteink is lehetnek meacuteghozzaacute az alsoacute RAM-ban oumlsszesen 80 darab Ez talaacuten nem tűnik soknak elsőre de laacutetni fogjuk hogy ezzel a kis szabad hellyel is mennyi mindent meg lehet oldani

Created by XMLmind XSL-FO Converter

10 fejezet - A belső oacutera hasznaacutelataAz ADuC 842-es architektuacuteraacuteja toumlbb időziacutetőtszaacutemlaacuteloacutet tartalmaz eacutes tartalmaz egy belső oacuteraacutet is Ebben a fejezetben az oacutera hasznaacutelataacuteval fogunk megismerkedni Ennek neve angolul Time Interval Counter (TIC) ami magyarul időintervallum-szaacutemlaacuteloacutet jelent Az oacuteraacutehoz seregnyi SFR tartozik iacutegy előszoumlr is meg kell ismerkednuumlnk ezekkel Az időegyseacutegekhez tartozoacute SFR-eket a [Az időegyseacutegek SFR-jeinek parameacuteterei] foglalja oumlssze [1 p 56]

101 taacuteblaacutezat - Az időegyseacutegek SFR-jeinek parameacuteterei

SFR Angol neacutev Eacuterveacutenyes eacuterteacutekek Funkcioacute Default eacuterteacutek bekapcsolaacuteskor

HTHSEC Hundredths Seconds Time Register

0-127 A regiszter eacuterteacuteke 1-egyel nő minden 1128-maacutesodperces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a SEC regiszter noumlvekszik

00h

SEC Seconds Time Register

0-59 A regiszter eacuterteacuteke 1-egyel nő minden 1-maacutesodperces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a MIN regiszter noumlvekszik

00h

MIN Minutes Time Register 0-59 A regiszter eacuterteacuteke 1-egyel nő minden 1-perces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a HOUR regiszter noumlvekszik

00h

HOUR Hours Time Register 0-23 A regiszter eacuterteacuteke 1-egyel nő minden 60-perces időintervallum letelte utaacuten

00h

Az időegyseacutegek regiszterei gyakorlatilag belső uumltemezeacutes szerint kezelt vaacuteltozoacuteknak tekinthetők Az oacuteraacutet azonban be is kell kapcsolni azt meg lehet aacutelliacutetani eacutes meacuteg sok eacuterdekes dologra lehet raacutebiacuterni A legfontosabb az hogy el tudjuk indiacutetani eacutes meg tudjuk aacutelliacutetani Ehhez (eacutes a toumlbbi eacuterdekes dologhoz) a TIMECON SFR ismerete szuumlkseacuteges A [A TIMECON SFR parameacuteterei] a TIMECON SFR aacuteltalaacutenos parameacutetereit foglalja oumlssze Keacutesőbb a megszakiacutetaacutesok taacutergyalaacutesaacutenaacutel reacuteszletesebb ismerteteacutest koumlzluumlnk ([A TIMECON SFR parameacuteterei reacuteszletesebben]) A leacutenyeg most csupaacuten az hogy az oacuteraacutet a [Az időegyseacutegek SFR-jeinek parameacuteterei]ban ismertetett vaacuteltozoacutek kezdeti eacuterteacutekeacutenek beaacutelliacutetaacutesa utaacuten a TIMECON SFR 0 bitjeacutenek magasra aacutelliacutetaacutesaacuteval indiacutethatjuk el Ennek a bitnek a toumlrleacuteseacutevel az oacutera megaacutell Nagyon leacutenyeges hogy az oacutera az uacutejboacuteli indiacutetaacuteskor nem a megaacutelliacutetaacutesnaacutel megfigyelhető időeacuterteacutekről ketyeg tovaacutebb hanem a [Az időegyseacutegek SFR-jeinek parameacuteterei]ban ismertetett vaacuteltozoacutek legutoacutebbi beaacutelliacutetaacutesai szerint indul uacutejra [1 p 55 Table 24] Iacutegy ha folytatni akarjuk az időmeacutereacutest akkor az oacutera megaacutelliacutetaacutesakor el kell mentenuumlnk az időegyseacutegek vaacuteltozoacuteinak tartalmaacutet majd uacutejraindiacutetaacutes előtt uacutejra be kell toumlltenuumlnk azokat Az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban az oacutera regisztereinek ismerteteacuteseacuteneacutel foumllhiacutevjaacutek a figyelmet arra hogy bdquoelegendő időt kell hagyni az oacutera regisztereire vonatkozoacute utasiacutetaacutesok koumlzoumlttrdquo [1 p 54] Ez a megfogalmazaacutes eleacuteg koumldoumls de proacutebaacuteljuk meg eacutertelmezni Arroacutel van szoacute hogy

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

az intervallumszaacutemlaacuteloacutet egy 32 kHz-es kuumllső kristaacutely hajtja eacutes ez az oacuterajel vonatkozik az oacutera regisztereinek hozzaacutefeacutereacuteseacutehez is Iacutegy ha joacuteval nagyobb frekvenciaacuteval fut a processzorunk akkor egyszerűen nem lesz eleacuteg idő a regisztereket foumlluumlliacuterni eacutes anomaacutelis viselkedeacutesbe torkollik a program futaacutesa Erre megfelelő gyoacutegyiacuter lehet ha beszuacuterunk a programba egy roumlvid vaacuterakozaacutest Peacuteldaacuteul a NOP utasiacutetaacutest hajtjuk veacutegre neacutehaacutenyszor egy ciklussal A leacutenyeg az hogy ha a belső oacuteraacutet hasznaacuteljuk akkor mindig kuumlloumlnoumls figyelemmel teszteljuumlk a programunk műkoumldeacuteseacutet eacutes legyuumlnk felkeacuteszuumllve a fent emliacutetett hataacutes jelentkezeacuteseacutere eacutes annak kikuumlszoumlboumlleacuteseacutere

102 taacuteblaacutezat - A TIMECON SFR parameacuteterei

TIMECON TIC Control Register

Az időintervallum-szaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Az oacutera a 0 bit magasra aacutelliacutetaacutesaacuteval indul toumlrleacuteseacutevel megaacutell

Az oacutera indiacutetaacutesa logikai maszkolaacutessal a koumlvetkező moacutedon kivitelezhető

ORL TIMECON00000001b

Hasonloacute technikaacuteval az oacutera leaacutelliacutetaacutesa iacutegy toumlrteacutenhet

ANL TIMECON11111110b

Mindezek utaacuten fogalmazzunk meg egy nagyon egyszerű feladatot az oacuteraacuteval (TIC) kapcsolatban

11 feladat

Nullaacutezzuk majd Indiacutetsuk el a belső oacuteraacutet eacutes jelezzuumlk ki a maacutesodperceket a panel LED-soraacuten [Code17]

A feladat annyira egyszerű hogy ehhez joacuteformaacuten meacuteg magyaraacutezat is foumlloumlsleges Mivel a maacutesodperceket kell kijeleznuumlnk elegendő a SEC eacutes HTHSEC regisztreket nullaacuteznunk hiszen a maacutesik kettő időregiszter konkreacutet eacuterteacuteke esetuumlnkben teljesen melleacutekes

Code17asmMAINMOV TIMECON0 Mindenfeacutele oacuteraparameacutetert lenullaacutezunkMOV HTHSEC0 A 1128 maacutesodpercek nullaacutezaacutesaMOV SEC0 A maacutesodpercek nullaacutezaacutesaORL TIMECON00000001b Elindiacutetjuk az oacuteraacutet Logikai maszkolaacutessal magasra aacutelliacutetjuk a 0 bitetdisplayMOV ASEC A-ba toumlltjuumlk a maacutesodperceketCPL A Invertaacuteljuk az eacuterteacuteket a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-eken a maacutesodperceketJMP display Folytatjuk a kijelzeacutest Uacutejra eacutes uacutejra

Moacutedosiacutetsuk uacutegy a [11 feladat]ot hogy az 1 gomb megnyomaacutesaacutera megaacutelljon az oacutera a 2 gomb megnyomaacutesaacutera pedig folytatoacutedjeacutek az idő meacutereacutese

12 feladat

Indiacutetsuk el a belső oacuteraacutet 000000-roacutel Jelezzuumlk ki a maacutesodperceket a panel LED-soraacuten Az 1 gomb megnyomaacutesaacutera aacutelljon meg az oacutera a 2 gomb megnyomaacutesaacutera pedig induljon tovaacutebb onneacutet ahol megaacutellt [Code18]

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

Ahogyan emliacutetettuumlk az oacutera uacutejraindiacutetaacutesakor be kell toumlltenuumlnk a megfelelő SFR-ekbe azokat az eacuterteacutekeket amelyeket az oacutera megaacutelliacutetaacutesakor remeacutelhetőleg elmentettuumlnk Ehhez nevet adunk egy-egy memoacuteriarekesznek az alsoacute RAM-ban uacutegy ahogyan azt a [A teljes alsoacute RAM] alfejezetben bemutattuk A koacuted maga nem sokkal lesz bonyolultabb csupaacuten kicsit bővuumll Ennek elleneacutere ehhez a vaacuteltozathoz folyamataacutebraacutet is keacutesziacutetuumlnk (laacutesd [A (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebra)

101 aacutebra - A [12 feladat] (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja

Code18asmMHOUR DATA 030h A HOUR eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMMIN DATA 031h A MIN eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMSEC DATA 032h A SEC eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMHTHSEC DATA 033h A HTHSEC eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaMAINMOV TIMECON0 Mindenfeacutele oacuteraparameacutetert lenullaacutezunkMOV HTHSEC0 A 1128 maacutesodpercek nullaacutezaacutesaMOV SEC0 A maacutesodpercek nullaacutezaacutesaMOV MIN0 A percek nullaacutezaacutesaMOV HOUR0 Az oacuteraacutek nullaacutezaacutesaORL TIMECON00000001b Elindiacutetjuk az oacuteraacutet Logikai maszkolaacutessal magasra aacutelliacutetjuk a 0 bitetdisplay

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

MOV ASEC A-ba toumlltjuumlk a maacutesodperceketCPL A Invertaacuteljuk az eacuterteacuteket a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-eken a maacutesodperceketJNB but1stop Leaacutellunk ha megnyomtuk az 1 gombotJMP display Folytatjuk a kijelzeacutest Uacutejra eacutes uacutejrastopMOV MHTHSECHTHSEC Az 1128 maacutesodpercek elmenteacuteseMOV MSECSEC A maacutesodpercek elmenteacuteseMOV MMINMIN A percek elmenteacuteseMOV MHOURHOUR Az oacuteraacutek elmenteacuteseANL TIMECON11111110b A TIMECON regiszter 0 bitjeacutenek toumlrleacutese azaz megaacutelliacutetjuk az oacuteraacutetJB but2$ Vaacuterjuk a 2 gomb lenyomaacutesaacutetMOV HTHSECMHTHSEC Az 1128 maacutesodpercek visszatoumllteacuteseMOV SECMSEC A maacutesodpercek visszatoumllteacuteseMOV MINMMIN A percek visszatoumllteacuteseMOV HOURMHOUR Az oacuteraacutek visszatoumllteacuteseORL TIMECON00000001b A TIMECON regiszter 0 bitjeacutenek 1-re aacutelliacutetaacutesa azaz (uacutejra) elindiacutetjuk az oacuteraacutetJMP display Ugrunk vissza a kijelzeacuteshez

Veacutegezetuumll neacutezzuumlk meg kiacutevaacutencsisaacutegboacutel hogy igaz-e az hogy ha nem toumlltjuumlk vissza az oacutera uacutejraindiacutetaacutesa előtt az elmentett regiszterek eacuterteacutekeacutet akkor az teacutenyleg az utoljaacutera beaacutelliacutetott eacuterteacutekről indul Ehhez a fenti Code18-boacutel szedjuumlk ki azokat a sorokat amelyek a regiszterek elmenteacuteseacuteeacutert ill visszatoumllteacuteseacuteeacutert felelősek beleeacutertve persze a helyfoglalaacutest is a vaacuteltozoacuteknak Ehhez nem melleacutekeluumlnk kuumlloumln koacutedot a tankoumlnyvben de a moacutedosiacutetott programot Code19 neacuteven megtalaacutelhatjuk a koacutedkoumlnyvtaacuterban A hataacutes joacutel laacutethatoacute

Created by XMLmind XSL-FO Converter

11 fejezet - MegszakiacutetaacutesokA programozaacutest eacuteppen tanuloacute lelkes emberek a megszakiacutetaacutes szoacute hallataacuten aacuteltalaacuteban valami feacutelelmetes eacutes varaacutezslatos dologra gondolnak Attoacutel a perctől kezdve azonban hogy megeacutertik mi az mindez a vilaacuteg legtermeacuteszetesebb dolgaacutevaacute vaacutelik ami neacutelkuumll maacuter nem is lenne joacute az eacutelet (Ez egyeacutebkeacutent teacutenyleg iacutegy van)

Miről is van szoacute Keacutepzeljuumlk el azt az esetet amikor levelet vaacuterunk Valami nagyon fontos levelet Eacutes ilyen vagy olyan okok miatt a vilaacutegeacutert sem akarjuk elmulasztani annak szemeacutelyes aacutetveacuteteleacutet Mit tehetuumlnk ilyenkor

Tegyuumlk fel hogy nincsen csengőnk vagy van de nem műkoumldik Ilyenkor megtehetjuumlk azt hogy kiaacutellunk az ajtoacutenkba eacutes addig el nem megyuumlnk onneacutet amiacuteg meg nem joumln a postaacutes Kedvezőtlen esetben persze eacutehen halunk mert nem joumln a postaacutes Az elv tovaacutebbfejleszteacutese az hogy mondjuk 10 percenkeacutent 1 percig lessuumlk a postaacutest az ajtoacuteban aztaacuten visszamegyuumlnk a dolgunkra Ez maacuter sokszor műkoumldőkeacutepes oumltletnek fog bizonyulni Az ilyen elven toumlrteacutenő esemeacutenykezeleacutest jelfogaacutest pollozaacutesnak (poll angol ndash elnyer kap) hiacutevjaacutek a szaacutemiacutetaacutestechnikaacuteban Ennek finomiacutetott moacutedszere teacutenylegesen gyakran hasznaacutelatos

Tegyuumlk fel hogy van csengőnk A postaacutest lesni nincs időnk mert mondjuk a deacutel-afrikai beacutelyegeinket rendezgetjuumlk a baraacutetunkkal froumlccsoumlzuumlnk vagy eacuteppen puskaport keacutesziacutetuumlnk stb Nos ha megjoumln a postaacutes megnyomja a csengőt Ekkor megszakiacutetjuk addigi cselekveacutesuumlnket kimegyuumlnk alaacuteiacuterjuk a cetlit aztaacuten visszamegyuumlnk eacutes ott folytatjuk a teveacutekenyseacuteguumlnket ahol abbahagytuk Az ilyesfeacutele esemeacutenykezeleacutest hiacutevjuk a szaacutemiacutetaacutestechnikaacuteban megszakiacutetaacutesnak Ez az esemeacutenykezelő moacutedszer a valoacutesaacutegban aacuteltalaacuteban hateacutekonyabb mint a pollozaacutes

1 Az ADuC 842 megszakiacutetaacutesaiAz elektronikus tankoumlnyvben nem fogjuk az oumlsszes megszakiacutetaacutest peacuteldaacutekkal illusztraacutelva taacutergyalni De joacute neacutehaacutenyat felhasznaacutelunk koumlzuumlluumlk eacutes azokat termeacuteszetesen igen A megszakiacutetaacutes (interrupt angol latin eredetű ndash megszakiacutetaacutes) fogalom a szaacutemiacutetaacutestechnikaacuteban azt jelenti hogy az addig zajloacute programfutaacutes valamilyen esemeacuteny bekoumlvetkezte miatt felfuumlggesztődik eacutes a vezeacuterleacutes maacuteshovaacute keruumll ahonnan az esemeacuteny lekezeleacutese utaacuten aacuteltalaacuteban visszateacuter a vezeacuterleacutes az eredeti helyeacutere A megszakiacutetaacutesok kezeleacutese azt az eacuterzetet kelti sokszor hogy multitasking-roacutel van szoacute vagyis toumlbb folyamat paacuterhuzamos kezeleacuteseacuteről Ez azonban csak illuacutezioacute a 80518052-es mag egyszerre csak egy dolgot tud veacutegezni Ezt azonban sokszor annyira gyorsan teszi hogy toumlbb szakaszosan kezelt esemeacuteny eacutes veacutegrehajtaacutes csakugyan azt az illuacutezioacutet kelti mintha multitasking-roacutel lenne szoacute

Mi toumlrteacutenik egy megszakiacutetaacutesnaacutel A processzor elmenti a programszaacutemlaacuteloacute tartalmaacutet a verembe majd a megszakiacutetaacutes tiacutepusaacutenak fuumlggveacutenyeacuteben az adott megszakiacutetaacutes vektoraacutenak ciacutemeacutere ugrik a vezeacuterleacutes Neacutezzuumlk reacuteszletesen hogy mit jelentenek ezek a fogalmak

A verem sajaacutetos szerkezetű taacuteroloacute a szaacutemiacutetaacutestechnikaacuteban LIFO-taacuteroloacutenak is hiacutevjaacutek mert az utolsoacutenak belerakott elemet lehet kivenni elsőkeacutent Az angol betűszoacute is erre utal az eredeti kifejezeacutes last in ndash first out azaz utolsoacutenak be elsőnek ki Eacutertelmeacuteben ugyanezt jelenti a FILO betűszoacute is first in ndash last out azaz elsőnek be utolsoacutenak ki A verem szoacute szeacutepen kifejezi a taacuteroloacute jellegeacutet baacuter az eredeti angol szoacute a stack valoacutejaacuteban rakaacutest halmot jelent Kicsit vidaacutemabb szemleacutelettel eacutelve a veremtaacuteroloacute uacutegy műkoumldik mint amikor egy teacuterdzokniba gyoumlmoumlszoumlluumlnk biliaacuterdgolyoacutekat Nyilvaacuten azt tudjuk előszoumlr kivenni amelyiket utolsoacutekeacutent dugtuk bele a zokniba

A verem a szokvaacutenyos memoacuteriaacutek eseteacuteben meghataacuterozott memoacuteriateruumlletet jelent Azt hogy hovaacute keruumll be a koumlvetkező teacutetel a veremmutatoacute hataacuterozza meg A 80518052-es processzormag eseteacuten indulaacuteskor a verem a [A teljes alsoacute RAM] alfejezetben bemutatott alsoacute RAM 08h ciacutemeacuten kezdődik vagyis az 1 regiszterbanknaacutel Iacutegy tehaacutet nagyon vigyaacutezzunk arra hogy mikeacutent baacutenunk a regiszterbankokkal ha ezeket mind hasznaacutelni akarjuk akkor a verem helyeacutet aacutet kell definiaacutelnunk Ennek moacutedjaacuteroacutel azonban ebben a tankoumlnyvben nem eacutertekezuumlnk mert a default verem meacuterete is bőven eleacuteg lesz szaacutemunkra A veremmutatoacutet keacutet SFR tartalmazza most csak megemliacutetjuumlk hogy ezek SP eacutes SPH

A megszakiacutetaacutesvektorok ciacutemei a koacutedmemoacuteria legelejeacuten helyezkednek el Ezt a teacutenyt maacuter megemliacutetettuumlk a Code01 kommentjei koumlzoumltt A 0000h ciacutemre indulaacutesnaacutel eacutes reset-kor ugrik a program vezeacuterleacutese Kuumllső esemeacuteny bekoumlvetkezeacutesekor a 0003h vagy a 0013h ciacutemre Időziacutetőkszaacutemlaacuteloacutek tuacutelcsordulaacutesakor a 000Bh vagy 001Bh ciacutemre A soros porti kommunikaacutecioacute aacuteltal generaacutelt megszakiacutetaacuteskor a 0023h ciacutemre Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacuteskor a 0053h ciacutemre Az ADuC 842-es meacuteg toumlbb kuumlloumlnleges megszakiacutetaacutest keacutepes kezelni

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

itt csak azokat soroltuk foumll hamarjaacuteban melyekkel reacuteszletesen foglalkozunk a tankoumlnyvben A megszakiacutetaacutesvektorokat azeacutert hiacutevjaacutek vektornak mert ezekről a ciacutemekről jellemzően tovaacutebb kell ugratnunk a programot hiszen a megszakiacutetaacutesvektorokhoz tartozoacute ciacutemek igencsak koumlzel vannak egymaacuteshoz a koacutedmemoacuteriaacuteban paacuter utasiacutetaacutesnaacutel hosszabb koacutedot nem lehet koumlzeacutejuumlk iacuterni Iacutegy ezek a vektorok teacutenylegesen mutatnak valahovaacute

A megszakiacutetaacutesok taacutergyalaacutesaacutenaacutel oacutehatatlanul előjoumln a regiszterveacutedelem fogalma A tankoumlnyvben eddig leiacutertak alapjaacuten tudjuk hogy csaknem minden assembly nyelvű utasiacutetaacutes valamelyik kituumlntetett regiszterre vonatkozik Maacuterpedig ha a megszakiacutetaacutes lekezeleacuteseacutere szolgaacuteloacute koacutedreacuteszletben baacutermelyik regisztert foumllhasznaacuteljuk akkor aacuteltalaacuteban azok eacuterteacuteke megvaacuteltozik Ez pedig katasztrofaacutelis koumlvetkezmeacutenyekkel jaacuterna a főprogram uumlgyeire vonatkozoacutean Ilyenkor egyszerűen azt kell tennuumlnk hogy a megszakiacutetaacutest lekezelő programreacuteszben elmentjuumlk azoknak a regisztereknek az eacuterteacutekeacutet melyeket felhasznaacutelunk ebben a programreacuteszben A regiszterek tartalmaacutenak elmenteacutese a verembe toumlrteacutenik Visszateacutereacutes előtt pedig a sorrendre figyelve visszatoumlltoumlgetjuumlk az elmentett regiszterek eacuterteacutekeacutet a veremből majd visszateacuteruumlnk a megszakiacutetaacutest lekezelő programreacuteszből Ez utoacutebbi fogalmat gyakran szintuacutegy csak megszakiacutetaacutesnak nevezik iacutegy ez a szoacute ettől kezdve keacutet fogalmat is jeloumllhet aacutem ez eacutertelemzavart szinte sohasem okoz

Regiszterveacutedelemre sokszor szubrutinoknaacutel is szuumlkseacuteg van hiszen ugyanaz lehet igaz a regiszterek hasznaacutelataacutera mint amit az előbb taglaltunk Eacutes persze az is lehet hogy a hasznaacutelandoacute szubrutint nem is mi iacutertuk hanem valaki maacutes eacutes mi csak be akarjuk eacutepiacuteteni a sajaacutet koacutedunkba Remeacuteljuumlk hogy a mostanra magaacutetoacutel vilaacutegossaacute vaacutelt hogy mi a kuumlloumlnbseacuteg szubrutin eacutes megszakiacutetaacutes koumlzoumltt Ha netaacuten meacutegsem akkor a keacutet fogalom koumlzoumltti kuumlloumlnbseacuteg leacutenyege abban rejlik hogy a szubrutinokat előre tervezett moacutedon mindig ugyanarroacutel a helyről hiacutevogatja a főprogram a megszakiacutetaacutesok viszont bizonyos esemeacutenyek hataacutesaacutera vaacuteltoacutednak ki fuumlggetlenuumll attoacutel hogy hol tart a főprogram

A verembe valoacute adatmenteacutest a koumlvetkező utasiacutetaacutessal valoacutesiacutethatjuk meg

PUSH iram addr

Az utasiacutetaacuteslistaacutek ezt a fenti moacutedon adjaacutek meg Az iram addr az internal RAM address angol kifejezeacutesből szaacutermazik azaz belső RAM-ciacutemet jelent A Push szoacute azt jelenti hogy nyom raacutenyom Az toumlrteacutenik hogy a megadott memoacuteriaciacutemen talaacutelhatoacute eacuterteacuteket raacutenyomjuk a kupacra rakaacutesra azaz beletesszuumlk a verembe Ilyesformaacuten adhatunk meg konkreacutet regisztereket

PUSH ACCPUSH R0PUSH R7

A veremből valoacute adatkiveacutetel a

POP iram addr

utasiacutetaacutessal toumlrteacutenik A Pop angol szoacute igen-igen sok mindent jelent de a Pop Value from Stack kifejezeacutest legszerencseacutesebben talaacuten a kupacroacutel lekap jelenteacutessel fordiacutethatjuk ami itt annyit tesz hogy eacuterteacuteket veszuumlnk ki a veremből Konkreacutet peacuteldaacutekkal

POP R7POP R0POP ACC

Jegyezzuumlk meg hogy az akkumulaacutetorra enneacutel a keacutet utasiacutetaacutesnaacutel az ACC roumlvidiacuteteacutessel hivatkozunk Ez azeacutert van iacutegy mert ilyenkor az akkumulaacutetor nem az utasiacutetaacuteshoz tartozik hanem annak csupaacuten az argumentuma Lehetne baacutermi maacutes is viszont ezt a konkreacutet memoacuteriaciacutemet (az E0h ciacutemű SFR-ről van szoacute kuumlloumlnben) az assemblerhez tartozoacute szimboacutelumlistaacuteban eacuteppen az ACC neacutevvel illetteacutek Akaacuter azt is iacuterhatnaacutenk hogy

PUSH 0E0hPOP 0E0h

Megszakiacutetaacutesboacutel a RETI utasiacutetaacutessal teacuter vissza a program vezeacuterleacutese az eredeti helyeacutere A mnemonik a Return from Interrupt (visszateacutereacutes a megszakiacutetaacutesboacutel) kifejezeacutesből szaacutermazik

A megszakiacutetaacutesoknak prioritaacutesi parameacuteteruumlk lehet ami az ADuC 842-esneacutel a koumlvetkezőkeacuteppen neacutez ki vannak magas eacutes alacsony prioritaacutesuacute megszakiacutetaacutesok Ezek az IP eacutes IEIP2 SFR-ek tartalmaacuteval konfiguraacutelhatoacutek A default beaacutelliacutetaacutes szerint az oumlsszes eddig emliacutetett megszakiacutetaacutestiacutepus alacsony prioritaacutesuacute A tankoumlnyvben ezen nem is

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

vaacuteltoztatunk Annyit azonban el kell mondanunk hogy magas prioritaacutesuacute megszakiacutetaacutes megszakiacutetja az alacsony prioritaacutesuacutet de fordiacutetva ilyen nem toumlrteacutenhet eacutes nem is toumlrteacutenik Ha azonos prioritaacutesuacute megszakiacutetaacutesok egyidejűleg koumlvetkezneacutenek be akkor az eddig emliacutetettek koumlzuumll a koumlvetkező sorrendben hajtoacutednak veacutegre (a legnagyobb prioritaacutesuacuteval kezdve) 0 kuumllső esemeacuteny 0 időziacutetőszaacutemlaacuteloacute 1 kuumllső esemeacuteny 1 időziacutetőszaacutemlaacuteloacute soros porti esemeacuteny időintervallum-szaacutemlaacuteloacute A megszakiacutetaacutesok hasznaacutelataacutet egy aacuteltalaacutenos jelzőbittel (EA) engedeacutelyezni kell majd egyeseacutevel a hasznaacutelni kiacutevaacutent tiacutepusokat is Ha pedig bizonyos esemeacutenyre valoacute reagaacutelaacutes nemkiacutevaacutenatossaacute vaacutelik a megszakiacutetaacutesokat le is lehet tiltani Sőt azok egymaacutest is letilthatjaacutek De meacuteg sajaacutet magukat is Minderről reacuteszletesen a koumlvetkező alfejezetekben nyerhetuumlnk keacutepet

2 Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutesAz ADuC-panel keacutet nyomoacutegombjaacutenak megnyomaacutesa egy-egy olyan esemeacuteny amely megszakiacutetaacutes kivaacuteltaacutesaacutera alkalmas amennyiben engedeacutelyezzuumlk azt Ezeket a megszakiacutetaacutesokat kuumllső megszakiacutetaacutesoknak nevezzuumlk A [A kuumllső megszakiacutetaacutesok jellemzői] a kuumllső megszakiacutetaacutesokkal kapcsolatos tudnivaloacutekat foglalja oumlssze a [Az IE SFR parameacuteterei] pedig azt az SFR-t amelyben a megszakiacutetaacutesok engedeacutelyezőbitjei talaacutelhatoacutek [1 p 70 Table 35]

111 taacuteblaacutezat - A kuumllső megszakiacutetaacutesok jellemzői

A Kuumllső megszakiacutetaacutesok jellemzői

ADuC 842 laacuteba portbit P32 P33

Megnevezeacutes angolul external interrupt 0 external interrupt 1

Megnevezeacutes magyarul 0 kuumllső megszakiacutetaacutes 1 kuumllsőmegszakiacutetaacutes

Engedeacutelyezőbit EX0 EX1

Nyomoacutegomb 1 gomb 2 gomb

Vektor ciacuteme 0003h 0013h

112 taacuteblaacutezat - Az IE SFR parameacuteterei

IE Interrupt Enable Register

Megszakiacutetaacutesengedeacutelyező regiszter

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Jelenteacutes

7 EA Valamennyi megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

6 EADC Nem taacutergyaljuk

5 ET2 Nem taacutergyaljuk

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

4 ES Az UART soros port megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

3 ET1 A Timer 1 megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

2 EX1 Az 1 kuumllső megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

1 ET0 A Timer 0 megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

0 EX0 A 0 kuumllső megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

A fentiek utaacuten megfogalmazhatjuk a koumlvetkező feladatunkat amelyben szuumlkseacuteguumlnk lesz a gombnyomaacutesok megszakiacutetaacutesokkal toumlrteacutenő kezeleacuteseacutere

13 feladat

Az ADuC-panel LED-soraacuten fusson koumlrbe egy LED Az 1 gomb megnyomaacutesaacutera aacutelljon meg a futaacutes ezt pedig a 2 gomb megnyomaacutesaacuteval lehessen feloldani [Code20]

A feladat megoldaacutesa nem lesz neheacutez meacutegis rajzolunk folyamataacutebraacutet hiszen előszoumlr hasznaacutelunk megszakiacutetaacutesokat A főprogram semmi egyebet nem csinaacutel mint leacutepteti koumlrbe-koumlrbe az egy szem kigyuacutejtott LED-et Egy-egy leacutepeacutes (eacutes utaacutena a megszokott vaacuterakozaacutes) akkor toumlrteacutenik ha egy fut nevű jelzőbit eacuterteacuteke magas kuumlloumlnben a főprogram helyben jaacuter A fut nevű jelzőbit eacuterteacutekeacutet eacuteppen a megszakiacutetaacutesok aacutelliacutetjaacutek be a megfelelő moacutedon A keacutet megszakiacutetaacutes mindig letiltja sajaacutet magaacutet eacutes engedeacutelyezi a maacutesikat Ez amolyan koumllcsoumlnoumls kizaacuteraacutest jelent A folyamataacutebra a [A (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute Ezen maacuter hasznaacuteljuk a fut EX0 eacutes EX1 biteket A [13 feladat] megoldaacutesaacutet jelentő koacuted meacuteg mindig nem tekintendő bdquohosszuacutenakrdquo

111 aacutebra - A [13 feladat] (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

Code20asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutes vektoraJMP GOMB1 Ugrunk az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacuteszhezORG 0013h A 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutes vektoraJMP GOMB2 Ugrunk a 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacuteszhezORG 0060h A teacutenyleges programkoacuted kezdetefut BIT 00h A futaacutes engedeacutelyezőbitje Bitvaacuteltozoacute Ezt majd a megszakiacutetaacutesok aacutelliacutetgatjaacutek a főprogram leginkaacutebb csak figyeliGOMB1 Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutes lekezeleacuteseCLR EX0 Az 1 gomb megszakiacutetaacutesaacutenak letiltaacutesaCLR fut Toumlroumlljuumlk a fut jelzőbitetSETB EX1 Engedeacutelyezzuumlk a 2 gomb (1 kuumllső esemeacuteny) megszakiacutetaacutesaacutetRETI Visszateacuteruumlnk a megszakiacutetaacutesboacutelGOMB2 A 2 gomb aacuteltal kivaacuteltott megszakiacutetaacutes lekezeleacuteseCLR EX1 A 2 gomb megszakiacutetaacutesaacutenak letiltaacutesaSETB fut Foumllaacutelliacutetjuk a fut jelzőbitet SETB EX0 Engedeacutelyezzuumlk az 1 gomb (0 kuumllső esemeacuteny) megszakiacutetaacutesaacutetRETI Visszateacuteruumlnk a megszakiacutetaacutesboacutelMAIN A főprogram kezdeteSETB fut Foumllaacutelliacutetjuk a futaacutest jelző bitetMOV P211111110b Az első LED bekapcsolaacutesaCLR EX1 Az 1 kuumllső esemeacuteny (2 gomb) megszakiacutetaacutesaacutenak letiltaacutesa (A sor maga foumlloumlsleges mert amuacutegy is iacutegy indul az ADuC csak az eacuterthetőseacuteg kedveacuteeacutert tesszuumlk ideSETB EX0 A 0 kuumllső esemeacuteny (1 gomb) megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesfigyelJNB fut$ Ha fut=0 akkor helyben jaacuterunk Egyeacutebkeacutent csorog tovaacutebb a programMOV AP2RL A A LED-ek baacutejtjaacutenak balra forgataacutesaMOV P2AMOV A10 01 s vaacuterakozaacutes koumlvetkezikCALL DELAY Időhuacutezoacute rutin meghiacutevaacutesaJMP figyel Ugraacutes vissza a rsquofutrsquo bit figyeleacuteseacutehez

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

3 Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutesAz előző alfejezetben megismerkedtuumlnk a belső oacutera hasznaacutelataacuteval amit időintervallum-szaacutemlaacuteloacutenak is hiacutevnak (TIC) Most fog kideruumllni hogy mieacutert talaacuteloacute ez az elnevezeacutes Ennek eacuterdekeacuteben ismerkedjuumlnk meg az INTVAL SFR-el (laacutesd [Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei])

113 taacuteblaacutezat - Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei

SFR Angol neacutev Eacuterveacutenyes eacuterteacutekek Funkcioacute Default eacuterteacutek bekapcsolaacuteskor

INTVAL User Time Interval Select Register

0-255 A kiacutevaacutent időintervallum darabszaacutema felhasznaacuteloacutei programmal iacuterhatoacute a regiszterbe Amikor a 8-bites intervallum-szaacutemlaacuteloacute egyenlő lesz az INTVAL regiszterbe iacutert eacuterteacutekkel megszakiacutetaacutes leacutep fel amennyiben engedeacutelyezett

00h

Mire lesz joacute nekuumlnk az INTVAL regiszter Arra hogy a belső oacuteraacutera raacuteakasztunk meacuteg egy funkcioacutet amely keacutepes arra hogy meghataacuterozott darabszaacutemuacute előre roumlgziacutetett időintervallum eltelte utaacuten megszakiacutetaacutest vaacuteltson ki Ezzel leszuumlnk keacutepesek olyan koacutedokat iacuterni amelyek meghataacuterozott időnkeacutent periodikusan veacutegeznek valamilyen feladatot Ehhez azonban ki kell egeacutesziacutetenuumlnk a [A TIMECON SFR parameacuteterei]ot A TIMECON SFR műkoumldeacuteseacutenek szaacutemunkra szuumlkseacuteges reacuteszleteit a [A TIMECON SFR parameacuteterei reacuteszletesebben] tartalmazza Tovaacutebbi reacuteszletek talaacutelhatoacutek az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban [1 p 55 Table 24]

114 taacuteblaacutezat - A TIMECON SFR parameacuteterei reacuteszletesebben

TIMECON TIC Control Register

Az időintervallum-szaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Bit neve Jelenteacutes

7 - Foglalt

6 TFH 24-oacuteraacutes uumlzemmoacutedot beaacutelliacutetoacute bit Ha 1 akkor az oacutera szaacutemlaacuteloacuteja 0-toacutel 23-ig fut Ha 0 akkor 0-toacutel 255-ig

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

5 ITS1 Az intervallum időalapjaacutet beaacutelliacutetoacute bitek A koumlvetkező kombinaacutecioacutek aacutelliacutethatoacutek be az intervallum-szaacutemlaacuteloacute frissiacuteteacuteseacutehez

ITS1 ITS0 Időegyseacuteg

0 0 1128 maacutesodperc

0 1 1 maacutesodperc

1 0 1 perc

1 1 1 oacutera

4 ITS0

3 STI Egyszeri intervallumtuacutelleacutepeacutest engedeacutelyező bit (Nem taacutergyaljuk)

2 TII Az intervallum-szaacutemlaacuteloacute megszakiacutetaacutesi bitje (Nem taacutergyaljuk)

1 TIEN Az időintervallumokat engedeacutelyező bit Ha 1 engedeacutelyezzuumlk a 8-bites időintervallum-szaacutemlaacuteloacutet

0 TCEN Az oacutera engedeacutelyezőbitje Ha 1 indul az oacutera ha 0 leaacutell az oacutera A TIC regiszterei TCEN=0 eseteacuten iacuterhatoacutek

Amennyiben peacuteldaacuteul perc egyseacutegben adott megszakiacutetaacutesokat szeretneacutenk az ITS1 ill ITS0 biteket 1-re ill 0-ra kell aacutelliacutetanunk Ha maacutesodperc egyseacutegben adott megszakiacutetaacutesokat akkor 0-ra ill 1-re Ilyenkor az INTVAL regiszter tartalmazza a kivaacutelasztott időegyseacuteg darabszaacutemaacutet eacutes a megszakiacutetaacutes a darabszaacutem letelte utaacuten koumlvetkezik be Iacutegy lehet periodikusan megszakiacutetaacutest kivaacuteltani mondjuk 5 percenkeacutent 10 maacutesodpercenkeacutent stb

A [Az IE SFR parameacuteterei]ban felsoroltuk hogy melyik megszakiacutetaacutesok engedeacutelyezhetők az IE SFR-rel Csakhogy ebben a felsorlaacutesban nincsen benne az intervallumszaacutemlaacuteloacute De semmi baj a megszakiacutetaacutesokhoz egy maacutesodlagos SFR is tartozik amelyikben viszont maacuter benne lesz Ezt mutatja a [Az IEIP2 SFR parameacuteterei (reacuteszlet)] (a teljesseacuteg igeacutenye neacutelkuumll) Tovaacutebbi reacuteszletek a gyaacuteri leiacuteraacutesban olvashatoacutek [1 p 71 Table 37]

115 taacuteblaacutezat - Az IEIP2 SFR parameacuteterei (reacuteszlet)

IEIP2 Secondary Interrupt Enable Register

Maacutesodlagos megszakiacutetaacutesengedeacutelyező regiszter

Bekapcsolaacutes utaacuteni default eacuterteacutek A0h = 10100000b

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Jelenteacutes

7 - Foglalt

5 PPSM A taacutepellaacutetaacutest figyelő megszakiacutetaacutes prioritaacutesa (Nem taacutergyaljuk)

2 ET2 Az időintervallum-szaacutemlaacuteloacutehoz tartozoacute megszakiacutetaacutes engedeacutelyezeacutese (1) vagy letiltaacutesa (0)

A fentiek ismereteacuteben nekifuthatunk a koumlvetkező feladatnak

14 feladat

Az ADuC-panel LED-soraacutenak oumlsszes LED-je villanjon foumll roumlvid ideig minden egyes maacutesodpercben [Code21]

A feladat megoldaacutesa egeacuteszen egyszerű lesz folyamataacutebraacutet nem is igeacutenyel Azt fogjuk megvaloacutesiacutetani hogy az intervallum-szaacutemlaacuteloacute megfelelő beaacutelliacutetaacutesaival minden egyes maacutesodpercben kivaacuteltunk egy megszakiacutetaacutest A megszakiacutetaacutes felkapcsolja a LED-eket vaacuterakozik egy kicsit majd lekapcsolja a LED-eket eacutes visszateacuter a főprogramba Hogy meacuteg szebb legyen a megvaloacutesiacutetaacutes ugyanazt az időhuacutezoacute rutint fogjuk hasznaacutelni mint eddig de azt most nem a főprogram hanem a megszakiacutetaacutes hiacutevja meg Csak arra kell vigyaacuteznunk nehogy a megszakiacutetaacutesban toumlltoumltt idő toumlbb legyen mint a koumlvetkező kivaacuteltaacutesig eltelt idő mert akkor anomaacutelis programműkoumldeacutesre kell szaacutemiacutetanunk Jelen esetben a regiszterveacutedelemmel nem fogunk toumlrődni mert sem a megaszakiacutetaacutes sem a szubrutin nem baacutentjaacutek sem egymaacutes sem a főprogram vaacuteltozoacuteit Tovaacutebbaacute ne felejtsuumlk hogy az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutes vektora a 0053h ciacutemen helyezkedik el Az oacuteraacutenak nem is adunk most kezdeti eacuterteacuteket hiszen teljesen mindegy hogy honnan indul nekuumlnk csak a maacutesodpercek muacutelaacutesa szaacutemiacutet A koacuted meacuteg mindig egyszerűnek titulaacutelhatoacute A roumlvidseacuteg kedveacuteeacutert a megszokott eacutes vaacuteltozatlan formaacuteban aacutetvett DELAY szubrutinunkat most sem tuumlntetjuumlk foumll A bitenkeacutent nem ciacutemezhető SFR-eknek valoacute eacuterteacutekadaacuteskor sziacutenes kiemeleacutessel jeloumlljuumlk azokat a biteket amelyek kuumlloumlnoumls fontossaacuteggal biacuternak a koacuted szempontjaacuteboacutel

Code21asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdeteMAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL1 1 maacutesodpercenkeacutent kell kivaacuteltani a megszakiacutetaacutestORL TIMECON00010011b Folytonos intervallumszaacutemlaacutelaacutes Maacutesodperc alapuacute Ezt az 5 eacutes 4 bittel aacutelliacutetjuk be Az 1 bitaz intervallumszaacutemlaacuteloacutet indiacutetja a 0 bit magaacutet az oacuteraacutetORL IEIP200000100b Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes engedeacutelyezeacutese Ez a bit a maacutesodlagos engedeacutelyezőregiszterben van Ez a regiszter bitenkeacutent nem ciacutemezhető iacutegy logikai maszkolaacutest hasznaacutelhatunkSETB EA A megszakiacutetaacutesok globaacutelis engedeacutelyezeacuteseJMP $ Itt veacutegtelen ciklusba keruumll a program hiszen a főprogramnak nincs toumlbb dolgaTIKTAK Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutesMOV P20 LED-ek bekapcsolaacutesaMOV A10 01 s-ig fogunk vaacuterakozni

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

CALL DELAY A vaacuterakozoacute szubrutin meghiacutevaacutesaMOV P2255 LED-ek kikapcsolaacutesaRETI Visszateacutereacutes a megszakiacutetaacutesboacutel

4 A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesokEbben az alfejezetben olyan alkalmazaacutest mutatunk be amely kombinaacutelja a kuumllső esemeacutenyek (azaz a gombnyomaacutesok) eacutes az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesait A feladat ugyanis olyan lesz hogy a programot e keacutet megszakiacutetaacutestiacutepus neacutelkuumll csak kiacutenkeservesen lehetne megiacuterni Iacutegy viszont viszonylag egyszerűen

15 feladat

A LED-soron leacuteptessuumlnk a Knight Rider-eacutehez hasonloacute mintaacutezatot jobbra-balra Tegyuumlk ezt uacutegy hogy haacuterom egymaacutes melletti LED leacutepkedjen ide-oda de a LED-sor szeacuteleacutehez eacuterve a szeacutelső LED mindig leacutepjen is ki A nyomoacutegombokkal lehessen gyorsiacutetani eacutes lassiacutetani a mintaacutezat leacutepkedeacuteseacutet A prellegeacutest adott ideig toumlrteacutenő vaacuterakozaacutessal kuumlszoumlboumlljuumlk ki [Code22]

Előszoumlr is tisztaacutezzuk hogyan mikeacutent menjen a mintaacutezat Ezt mutatja az alaacutebi aacutebra amely az utolsoacute sor utaacuten uacutejrakezdhető

112 aacutebra - A [15 feladat]ban megkoumlvetelt LED-leacutepteteacutes

Ezt a Knight Rider-es leacutepteteacutest az olvasoacute bizonyaacutera maacuter oumlnaacutelloacutean is meg tudnaacute csinaacutelni A Code22-ben egy megoldaacutest fogunk mutatni melyben felhasznaacuteljuk az RRC A eacutes RLC A utasiacutetaacutesokat Leacutenyeges hogy kell egy kezdeti eacuterteacutek a mintaacutezathoz utaacutena viszont maacuter keacutet szabaacutelyos cikluson keresztuumll (7 leacutepeacutes jobbra majd 7 leacutepeacutes balra) a veacutegtelenseacutegig mehet a leacutepteteacutes

Enneacutel sokkal eacuterdekesebb lesz ahogy most a megszakiacutetaacutesokkal baacutenni fogunk A főprogram nem csinaacutel semmi egyebet mint a veacutegtelenseacutegig leacutepteti a mintaacutezatot jobbra-balra Minden egyes leacutepeacutes utaacuten betoumllti egy vaacuteltozoacuteboacutel (wait) az aktuaacutelis vaacuterakozaacutes idő egyseacutegeacutet majd meghiacutevja a joacute oumlreg DELAY szubrutinunkat Nyilvaacutenvaloacute hogy a keacutet nyomoacutegomb megszakiacutetaacutesainak a vaacuterakozaacutesi idő vaacuteltozoacutejaacutet (wait) kell manipulaacutelnia Az 1 nyomoacutegomb megszakiacutetaacutesa noumlveli wait eacuterteacutekeacutet a 2 nyomoacutegomb megszakiacutetaacutesa csoumlkkenti wait eacuterteacutekeacutet (Ezek az eacuterteacutekek Code22-ben 1 eacutes 30 koumlzoumlttiek lehetnek)

Most joumln a csel A nyomoacutegombok megszakiacutetaacutesa azonnal letiltja oumlnmagaacutet eacutes elindiacutetja az időintervallum-szaacutemlaacuteloacutet ami egy bizonyos előiacutert időeacuterteacutek (16128 s = 0125 s) lejaacuterta utaacuten kivaacuteltja a sajaacutet megszakiacutetaacutesaacutet Az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesa leaacutelliacutetja magaacutet az intervallumszaacutemlaacutelaacutest majd uacutejra engedeacutelyezi a nyomoacutegombok megszakiacutetaacutesaacutet eacutes ezzel veacuteget is eacuter Ezzel az elvvel egyreacuteszt kikuumlszoumlboumlljuumlk a prellegeacutest maacutesreacuteszt a gombok megszakiacutetaacutesa a főprogram futaacutesa koumlzben keacutepes olyan vaacuteltozoacutet manipulaacutelni amit a főprogram amuacutegy rendszeresen hasznaacutel Ezzel vaacutelik lehetőveacute a LED-ek leacutepteteacutese alatti azaz menet koumlzbeni sebesseacutegaacutelliacutetaacutes

A megoldaacutes koacutedja maacuter nem nevezhető pofonegyszerűnek ezeacutert csereacutebe viszont egeacuteszen laacutetvaacutenyos megjeleneacutest kiacutenaacutel eacutes kombinaacutelja az eddig megtanult keacutet megszakiacutetaacutestiacutepust Az olvasoacutet arra biztatjuk hogy elemezze a programot eacutes addig ne haladjon tovaacutebb amiacuteg teljes egeacuteszeacuteben meg nem eacutertette annak műkoumldeacuteseacutet A megeacuterteacutest elősegiacutető folyamataacutebra a [A (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute

Enneacutel a programnaacutel nagyon fontos lesz a regiszterveacutedelem hiszen a kuumllső esemeacutenyek (gombnyomaacutesok) megszakiacutetaacutesai nem csak az akkumulaacutetort hasznaacuteljaacutek hanem a C bitet is iacutegy ez utoacutebbit is el kell mentenuumlnk Ezt most uacutegy fogjuk megtenni hogy egy kuumlloumln bitvaacuteltozoacutet definiaacutelunk (savec) erre a ceacutelra

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

113 aacutebra - A [15 feladat] (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja

A koacutedot a tankoumlnyvben nem a legbővebb kommentezeacutessel ismertetjuumlk hosszabb vaacuteltozat aacutell rendelkezeacutesre a koacutedkoumlnyvtaacuterban Figyeljuumlk meg hogy az oacuteraacutet elindiacutetaacutes utaacuten soha toumlbbeacute nem aacutelliacutetjuk le csak az intervallumszaacutemlaacuteloacutet engedeacutelyezzuumlk vagy tiltjuk le

Code22asmCSEG A koacutedszegmens kezdetewait DATA 030h Baacutejtvaacuteltozoacute a moacutedosiacutethatoacute időhuacutezaacuteshozsavec BIT 00h Bitvaacuteltozoacute a Carry elmenteacuteseacutereORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB1 vektoraORG 0013h A 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB2 vektoraORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdete Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1PUSH ACC Regiszterveacutedelem

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

MOV savecC A Carry bit elmenteacuteseCLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaMOV Await Megvizsgaacuteljuk az időhuacutezaacutes vaacuteltozoacutejaacutetCJNE A30novel Ha (meacuteg) nem 30 akkor noumlvelhetjuumlkJMP tova1 Kuumlloumlnben maacuter nem noumlvelhetjuumlknovelINC wait Noumlveljuumlk wait eacuterteacutekeacutettova1 MOV Csavec A Carry bit visszatoumllteacutesePOP ACC Az elmentett eacuterteacutek kiszedeacutese a verembőlRETI A 2 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB2PUSH ACC RegiszterveacutedelemMOV savecC A Carry bit elmenteacuteseCLR EX1 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaMOV Await Megvizsgaacuteljuk az időhuacutezaacutes vaacuteltozoacutejaacutetCJNE A1csokkent Ha (meacuteg) nem 1 akkor csoumlkkenthetjuumlkJMP tova2 Kuumlloumlnben maacuter nem csoumlkkenthetjuumlkcsokkentDEC wait Csoumlkkentjuumlk wait eacuterteacutekeacutettova2 MOV Csavec A Carry bit visszatoumllteacutesePOP ACC Az elmentett eacuterteacutek kiszedeacutese a verembőlRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111101b Az intervallumszaacutemlaacuteloacute leaacutelliacutetaacutesaSETB EX0 Az 1 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EX1 A 2 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseRETI FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 0125 maacutesodpercenkeacutent kell kivaacuteltani a megszakiacutetaacutest Ennyi teljen el gombnyomaacutes utaacuten hogy ismeacutet eacuterzeacutekeny legyen a gombra a programMOV TIMECON00000001b Az oacutera elindiacutetaacutesa eacutes 1128 s az egyseacuteg az intervallumszaacutemlaacutelaacuteshozMOV IEIP200000100b Az intervallumszaacutemlaacuteloacute engedeacutelyezeacutese Ez a bit a maacutesodlagos engedeacutelyezőregiszterben vanSETB EX0 Az 1 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EX1 A 2 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesMOV wait15 Kezdeti eacuterteacutek az időhuacutezaacutes vaacuteltozoacutejaacutenakMOV P200111111b Kezdeti elrendezeacutes Kigyuacutejtunk keacutet LED-et a bal oldalon MOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAY Az időhuacutezoacute szubrutin meghiacutevaacutesaCLR C Toumlroumlljuumlk a Carry bitet hogy amikor jobbra beforgatjuk a LED-ek portjaacuteba akkor ott maacuter haacuterom LED vilaacutegiacutetsonujraMOV R47 Heacutetszer fogunk leacuteptetni jobbra a Carry-n keresztuumll

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

jobbraMOV AP2 A LED-ek portjaacutenakRRC A leacutepteteacutese jobbraMOV P2AMOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAYDJNZ R4jobbra A ciklusvaacuteltozoacute vizsgaacutelataMOV R47 Heacutetszer fogunk leacuteptetni balra a Carry-n keresztuumllbalraMOV AP2 LED-ek portjaacutenakRLC A leacutepteteacutese jobbraMOV P2AMOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAYDJNZ R4balra A ciklusvaacuteltozoacute vizsgaacutelataJMP ujra Folytatjuk a leacutepteteacutestEND

Mielőtt elbuacutecsuacuteznaacutenk ettől a programtoacutel meg kell jegyeznuumlnk hogy a C bit veacutedelmeacutet maacuteskeacutepp is megoldhatjuk Ehhez kuumlloumln bit definiaacutelaacutesa helyett az akkumulaacutetor utaacuten mentsuumlk el a verembe a PSW SFR tartalmaacutet hiszen a C bit ebben talaacutelhatoacute (vouml [A PSW SFR parameacuteterei])

PUSH ACCPUSH PSW

A visszaszedeacutes pedig figyelve a sorrendre iacutegy toumlrteacutenhet

POP PSW POP ACC

Created by XMLmind XSL-FO Converter

12 fejezet - Kuumllső aacuteramkoumlroumlk LED-ekkelAz előző fejezetek utaacuten eleacuterkezett az idő arra hogy veacutegre kuumllső aacuteramkoumlroumlket kapcsoljunk a mikrovezeacuterlőnkhoumlz A kuumllső aacuteramkoumlroumlk hasznaacutelata termeacuteszetesen meacuteg nagyon sok tudnivaloacutet fog megkoumlvetelni az ADuC 842-essel kapcsolatban de ezeket szeacutepen sorban amennyire csak lehet egymaacutesra eacutepiacutetve taacutergyaljuk

Melyek azok a jelzőberendezeacutesek amelyekkel az aacutetlagember a legtoumlbbszoumlr talaacutelkozik Valoacutesziacutenűleg a koumlzlekedeacutesi jelzőlaacutempaacutek Ebben a fejezetben ezeket fogjuk modellezni A fejezetben a koumlzlekedeacutesi jelzőlaacutempaacutek feacutenyeit LED-ek reprezentaacuteljaacutek a helyzetmeghataacuterozaacuteshoz pedig fotokapukat fogunk hasznaacutelni Innentől kezdve az egyes feladatok megoldaacutesaacutehoz mindig aacuteramkoumlri rajz is tartozik Az alkatreacuteszek oumlsszevaacutelogataacutesa termeacuteszetesen nem kizaacuteroacutelagos a tananyag elkeacutesziacuteteacuteseacutehez igyekeztuumlnk koumlnnyen eleacuterhető ill olcsoacute aacuteramkoumlri elemeket vaacutelasztani A LED-ek kiveacuteteleacutevel az alkalmazott alkatreacuteszek mindegyikeacutehez tartozik elektronikus leiacuteraacutes ezeket kuumlloumln koumlnyvtaacuter tartalmazza Megfelelő villamosmeacuternoumlki ismeretekkel baacutetran vaacutelaszthatunk maacutes tiacutepusuacute alkatreacuteszeket is legfeljebb kicsit aacutet kell alakiacutetanunk az aacuteramkoumlrt esetleg a koacutedot

1 Jelzőlaacutempa vezeacuterleacutese16 feladat

Modellezzuumlnk a haacuteromlencseacutes koumlzlekedeacutesi jelzőlaacutempa alapfunkcioacutejaacutet uacutegy hogy az egyes sziacutenek vaacuteltaacutesaacutet előre roumlgziacutetett időziacuteteacuteshez koumltjuumlk [Code23 Code24]

A feladat megoldaacutesa nagyon-nagyon egyszerű Bekapcsoljuk az adott LED-et vaacuterakozunk az ehhez a faacutezishoz tartozoacute ideig aztaacuten tovaacutebbleacutepuumlnk A vaacuterakozaacutes toumlrteacutenhetne a joacute oumlreg DELAY szubrutininkkal is de alkalmazzuk most inkaacutebb az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesaacutet Oldjuk meg a feladatot uacutegy hogy a LED-ek bekapcsolaacutesaacuteeacutert felelős bitmintaacutezatokat eacutes a vaacuterakozaacutesi időket előre megadjuk a koacutedmemoacuteriaacuteban adatkeacutent

A haacuteromlencseacutes jelzőlaacutempaacutet LED-ekkel modellező aacuteramkoumlr rajza a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute A LED-ek előteacutet-ellenaacutellaacutesait egeacuteszen szabadon megvaacutelaszthatjuk csak arra figyeljuumlnk hogy ne aacutelliacutetsunk elő tuacutel nagy aacuteramerősseacuteget az egyes aacutegakban Ennek eacuterteacuteke persze a LED-tiacutepusoktoacutel fuumlgg de 10-15 mA aacuteltalaacuteban bőven eleacuteg Az ADuC 842-es mikrovezeacuterlő portjai koumlzuumll most akaacuter a 0-at akaacuter a 2-at hasznaacutelhatnaacutenk Mivel eddig a 2 portot hasznaacuteltuk ndash hiszen arra vannak koumltve a panelra uumlltetett aproacute LED-ek ndash vaacutelasszuk most a nulladik portot Nagyon figyeljuumlnk azonban arra hogy a portok aktiacutev kimenetkeacutent nem hasznaacutelhatoacutek (kiemelve a [Fontos tudnivaloacute a portokkal kapcsolatban] aacutebraacuten) A portok laacutebaival viszont minden tovaacutebbi neacutelkuumll foumlldre huacutezhatjuk a raacutejuk koumltoumltt aacuteramkoumlri elemeket hiszen ez a foumlld a taacutepellaacutetaacutes foumlldje

121 aacutebra - Fontos tudnivaloacute a portokkal kapcsolatban

A 0-s port bitjeinek sajaacutetos kiosztaacutesa a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten azzal fuumlgg oumlssze hogy iacutegy toumlbb helyuumlnk marad a dugdosoacutes proacutebapanelon iacutezleacutesesen egymaacutes melleacute tenni az 5 mm-es tokozaacutesuacute LED-eket amennyiben ilyeneket hasznaacutelunk (Eacutes ebben a tankoumlnyvben ilyeneket hasznaacutelunk)

122 aacutebra - A [16 feladat] (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

A program műkoumldeacuteseacutenek leacutenyege az hogy az egyes laacutempafaacutezisokhoz tartozoacute bitmintaacutezatokat eacutes a faacutezisok időtartamaacutenak eacuterteacutekeit a koacutedmemoacuteriaacuteban helyezzuumlk el ahonnan azokat a [Adatok elhelyezeacutese a koacutedban] alfejezetben ismertetett moacutedon olvassuk ki Kuumlloumln toumlmbben aacutellnak a bitmintaacutezatok eacutes kuumlloumln toumlmbben a vaacuterakozaacutesi időeacuterteacutekek maacutesodperc egyseacutegben megadva Iacutegy menet koumlzben mindig a megfelelő toumlmbkezdetet kell majd az adatmutatoacuteba toumlltenuumlnk A vaacuterakozaacutest az időintervallum-szaacutemlaacuteloacute (TIC) megszakiacutetaacutesa valoacutesiacutetja meg melynek beaacutelliacutetaacutesa szinteacuten maacutesodperces kell hogy legyen A megszakiacutetaacutes az adott idő letelte utaacuten vaacuteltoacutedik ki eacutes a megszakiacutetaacutes programreacuteszeacuteben magasra aacutelliacutetoacutedik egy jelzőbit (tovabb) A főprogram az egyes laacutempafaacutezisok koumlzoumltt erre a bitre vaacuter eacutes ha azt a megszakiacutetaacutes magasra aacutelliacutetja akkor joumlhet a koumlvetkező laacutempafaacutezis Addig viszont a főprogram helyben jaacuter eacutes csak lesi hogy beaacutell-e a keacuterdeacuteses bit A megszakiacutetaacutes leaacutelliacutetja az intervallumszaacutemlaacuteloacutet eacutes az oacuteraacutet is hiszen a koumlvetkező laacutempafaacutezishoz elteacuterő vaacuterakozaacutesi idő tartozhat iacutegy moacutedosiacutetani kell az INTVAL regisztert Ez pedig csak leaacutelliacutetott oacuteraacuteval lehetseacuteges Az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet a főprogram indiacutetja ismeacutet az uacutej laacutempafaacutezis kezdeteacuten Most kell visszaemleacutekeznuumlnk a [A belső oacutera hasznaacutelata] fejezetben leiacutertakra Arra hogy az intervallumszaacutemlaacuteloacute regisztereinek foumlluumlliacuteraacutesakor elegendő időt kell biztosiacutetanunk a műveletre kuumlloumlnben a foumlluumlliacuteraacutes nem toumlrteacutenik meg Erre az INTVAL regiszter kuumlloumlnoumlsen eacuterzeacutekeny iacutegy a roumlvid kis vaacuterakozaacutes nem hiaacutenyozhat (Ha nem hiszi nyugodtan proacutebaacutelja ki a kedves olvasoacute hogy mi toumlrteacutenik akkor ha kiszedi a koacutedboacutel ezt a vaacuterakozoacute ciklust A laacutempafaacutezisok időziacuteteacutese nem fog az előiacutert moacutedon műkoumldni vagy egyaacuteltalaacuten nem fog műkoumldnihellip)

A megoldaacuteshoz most nem klasszikus folyamataacutebraacutet melleacutekeluumlnk hiszen a koacuted maga nem tuacutel bonyolult A műkoumldeacutest most olyan aacutellapot-aacutetmenetgraacuteffal szemleacuteltetjuumlk (laacutesd [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef] aacutebra) amelyben az aacutellapotokat a graacutef csuacutecsai jeloumllik Ezeket az egyes faacutezisokhoz tartozoacute sziacutenek angol kezdőbetűivel jeloumlljuumlk R ndash red piros RA ndash red-amber piros-saacuterga A ndash amber borostyaacutensaacuterga G ndash green zoumlld A csuacutecsokhoz folyamataacutebra-szerűen kapcsolunk blokkokat melyek az ott veacutegrehajtott leacutepeacuteseket mutatjaacutek termeacuteszetesen csak a műkoumldeacutes szempontjaacuteboacutel legfontosabbakat Az aacutellapotok koumlzoumltti aacutetmeneteket a graacutef eacutelei reprezentaacuteljaacutek melyekre az aacutetmenet felteacuteteleacutet iacuterjuk Ne felejtsuumlk hogy a felteacutetelekben szereplő tovabb bitvaacuteltozoacutet az intervallumszaacutemlaacuteloacutehoz koumltoumltt megszakiacutetaacutes aacutelliacutetja mindig 1-re Az egyes aacutellapotoknaacutel a TIC(Tn) jeloumlleacutes eacutertelme az hogy az intervallumszaacutemlaacuteloacutehoz (TIC-hez) tartozoacute megszakiacutetaacutest az n-edik faacutezishoz tartozoacute ideig tartoacute vaacuterakozaacutessal engedjuumlk uacutetjaacutera A megszakiacutetaacutest a graacuteftoacutel elkuumlloumlniacutetve aacutebraacutezoljuk (Enneacutel a blokknaacutel csak a jelzőbitre koncentraacutelunk)

123 aacutebra - A [16 feladat] megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef

Code23asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdete

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

tovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehoz Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111100b Az oacutera eacutes az intervallumszaacutemlaacuteloacute leaacutellSETB tovabb A tovaacutebbot jelző bit foumllaacutelliacutetaacutesaRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON00010000b Maacutesodperces uumlzemmoacuted beaacutelliacutetaacutesaORL IEIP200000100b Az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesujraMOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell a koacuted-indirektMOVC AA+DPTR ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-aacutes portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV INTVALA A soron koumlvetkező vaacuterakozaacutesi eacuterteacutek betoumllteacutese az INTVAL regiszterbeMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetORL TIMECON00000011b Indiacutetjuk az intervallumszaacutemlaacuteloacutetJNB tovabb$ Vaacuterunk hogy 1 legyen a tovabb bit Ezt az intervallumszaacutemlaacuteloacute megszakiacutetaacutesa inteacuteziCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP ujra Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozlampaDB 11111101b A piros LED bitmintaacutezataDB 11110101b A piros eacutes a saacuterga LED bitmintaacutezataDB 11011111b A zoumlld LED bitmintaacutezataDB 11110111b A saacuterga LED bitmintaacutezatavarDB 3121 Az egyes laacutempafaacutezisok vaacuterakozaacutesi ideje maacutesodpercben

Figyeljuumlk meg hogy az adatbaacutejtokat vesszővel elvaacutelasztva is iacuterhatjuk nem kell mindegyiket okvetlenuumll kuumlloumln sorba tennuumlnk

A koumlvetkező alfejezet koumlnnyebb eacuterthetőseacutege eacuterdekeacuteben előredolgozunk egy kicsit eacutes meacuteg egy megoldaacutest mutatunk a [16 feladat]hoz A megoldaacutesi elv gyakorlatilag ugyanaz lesz mint előbb csak nem maacutesodperces intervallumszaacutemlaacutelaacutest alkalmazunk hanem mondjuk 18 maacutesodpercet vaacutelasztunk egyseacutegnek Ezt a program elejeacuten mindjaacutert be is aacutelliacutetjuk eacutes toumlbbet nem nyuacutelunk hozzaacute Tesszuumlk ezt uacutegy hogy 1128 s alapuacute szaacutemlaacutelaacutest aacutelliacutetunk be a TIMECON SFR-rel az INTVAL regiszterbe pedig 16-ot toumlltuumlnk Iacutegy kapjuk meg a 16128 s = 18 s időszeletet Meacuteg egyszer hangsuacutelyozzuk hogy az intervallumszaacutemlaacutelaacutest nem vaacuteltoztatjuk a program futaacutesa koumlzben annak egyseacutege maacutes szoacuteval időszelete ez az 18 s lesz a teljes futaacutes soraacuten

Kell egy olyan vaacuteltozoacute amellyel a TIC megszakiacutetaacutes az eltelt időszeleteket szaacutemlaacutelja (szaml) Kell aztaacuten meacuteg egy vaacuteltozoacute is amelybe az egyes laacutempafaacutezisokhoz szuumlkseacuteges vaacuterakozaacutes eacuterteacutekeacutet adjuk meg termeacuteszetesen 18 s

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

egyseacutegben (tvar) Ezek utaacuten leacutenyegeacuteben minden ugyanuacutegy toumlrteacutenik mint az előző programban kiveacuteve a megszakiacutetaacutest lekezelő programreacuteszt Ez mindig 1-gyel noumlveli szaml eacuterteacutekeacutet eacutes megneacutezi hogy ennek eacuterteacuteke eleacuterte-e tvar eacuterteacutekeacutet Ha nem akkor szaml eacuterteacutekeacutet noumlveli 1-gyel Ha igen akkor rendben is vagyunk letelt a szuumlkseacuteges vaacuterakozaacutes oumlsszes kicsi időszelete eacutes magasra lehet aacutelliacutetani a tovabb bitet Figyeljuumlnk oda arra hogy a szaml vaacuteltozoacutet 1-ről indiacutetsuk hiszen amikor előszoumlr vaacuteltoacutedik ki a TIC megszakiacutetaacutesa akkor maacuter eltelt a beaacutelliacutetott időintervallum azaz jelen esetben 18 s A moacutedosiacutetott aacutellapot-aacutetmenetgraacutefot az alaacutebbi aacutebra mutatja

124 aacutebra - A [16 feladat] moacutedosiacutetott megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef

A fentebbi aacutebraacuten szemleacuteltetett megoldaacutesi elv koacutedja Code24 csak neacutehaacuteny sorban kuumlloumlnboumlzik Code23-toacutel iacutegy a tankoumlnyvben csak a leacutenyegi elteacutereacutesek sorait tuumlntetjuumlk foumll Fontos hogy Code24-ben csak a főprogram legelejeacuten kell az intervallumszaacutemlaacuteloacutet eacutes az oacuteraacutet inicializaacutelnunk Utaacutena toumlbbeacute nem kapcsoljuk le őket iacutegy uacutejraindiacutetaacutesukra sincs szuumlkseacuteg Emiatt az INTVAL-nak toumlrteacutenő eacuterteacutekadaacutes utaacuten most nem is kell vaacuterakoznunk A teljes koacuted megtalaacutelhatoacute a koacutedtaacuterban

Code24asmORG 0060h A teacutenyleges programkoacuted kezdetetovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehozszaml DATA 030h Az 18-ad maacutesodperces intervallumok szaacutemolaacutesaacutenak vaacuteltozoacutejatvar DATA 031h Az aktuaacutelisan szuumlkseacuteges vaacuterakozaacutes vaacuteltozoacuteja Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKMOV Aszaml Ha szaml eacuterteacuteke nem egyenlő tvar CJNE Atvarnovel eacuterteacutekeacutevel akkor noumlveljuumlk szaml eacuterteacutekeacutetSETB tovabb Kuumlloumlnben tovabb=1RETInovelINC szaml Noumlveljuumlk szaml eacuterteacutekeacutetRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 16-ot toumlltuumlnk INTVAL-ba mert 16128 s = 18 s lesz az alap-időosztaacutesunkMOV TIMECON00000011b 1128 maacutesodperces intervallumhossz beaacutelliacutetaacutesa eacutes az oacutera eacutes az intervallum- szaacutemlaacuteloacute elindiacutetaacutesaORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacutet

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV tvarA Betoumlltjuumlk tvar-ba a szuumlkseacuteges vaacuterakozaacutes időtartamaacutet Ennyiszer 18 s-et kell vaacuterakozniCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetMOV szaml1 Az 18 s-es időszeletek szaacutemlaacutelaacutesaacutenak vaacuteltozoacutejaacutet alapeacuterteacutekre aacutelliacutetjuk

2 Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedjaA bemutatott ciklusszervezeacutesi moacutedszerekneacutel ([Hat variaacutecioacute egy feladatra] alfejezet) minden esetben szuumlkseacuteg volt a ciklusvaacuteltozoacute vizsgaacutelataacutera Amennyiben az akkumulaacutetor nulla vagy eacuteppen nem nulla mivoltaacutera voltunk kiacutevaacutencsiak hasznaacutelhattuk a JZ vagy JNZ utasiacutetaacutesokat Enneacutel oumlsszetettebb volt de ugyanide lyukadt ki a DJNZ utasiacutetaacutes is csak az a vizsgaacutelat előtt meacuteg eggyel csoumlkkenti is az adott regiszter tartalmaacutet Szabadabb oumlsszehasonliacutetaacutest a CJNE utasiacutetaacutessal tudtunk megvaloacutesiacutetani amely akkor ugrat ha nem aacutell fenn egyenlőseacuteg Mindez rendben is van de egyvalami meacuteg faacutejdalmasan hiaacutenyzik Ez pedig annak kieacuterteacutekeleacutese hogy egy regiszter tartalma kisebb vagy nagyobb-e egy maacutesik regiszter tartalmaacutenaacutel Nos tovaacutebbi oumlsszehasonliacutetoacute utasiacutetaacutesaink nincsenek de az egyiket felhasznaacutelhatjuk ilyesfeacutele kieacuterteacutekeleacutesre

A CJNE utasiacutetaacutes mellett sok oumlsszefoglaloacuteban ezt laacutethatjuk

CJNE xyrel C = x lt y

Mit jelent ez A CJNE xyrel utasiacutetaacutes maacuter eacuterthető szaacutemunkra hiszen erről volt szoacute a [Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesok] alfejezetben A processzor oumlsszehasonliacutetja az x eacuterteacuteket y eacuterteacutekeacutevel eacutes relatiacutev ugraacutest valoacutesiacutet meg ha azok nem egyenlők De mit jelent a jobb oldali kifejezeacutes Ennek megeacuterteacutese most igen-igen fontos lesz mert ismeacutet csak hasznos eszkoumlz hullik az oumlluumlnkbe A C=xlty kifejezeacutes azt jelenti hogy a CJNE utasiacutetaacutes veacutegrehajtaacutesa utaacuten a Carry bit eacuterteacuteke 1 lesz ha igaz hogy xlty eacutes 0 lesz ha xy Ezek utaacuten pedig maacuter gond neacutelkuumll elaacutegaztathatjuk a programot a JC eacutes JNC utasiacutetaacutesokkal Iacutegy tudjuk koumlnnyen megfogalmazni azt hogy pl az akkumulaacutetor eacuterteacuteke keacutet adott eacuterteacutek koumlzeacute esik-e Csak arra kell figyelnuumlnk hogy a keacuterdeacuteses rendezett halmazunk keacutet szeacutelső eacuterteacuteke beleesik-e a kiacutevaacutent tartomaacutenyba vagy sem Ha az xy kifejezeacutesben az egyenlőseacuteg meacuteg mindig nem kiacutevaacutenatos akkor azt elinteacutezhetjuumlk egy erre iraacutenyuloacute vizsgaacutelattal

A koumlvetkező peacuteldaacuten az igen ciacutemkeacutehez keruumll a program vezeacuterleacutese ha az akkumulaacutetor tartalma 10 eacutes 20 koumlzoumltt van a hataacuterokat is beleeacutertve Ellenkező esetben a nem ciacutemkeacutere Figyeljuumlk meg hogy a C bit megfelelő beaacutellaacutesaacutenak kiaknaacutezaacutesa eacuterdekeacuteben a CJNE utasiacutetaacutes maga moumlgeacute ugrat mert itt nem az elaacutegazaacutes a ceacutel hanem az hogy a C bit adja meg a vaacutelaszt a most rendkiacutevuumlli fontossaacuteguacute talaacutenyra

CJNE A10relac1relac1JC nemCJNE A21relac2relac2

JNC nem

igen

nem

Előszoumlr oumlsszehasonliacutetjuk A eacuterteacutekeacutet 10-zel Ha ez utaacuten C=1 akkor maacuteris ugorhatunk a nemleges ciacutemkeacutere mert Alt10 Ha ez nem igaz azaz C=0 akkor a program fut tovaacutebb a maacutesodik oumlsszehasonliacutetaacuteshoz de legalaacutebb annyit maacuter tudunk hogy A10 Itt oumlsszehasonliacutetjuk A eacuterteacutekeacutet 21-gyel Azeacutert 21-gyel mert az maacuter nem joacute Azeacutert 21-gyel mert a fent bemutatott oumlsszehasonliacutetaacutes a bdquokisebb mintrdquo relaacutecioacutera van kihegyezve Ott tartottunk tehaacutet hogy oumlsszehasonliacutetjuk A eacuterteacutekeacutet 21-gyel Ha ez utaacuten C=0 akkor maacuteris ugorhatunk a nemleges ciacutemkeacutere mert A21 eacutes nekuumlnk 20-ig joacute Ha e keacutet oumlsszehasonliacutetaacuteson tuacuteljut a program akkor viszont A eacuterteacuteke garantaacuteltan 10 eacutes 20 koumlzeacute esik a hataacuterokat is beleeacutertve Ezeket a relaacutecioacutes truumlkkoumlket nagyon sokszor hasznaacutelhatjuk uumlgyesen a koacutedjainkban

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

3 Jelzőlaacutempa toumlbb uumlzemmoacuteddal17 feladat

Modellezzuumlnk egy haacuteromlencseacutes koumlzlekedeacutesi jelzőlaacutempaacutet uacutegy hogy az egyes sziacutenek vaacuteltaacutesaacutet előre roumlgziacutetett időziacuteteacuteshez koumltjuumlk A jelzőlaacutempaacutenak haacuterom uumlzemmoacutedja legyen normaacutel (R-RA-G-A) villogoacute saacuterga eacutes kikapcsolt Az egyes uumlzemmoacutedok koumlzoumltt nyomoacutegombbal leacutepkedhessuumlnk A prellegeacutest kuumlszoumlboumlljuumlk ki [Code25 Code26]

A feladat most is a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute aacuteramkoumlrhoumlz tartozik A megoldaacutesaacutehoz nagyon sok elemet aacutetveszuumlnk a [16 feladat] megoldaacutesaacuteboacutel időszelet nagysaacutega (16128 s = 18 s) időszeletek szaacutemlaacutelaacutesa (szaml) eacutes a vaacuterakozaacutesi idő kezeleacutese (tvar) A feladat megoldaacutesaacuteban ismeacutet kombinaacuteljuk az 1 gombhoz tartozoacute megszakiacutetaacutest eacutes az intervallumszaacutemlaacuteloacutehoz tartozoacute megszakiacutetaacutest mint a [15 feladat] megoldaacutesaacuteban (Code22) Az 1 gombhoz tartozoacute megszakiacutetaacutes semmi maacutest nem tesz mint letiltja oumlnmagaacutet eacutes beaacutelliacutet egy jelzőbitet (nyom) A TIC megszakiacutetaacutesa pontosan akkor aacutelliacutetja magasra a laacutempafaacutezisok vaacuteltaacutesaacutehoz szuumlkseacuteges jelzőbitet (tovabb) ha letelt az aktuaacutelisan megadott vaacuterakozaacutesi idő (tvar) Ez a megszakiacutetaacutes meacuteg arra is figyel hogy az 1 gomb megszakiacutetaacutesaacutet csak akkor engedeacutelyezi uacutejra ha eltelt 2times18 s azaz 14 s A koacutedban talaacutelhatoacute egy szubrutin (RESET128) amely lekapcsolja az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet lenullaacutezza a 128-ad maacutesodperceket vaacuter egy kicsit majd uacutejra bekapcsolja az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet Erre koumlzvetlenuumll az uumlzemmoacutedok koumlzoumltti ugraacutes utaacuten van szuumlkseacuteg hogy bdquotiszta lappalrdquo induljon uacutejra az idő meacutereacutese Eacutes azeacutert keruumllt mindez szubrutinba mert toumlbb helyen is szuumlkseacuteg van erre a reacuteszletre Maga a szubrutin iacutegy neacutez ki

A RESET128 szubrutin Code25asm-benRESET128 ANL TIMECON11111100b Az oacutera eacutes az intervallumszaacutemlaacuteloacute leaacutellMOV HTHSEC0 A 128-ad maacutesodpercek nullaacutezaacutesaMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelORL TIMECON00000011b Az oacutera eacutes az intervallumszaacutemlaacuteloacute indulRET

A megoldaacuteshoz aacutellapot-aacutetmenetgraacutefot melleacutekeluumlnk (laacutesd [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek] aacutebra) mert ez most maacuter sokkal informatiacutevabb mint amilyen egy tuacutelmeacuteretes folyamataacutebra lenne A laacutempafaacutezisokhoz tartozoacute aacutetmeneteket mint esemeacutenyeket ill az uumlzemmoacutedok vaacuteltaacutesaacutet kivaacuteltoacute gombnyomaacutesokat mint esemeacutenyeket elteacuterő sziacutennel jeloumlljuumlk előbbieket feketeacutevel utoacutebbiakat pirossal

125 aacutebra - A [17 feladat] megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek

A koacuted a fent bemutatott RESET128 szubrutin neacutelkuumll az alaacutebbiakban talaacutelhatoacute Ez a koacuted most maacuter egeacuteszen

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

oumlsszetett de az aacutellapot-aacutetmenet graacutef nagy segiacutetseacuteget nyuacutejthat ahhoz hogy ne teacutevedjuumlnk el benne Egyuacutettal megnyugtatjuk az olvasoacutet enneacutel hosszabb koacuted maacuter nem keruumll elő ebben a tankoumlnyvben A program elejeacuten az INTVAL regiszternek valoacute eacuterteacutekadaacutes utaacuten azeacutert nem szerepel roumlgtoumln a sokat emlegetett roumlvid vaacuterakozaacutes mert nem sokkal utaacutena amuacutegy is meghiacutevjuk a RESET128 szubrutint amely tartalmazza azt mindjaacutert a normaacutel uumlzemmoacuted első laacutempafaacutezisaacutenaacutel A koacuted veacutegeacuten nem reacuteszletezzuumlk az adatokat mert toumlkeacuteletesen megegyeznek a Code23-ban megadottakkal A koacutedban sziacutenes jeloumlleacuteseket hasznaacutelunk hogy joacutel elkuumlloumlniacutethetők legyenek az egyes uumlzemmoacutedokhoz tartozoacute reacuteszek

Code25asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB1 vektoraORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetetovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehoznyom BIT 01h A gomb lenyomaacutesaacutet jelző bitszaml DATA 030h Az 18-ad maacutesodperces intervallumok szaacutemolaacutesaacutenak vaacuteltozoacutejatvar DATA 031h Az aktuaacutelisan szuumlkseacuteges vaacuterakozaacutes vaacuteltozoacuteja Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1CLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetSETB nyom A nyom jelzőbit 1-re aacutelliacutetaacutesaRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKMOV Aszaml Megneacutezzuumlk hogy szamllt2 Iacutegy 216 s-igCJNE A2relac nem lesz hataacutesa a gombnyomaacutesnakrelacJC sima Ha igen ugrunk a koumlvetkező vizsgaacutelathozSETB EX0 Uacutejra engedeacutelyezzuumlk a gomb megszakiacutetaacutesaacutetsimaCJNE Atvarnovel Ha szaml nem eacuterte meacuteg el tvar-t akkor noumlveljuumlk szaml eacuterteacutekeacutetSETB tovabb Kuumlloumlnben tovabb=1 eacutesRETI visszateacuteruumlnknovelINC szaml Noumlveljuumlk szaml eacuterteacutekeacutetRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 16-ot toumlltuumlnk INTVAL-ba mert 16128 s = 18 s lesz az alap-időosztaacutesunkORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutetSETB EX0 Engedeacutelyezzuumlk az 1 gomb megszakiacutetaacutesaacutetSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesnormal | | | CLR nyom A nyom jelzőbit toumlrleacuteseCALL RESET128 Reset-eljuumlk a 128-ad maacutesodpercek eacuterteacutekeacutetMOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-s portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumll

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV tvarA Betoumlltjuumlk tvar-ba a szuumlkseacuteges vaacuterakozaacutes időtartamaacutet Ennyiszer 18 s-et kell vaacuterakozniCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetMOV szaml1 Az 18 s-es időszeletek szaacutemlaacutelaacutesaacutenak vaacuteltozoacutejaacutet alaphelyzetbe aacutelliacutetjukbitek1 Figyeljuumlk a jelzőbiteketJB tovabbvalt Ha tovabb=1 vaacutelthat a laacutempaJB nyomsarga Ha nyom=1 gombot nyomtunk Joumln a koumlvetkező uumlzemmoacutedJMP bitek1 Figyeljuumlk tovaacutebb a jelzőbiteketvaltCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP normal Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozsarga | CLR nyom A nyom jelzőbit toumlrleacuteseCALL RESET128 Reset-eljuumlk a 128-ad maacutesodpercek eacuterteacutekeacutetMOV tvar4 A villogaacutes feacutel-perioacutedusideje 05 s leszMOV P011111111b Kikapcsoljuk az oumlsszes LED-etvillogXRL P000001000b Invertaacuteljuk a saacuterga LED aacutellapotaacutetCLR tovabb Jelzőbit toumlrleacuteseMOV szaml1 Szaacutemlaacuteloacute alapaacutellaacutesabitek2 Figyeljuumlk a jelzőbiteketJB tovabbvillog Ha tovabb=1 mehet a villogaacutes tovaacutebbJB nyomkikapcs Koumlvetkező uumlzemmoacutedJMP bitek2 Figyeljuumlk tovaacutebb a jelzőbiteketkikapcs CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etCLR tovabb Jelzőbit toumlrleacuteseMOV szaml1 Szaacutemlaacuteloacute alapaacutellaacutesaJNB nyom$ Helyben aacutellunk amiacuteg 0 a gomb jelzőbitjeJMP normal Kezdjuumlk előroumll a normaacutel uumlzemmoacuteddal Adatok lampa var

A Code25 programban a megszakiacutetaacutesokkal valoacute baacutenaacutesmoacuted maacuter egeacuteszen kifinomult megoldaacutest jelent Előfordulhat azonban hogy ezt a bdquokicentizettrdquo stiacutelust az olvasoacute kisseacute nyomasztoacutenak talaacutelja Semmi baj mutatunk egy elteacuterő megoldaacutest a [17 feladat]ra A [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek] aacutebraacuten laacutethatoacute aacutellapot-aacutetmenetgraacutef vaacuteltozatlanul eacuterveacutenyben marad A megoldaacutes kulcsa most abban rejlik hogy ismeacutet előhuacutezzuk a joacute oumlreg DELAY szubrutint de azt moacutedosiacutetjuk egy kicsit Most ugyanis ez fogja inteacutezni az adott laacutempafaacutezisok aacuteltal megkiacutevaacutent vaacuterakozaacutest de beleeacutepiacutetjuumlk a gombnyomaacutes jelzőbitjeacutenek figyeleacuteseacutet Joacute meacutelyre a legbelső ciklusba hogy mineacutel gyakrabban megtoumlrteacutenjen a bit vizsgaacutelata Az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutenak feladatkoumlre most leszűkuumll a prellegeacutes kikuumlszoumlboumlleacuteseacutere Eacuteppen uacutegy mint a [15 feladat] megoldaacutesaacuteban (laacutesd Code22) A gombnyomaacutes megszakiacutetaacutesa Code25-houmlz keacutepest egyetlen sorral bővuumll az intervallumszaacutemlaacuteloacute elindiacutetaacutesaacuteval

Az időhuacutezoacute szubrutint uacutegy terveztuumlk meg hogy pontosan azokkal a vaacuterakozaacutesi időkkel lehessen meghiacutevni mint amelyeket Code24 eacutes Code25 is tartalmaz Ez azt jelenti hogy ha a meghiacutevaacuteskor az akkumulaacutetor tartalma 8 akkor fogunk 1 maacutesodpercet vaacuterakozni Neacutezzuumlk a moacutedosiacutetott szubrutint

GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R5150cik5

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV R4249cik4JB nyomvisszaDJNZ R4cik4DJNZ R5cik5DJNZ R6cik6visszaRET Visszateacutereacutes a szubrutinboacutel

Eacutes most ismeacutet kiszaacutemiacutetjuk hogy mennyi időt vesz igeacutenybe a szubrutin futaacutesa Az akkumulaacutetor eacuterteacutekeacutet vegyuumlk 8-nak A sima DELAY szubrutinba eacutepiacutetett NOP utasiacutetaacutes 1 oacuterajelciklust vesz igeacutenybe a GDELAY szubrutinba aacutegyazott JB bitrel utasiacutetaacutes viszont 4-et Iacutegy a teljes rutin most oumlsszesen

oacuterajelciklust igeacutenyel A default 2 097 152 Hz oacuterajellel szaacutemolva ez 10002 s-et jelent

A mostani megoldaacutes lelke az hogy az időhuacutezoacute szubrutin ha maacuter maacutest uacutegysem csinaacutel mint időt huacutez kivaacuteloacutean alkalmas arra hogy amilyen sokszor csak lehet megvizsgaacutelja hogy 1-re billent-e a gombnyomaacutest jelző bit (nyom) Ha igen azonnal veacuteget is eacuter futaacutesa megszakad A főprogramban a szubrutin meghiacutevaacutesa utaacuten azonnal megvizsgaacuteljuk immaacuteron maacutesodszor hogy mi a jelzőbit eacuterteacuteke Ha 1 akkor idő előtt teacutert vissza a vezeacuterleacutes a szubrutinboacutel Eacutes ez azt jelenti hogy ugorhatunk a koumlvetkező uumlzemmoacutedhoz Az alaacutebbiakban koumlzoumllt programban az időhuacutezoacute szubrutint maacuter nem tuumlntetjuumlk foumll ismeacutetelten A megszakiacutetaacutesok vektorait sem mert azok vaacuteltozatlanul maradnak

Code26asmORG 0060h A teacutenyleges programkoacuted kezdetenyom BIT 01h A gomb lenyomaacutesaacutet jelző bit Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1CLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaSETB nyom A nyom jelzőbit 1-re aacutelliacutetaacutesaRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111101b Az intervallumszaacutemlaacuteloacute leaacutelliacutetaacutesa Az oacuteraacutet nem aacutelliacutetjuk leSETB EX0 Uacutejra engedeacutelyezzuumlk a gomb megszakiacutetaacutesaacutetRETI visszateacuteruumlnk FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL32 32-t toumlltuumlnk INTVAL-ba mert 32128 s = 14 s lesz a gombnyomaacutesok eacuterzeacutekeleacutesei koumlzoumltt eltelt időMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelMOV TIMECON00000001b Az oacutera elindiacutetaacutesaORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutetSETB EX0 Engedeacutelyezzuumlk az 1 gomb megszakiacutetaacutesaacutetSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesnormal | | | CLR nyom A nyom jelzőbit toumlrleacutese

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-s portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesaJB nyomsarga Ha nyom=1 gombot nyomtunk Joumln a koumlvetkező uumlzemmoacutedCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP normal Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozsarga | CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etvillogXRL P000001000b Invertaacuteljuk a saacuterga LED aacutellapotaacutetMOV A4 A 48 s vaacuterakozaacutes beaacutelliacutetaacutesaCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesaJB nyomkikapcs Ha gombot nyomtunk joumln a koumlvetkező uumlzemmoacutedJMP villog A villogaacutes folytataacutesakikapcs CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesa (Az akkumulaacutetor nem vaacuteltozott)JNB nyomkikapcs Ha a rsquonyomrsquo jelzőbit 0 akkor ugrunk vissza a kikapcsolt uumlzemmoacuted elejeacutereJMP normal Kuumlloumlnben vissza a bdquonormaacutelrdquo uumlzemmoacutedhoz Adatok lampa var

Code25-oumlt eacutes Code26-ot oumlsszehasonliacutetva laacutethatjuk hogy az utoacutebbi kicsivel roumlvidebb eacutes kevesebb vaacuteltozoacutet igeacutenyel Mindkettő tanulsaacutegos megoldaacutest kiacutenaacutel de egeacuteszen elteacuterő stiacutelusban Az olvasoacutet arra biztatjuk hogy mindkettőt elemezze ki eacutes eacutertse meg maradeacutektalanul minden reacuteszleteacuteben Koumlnnyen előfordulhat hogy sokkal erősebb szimpaacutetiaacutet fog eacuterezni az egyik iraacutent mint a maacutesik iraacutent Azonban feladata vaacutelogatja hogy mikor melyik stiacutelussal eacuteruumlnk ceacutelt koumlnnyebben vagy eacuteppen elegaacutensabban Eacutes termeacuteszetesen az is előfordulhat hogy az olvasoacute harmadik a fenti kettőtől gyoumlkeresen elteacuterő oumltletet valoacutesiacutet majd meg eacutes tartja azt a legjobbnakhellip

Created by XMLmind XSL-FO Converter

13 fejezet - Kuumllső aacuteramkoumlr fotokapuvalAz előző fejezetben kuumllső aacuteramkoumlrbe koumltoumltt LED-eket kapcsolgattunk a mikrovezeacuterlővel Leacutepjuumlnk most tovaacutebb most vezeacuterlőjeleket ne csak kiadjunk hanem fogadjunk is

18 feladat

Keacutesziacutetsuumlnk behatolaacutesjelzőt fotokapuval Nyugalmi aacutellapotban egy zoumlld LED vilaacutegiacutet Behatolaacuteskor piros-keacutek villogoacute jelez Gombnyomaacutesra visszateacuteruumlnk a nyugalmi aacutellapothoz [Code27]

A feladat megoldaacutesaacutehoz fotokaput kell keacutesziacutetenuumlnk Ezt sokszor infradioacutedaacuteval eacutes infraacuteban eacuterzeacutekeny fototranzisztorral valoacutesiacutetjaacutek meg Tegyuumlk ezt mi is A kapcsolaacutesi rajzot a [A (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatjuk Fototranzisztorokről bővebben olvashatunk a [2] [3] [4] [5] eacutes [6] szakkoumlnyvekben

131 aacutebra - A [18 feladat] (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

A LED-ek műkoumldeacutese nem igeacutenyel bővebb magyaraacutezatot Az aacuteramkoumlri rajz alsoacute reacuteszeacuten laacutethatoacute dioacuteda az infravoumlroumls tartomaacutenyban sugaacuteroz a vele szemben elhelyezett fototranzisztor pedig ugyanebben a sziacutenkeacuteptartomaacutenyban eacuterzeacutekeny a laacutethatoacute tartomaacutenyban nem Ha az infradioacuteda sugaacuterzaacutest bocsaacutet ki akkor a fototranzisztor kinyit minek hataacutesaacutera a P21-es laacuteb foumlldpotenciaacutelra keruumll (Uacutegy is fogalmazhatunk hogy a fototranzisztor a P21-es laacutebat foumlldre huacutezza) Amennyiben a keacutet aacuteramkoumlri elem koumlzeacute olyan objektum keruumll amely elzaacuterja a dioacuteda aacuteltal kibocsaacutetott infravoumlroumls sugaacuterzaacutes uacutetjaacutet a tranzisztor lezaacuter eacutes iacutegy a P21-es laacuteb +5 V potenciaacutelon uumll Ez a keacutet aacutellapot pontosan megfelel a P21-es laacutebhoz tartozoacute bit alacsony ill magas aacutellapotaacutenak Iacutegy ha a programban ezt figyeljuumlk folyamatosan akkor detektaacutelhatjuk a bdquobehatolaacutestrdquo Ez azt jelenti hogy most nem adatot iacuterunk a P2-es portra hanem annak tartalmaacutet olvassuk peacuteldaacuteul

MOV AP2

Az infradioacuteda hasznaacutelataacutehoz egy kis truumlkkoumlt szeretneacutenk ismertetni Az infravoumlroumls sugaacuterzaacutes az emberi szem szaacutemaacutera laacutethatatlan Meacutegis koumlnnyen meg tudunk arroacutel győződni hogy műkoumldik-e az infradioacuteda bdquoNeacutezzuumlnk raacuterdquo digitaacutelis feacutenykeacutepezőgeacuteppel vagy mobiltelefon kameraacutejaacuteval eacutes maacuteris kideruumll be van-e kapcsolva ([Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel] aacutebra) Ez azeacutert van iacutegy mert a legtoumlbb digitaacutelis

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlr fotokapuval

keacuteproumlgziacutető eszkoumlz sziacutenkeacutepi eacuterzeacutekenyseacutege a koumlzeli infravoumlroumls tartomaacutenyban sem nulla iacutegy a tisztaacuten ilyen sugaacuterzaacutes hataacutesaacutera is kellően nagy jel keletkezik ahhoz hogy azt a kamera ndash igaz teljesen hamisan ndash laacutethatoacute informaacutecioacutenak tekintse

132 aacutebra - Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel

Az aacuteramkoumlrben alkalmazott BPV11F tiacutepusuacute fototranzisztornak a legtoumlbb fototranzisztorral ellenteacutetben nem kettő hanem haacuterom laacuteba van Ez termeacuteszetesen semmi egyebet nem jelent mint azt hogy a baacutezis is ki van vezetve iacutegy alkalmasint a munkapont-beaacutelliacutetaacutesroacutel is gondoskodhatunk Erre nekuumlnk most nem lesz szuumlkseacuteguumlnk eacutes tulajdonkeacuteppen be kell vallanunk hogy azeacutert esett a vaacutelasztaacutes erre a tiacutepusra mert ezt a hallgatoacutek nem keverik oumlssze keacutetlaacutebuacute dioacutedaacutekkalhellip A tranzisztor műkoumldeacuteseacuteről szinteacuten koumlnnyen meggyőződhetuumlnk a [A (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute aacuteramkoumlrnek az ADuC-panelre toumlrteacutenő raacutecsatlakoztataacutesa utaacuten Ha a tranzisztor kinyit akkor a leiacutertak szerint a P21 laacuteb foumlldpotenciaacutelra keruumll iacutegy az ennek megfelelő LED-nek vilaacutegiacutetania kell a LED-soron ([Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel] aacutebra)

133 aacutebra - A fototranzisztor foumlldre huacutezza a P21-es laacutebat iacutegy az arra koumltoumltt LED vilaacutegiacutet

Az olvasoacuteban mindezek utaacuten jogosan meruumll foumll a keacuterdeacutes hogy mi toumlrteacutenik akkor ha kiacutevuumllről raacutekeacutenyszeriacutetuumlnk valamilyen jelszintet a 2-es portra (input portkeacutent hasznaacuteljuk) de szoftveresen maacutes jelszintet iacuterunk ki raacute (outputkeacutent hasznaacuteljuk) A megnyugtatoacute vaacutelasz az hogy a mikrovezeacuterlőt nem fogjuk toumlnkretenni a 2-es port hardveres kialakiacutetaacutesa olyan hogy ilyenkor a kuumllső jel az erősebb eacutes annak eredmeacutenye olvashatoacute le szoftveresen baacutermit is iacutertunk ki raacute előzőleg A 2-es port keacutetiraacutenyuacute port belső felhuacutezoacute-ellenaacutellaacutesokkal [1 p 57-58] Keacutetiraacutenyuacute mivoltaacutet nagyon joacutel peacuteldaacutezza a mostani feladat hiszen 3 laacutebaacutet kimeneti laacutebkeacutent (a 3 LED-hez) egyik laacutebaacutet bemeneti laacutebkeacutent (a fototranzisztorhoz) hasznaacuteljuk

A [18 feladat] megoldaacutesaacutet jelentő program műkoumldeacutese egyszerűbb lesz mint azt elsőre hinneacutenk Előszoumlr bekapcsoljuk a zoumlld LED-et majd folyamatosan figyeljuumlk hogy mi a P21 laacutebhoz tartozoacute bit eacuterteacuteke Ha ez 1 lesz valamikor akkor riasztaacutes toumlrteacutenik azaz felvaacuteltva villogtatni kezdjuumlk a piros eacutes keacutek LED-et A LED-ek bekapcsolt eacutes kikapcsolt aacutellapotaacutet a villogtataacuteskor egyszerű időhuacutezoacute szubrutinnal oldjuk meg Ez ugyanolyan szerkezetű lesz mint a GDELAY az előző fejezetben de most aacutetrendezzuumlk az egymaacutesba aacutegyazott ciklusok veacutegrehajtaacutesi szaacutemaacutet hogy ismeacutet akkor vaacuterjon pontosan 1 maacutesodpercet a szubrutin ha azt A=100 eacuterteacutekkel hiacutevjuk meg mint ahogy a joacute oumlreg DELAY rutinunkat szoktuk A rutin veacutegrehajtaacutesaacutehoz szuumlkseacuteges oacuterajelek darabszaacutemaacutenak kiszaacutemiacutetaacutesaacutet (a vaacuterakozaacutesi idő ellenőrzeacuteseacutet) most maacuter az olvasoacutera biacutezzuk A moacutedosiacutetott GDELAY szubrutin koumlzvetlenuumll figyeli az 1 gomb bitjeacutet mert most nem alkalmazunk megszakiacutetaacutesokat Amennyiben vaacuterakozaacutes koumlzben baacutermikor gombnyomaacutest eacuteszlel a program azonnal visszateacuter a szubrutinboacutel amit a program legelejeacutere toumlrteacutenő visszaugraacutes koumlvet Eacutes kezdődik előroumll minden Jelen esetben a prellegeacutessel sem kell foglalkoznunk hiszen a gombnyomaacutesnak nem leacutepteteacutes a szerepe hanem pusztaacuten a vezeacuterleacutes visszaugrataacutesa a program legelejeacutere amineacutel eacuteszrevehetetlen marad ha ez egymaacutes utaacuten toumlbbszoumlr koumlvetkezik be

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlr fotokapuval

Code27asmORG 0060h A teacutenyleges programkoacuted kezdetebut1 BIT P32 Az 1 gomb bitjeacutenek elnevezeacuteseled1 BIT P23 A voumlroumls LED bitjeacutenek elnevezeacuteseled2 BIT P25 A keacutek LED bitjeacutenek elnevezeacuteseled3 BIT P27 A zoumlld LED bitjeacutenek elnevezeacutesetranzi BIT P21 A fototranzisztor bitjeacutenek elnevezeacutesenyom BIT 00h A gombnyomaacutes jelzőbitjeMAINCLR nyom A nyom jelzőbit toumlrleacuteseSETB led1 A voumlroumls LED kikapcsolaacutesaSETB led2 A keacutek LED kikapcsolaacutesaCLR led3 A zoumlld LED bekapcsolaacutesaMOV A6 A villogoacute frekvenciaacuteja (006 s)figyelMOV Ctranzi Pollozzuk a fototranzisztor jeleacutet Előszoumlr is a C-be toumlltjuumlkJNC figyel Ha nem szakiacutetja meg semmi a fotokapu infra sugaacuterzaacutesaacutet akkor a fototranzisztor a 21-es portbitet lehuacutezza foumlldre azaz 0 az eacuterteacuteke Ilyenkor pedig folytatjuk a figyeleacutest (pollozaacutest)SETB led3 Kikapcsoljuk a zoumlld LED-et mert bement valami a fotokapuba azaz joumln a riasztaacutesvillogMOV R74 Neacutegyszer villantjuk foumll a voumlroumls LED-etegyikCLR led1 Bekapcsoljuk a LED-etCALL GDELAY Vaacuterunk kicsit (006 s)JB nyomMAIN Ha volt gombnyomaacutes akkor kezdjuumlk előroumll a programotSETB led1 Kikapcsoljuk a LED-etCALL GDELAY Vaacuterunk kicsit (006 s)JB nyomMAIN Ha volt gombnyomaacutes akkor kezdjuumlk előroumll a programotDJNZ R7egyik Lekezeljuumlk az R7-es ciklusvaacuteltozoacutetMOV R74 Neacutegyszer villantjuk foumll a keacutek LED-etmasik A leiacuteraacutes toumlkeacuteletesen ugyanaz mint az előbb CLR led2 a voumlroumls LED-neacutel Csak most a keacuteketCALL GDELAY villogtatjukJB nyomMAINSETB led2CALL GDELAYJB nyomMAINDJNZ R7masikJMP villog Folytatoacutedik a villogtataacutes Időhuacutezoacute szubrutin amely az 1 gomb lenyomaacutesaacutet is figyeli GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R543cik5MOV R469cik4JNB but1armed Itt vizsgaacuteljuk meg a gomb bitjeacutet Elugrunk ha le van nyomva azaz 0DJNZ R4cik4DJNZ R5cik5DJNZ R6cik6RETarmed Ide ugrunk ha gombnyomaacutes voltSETB nyom Magasra aacutelliacutetjuk a jelzőbitetRET

Created by XMLmind XSL-FO Converter

14 fejezet - Heacutetszegmenses kijelző meghajtaacutesaAz előző keacutet fejezetben megtanultuk hogy hogyan adhatunk ill fogadhatunk egyszerű jeleket aacuteramkoumlroumlknek ill aacuteramkoumlroumlkről Ebben a fejezetben munkaacutera fogjuk az egyik legegyszerűbb de mind a mai napig igen sokszor neacutelkuumlloumlzhetetlen megjeleniacutetőeszkoumlzt a heacutetszegmenses kijelzőt Heacutetszegmenses kijelzőből toumlbb szaacutez gyaacutertoacute toumlbb ezer feacuteleacutet keacutesziacutet A kijelzők elteacuternek meacuteretben aacuteramfelveacutetelben laacutebelrendezeacutesben sziacutenben stb A heacutetszegmenses kijelzőkneacutel azonban van valami ami mindegyikuumlkneacutel megegyezik a szegmensek jeloumlleacutese (laacutesd [A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese] aacutebra) A DP szimboacutelum a Decimal Point angol kifejezeacutesből szaacutermazik eacutes tizedespontot jelent (Maacutes szoumlvegkoumlrnyezetben a DP egeacuteszen maacutest jelenthet de ennek taacutergyalaacutesa nem a mi feladatunkhellip)

A tankoumlnyvben eddig ha LED-eket kellett bekapcsolnunk mindig foumlldre huacuteztuk azokat iacutegy olyan heacutetszegmenses kijelzőt ceacutelszerű vaacutelasztanunk amely koumlzoumls anoacutedos Ettől eltekintve gyakorlatilag nincs megkoumlteacutes a tiacutepusra A tankoumlnyvben konkreacutetan az SA52-11 tiacutepusuacute heacutetszegmenses kijelzőt hasznaacuteljuk melynek laacutebkiosztaacutesa a [Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa] aacutebraacuten laacutethatoacute

141 aacutebra - A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese

142 aacutebra - Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa

A heacutetszegmenses kijelző meghajtaacutesa toumlrteacutenhet uacutegy hogy egy teljes portot foumllaacuteldozva koumlzvetlenuumll kapcsolgatjuk az egyes szegmenseket mint LED-eket Ez azt jelenti hogy uacutegy jaacuterunk el mintha a [Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa] aacutebraacuten laacutethatoacute laacutebkiosztaacutest egy-egy ellenaacutellaacutessal kibőviacuteteneacutenk eacutes azokat szeacutepen sorban raacutekapcsolnaacutenk a 0 vagy a 2 port laacutebaira Neacutemileg keacutenyelmesebb megoldaacutest jelent az ha alkalmazunk egy BCD-heacutetszegmenses dekoacutedert A koumlvetkezőkben bemutatott joacute neacutehaacuteny feladat megoldaacutesaacutenaacutel konkreacutetan az SN74LS47N tiacutepusuacute dekoacutedert hasznaacuteljuk A dekoacuteder-IC feleacutepiacuteteacuteseacutenek eacutes műkoumldeacuteseacutenek bemutataacutesa nem a tankoumlnyv feladata az adatlapot az olvasoacute kuumlloumln koumlnyvtaacuterban talaacutelja Annyit azeacutert elmondhatunk hogy a 7447-es dekoacuteder felhasznaacutelaacutesaacuteval csak 4 portbitet koumlt le a kijelző ciacutemzeacutese A szaacutemjegyeknek megfelelő binaacuteris eacuterteacutek előaacutelliacutetaacutesa eacutes kirakaacutesa a portra azutaacuten maacuter a mi feladatunk Illik meacuteg azt is megjegyeznuumlnk hogy a decimaacutelis ponttal a dekoacuteder-IC nem tud mit kezdeni Ha ezt hasznaacutelni szeretneacutenk akkor annak műkoumldteteacuteseacutehez kuumlloumln ellenaacutellaacutes eacutes szabad portbit szuumlkseacuteges A [Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel] aacutebraacuten laacutethatoacute aacuteramkoumlr a mikrovezeacuterlős kalandjaink soraacuten egy darabig elkiacuteseacuter bennuumlnket A megeacutepiacutetett aacuteramkoumlrben az egyes szegmensekhez tartozoacute ellenaacutellaacutesok eacuterteacutekeacutenek 390 Ω-ot vaacutelasztottunk heacutetszegmenses kijelzőnek pedig egy SA52-11GWA tiacutepusuacutet azaz zoumlldet

143 aacutebra - Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

Az olvasoacutenak felteacutetelezhetően maacuter viszketnek az ujjbegyei hogy megiacuterja első programjaacutet amellyel a heacutetszegmenses kijelzőt uumlzemeltetheti Fogalmazzuk meg haacutet koumlvetkező feladatunkat a [Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel] aacutebraacuten laacutethatoacute aacuteramkoumlrhoumlz

19 feladat

Leacuteptessuumlk a szaacutemokat a heacutetszegmenses kijelzőn 0-toacutel 9-ig 9 utaacuten ismeacutet 0-roacutel induljon a szaacutemlaacutelaacutes [Code28]

Enneacutel az egyszerű kis feladatnaacutel az aacuteramkoumlr oumlsszerakaacutesa tovaacutebb tart mint megiacuterni a programot annyira egyszerű lesz Folyamataacutebra vagy egyeacuteb szemleacutelteteacutes teljesen felesleges hozzaacute De meacuteg joacuteformaacuten bővebb magyaraacutezat is Egyszerűen leacutetrehozunk egy ciklust amely 0-toacutel 9-ig szaacutemol majd visszaugrunk a program elejeacutere A ciklus minden veacutegrehajtaacutesa soraacuten kitesszuumlk a P2-es portra a ciklusvaacuteltozoacute eacuterteacutekeacutet A programban a joacute oumlreg DELAY szubrutinunkat hasznaacuteljuk időhuacutezaacutesra Iacuteme az bdquoijesztően hosszuacuterdquo koacuted

Code28asmMAINMOV R40 R4 a ciklusvaacuteltozoacute 0 a kezdeti eacuterteacutekcountMOV P2R4 Kitesszuumlk a P2-es portra a ciklusvaacuteltozoacutetMOV A40 04 s időhuacutezaacutes leszCALL DELAY IdőhuacutezaacutesINC R4 A ciklusvaacuteltozoacute noumlveleacuteseCJNE R410count A ciklusvaacuteltozoacute felteacuteteleacutenek kieacuterteacutekeleacuteseJMP MAIN Kezdjuumlk előről az egeacuteszet

Oldjunk most meg veacutegre egy olyan feladatot is amely nem oumlnmagaacuteeacutert valoacute hanem akaacuter eacutertelmes alkalmazaacutesi koumlre is lehet Vonjuk be a nyomoacutegombokat is Meg meacuteg egy kuumllső LED-et is

20 feladat

Az egyik gombbal leacuteptessuumlk a szaacutemokat a heacutetszegmenses kijelzőn 1-toacutel 9-ig (9 utaacuten 1-ről induljon ismeacutet a szaacutemlaacutelaacutes) A maacutesik gomb megnyomaacutesaacutera egy kuumllső LED annyiszor villanjon foumll amennyit a kijelző mutat [Code29]

A kuumllső LED-hez maacuter nem rajzolunk kuumlloumln aacuteramkoumlrt Koumlssuumlk azt megfelelő ellenaacutellaacuteson keresztuumll a P27-es laacutebra Ez az olvasoacutenak a tankoumlnyvből megtanultak alapjaacuten veacutelhetően maacuter nem jelenthet probleacutemaacutethellip

Taacuteroljuk a kijelezendő eacuterteacuteket R3-ban a kuumllső LED villogtataacutesaacutenak ciklusvaacuteltozoacuteja pedig legyen R2 Az időhuacutezaacutesokhoz hasznaacuteljuk ismeacutet a joacute oumlreg DELAY szubrutint Mivel a programban roumlvidseacutege elleneacutere talaacuten meacutegis szokatlan megoldaacutesokat alkalmazunk folyamataacutebraacutet keacutesziacutetuumlnk amely a [A (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute A szokatlan megoldaacutes a kezdeti eacuterteacutek olyan megadaacutesa ami elő sem fordulhat hiszen R3 első legaacutelis eacuterteacuteke 1 A program kezdeteacuten R3-t meacutegis 0-nak vesszuumlk viszont utaacutena azonnal noumlveljuumlk is 1-gyel Ugyanez a megoldaacutes szerepel akkor is amikor megvizsgaacuteljuk hogy eleacuterte-e a 9-et A megoldaacutes eleganciaacuteja az hogy a kezdeti eacuterteacutek eacutes az alaphelyzet elrendezeacutese mindoumlsszesen egy sort igeacutenyel utaacutena mindjaacutert beugratjuk a vezeacuterleacutest az algoritmus bdquosziacuteveacuteberdquo hiszen onnantoacutel kezdve toumlkeacuteletesen rendben tud eacutes fog műkoumldni minden

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

144 aacutebra - A [20 feladat] (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja

A koacuted az elmondottak elleneacutere meglehetősen roumlvid A DELAY szubrutint most sem tuumlntetjuumlk foumll

Code29asmbut1 BIT P32 Az 1 gomb bitvaacuteltozoacutejabut2 BIT P33 A 2 gomb bitvaacuteltozoacutejaled BIT P27 A kuumllső LED bitvaacuteltozoacutejaMAINMOV R30 0-t teszuumlnk R3-ba mert utaacutena azonnal noumlveljuumlk majd 1-gyelJMP sima Ugrunk a noumlveleacuteshezgombokJNB but1lep Az 1 gombra leacuteptetjuumlk a kijelzett szaacutemeacuterteacuteketJNB but2villog A 2 gombra villogtatunkJMP gombok Tovaacutebb figyeljuumlk a gombokatlepCJNE R39sima Ha meacuteg nem eacutertuumlk el a 9-et nincs bajMOV R30 Ha eleacutertuumlk nullaacutezzuk R3-t hiszen azonnal noumlveljuumlk azt Iacutegy lesz 1 az aacutetfordulaacutes utaacuteni eacuterteacuteksimaINC R3 A kijelezendő eacuterteacutek noumlveleacuteseMOV AR3 R3-t A-ba tesszuumlk

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

ORL A11110000b A felső 4 bitet 1-re aacutelliacutetjuk hogy ne vilaacutegiacutetson minden LEDMOV P2A Kitesszuumlk a kapott eacuterteacuteket P2-reMOV A20 02 s vaacuterakozaacutes leszCALL DELAY Időhuacutezoacute szubrutinJMP gombok Ugrunk vissza a gombok figyeleacuteseacutehezvillogMOV AR3 R3 eacuterteacutekeacutet A-ne keresztuumll R2-be tesszuumlkMOV R2A Ez lesz a villogtataacutes ciklusvaacuteltozoacutejaMOV A30 03 s vaacuterakozaacutes lesz a villogtataacutesnaacutelvillCLR led Kuumllső LED bekapcsolaacutesaCALL DELAY Időhuacutezoacute szubrutinSETB led Kuumllső LED kikapcsolaacutesaCALL DELAY Időhuacutezoacute szubrutin DJNZ R2vill Az R2 ciklusvaacuteltozoacute lekezeleacuteseJMP gombok Ugraacutes vissza a gombok figyeleacuteseacutehez

Created by XMLmind XSL-FO Converter

15 fejezet - Kommunikaacutecioacute az UART-talA mai ember ha szaacutemiacutetoacutegeacutepes csatlakozaacutesi lehetőseacutegekre gondol eacutes az nem az Internet akkor az USB jut eszeacutebe Reacutegebben a PC-k csatlakozaacutesi lehetőseacutegeineacutel a soros portot eacutes a paacuterhuzamos portot szoktaacutek bemutatni Eacuterdekes moacutedon a paacuterhuzamos port mint csatlakozaacutesi feluumllet szerepe elsikkadt a soros port viszont tovaacutebbfejlődoumltt eacutes ebből lett az amit ma USB-nek hiacutevunk A betűszoacute az angol Universal Serial Bus kifejezeacutesből szaacutermazik eacutes univerzaacutelis soros buszt jelent Ma maacuter kisseacute lesajnaacuteljuk azokat a szaacutemiacutetoacutegeacutepeket amelyeken nincs legalaacutebb neacutegy USB-csatlakozoacute A mai kor (2013-at iacuterunk eacuteppen) perifeacuteriaacuteit eacutes egyeacuteb kuumltyuumlit a legtoumlbbszoumlr USB-porton keresztuumll csatlakoztathatjuk a szaacutemiacutetoacutegeacutepuumlnkhoumlz Kuumllső lemezegyseacutegeket kaacutertyaolvasoacutekat nyomtatoacutekat pen-drive-okat stb

Az USB fogalom valoacutejaacuteban egy ipari szabvaacutenyt jelent amely a buszhoz hasznaacutelt vezeteacutekeket csatlakozoacutekat protokollokat definiaacutelja szaacutemiacutetoacutegeacutepek eacutes elektronikus eszkoumlzoumlk kommunikaacutecioacutejaacutehoz csatlakoztataacutesaacutehoz eacutes taacutepellaacutetaacutesaacutehoz Ha szeacutetvaacutegunk egy USB-kaacutebelt akkor a [USB-kaacutebel belső vezeteacutekei] aacutebraacuten laacutethatoacute keacutep taacuterul szemuumlnk eleacute Az USB-kaacutebel tehaacutet neacutegy belső szigetelt vezeteacuteket eacutes aacuteltalaacuteban egy finom sodrott eacuterkoumlteget tartalmaz Ez utoacutebbinak kizaacuteroacutelag aacuternyeacutekolaacutesi ill mechanikai szerepe van A sziacutenes szigeteleacutesű vezeteacutekek funkcioacutejaacutet a [Az USB-kaacutebel vezeteacutekeinek funkcioacuteja] foglalja oumlssze

151 aacutebra - USB-kaacutebel belső vezeteacutekei

151 taacuteblaacutezat - Az USB-kaacutebel vezeteacutekeinek funkcioacuteja

piros VCC +5 V taacutep

feheacuter data ndash adat

ndash

zoumlld data + adat

+

fekete GND foumlld

Az UART betűszoacute aacuteltal takart fogalom szorosan kapcsoloacutedik az USB fogalmaacutehoz de vigyaacutezzunk mert nem ugyanazt jelenti Az UART betűszoacute az angol Universal Asynchonous ReceiverTransmitter kifejezeacutesből szaacutermazik ami univerzaacutelis aszinkron adoacutevevőt jelent Ez egyfajta hardverelem amely aacutetalakiacutetaacutest veacutegez soros eacutes paacuterhuzamos adatformaacutetumok koumlzoumltt Tehaacutet paacuterhuzamosan kezelt adatokat (mondjuk egy baacutejt bitjeit) elkuumlldhetuumlnk valamely eszkoumlzről egy UART hardverelem koumlzbeiktataacutesaacuteval az USB-n amit egy maacutesik eszkoumlz fog a sajaacutet UART-jaacuteval visszaalakiacutetani Iacutegy korrekt a fogalmazaacutes Vagyis egy baacutejtot az UART szeacutetszerel bitekre azokat elkuumlldoumlzgeti a soros buszon a kuumlldoumltt bitekből pedig a maacutesik eszkoumlz UART-ja szereli uacutejra oumlssze az elkuumlldoumltt baacutejtot Szerencseacutere az ADuC 842-es architektuacuteraacutejaacuteban a baacutejtok szeacutetszereleacuteseacutevel eacutes oumlsszerakaacutesaacuteval nekuumlnk egyaacuteltalaacuten nem kell foglalkoznunk ezt megteszi helyettuumlnk a mikrovezeacuterlő UART-ja Mi csak a baacutejtszintű kommunikaacutecioacutet fogjuk eacuterzeacutekelni csak azzal kell toumlrődnuumlnk Ha nekuumlnk kellene bitenkeacutent kuumlldoumlzgetnuumlnk az adatokat akkor igen csak megizzadnaacutenk mire oumlsszehoznaacutenk egy valamirevaloacute kommunikaacutecioacutethellip

1 Az UART soros interfeacuteszAz ADuC soros portja full duplex elven műkoumldik azaz egyidejűleg keacutepes adatokat kuumlldeni eacutes fogadni A fogadaacutesi csatorna pufferelt ami azt jelenti hogy egy baacutejt megeacuterkezeacutese utaacuten elkezdődhet a maacutesodik baacutejt fogadaacutesa meacuteg akkor is ha az elsőt meacuteg nem olvastuk ki a fogadaacutes regisztereacuteből Viszont ha ilyenkor a maacutesodik baacutejt teljes egeacuteszeacuteben megeacuterkezik akkor az elsőt elvesziacutetjuumlk Fizikailag a fogadaacuteseacutert a P30 (RxD) laacuteb a

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

kuumlldeacuteseacutert a P31 (TxD) laacuteb felelős A szoftveres alkalmazaacutesoknaacutel az SBUF eacutes SCON nevű SFR jaacutetszik rendkiacutevuumll fontos szerepet

A fogadaacutes eacutes a kuumlldeacutes regisztereit az SBUF SFR-en keresztuumll eacuterjuumlk el Az SBUF iacuteraacutesakor a kuumlldeacutes regisztereacutebe keruumll az adat az SBUF olvasaacutesakor a fogadaacutes regisztereacuteben leacutevő adatot eacuterjuumlk el Tudnunk kell hogy itt fizikailag keacutet kuumlloumlnaacutelloacute regiszterről van szoacute meacutegis mindkettőhoumlz az SBUF regisztert kell hasznaacutelnunk

Az SCON nevű SFR a soros porti kommunikaacutecioacute konfiguraacutelaacutesaacuteeacutert felel Ismerteteacuteseacutet a [Az SCON SFR parameacuteterei] tartalmazza Meg kell azonban jegyeznuumlnk hogy toumlbb bitet eacuteppen csak megnevezuumlnk vagy igen roumlviden jellemzuumlnk mert a tankoumlnyv alkalmazaacutesainaacutel messze nem hasznaacuteljuk mindegyiket A leiacuteraacutes a gyaacuteri ismertetőben teljes reacuteszletesseacuteggel megtalaacutelhatoacute [1]

152 taacuteblaacutezat - Az SCON SFR parameacuteterei

SCON Serial Port Control Register

A soros port vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek

00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg

igen

Bit Szimboacute-lum Angol neacutev Magyar neacutev Jelenteacutes

7 SM0 Serial Mode Select Bits Kommunikaacutecioacutes moacutedot kivaacutelasztoacute bitek

Laacutesd [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese]

6 SM1

5 SM2 Multiprocessor Communication Enable Bit

Toumlbbprocesszoros kommunikaacutecioacutet engedeacutelyező bit

Nem taacutergyaljuk

4 REN Receive Enable Bit Fogadaacutest engedeacutelyező bit

A soros port fogadaacutest engedeacutelyező (1) eacutes letiltoacute (0) bitje

3 TB8 Transmit Bit 8 (9 bit) Adaacutesi bit 8 (9 bit)

2 eacutes 3 moacutedban a 9 elkuumlldoumltt bit (Darabra Ha 0-toacutel sorszaacutemozzuk akkor a nyolcadik)

2 RB8 Receive Bit 8 (9 bit) Fogadaacutesi bit 8 (9 bit)

2 eacutes 3 moacutedban a 9 fogadott bit (Darabra Ha 0-

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

toacutel sorszaacutemozzuk akkor a nyolcadik) 1 moacutedban a stopbit keruumll ide

1 TI Transmit Interrupt Flag Adaacutesi megszakiacutetaacutest jelző bit

Kuumlldeacuteskor a 0 moacutedban a 8 bit (1-től kezdett sorszaacutemozaacutessal) veacutegeacuteneacutel hardveresen 1-re aacutell A toumlbbi moacutedban a stopbit elejeacuten aacutell 1-re Szoftveresen kell toumlroumllni

0 RI Receive Interrupt Flag Fogadaacutesi megszakiacutetaacutest jelző bit

Fogadaacuteskor a 0 moacutedban a 8 bit (1-től kezdett sorszaacutemozaacutessal) veacutegeacuteneacutel hardveresen 1-re aacutell A toumlbbi moacutedban a stopbit feleacuteneacutel aacutell 1-re Szoftveresen kell toumlroumllni

153 taacuteblaacutezat - Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese

SM0 SM1 Kivaacutelasztott moacuted

0 0 0 moacuted Leacuteptetőregiszter roumlgziacutetett baud-raacuteta (Core_Clk2)

0 1 1 moacuted 8-bites UART vaacuteltoztathatoacute baud-raacuteta

1 0 2 moacuted 9-bites UART roumlgziacutetett baud-raacuteta (Core_Clk32) vagy (Core_Clk16)

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

1 1 3 moacuted 9-bites UART vaacuteltoztathatoacute baud-raacuteta

A [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese] foglalja oumlssze a soros porti kommunikaacutecioacute moacutedjait Laacutethatoacute hogy az ADuC 842-es mikrovezeacuterlőt nagyjaacuteboacutel mindenre felkeacutesziacutetetteacutek ez uumlgyben A tankoumlnyvben kizaacuteroacutelag az 1 moacutedot fogjuk hasznaacutelni mert ez a legegyszerűbb eacutes legrugalmasabb hiszen nem kell jaacuteruleacutekos ellenőrzőbittel vacakolnunk viszont vaacuteltoztathatoacute a kommunikaacutecioacute sebesseacutege A szaacutemiacutetaacutestechnikaacuteban a kommunikaacutecioacute sebesseacutegeacutet bits-ban meacuterjuumlk Eacutemile Baudot feltalaacuteloacute tiszteleteacutere a bits meacuterteacutekegyseacuteget baudnak is nevezik jele Bd Magaacutet a kommunikaacutecioacutes sebesseacuteget szokaacutes baud-raacutetaacutenak is hiacutevni

Az ADuC 842-es mikrovezeacuterlő tulajdonsaacutegainak felsorlaacutesakor maacuter emliacutetettuumlk hogy az architektuacutera toumlbb időziacutetőtszaacutemlaacuteloacutet is tartalmaz Az a helyzet hogy egeacuteszen pontosan neacutegyet A sorszaacutemozaacutesuk persze a szaacutemiacutetaacutestechnikaacuteban megszokottak szerint 0 1 2 eacutes 3 A soros porti kommunikaacutecioacute jeleinek uumltemezeacuteseacutehez az 1 eacutes a 2 időziacutetőtszaacutemlaacuteloacutet is hasznaacutelhatjuk de a harmadikat kifejezetten erre a ceacutelra hoztaacutek leacutetre iacutegy a tankoumlnyvben mi mindig ezt fogjuk hasznaacutelni (A maacutesik haacuterom időziacutetőszaacutemlaacuteloacute joacute lesz meacuteg nekuumlnk maacutes ceacutelokrahellip) A 3 időziacutetőszaacutemlaacuteloacute konfiguraacutecioacuteja keacutet SFR-rel toumlrteacutenik T3CON eacutes T3FD Előszoumlr neacutezzuumlk meg mire valoacute a T3CON regiszter ([Az T3CON SFR parameacuteterei])

154 taacuteblaacutezat - Az T3CON SFR parameacuteterei

T3CON Timer 3 Control Register

A 3 időziacutetőszaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 T3BAUDEN Ha 1 akkor a baud-raacutetaacutet a 3 szaacutemlaacuteloacute generaacutelja A 0 eseteacutet nem taacutergyaljuk

6 - Foglalt

5 - Foglalt

4 - Foglalt

3 - Foglalt

2 DIV2 A binaacuteris osztoacute bitjei

DIV2 DIV1

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

DIV0

0 0 0

0 0 1

1 1 1

1 DIV1

0 DIV0

Az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban talaacutelhatoacute egy aacutebra amely azt mutatja hogy hogyan aacutell elő az oacuterajelből a soros porti kommunikaacutecioacute baud-raacutetaacuteja [1 p 68 Figure 74] Ezt az aacutebraacutet vaacuteltozatlan formaacuteban vesszuumlk aacutet (laacutesd [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebra)

152 aacutebra - A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten

A baud-raacuteta előaacutelliacutetaacutesaacutehoz tehaacutet az aktuaacutelis oacuterajel leosztaacutesa toumlbb leacutepcsőben toumlrteacutenik A gyaacuteri leiacuteraacutesban az eredeti aacutebra [1 p 68 Figure 74] utaacuten szereplő keacutepletek viszont azt sugalljaacutek hogy a legelső kettővel valoacute osztaacutest jelelő blokk veacutelhetően foumlloumlsleges Ennek igazolaacutesaacutera mi is levezetjuumlk a regiszterek eacuterteacutekeacutenek beaacutelliacutetaacutesaacutehoz szuumlkseacuteges keacutepleteket amelyek viszont egytől egyig meg fognak egyezni a gyaacuteri leiacuteraacutesban szereplőkkel A matematikaacuteban ugyan nem bdquoszabaacutelyosrdquo szimboacutelumvaacutelasztaacutesnak leszuumlnk tanuacutei de a mi levezeteacuteseinkben is oumlnaacutelloacute vaacuteltozoacutenak tekintjuumlk most a T3FD eacutes a DIV szimboacutelumokat Jeloumlljuumlk tovaacutebbaacute B-vel a kiacutevaacutent baud-raacutetaacutet

A [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebraacuten laacutethatoacute osztaacutesi leacutepcsők alapjaacuten (a legelsőt mellőzve) a koumlvetkező oumlsszefuumlggeacutest iacuterhatjuk fel

Ez a kifejezeacutes a koumlvetkező moacutedon alakiacutethatoacute tovaacutebb

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Ez a keacuteplet pedig pontosan ugyanaz mint a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 3 keacuteplete eltekintve az angolszaacutesz jeloumlleacutesmoacutedtoacutel A keacuteplet aacutetrendezeacuteseacutevel a koumlvetkezőket kapjuk

Ez az oumlsszefuumlggeacutes pedig azzal egyezik meg amelyik a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 2 keacuteplete

Most megmagyaraacutezzuk hogy egyaacuteltalaacuten mieacutert van szuumlkseacuteg a [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebraacuten laacutethatoacute (1+T3FD64) osztaacutesi fokozatra Tegyuumlk fel hogy e neacutelkuumll szeretneacutenk megkapni a baud-raacutetaacutet azaz

Ezt aacutetalakiacutetva kapjuk hogy

azaz

Eacutes ez az oumlsszefuumlggeacutes azzal egyezik meg amelyik a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 1 keacuteplete Maacutermost ha mindent ilyen szeacutepen le tudunk vezetni akkor ismeacutetelten mieacutert van szuumlkseacuteg az (1+T3FD64) osztaacutesi fokozatra A vaacutelasz erre az hogy azeacutert mert DIV eacuterteacuteke csakis termeacuteszetes szaacutem lehet Sőt kideruumll hogy ez az eacuterteacutek haacuterom biten aacutebraacutezolhatoacute DIV2 DIV1 DIV0 (laacutesd [Az T3CON SFR parameacuteterei]) Maacuterpedig ha ilyen fontos uumlgyben kerekiacuteteacutesi hibaacutek miatt elvesznek eacuterteacutekek az bizony nagyon kritikus koumlvetkezmeacutenyekkel jaacuterhat egy igazi meacuternoumlki alkalmazaacutesra neacutezve Iacutegy tehaacutet most maacuter eacuterthető mieacutert lesz szuumlkseacuteg a szoacute szerint brutaacutelis binaacuteris osztoacuten kiacutevuumll egy finomiacutetoacute fokozatra ami szintuacutegy egy osztoacuteleacutepcsőfokot jelent

A gyaacuteri leiacuteraacutesban a fenti levezeteacutesek nem talaacutelhatoacutek meg Az ott leiacutertak tuumlkreacuteben a koumlvetkező kiegeacutesziacuteteacuteseket fűzzuumlk a levezeteacutesekhez A DIV eacuterteacuteket a T3CON regiszter alsoacute haacuterom bitjeacuten kell beaacutelliacutetanunk Nagyon leacutenyeges hogy ehhez a kapott DIV eacuterteacuteket mindig lefeleacute kell egeacuteszre kerekiacutetenuumlnk A T3FD SFR eacuterteacutekeacutenek meghataacuterozaacutesaacutenaacutel a DIV maacuter szinteacuten a lefeleacute kerekiacutetett eacuterteacutek T3FD eacuterteacutekeacutere viszont a kerekiacuteteacutes szokvaacutenyos moacutedjaacutet kell alkalmaznunk Ezek utaacuten az aktuaacutelis baud-raacuteta a koumlvetkező formulaacuteval szaacutemiacutethatoacute

Peacutelda gyanaacutent hataacuterozzuk meg DIV eacutes T3FD eacuterteacutekeacutet amikor is a kiacutevaacutent kommunikaacutecioacutes sebesseacuteg 9 600 baud az oacuterajel pedig a default 2 097 152 Hz

A lefeleacute kerekiacuteteacutes előiacuteraacutesaacutenak megfelelően a veacutegső eacuterteacutek DIV = 3 lesz Ennek alapjaacuten a T3CON regiszter alsoacute

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

haacuterom bitjeacutet 011-re kell aacutelliacutetanunk A T3FD regiszterbe pedig a koumlvetkező eacuterteacuteket kell iacuternunk

Iacutegy a veacutegső eacuterteacutek T3DF = 45 = 2Dh lesz Ellenőrizzuumlk az aktuaacutelis baud-raacutetaacutet

ami az eleacuterni kiacutevaacutent 9 600-as eacuterteacutekhez keacutepest csupaacuten 02 -os elteacutereacutest jelent Ilyen csekeacutely elteacutereacutest pedig gond neacutelkuumll elvisel az UART egyseacuteg A [A soros porti kommunikaacutecioacute tipikus eacuterteacutekei] a default 2 097 152 Hz-es oacuterajel eseteacutere tartalmaz beaacutelliacutetaacutesi eacuterteacutekeket neacutehaacuteny tipikus kommunikaacutecioacutes sebesseacutegeacuterteacutekhez Maacutes oacuterajel-beaacutelliacutetaacuteshoz tartozoacute eacuterteacutekeket megtalaacutelunk a gyaacuteri leiacuteraacutesban [1 p 69 Table 34] A [A soros porti kommunikaacutecioacute tipikus eacuterteacutekei] T3CON fejleacutecű oszlopaacuteban maacuter konkreacutetan azok az eacuterteacutekek szerepelnek amelyeket teacutenylegesen ebbe a regiszterbe kell iacuternunk A bal oldali feacutelbaacutejt a 3 időziacutetőszaacutemlaacuteloacute engedeacutelyezeacuteseacutet jelenti (vouml [Az T3CON SFR parameacuteterei]) a jobb oldali feacutelbaacutejt pedig nyilvaacutenvaloacutean megegyezik DIV eacuterteacutekeacutevel

155 taacuteblaacutezat - A soros porti kommunikaacutecioacute tipikus eacuterteacutekei

Kommunikaacutecioacutes sebesseacuteg Bd

DIV T3CON T3FD Hiba

57 600 1 81h 9 = 09h 025

38 400 1 81h 45 = 2Dh 02

19 200 2 82h 45 = 2Dh 02

9 600 3 83h 45 = 2Dh 02

4 800 4 84h 45 = 2Dh 02

2 Baacutejtok fogadaacutesa eacutes kuumlldeacutese assemblybenAz előző alfejezetben leiacutert tudnivaloacutek utaacuten neacutezzuumlk meg hogy milyen utasiacutetaacutessorozattal kommunikaacutelhatunk a soros porton assembly nyelven iacutert programocskaacutekkal Itt valoacutejaacuteban baacutejtok fogadaacutesaacuteroacutel eacutes kuumlldeacuteseacuteről lesz szoacute hiszen minden maacutes ezen alapul A kicsinyiacutető keacutepző azeacutert lesz indokolt mert most csak paacuter soros koacutedreacuteszleteket ismertetuumlnk eacutes elemzuumlnk

Ha az elhataacuterozaacutesunknak megfelelően a 3 időziacutetőtszaacutemlaacuteloacutet szeretneacutenk hasznaacutelni akkor a soros porti kommunikaacutecioacute beaacutelliacutetaacutesait az SCON regiszterrel kezdjuumlk Mivel ez a leacutepeacutes eacutes ennek reacuteszletei rendkiacutevuumlli fontossaacuteguacuteak a tankoumlnyv tovaacutebbi alkalmazaacutesainaacutel hasznaacutelt beaacutelliacutetaacutesokat a [Az SCON SFR parameacuteterei] mintaacutejaacutera kellő reacuteszletesseacuteggel megmagyaraacutezzuk laacutesd [Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai] Ez utoacutebbi taacuteblaacutezatban sziacutenes jeloumlleacutest alkalmazunk a bitek szerepeacutenek elkuumlloumlniacuteteacuteseacutere amit a koacutedokban is hasznaacutelni fogunk a koumlnnyebb koumlvethetőseacuteg kedveacuteeacutert

156 taacuteblaacutezat - Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai

SCON Serial Port Control Register

A soros port vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek

00h

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacute-lum Magyar neacutev Jelenteacutes

7 SM0 Kommunikaacutecioacutes moacutedot kivaacutelasztoacute bitek

Mivel az 1 kommunikaacutecioacutes moacutedot fogjuk hasznaacutelni (laacutesd [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese]) ezeacutert SM0=0 eacutes SM1=1

6 SM1

5 SM2 Toumlbbprocesszoros kommunikaacutecioacutet engedeacutelyező bit

Nem hasznaacutelunk toumlbbprocesszoros uumlzemmoacutedot ezeacutert SM2=0

4 REN Fogadaacutest engedeacutelyező bit A mikrovezeacuterlőnek adatokat kell fogadnia a PC-ről ezeacutert termeacuteszetesen REN=1

3 TB8 Adaacutesi bit 8 (9 bit) Nem hasznaacutelunk jaacuteruleacutekos bitet iacutegy TB8=0

2 RB8 Fogadaacutesi bit 8 (9 bit) Nem hasznaacutelunk jaacuteruleacutekos bitet iacutegy RB8=0

1 TI Adaacutesi megszakiacutetaacutest jelző bit Ez a jelzőbit akkor aacutell 1-re hardveresen ha az ADuC elkuumlldoumltt egy karaktert a soros porton keresztuumll Kezdetben eacuterdemes 1-re aacutelliacutetanunk (Mintha elkuumlldtuumlnk volna maacuter egyet)

0 RI Fogadaacutesi megszakiacutetaacutest jelző bit

Fel kell keacutesziacutetenuumlnk az

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

ADuC-ot karakterek fogadaacutesaacutera Ez a bit akkor aacutell 1-re hardveresen ha eacuterkezett egy karakter Kezdetben eacuterdemes 0-ra aacutelliacutetanunk hogy joumlhessen valami

A [Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai]ban oumlsszefoglaltak szerint a soros port beaacutelliacutetaacutesa ceacutelszerűen a

MOV SCON01010010b

utasiacutetaacutessal kezdődik Ez utaacuten aacutelliacutethatjuk be a 3 időziacutetőszaacutemlaacuteloacute keacutet regisztereacutet Az előző alfejezetben leiacutertak alapjaacuten ha 9 600 baudos kommunikaacutecioacutet szeretneacutenk akkor iacutegy folytatjuk a koacutedot

MOV T3CON083hMOV T3FD02Dh

Ha karakter eacuterkezik valahonnan az ADuC-nak pontosabban fogalmazva az teljes egeacuteszeacuteben beeacuterkezik az SBUF nevű regiszterbe akkor az addig 0 eacuterteacutekű RI jelzőbit 1-re vaacutelt Ezt vagy folyamatosa lessuumlk a főprogramboacutel vagy megszakiacutetaacutesra biacutezzuk Akaacuter iacutegy akaacuter uacutegy a karakter fogadaacutesa utaacuten az RI bitet szoftveresen kell toumlroumllnuumlnk Magaacutet az eacuterkezett karaktert az SBUF regiszterből olvassuk ki Az RI jelzőbitnek ez utaacuteni toumlrleacutese mintegy bdquoelőkeacutesziacutetirdquo a terepet a koumlvetkező karakter eacuterkezeacuteseacutehez Iacutegy a most leiacutertak keacutet sort jelentenek assemblyben

MOV ASBUFCLR RI

Ha az ADuC karaktert kuumlld el pontosabban fogalmazva az teljes egeacuteszeacuteben kiuumlruumll az SBUF nevű regiszterből akkor az addig 0 eacuterteacutekű TI jelzőbit 1-re vaacutelt Ezt szintuacutegy vagy folyamatosa lessuumlk a főprogramboacutel vagy ezt is megszakiacutetaacutesra biacutezzuk Az utasiacutetaacutesokkal azonban fordiacutetott a helyzet Előszoumlr nullaacutezzuk a kuumlldeacutes jelzőbitjeacutet azaz TI-t a karaktert pedig csak ez utaacuten pakoljuk be az SBUF regiszterbe Aztaacuten ha az teacutenyleg elment akkor vaacutelt TI ismeacutet 1-re Ezeacutert kell TI-t a karakternek az SBUF regiszterbe valoacute beraacutemolaacutesa előtt nullaacuteznunk

CLR TIMOV ASBUF

3 Soros porti kommunikaacutecioacute pollozaacutessal21 feladat

Jelezzuumlk ki a heacutetszegmenses kijelzőn a PC-ről a soros porton eacuterkező szaacutemjegyeket Teacuteves karakterre valamilyen egyeacuteb jelet jelezzuumlnk ki A soros porti kommunikaacutecioacutet pollozaacutessal veacutegezzuumlk [Code30]

A feladat megoldaacutesa a soros porti kommunikaacutecioacuteroacutel eddig megtanultak alapjaacuten meglepően egyszerű lesz Ennek elleneacutere egy egyszerű folyamataacutebraacutet a biztonsaacuteg kedveacuteeacutert meacutegis melleacutekeluumlnk laacutesd [A (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja] aacutebra A folyamataacutebra utolsoacute blokkjaacuteba iacutert bdquofarkincardquo szoacute azt akarja jelenteni hogy teacuteves (tehaacutet nem szaacutemjegy) karakter eacuterkezeacutese eseteacuten valami erre utaloacute jelet szeretneacutenk kijelezni Mivel a heacutetszegmenses kijelzőt a 7447-es dekoacuteder hajtja meg tuacutel sok vaacutelasztaacutesi lehetőseacuteguumlnk nincs (laacutesd az IC adatlapja) Iacutegy jelzőkarakternek a 12-es eacuterteacutekhez tartozoacute a b f eacutes g szegmensekből alkotott jelet vaacutelasztottuk vouml [A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese] aacutebra Ezt a folyamataacutebraacuten bdquofarkincaacutenakrdquo nevezzuumlk

153 aacutebra - A [21 feladat] (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

A feladat uacutegy szoacutel hogy a soros porti kommunikaacutecioacutet pollozaacutessal valoacutesiacutetsuk meg Ez csakuacutegy mint a gombok figyeleacutese a [Nyomoacutegombok a panelon] fejezetben a főprogramban toumlrteacutenik eacutes azt jelenti hogy folyamatosan figyeljuumlk az esemeacutenyeket Itt az esemeacuteny karakter eacuterkezeacutese a soros porton keresztuumll Az előző alfejezetben leiacutertak szerint figyelnuumlnk kell hogy mikor aacutell 1-re az RI bit eacutes ennek megtoumlrteacutente utaacuten kuumlldhetuumlnk karaktert (kuumlldhetjuumlk a koumlvetkező karaktert) Mindez termeacuteszetesen az ADuC szemszoumlgeacuteből eacutertendő Az RI bit figyeleacutese a karakter beraacutemolaacutesa a pufferba eacutes a bit toumlrleacutese iacutegy neacutez ki assembly nyelven

JNB RI$MOV ASBUFCLR RI

Az uacutejdonsaacuteg ebben a haacuteromsoros kis reacuteszletben az első utasiacutetaacutes Az olvasoacute maacuter valoacutesziacutenűleg eacuterti hogy ez mit jelent Azt jelenti hogy addig jaacuter helyben a program amiacuteg RI 1 nem lesz Ez a helyben jaacuteraacutes persze bizonyos alkalmazaacutesoknaacutel nem engedhető meg de a [21 feladat] megoldaacutesaacutenaacutel nem jelent semmifeacutele probleacutemaacutet Karakter elkuumlldeacutese a TI bit figyeleacuteseacutevel hasonloacutean toumlrteacutenik csak az előző alfejezetben leiacutert sorrendi elteacutereacutesre kell figyelnuumlnk Előszoumlr megvaacuterjuk amiacuteg TI 1 nem lesz utaacutena mindjaacutert toumlroumlljuumlk is eacutes ez utaacuten helyezzuumlk a kuumlldendő karaktert a pufferba Aztaacuten majd ha elment a karakter akkor lesz TI ismeacutet 1 eacutes akkor kuumlldhetjuumlk a koumlvetkezőt A kuumlldeacutesre hasznaacutelhatoacute haacuterom sor iacutegy fest

JNB TI$CLR TIMOV ASBUF

Ez a keacutet haacuteromsoros ki programreacuteszlet joacutel foumllismerhető lesz a [21 feladat] megoldaacutesaacuteban

A soros porti kommunikaacutecioacutenaacutel oacutehatatlanul előkeruumll az ASCII karakterkeacuteszlet Amikor ugyanis karaktert kuumllduumlnk a soros porton az hallgatoacutelagosan ASCII karakterre vonatkozik Az ASCII koacutedtaacuteblaacutezat toumlrteacuteneteacutenek bemutataacutesa nem e tankoumlnyv feladata de annyit elmondhatunk hogy a betűszoacute az American Standard Code for Information Interchange kifejezeacutesből szaacutermazik ami szoacute szerint azt jelenti hogy Amerikai Szabvaacutenyos Koacuted Informaacutecioacutecsereacutehez de a veacutegeacuten az uumlzenetvaacuteltaacutes szoacute talaacuten szerencseacutesebb lenne Az ASCII koacutedtaacuteblaacutezatoknak toumlbb vaacuteltozatuk leacutetezik van 7-bites eacutes 8-bites verzioacute eacutes meacuteg speciaacutelis vaacuteltozatok is leacuteteznek Ennek elleneacutere a [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebraacuten szereplő a 7-bites vaacuteltozatnak megfelelő taacuteblaacutezat nagyjaacuteboacutel minden szaacutemiacutetoacutegeacutepen ugyanazt jelenti Amennyiben tehaacutet egy rsquo0rsquo karakter eacuterkezik valahonneacutet az ADuC mikrovezeacuterlőre

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

akkor az ASCII koacutedban eacuterkezik ezeacutert hexadecimaacutelisan 30h-t decimaacutelisan 48-at jelent Iacutegy tehaacutet ha a fogadaacutes utaacuten teacutenylegesen azzaacute a szaacutemeacuterteacutekkeacute szeretneacutenk alakiacutetani mint amit a szaacutemjegy (rsquo0rsquo) mutat akkor egyszerűen ki kell vonnunk belőle 48-at (vagy 30h-t) Eacutes keacutesz

154 aacutebra - Az ASCII karakterkeacuteszlet 32-től 126-ig

Az eacuterkezett karakterek intervallumba zaacuteraacutesaacutehoz joacute tudni hogy a rsquo9rsquo-es szaacutemjegy utaacuten az ASCII taacuteblaacutezatban a rsquorsquo karakter koumlvetkezik Iacutegy koumlnnyen tudjuk alkalmazni a [Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedja] fejezetben bemutatott oumltletet Erre a most koumlvetkező programban szuumlkseacuteguumlnk is lesz Annyit meacuteg illik megjegyeznuumlnk hogy a heacutetszegmenses kijelző a P2-es port bitjeiből oumlsszesen neacutegyet fog le Ha a maacutesik neacutegy bitet maacutes ceacutelokra akarjuk foumllhasznaacutelni akkor azokat nem szabad oumlssze-vissza aacutelliacutetgatnunk az esetleges soros porti műveletek soraacuten meg kell őket kiacutemeacutelnuumlnk Az alaacutebbi koacutedban erre uacutegy emleacutekeztetuumlnk hogy logikai művelettel mindig 1-re aacutelliacutetjuk ezeket a biteket Most egyeacutebkeacutent semmi szerepuumlk nem lesz de ha majd igen akkor tudni fogjuk hogy el kell kuumlloumlniacutetenuumlnk őket a heacutetszegmenses kijelzőnek szaacutent informaacutecioacutetoacutel Erre fog utalni a bdquofoumllaacutelliacutetjuk a felső 4 bitetrdquo megjegyzeacutes Az eacuterkező karaktert a program azonnal visszakuumlldi hogy megfelelő kommunikaacutecioacutes feluumllet eseteacuteben azonnal laacutethassuk hogy milyen karakter eacuterkezett az ADuC-nak Az ilyen jellegű visszakuumlldeacutest szoktaacutek ekhoacutezaacutesnak (angolul echo) nevezni

Code30asmbyte DATA 030h A P2-es portra kirakandoacute eacuterteacutek vaacuteltozoacutejaMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV P211111100b A 7447-es IC-neacutel a 12-es koacuted egy kis furcsa jelet produkaacutel Ez jelzi a keacuteszenleacutetetfogadJNB RI$ Karakter eacuterkezeacuteseacutere vaacuterunk Az RI flag ezt

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

jelziMOV ASBUF Kiolvassuk a pufferboacutel az eacuterkezett karaktertCLR RI Toumlroumlljuumlk az RI flag-etJNB TI$ Arra vaacuterunk hogy TI 1 legyen mert ez jelzi ha egy előző karakter teacutenylegesen elmentCLR TI Utaacutena toumlroumlljuumlk TI-tMOV SBUFA Betesszuumlk a pufferba A tartalmaacutetCJNE A0relac1 Ha az eacuterkezett karakter 0 előttrelac1 vagy 9 moumlgoumltt van akkor azJC nemjo eacuterveacutenytelen esetCJNE Arelac2 A 0lt=Alt=9 felteacutetel ekvivalens arelac2 0lt=Alt felteacutetellel 9 utaacuten ASCII-benJNC nemjo joumlnCLR C Toumlroumlljuumlk a C bitet egy kivonaacutes előttSUBB A0 A kivonaacutessal csinaacutelunk az ASCII eacuterteacutekből normaacutelis szaacutemeacuterteacuteketMOV byteA A byte vaacuteltozoacuteba beletesszuumlk a kijelezendő szaacutemeacuterteacuteketORL byte11110000b Foumllaacutelliacutetjuk a felső 4 bitetportMOV P2byte Kitesszuumlk az eacuterteacuteket a P2-es portraJMP fogad Kezdjuumlk előroumll a beolvasaacutestnemjoMOV byte11111100b A 12-es koacuteduacute szaacutemjegyet fogjuk kijelezniJMP port Ugraacutes a kirakaacuteshoz

4 Soros porti kommunikaacutecioacute megszakiacutetaacutessal22 feladat

Jelezzuumlk ki a heacutetszegmenses kijelzőn a PC-ről a soros porton eacuterkező szaacutemjegyeket Teacuteves karakterre valamilyen egyeacuteb jelet jelezzuumlnk ki A soros porti kommunikaacutecioacutet megszakiacutetaacutes veacutegezze [Code31]

Ez a feladat egyetlen reacuteszlettől eltekintve toumlkeacuteletesen megegyezik a [21 feladat]tal Ez a reacuteszlet azonban nagyon is fontos a soros porti kommunikaacutecioacute kezeleacuteseacutenek moacutedjaacuteroacutel van szoacute Az előző alfejezetben ez pollozaacutessal toumlrteacutent azaz a főprogram figyelte hogy eacuterkezett-e ill elment-e karakter Ehhez az RI ill TI bitek eacuterteacuteke nyuacutejtotta a fogoacutedzkodoacutet A helyzet az hogy az az esemeacuteny amikor ezek a bitek hardveresen 1-re billennek megszakiacutetaacutest is ki tud vaacuteltani Fontos hogy mindkeacutet bit eseteacuten Itt most tehaacutet nincs maacutes dolgunk mint engedeacutelyezni a soros portra vonatkozoacute megszakiacutetaacutest majd megfelelően lekezelni a keacutet kritikus bitet RI-t ill TI-t A megszakiacutetaacutesban kisseacute jobban elkuumlloumlnuumll egymaacutestoacutel karakter eacuterkezeacutese eacutes kuumlldeacutese Karakter eacuterkezeacuteseacutet gyakorlatilag ugyanuacutegy kezeljuumlk mint az előző alfejezetben A kuumlldeacutes is hasonloacutean toumlrteacutenik de amikor a TI bit 1-re aacutell akkor is kivaacuteltoacutedik a megszakiacutetaacutes Nos ebben az esetben nem csinaacutelunk semmit visszateacuteruumlnk a megszakiacutetaacutesboacutel eacutes keacutesz A soros porti megszakiacutetaacutes vektora a 0023h ciacutemen talaacutelhatoacute a megszakiacutetaacutes engedeacutelyezeacutese pedig az ES bittel toumlrteacutenik laacutesd [Az IE SFR parameacuteterei] Figyeljuumlk meg hogy milyen roumlvidre zsugorodik a főprogram A 3 időziacutetőszaacutemlaacuteloacute inicializaacutelaacutesaacuten eacutes a megszakiacutetaacutes engedeacutelyezeacuteseacuten kiacutevuumll leacutenyegeacuteben semmi egyebet nem csinaacutel Helyben jaacuter Az olvasoacutet arra biztatjuk hogy figyelmesen hasonliacutetsa oumlssze Code30-at Code31-gyel eacutes figyelje meg hogy hogyan oldja meg a megszakiacutetaacutes mindazt amit előző esetben a főprogram veacutegzett

Code31asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0023h A soros porti megszakiacutetaacutes vektoraJMP UARTORG 0060h A teacutenyleges programkoacuted kezdetebyte DATA 030h A P2-es portra kirakandoacute eacuterteacutek vaacuteltozoacuteja Karakter eacuterkezeacutese vagy elkuumlldeacutese aacuteltal kivaacuteltott megszakiacutetaacutes UARTJB RIfogad Ha karakter eacuterkezeacutese vaacuteltotta ki a megszakiacutetaacutest akkor azt fogadjuk eacutes lekezeljuumlkRETI Ha a maacutesik eset azaz karakter elkuumlldeacutese

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

akkor simaacuten visszateacuteruumlnk a megszakiacutetaacutesboacutelfogadMOV ASBUF Kiolvassuk a pufferboacutel az eacuterkezett karaktertCLR RI Toumlroumlljuumlk az RI flag-etCLR TI Kuumlldeacutes előtt toumlroumlljuumlk TI-tMOV SBUFA Betesszuumlk a pufferba A tartalmaacutetCJNE A0relac1 Ha az eacuterkezett karakter 0 előttrelac1JC nemjo vagy 9 moumlgoumltt van akkor az eacuterveacutenytelenCJNE Arelac2 esetrelac2 A 0lt=Alt=9 felteacutetel ekvivalens aJNC nemjo 0lt=Alt felteacutetellel 9 utaacuten ASCII-ben joumlnCLR C Toumlroumlljuumlk a C bitet egy kivonaacutes előttSUBB A0 A kivonaacutessal csinaacutelunk az ASCII eacuterteacutekből normaacutelis szaacutemeacuterteacuteketMOV byteA A byte vaacuteltozoacuteba beletesszuumlk a kijelezendő szaacutemeacuterteacuteketORL byte11110000b Foumllaacutelliacutetjuk a felső 4 bitetportMOV P2byte Kitesszuumlk az eacuterteacuteket a P2-es portraRETInemjoMOV byte11111100b A 12-es koacuteduacute szaacutemjegyet fogjuk kijelezniJMP port Ugraacutes a kirakaacuteshoz FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV P211111100b A 7447-es IC-neacutel a 12-es koacuted egy kis furcsa jelet produkaacutel Ez jelzi a keacuteszenleacutetetSETB ES A soros porti megszakiacutetaacutes engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesJMP $ Helyben jaacuter a program

5 Koacutedreacuteszletek beeacutepiacuteteacutese sajaacutet programunkbaAz előző keacutet alfejezetben megtaacutergyaltuk a soros port kezeleacuteseacutenek keacutet nagyon fontos moacutedjaacutet Keacutesziacutetsuumlnk most olyan alkalmazaacutest amely a szerencsejaacuteteacutekos teacuteveacuteműsorokban előforduloacutekra hasonliacutet

23 feladat

A heacutetszegmenses kijelzőn fussanak koumlrbe a szaacutemok nagyon gyorsan Az 1 gomb megnyomaacutesaacutera aacutelljon meg a futaacutes a mikrovezeacuterlő pedig kuumlldje el a PC-nek a kijelzőn laacutethatoacute szaacutemot A 2 gomb lenyomaacutesaacutera folytatoacutedjon a szaacutemok futaacutesa a mikrovezeacuterlő pedig kuumlldje a PC-nek a bdquoRunningrdquo szoacutet [Code32]

Mivel a program egeacuteszen egyszerű lesz nem keacutesziacutetuumlnk folyamataacutebraacutet Valoacute igaz csaknem minden eleme előkeruumllt maacuter valamikor a tankoumlnyvben Ami most tanulsaacutegos lesz az az ahogy karakterlaacutencot kuumllduumlnk a soros porton Ehhez fel fogunk hasznaacutelni egy előre megiacutert szubrutinkoumlnyvtaacuterat Ennek neve UARTIOASM A koumlnyvtaacuterban szaacutemos olyan szubrutin talaacutelhatoacute amelyekre sokszor van igeacuteny a soros porti kommunikaacutecioacute soraacuten A szubrutinkoumlnyvtaacuter az ADuC 842-es gyaacuteri CD-jeacuten talaacutelhatoacute Az olvasoacutet ara biztatjuk hogy baacutetran kukkantson bele eacutes neacutezze meg hogy milyen stiacutelusban programoznak profik Mi a szubrutinok koumlzuumll mindoumlsszesen haacutermat fogunk felhasznaacutelni a tankoumlnyvben az ezekkel kapcsolatos tudnivaloacutekat a [A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz] foglalja oumlssze A konkreacutet hasznaacutelatra Code32 mutat peacuteldaacutekat A szubrutinokat tartalmazoacute faacutejlt az

$INCLUDE(UARTIOASM)

fordiacutetoacutei direktiacutevaacuteval csatolhatjuk a sajaacutet koacutedunkhoz

157 taacuteblaacutezat - A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Rutin neve Parameacuteteraacutetadaacutes Megjegyzeacutes

SENDCHAR Akkumulaacutetor Karakter kuumlldeacutese A kuumlldeacutesre szaacutent karaktert a rutin meghiacutevaacutesa előtt helyezzuumlk az akkumulaacutetorba A szubrutin tartalma megegyezik a [Soros porti kommunikaacutecioacute pollozaacutessal] alfejezetben a kuumlldeacutesre alkotott haacuteromsoros reacuteszlettel

GETCHAR Akkumulaacutetor Karakter fogadaacutesa Az eacuterkezett karaktert a rutin meghiacutevaacutesa utaacuten az akkumulaacutetorba keruumll A szubrutin tartalma megegyezik a [Soros porti kommunikaacutecioacute pollozaacutessal] alfejezetben a karakter fogadaacutesaacutera alkotott haacuteromsoros reacuteszlettel

SENDSTRING Adatmutatoacute Karakterlaacutenc kuumlldeacutese A rutin meghiacutevaacutesa előtt toumlltsuumlk az adatmutatoacuteba az elkuumlldeni kiacutevaacutent karakterlaacutenc kezdőciacutemeacutet A karakterlaacutenc veacutegeacutet egy 00h baacutejtnak kell jeleznie

Most neacutezzuumlk meg a koacutedot utaacutena pedig meacuteg majd megmagyaraacutezunk egy-keacutet aproacutesaacutegot

Code32asmORG 0060h A teacutenyleges programkoacuted kezdete

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

but1 BIT P32 Az 1 gomb bitjebut2 BIT P33 A 2 gomb bitjenyom BIT 00h Bitvaacuteltozoacute a gombnyomaacuteshoz Időhuacutezoacute szubrutin amely az 1 gombot is figyeli GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R543cik5MOV R469cik4JNB but1pushed Itt vizsgaacuteljuk meg a gomb bitjeacutet Elugrunk ha le van nyomva a gomb azaz a bit 0DJNZ R4cik4DJNZ R5cik5DJNZ R6cik6RETpushed Ide ugrunk gombnyomaacuteskorSETB nyom Magasra aacutelliacutetjuk a jelzőbitetRET Visszateacutereacutes a szubrutinboacutel FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV DPTRtext A kuumlldeni valoacute karakterlaacutenc ciacuteme azCALL SENDSTRING adatmutatoacuteba keruumll Aztaacuten meghiacutevjuk a kuumlldő szubrutintujraMOV R30 Ciklusvaacuteltozoacute nullaacutezaacutesafutMOV P2R3 Ciklusvaacuteltozoacute eacuterteacuteke a P2-es portra keruumllCLR nyom A rsquonyomrsquo jelzőbit toumlrleacuteseMOV A5 005 s lesz a vaacuterakozaacutesCALL GDELAY Időhuacutezoacute rutin meghiacutevaacutesaJB nyomstop Ha volt gombnyomaacutes megaacutellunkfolytatINC R3 Ciklusvaacuteltozoacute noumlveleacuteseCJNE R310fut 9-ig mehenek a szaacutemjegyek iacutegy 10-zel hasonliacutetjuk oumlssze R3-t az utolsoacute noumlveleacutes utaacutenJMP ujra Kezdjuumlk előroumll a szaacutemlaacutelaacuteststopMOV AR3 R3 eacuterteacuteke az akkumulaacutetorba keruumllADD A0 Hozzaacuteadjuk az ASCII 0 eacuterteacutekeacutetCALL SENDCHAR Elkuumlldjuumlk a PC-nekMOV A13 Kocsi vissza kuumlldeacuteseCALL SENDCHARMOV A10 Soremeleacutes kuumlldeacuteseCALL SENDCHARJB but2$ Vaacuterunk a 2 gombraCALL SENDSTRING Uacutejra elkuumlldjuumlk a karakterlaacutencotJMP folytat Folytatoacutedik a futaacutestext DB Running10130$INCLUDE(UARTIOASM)

Amikor a kijelzett szaacutemjegyet akarjuk ASCII karakter formaacutejaacuteban elkuumlldeni a PC-nek a konkreacutet szaacutemeacuterteacutekhez hozzaacute kell adnunk 32-t hiszen a koacutedtaacuteblaacutezatban a szaacutemjegyek 32-vel kezdődnek (vouml [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebra) Most a fordiacutetottjaacutet veacutegezzuumlk annak mint amikor eacuterkezett szaacutemjegyeket dolgoztunk foumll

A [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebra 32-től 126-ig mutatja az ASCII koacutedokat Tudnunk kell azonban hogy a 32-es eacuterteacutek alatti koacutedok kuumlloumlnfeacutele vezeacuterlőjeleket reprezentaacutelnak Ezeket elsősorban sornyomtatoacutekhoz hasznaacuteltaacutek Nekuumlnk igazaacuteboacutel kettő lesz ezek koumlzuumll kulcsfontossaacuteguacute A 10-es koacuted a New line

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

vagy Line Feed parancs Magyarul uacutej sor vagy soremeleacutes Hataacutesaacutera a kurzor egy sorral lejjebb ugrik amennyiben megfelelő feluumlleten toumlrteacutenik a kommunikaacutecioacute A 13-as koacuted a Carriage Return parancsot jelenti Ez magyarul annyit tesz hogy kocsi vissza Hataacutesa az hogy a kurzor visszaugrik a sor elejeacutere Karakterek fogadaacutesakor a 13-as koacuted jelenti az ENTER billentyűt

Ami meacuteg szokatlan az az adatbaacutejt direktiacuteva (DB) utaacuten beiacutert karakterlaacutenc Laacutethatoacute hogy aposztroacutefok koumlzeacute iacuterhatjuk a szoumlveget amit minden tovaacutebbi neacutelkuumll folytathatunk baacutejtonkeacutent is vesszővel elvaacutelasztva az eacuterteacutekeket A rsquoRunningrsquo szoacutet tehaacutet koumlveti egy soremeleacutes eacutes egy kocsi vissza parancs a 0 pedig a karakterlaacutenc veacutegeacutet jelenti Ebből a 0-boacutel fogja tudni a SENDSTRING rutin hogy veacutege a karakterlaacutencnak

6 Az ADuC vezeacuterleacutese PC-velA tankoumlnyvben maacuter laacutettunk arra egyszerű peacuteldaacutekat hogy hogyan hajthat meg a mikrovezeacuterlő kuumllső aacuteramkoumlroumlket Most olyan alkalmazaacutest keacutesziacutetuumlnk amelyben az asztali szaacutemiacutetoacutegeacutepuumlnkkel vagy laptopunkkal vezeacutereljuumlk az ADuC-ot Az ADuC pedig termeacuteszetesen vezeacuterelheti a kuumllső aacuteramkoumlrt

24 feladat

A heacutetszegmenses kijelzőn leacuteptessuumlk előre ill haacutetra a szaacutemjegyeket Tegyuumlk ezt uacutegy hogy a szaacutemiacutetoacutegeacutep billentyűzeteacuten a + ill ndash gombokat nyomogatjuk Az ENTER billentyű leuumlteacuteseacutere villanjon annyit a kijelzett szaacutem amennyi a sajaacutet eacuterteacuteke [Code33]

A megoldaacutes ismeacutet egeacuteszen egyszerű Beolvasunk egy karaktert a soros portroacutel majd megneacutezzuumlk hogy az a rsquo+rsquo jel vagy rsquondashrsquo jel ASCII koacutedja-e vagy esetleg az ENTER gomb lenyomaacutesaacutenak hataacutesaacutera a 13-as koacuted Ennek alapjaacuten aacutegaztatjuk el a programot a megfelelő helyre A koacutedok eacuterteacutekeacutenek elemzeacuteseacutehez a SUBB utasiacutetaacutest hasznaacuteljuk majd egyezeacutes eseteacuten a JZ hataacutesaacutera toumlrteacutenik az ugraacutes A program ismeacutet a joacute oumlreg DELAY szubrutinunkat igeacutenyli iacutegy azt most sem csatoljuk a koacutedhoz

Code33asmORG 0060h A teacutenyleges programkoacuted kezdetechar DATA 030h Az eacuterkezett karakter vaacuteltozoacuteja FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV R41 R4 a kijelezendő szaacutemjegy vaacuteltozoacutejakijelezMOV P2R4 A szaacutemjegy kijelzeacutesefogadCALL GETCHAR Karakterre vaacuterunkMOV charA Ha + eacuterkezettCLR CSUBB A+JZ plusz ugrunk a noumlveleacuteshezMOV Achar Ha - eacuterkezettCLR CSUBB A-JZ minusz ugrunk a csoumlkkenteacuteshezMOV Achar Ha ENTERT nyomtunk akkorCLR CSUBB A13 13 eacuterkezikJZ enter Ugrunk a villogtataacuteshozJMP fogad Baacutermely maacutes esetben visszaugrunk uacutej karakter fogadaacutesaacutehozpluszCJNE R49novel R4 maacuter 9 Ha nem noumlvelhetjuumlkMOV R41 R4 uacutejra 1 leszJMP kijelez KijelezzuumlknovelINC R4 Noumlveljuumlk R4-etJMP kijelez KijelezzuumlkminuszCJNE R41csokkent R4 maacuter 1 Ha nem csoumlkkentjuumlkMOV R49 R4 uacutejra 9 lesz

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

JMP kijelez KijelezzuumlkcsokkentDEC R4 Csoumlkkentjuumlk R4-etJMP kijelez KijelezzuumlkenterMOV AR4 R4-et aacutetmaacutesoljuk R3-ba A villogaacuteshozMOV R3A R3 lesz a ciklusvaacuteltozoacuteMOV A10 01 s vaacuterakozaacutes lesz a villogaacuteshozvillogMOV P215 Kikapcsoljuk a kijelzőtCALL DELAY VaacuterunkMOV P2R4 Bekapcsoljuk a kijelzőtCALL DELAY VaacuterunkDJNZ R3villog Ciklusvaacuteltozoacute lekezeleacuteseJMP kijelez Ugraacutes vissza a kijelzeacuteshez$INCLUDE(UARTIOASM)

Created by XMLmind XSL-FO Converter

16 fejezet - Iacuteraacutes a memoacuteriaacutebaA [Bitvaacuteltozoacutek hasznaacutelata] eacutes [A teljes alsoacute RAM] alfejezetben maacuter elemeztuumlk az alsoacute RAM beosztaacutesaacutet eacutes műkoumldeacuteseacutet No rendben annak neacutehaacuteny reacuteszleteacutet eacutes sajaacutetossaacutegaacutet Eljoumltt az idő arra hogy megtanuljuk hogy hogyan iacuterhatunk a mikrovezeacuterlő memoacuteriaacutejaacuteba Ez a memoacuteria nyilvaacutenvaloacutean RAM lesz (a flash memoacuteriaacutet ezen a szinten meacuteg nem taacutergyaljuk) iacutegy az is biztos hogy nem a koacutedmemoacuteria Vessuumlnk egy pillantaacutest a memoacuteriateruumlleteket taglaloacute adatlapra ([Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebra)

161 aacutebra - Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese

Az alsoacute RAM-ot (lower RAM) maacuter vizsgaacuteltuk az emliacutetett alfejezetekben Az aacutebraacuten azt laacutetjuk hogy az alsoacute RAM-nak megfelelő kis dobozba odaiacutertaacutek hogy direct or indirect addressing Ez azt jelenti hogy direkt vagy indirekt ciacutemzeacutes Ez nagyon fontos lesz A direkt ciacutemzeacutest maacuter ismerjuumlk hasznaacuteltuk is sokszor Indirekt ciacutemzeacutest is hasznaacuteltunk de az a koacuted-indirekt ciacutemzeacutes volt Amire itt gondolni kell az viszont nem az Sima indirekt ciacutemzeacutesről van szoacute Most fogadjuk el hogy ezt iacutegy hiacutevjaacutek a koumlvetkező alfejezetben megtanuljuk hasznaacutelni Most az a leacutenyeg hogy az alsoacute RAM mind direkt mind indirekt ciacutemzeacutessel eleacuterhető Eacutes emleacutekeztessuumlk magunkat arra is hogy az alsoacute RAM 00h-toacutel 7Fh-ig tart A 80h-toacutel FFh-ig terjedő teruumlletet felső RAM-nak (upper RAM) hiacutevjaacutek Ez teljesen uumlres nyugodtan hasznaacutelhatjuk a sajaacutet baacutejtvaacuteltozoacuteink szaacutemaacutera csak arra figyeljuumlnk hogy a felső RAM kizaacuteroacutelag indirekt ciacutemzeacutessel eacuterhető el A [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten a felső RAM doboza mellett van egy zoumlldes doboz is Ez jelenti a speciaacutelis funkcioacutejuacute regiszterek (SFR-ek) teruumlleteacutet Oda meg azt iacutertaacutek hogy kizaacuteroacutelag direkt ciacutemzeacutes Neacutezzuumlk miről is van itt szoacute A felső RAM eacutes az SFR-ek teruumllete ugyanazt a ciacutemteruumlletet foglalja el Ez a teruumllet 80h-toacutel FFh-ig terjed Az eacuterdekesseacuteg az hogy e keacutet teruumllet bdquoegymaacutes alattrdquo helyezkedik el a memoacuteriaacuteban azonos ciacutemekkel eacutes a processzor eacuteppen azzal tudja megkuumlloumlnboumlztetni a kettőt egymaacutestoacutel hogy egyiket direkt a maacutesikat indirekt ciacutemzeacutessel eacuteri el Ha tehaacutet egy 80h eacutes FFh koumlzoumltti ciacutem szerepel valamely ciacutemzeacutesben akkor az akkor ceacutelozza a felső RAM-ot ha indirekt a ciacutemzeacutes eacutes akkor ceacutelozza valamely SFR-t ha direkt a ciacutemzeacutes Talaacuten most maacuter eacuterthető az uumlgy meacuteg ha elsőre szokatlannak is tűnthellip

A [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten a baracksziacutenű doboz 4 kilobaacutejtos flash-memoacuteriaacutet mutat Ez a memoacuteria az SFR-eken keresztuumll eacuterhető el Ebben a tankoumlnyvben nem taacutergyaljuk A jobb oldali nagyobb saacuterga doboz a belső adatmemoacuteriaacutet szemleacutelteti Ennek meacuterete 2 kilobaacutejt eacutes bdquoveacuteletlenuumllrdquo ehhez is tudnunk kell egy truumlkkoumlt Megfelelő beaacutelliacutetaacutes utaacuten ezt a teruumlletet a processzor bdquouacutegy laacutetjardquo mintha kuumllső adatmemoacuteria lenne eacutes iacutegy eacuteri el Kuumlloumln ciacutemzeacutes tartozik ehhez is ez lesz a kuumllső indirekt Ez akkor is iacutegy van ha

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

kuumllső memoacuteriaacutet egyaacuteltalaacuten nem kapcsoltunk a mikrovezeacuterlőhoumlz Ezt egyeacutebkeacutent megtehetneacutenk eacutes akaacuter 16 megabaacutejtot is meg tudnaacutenk ciacutemezni

A koumlvetkező alfejezetekben adatokat fogunk iacuterni mind az alsoacute RAM-ba mind a felső RAM-ba mind a belső adatmemoacuteriaacuteba Az olvasoacutet mindhaacuteromra megtaniacutetjuk eacutes arra baacutetoriacutetjuk hogy sajaacutet belaacutetaacutesa szerint vaacutelasszon a moacutedszerek koumlzuumll amikor majd oumlnaacutelloacutean keacutesziacutet alkalmazaacutesokat

1 Iacuteraacutes az alsoacute eacutes a felső RAM-baA [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten laacutethatoacute hogy az alsoacute RAM direkt eacutes indirekt moacutedon is ciacutemezhető Most az indirekt ciacutemzeacutest fogjuk vaacutelasztani Az indirekt ciacutemzeacuteshez szuumlkseacuteg lesz egy indexregiszterre ez akaacuter az R0 akaacuter az R1 regiszter lehet Leacutenyeges hogy a toumlbbi R regiszter viszont nem Az alaacutebbiakban előszoumlr is oumlsszeszedjuumlk azokat az utasiacutetaacutesokat melyeket maacutes ciacutemzeacutessel egyeacutebkeacutent maacuter joacutel ismeruumlnk Most viszont indirekt ciacutemzeacutest hasznaacutelunk

ADD ARiADDC ARiSUBB ARiINC RiDEC RiCJNE RidatarelMOV ARiMOV RiAMOV RidataANL ARiORL ARiXRL ARi

Az Ri szimboacutelum pontosan azt jelenti hogy az indirekt ciacutemzeacutesre csak az R0 vagy R1 regisztert hasznaacutelhatjuk (Akkor aacutellna Ri helyett Rn ha az oumlsszes R regiszterrel hasznaacutelhatnaacutenk a ciacutemzeacutest) Ennek a keacutet regiszternek egyetlen baacutejt a meacuterete Ez a baacutejt most egy memoacuteriaciacutemet fog jelenti eacuterteacutekeacutenek megfelelően a 00h-FFh memoacuteriateruumlleten azaz a nullaacutes lapon A fenti utasiacutetaacutesok iacutegy azt a ciacutemet eacuterik el amelyiket a hasznaacutelt regiszter (R0 vagy R1 ) eacuterteacuteke mutat

25 feladat

A mikrovezeacuterlő fogadjon a soros porton keresztuumll legfeljebb 10 szaacutemjegyet eacutes ezeket taacuterolja el A 10 karakter eleacutereacutesekor automatikusan jeleniacutetse meg sorban a 10 karaktert Illegaacutelis karakter (nem szaacutemjegy) eseteacuten speciaacutelis karaktert (farkincaacutet) jeleniacutetsen meg Ha meacuteg nem eacutertuumlk el geacutepeleacuteskor a 10 karaktert de ENTER-t uumltuumlnk akkor is kezdődjoumln meg az addig eltaacuterolt szaacutemjegyek megjeleniacuteteacutese [Code34 Code35 Code36]

A megoldaacutes maacuter nem teljesen elemi iacutegy folyamataacutebraacutet keacutesziacutetuumlnk a vezeacuterelvek alapjaacuten laacutesd [A (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja] aacutebra A folyamataacutebra az aproacute reacuteszleteket most nem tartalmazza Azt szemleacutelteti hogy mi toumlrteacutenik a 10 karakter eleacutereacutesekor ill az ENTER megnyomaacutesakor eacutes akkor ha egyaacuteltalaacuten nem eacuterkezett karakter addig amikor megnyomtaacutek az ENTER-t

162 aacutebra - A [25 feladat] (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

Az ENTER billentyűvel kapcsolatban tartozunk meacuteg egy reacuteszlettel ha a PC-n ENTER-t uumltuumlnk akkor az keacutet koacutedot generaacutel Eacuterkezik egy 13-as koacuted (kocsi vissza) aztaacuten egy 10-es (soremeleacutes) Iacutegy a 13-as eacuteszleleacutese utaacuten el kell nyeletnuumlnk a 10-est azaz ilyenkor meacuteg egy karakter beolvasunk Eacutes termeacuteszetesen semmit nem csinaacutelunk vele Csak nem maradhat ott a pufferban

A koacutedban a char vaacuteltozoacuteban fogjuk az aktuaacutelisan beeacuterkezett karaktert eltaacuterolni A number vaacuteltozoacute azt szaacutemolja hogy haacutenyadik karakterneacutel tartunk Az alsoacute RAM 032h-s memoacuteriaciacutemeacutehez pedig az array szimboacutelumot rendeljuumlk Ehhez uacutej fordiacutetoacutei direktiacutevaacutet tanulunk meg EQU Ez a direktiacuteva az adott ciacutemhez vagy eacuteppen konstanshoz rendeli a megadott szimboacutelumot

array EQU 032h

Az indirekt ciacutemzeacutesekkel ettől a memoacuteriaciacutemtől kezdve fogjuk elmenteni az eacuterkezett legfeljebb 10 karaktert Eacutes lejaacutetszaacuteskor ezzel a ciacutemmel kezdve olvassuk ki őket a memoacuteriaacuteboacutel A koacutedban most sem tuumlntetjuumlk foumll hűseacuteges DELAY szubrutinunkat

Code34asmORG 0060h A teacutenyleges programkoacuted helyechar DATA 030h A beeacuterkező karakter eltaacuterolaacutesaacutera szolgaacuteloacute baacutejtnumber DATA 031h Ennyi darab karakter eacuterkezettarray EQU 032h A menteacutesre hasznaacutelt toumlmb memoacuteriaciacutemeMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud lesznewMOV DPTRmesstart Az indiacutetaacutesi uumlzenet kiiacuteraacutesaCALL SENDSTRINGMOV P215 Erre a koacutedra a kijelzőn semmi sincsMOV R0array R0-ba toumlltjuumlk a memoacuteriatoumlmb kezdeteacutetMOV number0 A karakterek darabszaacutemaacutenak kezdeti eacuterteacuteke

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

fogadCALL GETCHAR Karaktert olvasunk beMOV charA Elmentjuumlk a char vaacuteltozoacutebaCALL SENDCHAR Visszakuumlldjuumlk a PC-nekCLR CSUBB A13 Megneacutezzuumlk hogy ENTER eacuterkezett-e azaz 13JZ enter Ha igen elungrunk lekezelniMOV Achar A-ba tesszuumlk a char-ba ideiglenesen betett a PC-ről eacuterkezett karaktertMOV R0A Indirekt ciacutemzeacutessel a memoacuteriaacuteba mentjuumlkINC number Noumlveljuumlk az elmentett karakterek darabszaacutemaacutetINC R0 Noumlveljuumlk az indirekt ciacutemzeacuteshez hasznaacutelt regiszter eacuterteacutekeacutetMOV Anumber Megneacutezzuumlk eleacutertuumlk-e aCLR CSUBB A10 10 karaktert Ha igenJZ kijelez ugrunk kijelezniJMP fogad Visszaugrunk a koumlvetkező karakter fogadaacutesaacutehozenterCALL GETCHAR ENTER eseteacuten a 13 utaacuten 10 is joumln Ezt kiolvassuk de a tovaacutebbiakban nem csinaacutelunk vele semmitMOV Anumber Amennyiben number eacuterteacuteke 0 azaz egyJZ new karakter sem eacuterkezett visszaugrunk uacutej karaktersort fogadnikijelezMOV DPTRmesrepeat A szaacutemok kijelzeacutese előtti uumlzenetCALL SENDSTRINGMOV R30 Ez a ciklus fogja egyeseacutevel kiolvasni a memoacuteriaacuteboacutel az elmentett karaktereket amiket aztaacuten kirak a kijelzőreMOV R0array R0-ba tesszuumlk a memoacuteriatoumlmb kezdeti ciacutemeacutetdisplayMOV A10 Roumlvid időt vaacuterakozunkCALL DELAYMOV AR0 A-ba tesszuumlk az indirekt ciacutemzeacutessel kiolvasott karaktertCJNE A0relac1 Ha az eltaacuterolt karakter nem 0 eacutes 9 koumlzeacuterelac1 esik akkor farkincaacutet fogunk kijelezniJC illegal megjeleniacuteteacuteskor Eacutes odaugrunkCJNE Arelac2 Az előbbi az Altrsquo0rsquo eset ez meg azrelac2JNC illegal Agtrsquo9rsquo (Agt=rsquorsquo) esetportMOV P2A Kirakjuk a P2-es portra MOV A50 Vaacuterunk kicsit a kijelzeacutes utaacuten 05 s-etCALL DELAYMOV P215 Kikapcsoljuk a kijelzőtMOV A5 Nagyon roumlvid ideig vaacuterunk 005 sCALL DELAYINC R3 Noumlveljuumlk a ciklusvaacuteltozoacutetMOV AR3 Megvizsgaacuteljuk a ciklusvaacuteltozoacutetCJNE Anumbereval R3 lt numberevalJNC new Ha R3 = number akkor visszaugrunk uacutej karaktersorozat beolvasaacutesaacutehozINC R0 Noumlveljuumlk R0-tJMP display Folytatjuk az elmentett szaacutemjegyek kijelzeacuteseacutetillegalMOV A12 A farkincaacutenak nevezett karakter koacutedjaJMP port Ugrunk a teacutenyleges kijelzeacuteshez Adatok (karakterfuumlzeacuterek) messtart DB 101013Enter some characters10130mesrepeat DB 10Watch the display10130$INCLUDE(UARTIOASM)

A fenti koacutedban az alsoacute RAM-ba iacutertunk adatokat Egyetlen sor moacutedosiacutetaacutesaacuteval a felső RAM-ba is iacuterhatunk Ehhez

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

raacuteadaacutesul teacutenylegesen kizaacuteroacutelag indirekt ciacutemzeacutessel feacuterhetuumlnk hozzaacute hiszen ha direkt ciacutemzeacutest hasznaacutelnaacutenk akkor az SFR-eket iacuternaacutenk foumlluumll ami toumlbbnyire azonnal eleacuteg massziacutev programhalaacutelhoz vezetne A megvaacuteltoztatni kiacutevaacutent sor a memoacuteriateruumllet kezdőciacuteme Legyen ez most a felső RAM kezdete azaz 80h

array EQU 080h

Ennyi Semmi toumlbb Ezzel a ciacutemmegadaacutessal az adatok a felső RAM-ba keruumllnek Ezt a vaacuteltozatot a koacutedkoumlnyvtaacuterban a teljesseacuteg kedveacuteeacutert Code35 testesiacuteti meg

2 Iacuteraacutes a belső adatmemoacuteriaacutebaA [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten laacutethatoacute belső adatmemoacuteria hasznaacutelata nem igeacutenyel tuacutel nagy erőfesziacuteteacutest de neacutehaacuteny dolgot meg kell eacutertenuumlnk hozzaacute Ahhoz hogy hasznaacutelni tudjuk 1-re kell aacutelliacutetanunk egy bizonyos bitet egy olyan SFR-ben ami az ADuC 842-es speciaacutelis lehetőseacutegeiről rendelkezik Ez a regiszter a CFG842 Reacuteszletes leiacuteraacutesa megtalaacutelhatoacute a gyaacuteri dokumentumban [1 p 36 Table 13] Ezzel a regiszterrel fontos beaacutelliacutetaacutesokat tehetuumlnk meg a kiterjesztett veremmutatoacuteval a PWM-jelek laacutebaival a DA-aacutetalakiacutetoacute puffereacutevel kuumllső oacuterajel-generaacutetorral az SPI-busszal kapcsolatban eacutes a belső adatmemoacuteria eleacutereacuteseacutevel kapcsolatban Nekuumlnk ebben a tankoumlnyvben kizaacuteroacutelag ez utoacutebbi a fontos Jegyezzuumlk meg hogy az ADuC 842-es belső adatmemoacuteriaacuteja akkor keacutepeződik le a kuumllső memoacuteria alsoacute 2 kilobaacutejtjaacutera ha CFG842 0 bitjeacutet 1-re aacutelliacutetjuk Ellenkező esetben a belső adatmemoacuteriaacutet nem tudjuk eleacuterni Ezt a bitet a maacuter megismert logikai maszkolaacutessal aacutelliacutethatjuk 1-re

ORL CFG84200000001b

A kuumllső adatmemoacuteria eleacutereacuteseacutehez uacutej ciacutemzeacutesmoacutedot kell megtanulnunk Ez a kuumllső indirekt ciacutemzeacutes Az utasiacutetaacutes mnemonikjaacuteban szereplő X betű az External angol szoacutera utal ami kuumllsőt jelent A ciacutemzeacuteshez eacuteppen uacutegy szuumlkseacuteg lesz az adatmutatoacutera mint a koacuted-indirekt ciacutemzeacutesneacutel

MOVX ADPTRMOVX DPTRA

A ciacutemzeacutesnek van egy maacutesik vaacuteltozata is ehhez az utasiacutetaacuteshoz

MOVX ARiMOVX RiA

Ez utoacutebbit viszont csak nagyon ritkaacuten hasznaacuteljaacutek a programozoacutek csak akkor amikor elegendő a ciacutemzeacuteshez az R0 vagy R1 regiszter Egyeacuteb esetekben az adatmutatoacutet hasznaacuteljuk az indirekt moacutedon megadott ciacutem megfogalmazaacutesaacutehoz

A Code34 eacutes Code35 programokban csak neacutehaacuteny vaacuteltoztataacutest kell megtennuumlnk eacutes maacuter műkoumldni is fog a kuumllső indirekt ciacutemzeacutes Ez lesz a Code36 program Az első vaacuteltoztataacutes a CFG842 regiszter 0 bitjeacutenek 1-re aacutelliacutetaacutesa ahogy azt fentebb bemutattuk A maacutesodik hogy a sima R0-val megfogalmazott indirekt ciacutemzeacutes helyett mindig a kuumllső indirekt ciacutemzeacutest hasznaacuteljuk Ehhez persze az adatmutatoacuteba mindig időben be kell toumlltenuumlnk a kuumllső memoacuteriakeacutent eacutertelmezet belső adatmemoacuteria megfelelő ciacutemeacutet ami legyen most naacutelunk mindjaacutert a teruumllet legeleje

MOV DPTR0000h

Ha az adatmutatoacutenak toumlrteacutenő eacuterteacutekadaacutest megtesszuumlk akkor maacuter csak az oumlsszes

MOV AR0

eacutes

MOV R0A

utasiacutetaacutest kell lecsereacutelnuumlnk a koumlvetkezőkre

MOVX ADPTR

eacutes

MOV DPTRA

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

A nagyon keveacutes vaacuteltoztataacutes elleneacutere Code36-ot meacutegis reacuteszletezzuumlk hiszen igen nagy fontossaacuteggal biacuter Az elteacutereacuteseket Code34-hez (eacutes Code35-houmlz) keacutepest saacuterga kiemeleacutessel jeloumlljuumlk

Code36asmORG 0060h A teacutenyleges programkoacuted helyechar DATA 030h A beeacuterkező karakter eltaacuterolaacutesaacutera szolgaacuteloacute baacutejtnumber DATA 031h Ennyi darab karakter eacuterkezettMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszORL CFG84200000001b A belső adatmemoacuteria lekeacutepezeacutese a kuumllső adatmemoacuteria alsoacute reacuteszeacuterenewMOV DPTRmesstart Az indiacutetaacutesi uumlzenet kiiacuteraacutesaCALL SENDSTRINGMOV P215 Erre a koacutedra a kijelzőn semmi sincsMOV DPTR0000h A ciacutem elhelyezeacutese az adatmutatoacutebaMOV R0array R0-ba toumlltjuumlk a memoacuteriatoumlmb kezdeteacutetMOV number0 A karakterek darabszaacutemaacutenak kezdeti eacuterteacutekefogadCALL GETCHAR Karaktert olvasunk beMOV charA Elmentjuumlk a char vaacuteltozoacutebaCALL SENDCHAR Visszakuumlldjuumlk a PC-nekCLR CSUBB A13 Megneacutezzuumlk hogy ENTER eacuterkezett-e azaz 13JZ enter Ha igen elungrunk lekezelniMOV Achar A-ba tesszuumlk a char-ba ideiglenesen betett a PC-ről eacuterkezett karaktertMOVX DPTRA Kuumllső indirekt ciacutemzeacutessel a memoacuteriaacuteba mentjuumlkINC number Noumlveljuumlk az elmentett karakterek darabszaacutemaacutetINC DPTR Noumlveljuumlk a kuumllső indirekt ciacutemzeacuteshez hasznaacutelt adatmutatoacute eacuterteacutekeacutetMOV Anumber Megneacutezzuumlk eleacutertuumlk-e aCLR CSUBB A10 10 karaktert Ha igenJZ kijelez ugrunk kijelezniJMP fogad Visszaugrunk a koumlvetkező karakter fogadaacutesaacutehozenterCALL GETCHAR ENTER eseteacuten a 13 utaacuten 10 is joumln Ezt kiolvassuk de a tovaacutebbiakban nem csinaacutelunk vele semmitMOV Anumber Amennyiben number eacuterteacuteke 0 azaz egyJZ new karakter sem eacuterkezett visszaugrunk uacutej karaktersort fogadnikijelezMOV DPTRmesrepeat A szaacutemok kijelzeacutese előtti uumlzenetCALL SENDSTRINGMOV R30 Ez a ciklus fogja egyeseacutevel kiolvasni a memoacuteriaacuteboacutel az elmentett karaktereket amiket aztaacuten kirak a kijelzőreMOV DPTR0000h DPTR-be tesszuumlk a memoacuteriatoumlmb kezdeti ciacutemeacutetdisplayMOV A10 Roumlvid időt vaacuterakozunkCALL DELAYMOVX ADPTR A-ba tesszuumlk a kuumllső indirekt ciacutemzeacutessel kiolvasott karaktertCJNE A0relac1 Ha az eltaacuterolt karakter nem 0 eacutes 9 koumlzeacuterelac1 esik akkor farkincaacutet fogunk kijelezniJC illegal megjeleniacuteteacuteskor Eacutes odaugrunkCJNE Arelac2 Az előbbi az Altrsquo0rsquo eset ez meg azrelac2JNC illegal Agtrsquo9rsquo (Agt=rsquorsquo) esetportMOV P2A Kirakjuk a P2-es portra MOV A50 Vaacuterunk kicsit a kijelzeacutes utaacuten 05 s-et

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

CALL DELAYMOV P215 Kikapcsoljuk a kijelzőtMOV A5 Nagyon roumlvid ideig vaacuterunk 005 sCALL DELAYINC R3 Noumlveljuumlk a ciklusvaacuteltozoacutetMOV AR3 Megvizsgaacuteljuk a ciklusvaacuteltozoacutetCJNE Anumbereval R3 lt numberevalJNC new Ha R3 = number akkor visszaugrunk uacutej karaktersorozat beolvasaacutesaacutehozINC DPTR Noumlveljuumlk DPTR-tJMP display Folytatjuk az elmentett szaacutemjegyek kijelzeacuteseacutetillegalMOV A12 A farkincaacutenak nevezett karakter koacutedjaJMP port Ugrunk a teacutenyleges kijelzeacuteshez Adatok (karakterfuumlzeacuterek) messtart DB 101013Enter some characters10130mesrepeat DB 10Watch the display10130$INCLUDE(UARTIOASM)

Felhiacutevjuk a figyelmet arra hogy mivel csak 10 karaktert kell elmentenuumlnk most pont lehetne hasznaacutelni a

MOVX ARiMOVX RiA

utasiacutetaacutespaacutert is Ekkor termeacuteszetesen az adatmutatoacute helyett a hasznaacutelt R regiszternek (R0 agy R1) kellene a megfelelő helyen eacuterteacuteket adnunk eacutes azt szintuacutegy a megfelelő helyen noumlvelnuumlnk laacutesd a saacuterga kiemeleacuteseket Code36-ban

Created by XMLmind XSL-FO Converter

17 fejezet - IdőziacutetőkszaacutemlaacuteloacutekA soros porti kommunikaacutecioacuteroacutel szoacuteloacute egyik alfejezetben ([Az UART soros interfeacutesz]) maacuter emliacutetettuumlk hogy az ADuC 842-esben neacutegy időziacutetőszaacutemlaacuteloacute talaacutelhatoacute A 3 sorszaacutemuacutet kifejezetten a soros porti kommunikaacutecioacutehoz tervezteacutek eacutes ennek műkoumldeacuteseacutet ott ismertettuumlk A maacutesik haacuterom időziacutetőszaacutemlaacuteloacute azaz a 0 1 eacutes 2 baacutermilyen olyan feladatra hasznaacutelhatoacute amit a nevuumlk is takar Ha időziacutetőkeacutent uumlzemeltetjuumlk őket akkor egy oacuterajel egy kettyeneacutest jelent (Ennek eacutertelmeacutet keacutesőbb tisztaacutezzuk) Ez az uumlzemmoacuted kivaacuteloacutean alkalmas arra hogy időziacuteteacutest hajtsunk veacutegre ezekkel az eszkoumlzoumlkkel A szaacutemlaacuteloacute uumlzemmoacuted kicsit maacutest jelent Ilyenkor a chip megfelelő laacutebaacuten mutatkozoacute 1-0-aacutetmenet ugratja eggyel a szaacutemlaacuteloacute eacuterteacutekeacutet Ezzel a lehetőseacuteggel azonban e tankoumlnyvben nem foglalkozunk

A tankoumlnyvben a 0 időziacutetőt fogjuk toumlbb peacuteldaacuteban felhasznaacutelni Innentől kezdve tehaacutet nem időziacutetőnekszaacutemlaacuteloacutenak nevezzuumlk hanem csak időziacutetőnek (Az olvasoacutet arra keacuterjuumlk hogy azt se vegye zokon ha neacuteha TIMER 0-t iacuterunk) Az 1 időziacutető egyeacutebkeacutent pontosan uacutegy műkoumldik mint a 0 időziacutető eacutes a 2 sorszaacutemuacute is toumlbb hasonloacutesaacutegot mutat az előzőekkel Annyiban mindhaacuterom megegyezik hogy 16 bit felbontaacutesuacuteak Ez az eacuterteacutek nyilvaacuten keacutet baacutejtot jelent melyek egy-egy SFR-ben talaacutelhatoacutek A 0 időziacutető eseteacuteben ezek a TH0 eacutes TL0 regiszterek A T betű a Timer (időziacutető) szoacuteboacutel szaacutermazik a 0 szaacutemjegy a 0 időziacutetőt jeloumlli A H betű a High azaz felső jelzőt takarja Ez lesz tehaacutet a 16-bites eacuterteacutek felső baacutejtja Az L betű maacuter sejthető moacutedon a Low azaz alsoacute jelzőből szaacutermazik Ez pedig a 16-bites eacuterteacutek alsoacute baacutejtja lesz Mindez akkor igaz ha teacutenylegesen 16-bites uumlzemmoacutedot hasznaacutelunk

A 0 eacutes 1 időziacutetőhoumlz minthogy feleacutepiacuteteacutesuumlkben pontosan megegyeznek toumlbb olyan regiszter tartozik melyek egyik fele az egyik maacutesik fele a maacutesik időziacutetőt konfiguraacutelja Ez a TMOD eacutes TCON regiszter A most koumlvetkező taacuteblaacutezatokban ([A TMOD SFR parameacuteterei] eacutes [A TCON SFR parameacuteterei]) csak a 0 időziacutetőre vonatkozoacute biteket taacutergyaljuk az 1 időziacutetőre vonatkozoacutek leiacuteraacutesa megegyezik ezekkel csak a hivatkozaacutesokat kell kicsereacutelnuumlnk 0-roacutel 1-re

171 taacuteblaacutezat - A TMOD SFR parameacuteterei

TMOD Control and configuration for Timers 0 and 1

A 0 eacutes 1 időziacutető vezeacuterlő- eacutes konfiguraacutecioacutes regisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 Gate Az 1 időziacutető vezeacuterlő- eacutes konfiguraacutecioacutes bitjei Hataacutesuk megegyezik a 0 időziacutetőre az alaacutebbiakban leiacutertakkal

6 CT

5 M1

4 M0

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

3 Gate Ha 0 akkor a 0 időziacutetőt minden esetben engedeacutelyezzuumlk amikor a TR0 vezeacuterlőbitet magasra aacutelliacutetjuk (laacutesd TCON regiszter) Az 1 esetet nem taacutergyaljuk

2 CT Ha 0 akkor időziacutető uumlzemmoacutedot aacutelliacutetunk be A szuumlkseacuteges jelet a belső oacuterajel jelenti Az 1 esetet nem taacutergyaljuk

1 M1 A 0 időziacutető uumlzemmoacutedjaacutenak bitje

0 M0 A 0 időziacutető uumlzemmoacutedjaacutenak bitje

M1 M0 Uumlzemmoacuted

0 0 TH0 8-bites időziacutetőkeacutent uumlzemel TL0 5-bites

előskaacutelaacutezoacutekeacutent tekintendő

0 1 16-bites időziacutető TH0 eacutes TL0 egyuumltt kezelendő

1 0 8-bites uacutejratoumlltős uumlzemmoacuted TH0 eacuterteacuteke mindig

betoumlltődik TL0-ba valahaacutenyszor az tuacutelcsordul

1 1 Nem taacutergyaljuk

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

A TMOD regiszterneacutel a gyaacuteri leiacuteraacutes szerint [1 p 60 Table 28] valoacutejaacuteban van egy aproacute kuumlloumlnbseacuteg a keacutet időziacutető 11-es uumlzemmoacutedjai koumlzoumltt de ezzel az uumlzemmoacuteddal ebben a tankoumlnyvben nem foglalkozunk A toumlbbi reacuteszlet a keacutet időziacutetőre viszont teacutenylegesen toumlkeacuteletesen megegyezik A TCON regiszternek csak 4 bitje vonatkozik az időziacutetőkreszaacutemlaacuteloacutekra A toumlbbi bit eacuterdekes moacutedon a megszakiacutetaacutest kivaacuteltani keacutepes kuumllső esemeacutenyekre vonatkozik Minthogy ezeket taacutergyaltuk a tankoumlnyvben (laacutesd [Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes] alfejezet) a taacuteblaacutezatboacutel sem hagyhatjuk ki a raacutejuk vonatkozoacute tovaacutebbi informaacutecioacutekat Ezeknek birtokaacuteban az olvasoacute tovaacutebb finomiacutethatja a gombnyomaacutesroacutel mint kuumllső esemeacutenyről szerzett tudaacutesaacutet

172 taacuteblaacutezat - A TCON SFR parameacuteterei

TCON TimerCounter 0 and 1 Control Register

A 0 eacutes 1 időziacutetőszaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Leiacuteraacutes

7 TF1 Az 1 időziacutető vezeacuterlő bitjei Hataacutesuk megegyezik a 0 időziacutetőre az alaacutebbiakban leiacutertakkal

6 TR1

5 TF0 A 0 időziacutető tuacutelcsordulaacutesi jelzőbitje Hardveresen aacutell 1-re tuacutelcsordulaacuteskor Hardveresen toumlrlődik ha a programszaacutemlaacuteloacute a megszakiacutetaacutesi rutinra aacutell

4 TR0 A 0 időziacutető futaacutesi vezeacuterlőbitje Ha 1-re aacutelliacutetjuk elindul az időziacutető Ha 0-ra aacutelliacutetjuk megaacutell az időziacutető

3 IE1 Az 1 kuumllső esemeacuteny kezeleacuteseacutenek bitjei Hataacutesuk megegyezik a 0 kuumllső esemeacutenyre

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

az alaacutebbiakban leiacutertakkal

2 IT1

1 IE0 A 0 kuumllső esemeacuteny megszakiacutetaacutesi jelzőbitje Az IT0 bittől fuumlggően hardveresen aacutell 1-re lefutoacute eacutelneacutel vagy nulla jelszintneacutel

0 IT0 A 0 kuumllső esemeacuteny megszakiacutetaacutesaacutenak aktivaacutelaacutesi tiacutepusa Ha 1-et aacutelliacutetunk be 1-0 aacutetmenetre vaacuteltoacutedik ki a megszakiacutetaacutes Ha 0-t aacutelliacutetunk be alacsony jelszintre vaacuteltoacutedik ki megszakiacutetaacutes

Az időziacutetők uacutegy műkoumldnek hogy az oacuterajeleket szaacutemlaacuteloacute regiszterbe vagy regiszterekbe (ez a kivaacutelasztott uumlzemmoacutedtoacutel fuumlgg) betoumlltjuumlk a kezdeti eacuterteacuteket 16-bites uumlzemmoacutednaacutel a keacutet regiszter TH0 eacutes TL0 egyuumltt eacutertelmezendő a kettő egyuumltt egy 16-bites eacuterteacuteket takar Minden egyes oacuterajelre a szaacutemlaacuteloacuteregiszter vagy regiszterek egyuumlttes eacuterteacuteke eggyel nő Amennyiben ez az eacuterteacutek eleacuteri a maximaacutelisan aacutebraacutezolhatoacute eacuterteacuteket majd a koumlvetkező oacuterajelneacutel bdquoaacutetfordulrdquo azaz ismeacutet nulla lesz bekoumlvetkezik a megszakiacutetaacutes Ennek vektora TIMER 0 eseteacuten a 000Bh ciacutem TIMER 1 eseteacuten pedig a 001Bh ciacutem

Megismeacuteteljuumlk az időziacutetők regisztere vagy regiszterei nem lefeleacute hanem eacuteppen hogy foumllfeleacute szaacutemolnak A megszakiacutetaacutes pedig ezek tuacutelcsordulaacutesakor koumlvetkezik be

A [Az IE SFR parameacuteterei]ban megtalaacuteljuk a megszakiacutetaacutesok egy reacuteszeacutenek engedeacutelyezőbitjeacutet Timer 0 eseteacuteben ez az ET0 Timer 1 eseteacuteben pedig az ET1 A 8-bites uumlzemmoacuted nagyon nagy frekvenciaacutejuacute műkoumldeacutest eredmeacutenyezne ezeacutert elsőkeacutent a 16-bites uumlzemmoacuteddal mutatunk be tanulsaacutegos alkalmazaacutesokat

1 Egyszerű időmeacutereacutes az időziacutetővelIdeacutezzuumlk foumll a [14 feladat]ot de tegyuumlnk hozzaacute egy koumlvetelmeacutenyt eacutes adjunk neki uacutej sorszaacutemot is

26 feladat

Az ADuC-panel LED-soraacutenak oumlsszes LED-je villanjon foumll roumlvid ideig minden egyes maacutesodpercben Hasznaacuteljuk ehhez a 0 időziacutetőt [Code37]

A kiacutevaacutenalmakat azeacutert taacutergyaljuk kuumlloumln feladatkeacutent mert teljesen maacutes struktuacuteraacutejuacute megoldaacutest kiacutevaacuten eacutes előremutat egy egeacuteszen kerek alkalmazaacutes iraacutenyaacuteba Ezt a feladatot most a 0 időziacutetővel fogjuk megoldani

Neacutezzuumlk most meg hogy hogyan kell kiszaacutemiacutetanunk a TH0 eacutes TL0 regiszterekbe toumlltendő kezdeti eacuterteacutekeket Azt maacuter tudjuk hogy a keacutet regiszter egyuumlttes 16-bites eacuterteacuteke minden egyes oacuterajel-ciklussal eggyel nő Fontos hogy az eacuterteacutek nő tehaacutet felfeleacute mozdul Keacuterdeacutes tehaacutet hogy mit toumlltsuumlnk a regiszterekbe kezdeti eacuterteacutek gyanaacutent ahhoz

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

hogy mondjuk 001 s teljen el keacutet tuacutelcsordulaacutes koumlzoumltt Ezt kiszaacutemiacutetanunk nem lesz neheacutez

A default beaacutelliacutetaacutes szerint az oacuterajel 2 097 152 Hz Ahhoz hogy 001 s teljen el 20 97152 darab oacuterajel-ciklusnak kell lefutnia Elmeacuteletileg Ez az eacuterteacutek csakis egeacutesz szaacutem lehet iacutegy kerekiacutetsuumlk azt 20 972 darabra Ez hexadecimaacutelisan 51ECh Na most ennyi ciklusnak kell tehaacutet lefutnia a tuacutelcsordulaacutesig Ezek szerint a kezdeti eacuterteacuteknek FFFFh ndash 51ECh = AE13h-nak kell lennie De biztos hogy ennyinek kell lennie Vigyaacutezzunk mert ha FFFFh-roacutel indul a szaacutemlaacuteloacute akkor a tuacutelcsordulaacutesig 1 ciklus meacuteg lefut Eacuteppen ezeacutert a kapott AE13h eacuterteacutekhez 1-et meacuteg hozzaacute kell adnunk (eacutes ha iacutegy szaacutemolunk akkor mindig) iacutegy a veacutegeredmeacuteny AE14h Alsoacute baacutejtkeacutent eacutes felső baacutejtkeacutent ezt iacutegy toumlltjuumlk TIMER 0 regisztereibe

MOV TH00AEhMOV TL0014h

Eacutes indiacutethatjuk a szaacutemlaacuteloacutet Ehhez magasra kell aacutelliacutetanunk a TR0 bitet vouml [A TCON SFR parameacuteterei]

A programban kuumlloumln vaacuteltozoacutet dedikaacutelunk a szaacutezadmaacutesodperceknek (s100) Ennek eacuterteacutekeacutet mindig eggyel noumlveljuumlk amennyiben bekoumlvetkezik egy megszakiacutetaacutes Eacutes minthogy a TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes 001 maacutesodpercenkeacutent koumlvetkezik be ezeacutert helyesen cselekszuumlnk A megszakiacutetaacutesban maacuter csak azt kell figyelnuumlnk hogy a szaacutezadmaacutesodpercek vaacuteltozoacuteja eleacuterte-e maacuter a 99-es eacuterteacuteket Ha igen akkor a koumlvetkező beavatkozaacutes nem a noumlveleacutese lesz hanem lenullaacutezzuk viszont magasra aacutelliacutetunk egy jelzőbitet (mp) amely tehaacutet az egeacutesz maacutesodpercek ugraacutesaacutet jelzi Ezt a jelzőbitet pedig a főprogram fogja figyelni eacutes ha 1-re billen foumllvillantja a LED-sort egy tized maacutesodperc erejeacuteig A megszakiacutetaacutest jelentő programreacuteszneacutel csak arra az egyre kell vigyaacuteznunk nehogy a veacutegrehajtaacutesa 001 s-naacutel hosszabb időt oumlleljen foumll Szerencseacutere ezt meg sem koumlzeliacutetjuumlk Ettől fuumlggetlenuumll a regiszterveacutedelem utaacuten roumlgtoumln azzal folytatjuk a megszakiacutetaacutest lekezelő programreacuteszt hogy megaacutelliacutetjuk az időziacutetőt uacutejra betoumlltjuumlk az időziacuteteacuteshez szuumlkseacuteges eacuterteacutekeket aztaacuten elindiacutetjuk az időziacutetőt Minden maacutessal csakis ez utaacuten toumlrőduumlnk

A most koumlvetkező koacutedban ismeacutet felhasznaacuteljuk eacutes hagyomaacutenyainkhoz hiacuteven most sem tuumlntetjuumlk foumll foumlloumlslegesen a DELAY szubrutinunkat Figyeljuumlk meg hogy a megszakiacutetaacutest lekezelő programreacuteszben most maacuter okvetlenuumll alkalmaznunk kell a koraacutebban megtanult regiszterveacutedelmet hiszen a programreacutesz hasznaacutelja az akkumulaacutetort A veacutedelem most elegendő erre az egy regiszterre hiszen maacutes nincs veszeacutelyben Arra is figyelnuumlnk kell hogy a verembe mentett eacuterteacuteket mindig kivegyuumlk mielőtt visszateacuteruumlnk a megszakiacutetaacutesboacutel

Code37asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 000Bh TIMER0 tuacutelcsordulaacutesaJMP TIMER0 aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetes100 DATA 030h A szaacutezadmaacutesodpercek vaacuteltozoacutejamp BIT 00h A maacutesodpercek ugraacutesaacutenak jelzőbitje A TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes TIMER0PUSH ACC RegiszterveacutedelemCLR TR0 TIMER0 leaacutelliacutetaacutesaMOV TH00AEh Az időziacutető kezdeti eacuterteacutekeinekMOV TL0014h uacutejboacuteli betoumllteacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV As100 Megvizsgaacuteljuk s100 tartalmaacutetCJNE A99novel100 Ha meacuteg nem 99 noumlvelhetjuumlkMOV s1000 Kuumlloumlnben nullaacutezzukSETB mp Eacutes 1-re aacutelliacutetjuk az mp jelzőbitet hiszen eltelt 1 maacutesodpercPOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETInovel100INC s100 Szaacutezadmaacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETI FŐPROGRAM MAINMOV TMOD00000001b TIMER0 16-bites uumlzemmoacutedban műkoumldik

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

MOV TH00AEh Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV TL0014h Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaCLR mp Az mp jelzőbit toumlrleacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesSETB ET0 Timer0 megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV A10 Az időhuacutezaacutes parameacutetere (01 s)lesJNB mp$ Vaacuterunk az mp jelzőbit bebillenteacuteseacutereCLR mp Azonnal toumltoumlljuumlk ha előzőleg bebillentMOV P20 LED-sor bekapcsolaacutesaCALL DELAY VaacuterakozaacutesMOV P20FFh LED-sor kikapcsolaacutesaJMP les Ugraacutes vissza figyelni az mp jelzőbitet

2 Stopperoacutera keacutet fotokapuvalAz előző alfejezetben elemi alkalmazaacutest laacutettunk arra hogy hogyan lehet időmeacuterő szerkezetet csinaacutelni az ADuC 842-esből az egyik időziacutető felhasznaacutelaacutesaacuteval A most koumlvetkező feladat maacuter olyan alkalmazaacutest fogalmaz meg amit bizonyaacutera sok helyen megtalaacutelhatunk a gyakorlatban is Iacutegy lassan-lassan kezdjuumlk elhagyni a tankoumlnyvbe illő de bdquotankoumlnyvszaguacuterdquo feladatokat eacutes veacutegre eleacuterkeztuumlnk egy olyanhoz amelynek maacuter szereacutenyen de meacuternoumlki moacutedon tudunk megfelelni

27 feladat

Keacutesziacutetsuumlnk időmeacuterő eszkoumlzt keacutet fotokapuval Amikor egy objektum aacutethalad az elsőn induljon el a stopper amikor aacutethalad a maacutesodikon aacutelljon meg a stopper A meacutert időt a mikrovezeacuterlő szaacutezadmaacutesodpercre pontosan kuumlldje el a PC-nek A stopper indulaacutesa előtt zoumlld LED vilaacutegiacutetson az aacuteramkoumlri panelon a stopper futaacutesa koumlzben piros Megaacutellaacuteskor ismeacutet zoumlld [Code38]

A [27 feladat] megoldaacutesaacutehoz egyszerű kis aacuteramkoumlr tartozik melynek elemeivel maacuter talaacutelkoztunk Az aacuteramkoumlr a [A (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute A keacutet fotokapu feleacutepiacuteteacutese azonos egyeacutebiraacutent megegyezik a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacuteeacuteval A keacutet LED-et azeacutert koumltjuumlk keacutet sorszaacutemaacuteban erősen elteacuterő laacutebra hogy keacutenyelmesebben elfeacuterjenek a proacutebapanelon A keacutet fototranzisztor vaacuteltozatlanul uacutegy műkoumldik hogy ha nincs semmilyen objektum a feacutenyuacutetban akkor a P20 ill P21 portbiteknek megfelelő laacutebakat foumlldre huacutezzaacutek Mindegyik termeacuteszetesen a neki megfelelőt Amennyiben elzaacuterja valami a feacutenyutat az ott leacutevő fototanzisztor lezaacuter ami azt vonja maga utaacuten hogy a P20 ill P21 portbiteknek megfelelő laacuteb kiuumll a taacutepfeszuumlltseacutegre A portbitek eacuterteacutekeacutet azutaacuten koumlnnyen olvashatjuk szoftveresen

171 aacutebra - A [27 feladat] (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

A koacuted most maacuter hosszuacutenak tűnik de ha jobban megneacutezzuumlk ez főkeacutent a soros porton elkuumlldoumltt jelek eacutes uumlzenetek adatai miatt van iacutegy Vaacuteltozoacutet is joacutecskaacuten toumlbbet hasznaacutelunk mint a koraacutebbi programokban Egy-egy bitvaacuteltozoacutet rendeluumlnk a keacutet LED-hez (green eacutes red) ill a fototranzisztorokra kapcsolt laacutebakhoz (gate1 eacutes gate2) Ezekre toumlbb szoacutet nem is eacuterdemes vesztegetni Sokkal eacuterdekesebb lesz a baacutejtvaacuteltozoacutek szerepe Az időziacutetőnek koumlszoumlnhetően a megszakiacutetaacutes 001 maacutesodpercenkeacutent koumlvetkezik be A szaacutezadmaacutesodperceket az s100 vaacuteltozoacute szaacutemolja Amennyiben ez maacuter eleacuterte a 9-et a koumlvetkező megszakiacutetaacuteskor uacutejra 0-t iacuterunk bele viszont tovaacutebb ugrunk a tizedmaacutesodpercek noumlveleacuteseacutehez Ezeknek s10-ben kumulaacuteloacutedik az eacuterteacuteke Ha az előzőekhez hasonloacutean ez is eleacuteri a 9-es eacuterteacuteket akkor ezt is nullaacutezzuk de tovaacutebb ugrunk a maacutesodpercek noumlveleacuteseacutehez A maacutesodperceket s1 gyűjti Ennek eacuterteacuteke azonban maacuter 59-ig mehet Ha eltelt egy perc akkor bdquonullaacutezoacutedikrdquo a stopperoacuteraacutenk időeacuterteacuteke eacutes uacutegy folytatoacutedik az időmeacutereacutes mintha akkor indult volna el Ennek a kis fogyateacutekossaacutegnak tehaacutet tudataacuteban kell lennuumlnk

A főprogram a soros port eacutes Timer 0 inicializaacutelaacutesa utaacuten bekapcsolja a zoumlld LED-et majd arra vaacuter hogy az első fotokapu bitje (gate1) magasra billenjen Meacuteg egyszer ez akkor koumlvetkezik be ha valamilyen objektum behatol a feacutenyuacutetba Ekkor elindiacutetjuk az időziacutetőt kikapcsoljuk a zoumlld LED-et eacutes bekapcsoljuk helyette a pirosat Ez utaacuten arra fogunk vaacuterni hogy az 1 fotokapun aacutethaladoacute objektum a 2 fotokapun is aacutethaladjon Ekkor megaacutelliacutetjuk az időziacutetőt azaz veacuteget eacuter az idő meacutereacutese Az eltelt idő eacuterteacutekeacutet a programnak maacuter csak aacutet kell alakiacutetania karakterekkeacute eacutes el kell kuumlldenie a PC-nek a koumlvetkező kiacuteseacuterőszoumlveggel eacutes formaacutetumban

Time elapsed 0123 s

A kiacuteseacuterőszoumlveg elkuumlldeacutese nem jelent probleacutemaacutet ilyesmit maacuter csinaacuteltunk a koraacutebbi koacutedokban A szaacutezadmaacutesodpercek ill tizedmaacutesodpercek eacuterteacuteke csak egy-egy baacutejt raacuteadaacutesul ezek szaacutemjegyek iacutegy csak ASCII karakterreacute kell őket alakiacutetunk (hozzaacuteadjuk a rsquo0rsquo karakter ASCII koacutedjaacutet azaz 30h-t) aztaacuten kuumlldhetjuumlk is a PC-nek Ez előtt azonban el kell kuumlldenuumlnk a maacutesodpercek eacuterteacutekeacutet Itt meg kell aacutellnunk egy pillanatra hiszen a maacutesodpercek eacuterteacuteke keacutetjegyű szaacutem is lehet (0-59) A keacutetjegyű szaacutemot keacutet egyjegyű szaacutemra kell bontanunk azaz kuumlloumln kell vaacutelasztanunk a tiacutezeseket eacutes az egyeseket Ehhez megtanulunk egy uacutej utasiacutetaacutest eacutes megtanuljuk annak paacuterjaacutet is

A 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben van keacutet komolyabb aritmetikai utasiacutetaacutes lehetőseacuteg van szorzaacutesra eacutes osztaacutesra is E keacutet utasiacutetaacutes az akkumulaacutetoron kiacutevuumll egy aritmetikai segeacutedregisztert is igeacutenyel ennek neve eacutes jele B A

MUL AB

utasiacutetaacutes megszorozza az akkumulaacutetor eacuterteacutekeacutet a B regiszterbe toumlltoumltt eacuterteacutekkel A mnemonik az angol Multiply Accumulator by B kifejezeacutesből szaacutermazik ami azt jelenti hogy akkumulaacutetor szorzaacutesa B-vel Az eredmeacuteny keacutetbaacutejtos eacuterteacutek lesz Az alsoacute baacutejt az akkumulaacutetorba keruumll a felső baacutejt a B regiszterbe A művelet hataacutessal van

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

toumlbb flag-re is melyek fontos informaacutecioacutet hordozhatnak A tuacutelcsordulaacutest jelző flag (OV laacutesd [A PSW SFR parameacuteterei]) eacuterteacuteke 1 lesz ha a szorzaacutes eredmeacutenye nagyobb mint 255 Kuumlloumlnben OV = 0 A C bit pedig eredmeacutenytől fuumlggetlenuumll mindig toumlrlődik

A szorzaacutes utasiacutetaacutesaacutet a programban most nem hasznaacuteljuk de ceacutelszerű egyuumltt taacutergyalni az osztaacutes műveleteacutevel ezeacutert keruumllt raacute most sor Amit viszont hasznaacutelni fogunk az az osztaacutes művelete

DIV AB

A mnemonik az angol Divide Accumulator by B kifejezeacutesből szaacutermazik ami azt jelenti hogy akkumulaacutetor osztaacutesa B-vel Tehaacutet A az osztandoacute B az osztoacute A művelet elveacutegzeacutese utaacuten a haacutenyados az akkumulaacutetorba a maradeacutek pedig a B regiszterbe keruumll Ha nullaacuteval akarnaacutenk osztani akkor a tuacutelcsordulaacutest jelző bit (OV laacutesd [A PSW SFR parameacuteterei]) 1-re billen kuumlloumlnben 0 marad A C bit eredmeacutenytől fuumlggetlenuumll enneacutel az utasiacutetaacutesaacutenaacutel is mindig toumlrlődik

Teacuterjuumlnk vissza a kiindulaacutesi probleacutemaacutenkhoz azaz bontsuk szaacutemjegyekre a maacutesodpercek eacuterteacutekeacutet (s1 vaacuteltozoacute) Mivel s1 eacuterteacuteke 0 eacutes 59 koumlzoumltt lehet pontosan azt fogjuk kapni amire most vaacutegyunk ha s1-et elosztjuk 10-zel Ekkor a tiacutezesek eacuterteacuteke lesz a haacutenyados eacutes ezt az akkumulaacutetorban talaacuteljuk Az egyesek eacuterteacuteke lesz a maradeacutek ezt pedig a B regiszterben talaacuteljuk Legyen peacuteldaacuteul s1=28 eacutes hajtsuk veacutegre a koumlvetkező utasiacutetaacutessort

MOV As1MOV B10DIV AB

Ennek eredmeacutenyekeacuteppen azt kapjuk hogy A=2 eacutes B=8 Eacutes ezeket az eacuterteacutekeket maacuter eacuteppen uacutegy kuumlldhetjuumlk a PC-nek mint baacutermilyen maacutes szaacutemjegyet A programban a tiacutezesek eacuterteacutekeacutet a tim10 vaacuteltozoacuteba miacuteg az egyesek eacuterteacutekeacutet a tim1 vaacuteltozoacuteba fogjuk elmenteni a keacutesőbbi feldolgozaacutes eacuterdekeacuteben Ezzel az oumlsszes felhasznaacutelt vaacuteltozoacutet ismertettuumlk eacutes a program műkoumldeacuteseacutenek leacutenyegi elemeit is oumlsszefoglaltuk

Code38asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 000Bh TIMER0 tuacutelcsordulaacutesaJMP TIMER0 aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetes100 DATA 030h A szaacutezadmaacutesodpercek vaacuteltozoacutejas10 DATA 031h A tizedmaacutesodpercek vaacuteltozoacutejas1 DATA 032h A maacutesodpercek vaacuteltozoacutejatim10 DATA 033h A kuumlldendő időeacuterteacutek maacutesodperceinek tiacutezeseitim1 DATA 034h A kuumlldendő időeacuterteacutek maacutesodperceinek egyeseigate1 BIT P20 Az első fotokapu bitjegate2 BIT P21 A maacutesodik fotokapu bitjegreen BIT P23 A zoumlld LED bitjered BIT P27 A piros LED bitje A TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes TIMER0PUSH ACC RegiszterveacutedelemCLR TR0 TIMER0 leaacutelliacutetaacutesaMOV TH00AEh Az időziacutető kezdeti eacuterteacutekeinekMOV TL0014h uacutejboacuteli betoumllteacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV As100 Megvizsgaacuteljuk s100 tartalmaacutetCJNE A9novel100 Ha meacuteg nem 9 noumlvelhetjuumlkMOV s1000 Kuumlloumlnben nullaacutezzukJMP tized s100 aacutetfordult Noumlveljuumlk s10-et isnovel100INC s100 Szaacutezadmaacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETItizedMOV As10 Megvizsgaacuteljuk s10 tartalmaacutetCJNE A9novel10 Ha meacuteg nem 9 noumlvelhetjuumlkMOV s100 Kuumlloumlnben nullaacutezzukJMP egesz s10 aacutetfordult Noumlveljuumlk s1-et isnovel10INC s10 Tizedmaacutesodpercek noumlveleacutese

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

POP ACC Akkumulaacutetor visszaveacutetele a verembőlRETIegeszMOV As1 Megvizsgaacuteljuk s1 tartalmaacutetCJNE A59novel1 Ha meacuteg nem 59 noumlvelhetjuumlkMOV s10 Kuumlloumlnben nullaacutezzukPOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETInovel1INC s1 Egeacutesz maacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETI FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV TMOD00000001b TIMER0 16-bites uumlzemmoacutedban műkoumldikMOV TH00AEh Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV TL0014h Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s100 A tizedmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s10 Az egeacutesz maacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesSETB ET0 Timer0 megszakiacutetaacutesaacutenak engedeacutelyezeacuteseCLR green Zoumlld LED bekapuJNB gate1$ Vaacuterunk az 1 fotokapu jeleacutereSETB TR0 Indiacutetjuk az időziacutetőt (stoppert)SETB green Zoumlld LED kiCLR red Piros LED beJNB gate2$ Vaacuterunk a 2 fotokapu jeleacutereCLR TR0 Megaacutelliacutetjuk az időziacutetőt (stoppert)SETB red Piros LED kiCLR green Zoumlld LED ismeacutet beMOV As1 Betoumlltjuumlk A-ba a maacutesodpercek eacuterteacutekeacutetMOV B10 El fogjuk osztani 10-zelDIV AB Az osztaacutes műveleteMOV tim10A Az egeacuteszek (eredmeacuteny) mennek tim10-beMOV tim1B A maradeacutek tim1-beMOV DPTRmes1 A Time elapsed sor elkuumlldeacuteseCALL SENDSTRINGMOV Atim10 Az eltelt maacutesodpercek tiacutezeseinekADD A0 elkuumlldeacutese Ehhez a szaacutemhoz hozzaacuteadjuk aCALL SENDCHAR 0 ASCII karaktert Eacutes keacutesőbb ugyaniacutegyMOV Atim1 Az eltelt maacutesodpercek egyeseinekADD A0 elkuumlldeacuteseCALL SENDCHARMOV A A tizedespont elkuumlldeacuteseCALL SENDCHARMOV As10 A tizedmaacutesodpercek elkuumlldeacuteseADD A0CALL SENDCHARMOV As100 A szaacutezadmaacutesodpercek elkuumlldeacuteseADD A0CALL SENDCHARMOV DPTRmes2 A jelenteacutest lezaacuteroacute karaktersor elkuumlldeacuteseCALL SENDSTRINGMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s100 A tizedmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s10 Az egeacutesz maacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaJMP kapu Joumlhet az uacutej meacutereacutes ADATOK - karakterfuumlzeacuterek ndash stringek mes1 DB Time elapsed 0 mes2 DB s101010130 $INCLUDE(UARTIOASM)

Created by XMLmind XSL-FO Converter

18 fejezet - PWM-jelekAki elektronikaacuteval foglalkozik előbb-utoacutebb talaacutelkozik azzal a betűszoacuteval hogy PWM Ismeacutet angol kifejezeacutes lapul a haacutetteacuterben Pulse Width Modulation jelenteacutese impulzusszeacutelesseacuteg-modulaacutecioacute A fogalom megeacuterteacutese nem igeacutenyel nagy erőfesziacuteteacutest tekintsuumlk a [Neacutegyszoumlgjel] aacutebraacutet Az aacutebraacuten neacutegyszoumlgjel laacutethatoacute A viacutezszintes tengely az időtengely a fuumlggőleges tengely pedig baacutermifeacutele mennyiseacuteget jeloumllhet az elektronikaacuteban azonban a legtoumlbb esetben feszuumlltseacuteg szokott A jeltiacutepust azeacutert hiacutevjuk neacutegyszoumlgjelnek mert ideaacutelis esetben konstans fuumlggveacutenyek darabjaiboacutel eacutepuumll foumll A kapott alakzatokra azt is mondhatnaacutenk hogy teacuteglalapok A magyar terminoloacutegiaacuteban meacutegis a neacutegyszoumlgjel elnevezeacutes honosodott meg A T parameacuteter jeloumlli a neacutegyszoumlgjel perioacutedusidejeacutet Nyilvaacuten ennek reciproka lesz a jel frekvenciaacuteja A τ parameacuteter azt mutatja hogy egy perioacuteduson beluumll mennyi ideig magas a jelszint Termeacuteszetesen 0 le τ le T A haacutenyadost kitoumllteacutesi teacutenyezőnek hiacutevjuk A fentiek alapjaacuten 0 le k le 1

181 aacutebra - Neacutegyszoumlgjel

A neacutegyszoumlgjelnek azt a reacuteszeacutet ami τ ideig van jelen impulzusnak is szoktaacutek hiacutevni Mondhatjuk tehaacutet hogy a τ parameacuteter fuumlggveacutenyeacuteben vaacuteltozik az impulzus hossza vagy szeacutelesseacutege Termeacuteszetesen a jel perioacutedusidejeacutehez keacutepest Ezzel viszont el is eacuterkeztuumlnk az impulzusszeacutelesseacuteg-modulaacutecioacute fogalomhoz Adott neacutegyszoumlgjel előaacutelliacutetaacutesa kibocsaacutetaacutesa tovaacutebbiacutetaacutesa stb soraacuten ugyanis az impulzusok hossza informaacutecioacutet hordozhat Ha tehaacutet a szoacuteban forgoacute neacutegyszoumlgjel kitoumllteacutesi teacutenyezője a tovaacutebbiacutetandoacute informaacutecioacutetoacutel fuumlgg akkor impulzusszeacutelesseacuteg-modulaacutecioacuteroacutel beszeacuteluumlnk

Azt is vilaacutegosan kell laacutetnunk hogy impulzusszeacutelesseacuteg-modulaacutecioacuteval (a tovaacutebbiakban PWM-mel) nem csak informaacutecioacuteaacutetvitelt valoacutesiacutethatunk meg hanem keacutenyelmes moacutedon aacutelliacutethatjuk peacuteldaacuteul egy feszuumlltseacutegforraacutes jeleacutenek effektiacutev eacuterteacutekeacutet amennyiben lehetőseacuteguumlnk van a kimeneteacuten PWM-jel előaacutelliacutetaacutesaacutera Ez azeacutert lesz rendkiacutevuumll iacutegeacuteretes lehetőseacuteg mert nagyon sok rendszerben pusztaacuten a kitoumllteacutesi teacutenyező variaacutelaacutesaacuteval valoacutesiacutethatunk meg jelszintvezeacuterleacutest vagy erre eacutepuumllően tovaacutebbi szabaacutelyozaacutesi leacutepeacuteseket

1 PWM-jel előaacutelliacutetaacutesa a mikrovezeacuterlő jelgeneraacutetoraacutevalAz ADuC 842-es architektuacuteraacuteja alkalmas PWM-jel hardveres előaacutelliacutetaacutesaacutera A PWM-jelgeneraacutetor rendkiacutevuumll rugalmasan illeszkedik a gyakorlati igeacutenyekhez hat uumlzemmoacuted koumlzuumll vaacutelaszthatunk Ezek koumlzuumll raacuteadaacutesul kettő digitaacutelndashanaloacuteg-jelaacutetalakiacutetaacuteshoz hasznaacutelhatoacute foumll A PWM-jelek előaacutelliacutetaacutesaacutehoz oumlt SFR-re lesz szuumlkseacuteguumlnk PWMCON PWM0H PWM0L PWM1H PWM1L A legelsőt kiveacuteve a regiszterek a PWM-jelek digitaacutelis felbontaacutesaacutet frekvenciaacutejaacutet fel- eacutes lefutaacutesi időpillanataacutet hataacuterozzaacutek meg Az uumlzemmoacuted beaacutelliacutetaacutesa a PWMCON regiszterrel toumlrteacutenik laacutesd [A PWMCON SFR parameacuteterei] A PWM-jeleket a mikrovezeacuterlő a P27 eacutes P26 laacutebakon aacutelliacutetja elő ami esetuumlnkben annyit jelent hogy PWM-jelek előaacutelliacutetaacutesaacutenaacutel a panelunk LED-soraacutenak akaacuter keacutet LED-je is eacuterintett Ezt azonban ne baacutenjuk mert legalaacutebb kuumllső aacuteramkoumlr neacutelkuumll is sokszor laacutethatoacute lesz hogy sikeruumllt-e a jel előaacutelliacutetaacutesa (A PWM-jeleket aacutettehetjuumlk a P34 eacutes P33 laacutebakra is a CFG842 SFR 6 bitjeacutenek magasra aacutelliacutetaacutesaacuteval de ebben a tankoumlnyvben nem teszuumlnk ilyet)

181 taacuteblaacutezat - A PWMCON SFR parameacuteterei

PWMCON PWM Control Register

Created by XMLmind XSL-FO Converter

PWM-jelek

A PWM vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 SNGL Kikapcsolja a PWM-generaacutelaacutest a P26 (vagy P34) laacutebon szabadon hagyva a laacutebat egyeacuteb IO-műveletekhez

6 MD2 A PWM-uumlzemmoacuted bitjei

MD2 MD1 MD0 Uumlzemmoacuted

0 0 0 0 moacuted PWM letiltva

0 0 1 1 moacuted Egyetlen vaacuteltoztathatoacute

felbontaacutesuacute PWM-jel P27-en (vagy

P33-on)

0 1 0 2 moacuted 8-bites iker-PWM-jel

0 1 1 3 moacuted 16-bites iker-PWM-jel

1 0 0 4 moacuted Duaacutelis NRZ 16-bites - DAC

1 0 1 5 moacuted Duaacutelis 8-bites PWM-jel

1 1 0 6 moacuted Duaacutelis RZ 16-bites - DAC

1 1 1 Foglalt

5 MD1

4 MD0

Created by XMLmind XSL-FO Converter

PWM-jelek

3 CDIV1 A PWM-generaacutetor oacuterajelosztoacutejaacutenak bitjei

CDIV1 CDIV0 Leiacuteraacutes

0 0 Kivaacutelasztott oacuterajel 1

0 1 Kivaacutelasztott oacuterajel 4

1 0 Kivaacutelasztott oacuterajel 16

1 1 Kivaacutelasztott oacuterajel 64

2 CDIV0

1 CSEL1 A PWM-generaacutetor oacuterajelforraacutesaacutenak bitjei

CSEL1 CSEL0 Leiacuteraacutes

0 0 Kuumllső oacuterajel 15

0 1 Kuumllső oacuterajel

1 0 Kuumllső bemenet P34T0-n

1 1 fvco = 16 777 216 Hz

0 CSEL0

Az 1 uumlzemmoacuted ismerteteacuteseacutehez vaacuteltozatlan formaacuteban vesszuumlk aacutet a szemleacuteltető aacutebraacutet a gyaacuteri leiacuteraacutesboacutel [1 p 43 Figure 48] Tekintsuumlk tehaacutet a [A PWM-generaacutetor 1 uumlzemmoacutedja] aacutebraacutet

182 aacutebra - A PWM-generaacutetor 1 uumlzemmoacutedja

A PWM-generaacutetorhoz tartozik egy szaacutemlaacuteloacute Ezt nevezik az aacutebraacuten PWM Counter-nek Nos amikor ez a

Created by XMLmind XSL-FO Converter

PWM-jelek

szaacutemlaacuteloacute elindul a P27-es laacutebon előaacutelloacute jel magas szintre vaacutelt Amikor a szaacutemlaacuteloacute eleacuteri a PWM0HPWM0L regiszterek aacuteltal meghataacuterozott 16-bitesnek tekintendő eacuterteacuteket akkor a jel alacsony szintre vaacutelt A szaacutemlaacuteloacute viszont ketyeg tovaacutebb Amikor eleacuteri a PWM1HPWM1L regiszterek aacuteltal meghataacuterozott 16-bites eacuterteacuteknek tekintendő eacuterteacuteket akkor fog kezdődni a PWM-jel koumlvetkező perioacutedusa eacutes ekkor a szaacutemlaacuteloacute uacutejraindul nullaacuteroacutel (A regiszterek megnevezeacuteseacuteben szereplő H ill L betűk itt is a felső baacutejt (H) eacutes alsoacute baacutejt (L) elrendezeacutesre utalnak) Az aacutebra alapjaacuten vilaacutegosnak kell lennie hogy a jel frekvenciaacutejaacutet a PWM1HPWM1L regiszterek hataacuterozzaacutek meg miacuteg a PWM0HPWM0L regiszterek eacuterteacuteke a kitoumllteacutesi teacutenyezőeacutert felelős

Az 1 uumlzemmoacuted ismerteteacutese utaacuten fogalmazzunk meg egy a PWM-jelekre vonatkozoacute egyszerű kis feladatot

28 feladat

PWM-jel felhasznaacutelaacutesaacuteval villogtassunk egy LED-et a LED-soron 3 Hz eacutes 6 Hz koumlzoumltti frekvenciaacuteval [Code39]

A frekvenciaacutet azeacutert vaacutelasztottuk ilyen kicsinek a feladatban hogy szabad szemmel is laacutessuk műkoumldeacutes koumlzben a PWM-jelet Az emberi szem tulajdonsaacutegai miatt 50 Hz foumlloumltt maacuter biztosan oumlsszefolyna egyetlen fokozattaacute a LED villoacutedzaacutesa 100 Hz foumlloumltt pedig maacuter akkor se nagyon detektaacutelhatnaacutenk a villoacutedzaacutest ha ide-oda raacuteznaacutenk a panelt

A PWMCON regisztert konfiguraacuteljuk az alaacutebbi moacutedon

MOV PWMCON00011111b

A [A PWMCON SFR parameacuteterei] alapjaacuten ez azt jelenti hogy az 1 uumlzemmoacutedot vaacutelasztjuk (zoumlld jelzeacutes) Mivel igen kis frekvenciaacutet szretneacutenk előaacutelliacutetani alkalmazzuk a lehető legnagyobb oacuterajelosztaacutest azaz 64-et Ezt mutatja a saacuterga jelzeacutes Iacuterjuk elő a sajaacutet belső oacuterajelkristaacutely hasznaacutelataacutet hiszen egyelőre eszuumlnk aacutegaacuteban sem volt kuumllső oacuterajelforraacutesokat csatlakoztatni a panelunkhoz Ez a vaacutelasztaacutes laacutethatoacute a tuumlrkiz mezőben Veacuteguumll meacuteg meg kell jegyeznuumlnk hogy a 7 bit jelen esetben eacuterdektelen hiszen csak egyetlen PWM-jeluumlnk lesz (szuumlrke mező)

A PWM1HPWM1L regiszterpaacuter eacuterteacutekeacutenek vaacutelasszunk valami kellőkeacuteppen nagy eacuterteacuteket legyen mondjuk F000h A PWM0HPWM0L regiszterpaacuter eacuterteacuteke legyen ennek pontosan a fele hogy a kitoumllteacutesi teacutenyezőnk pontosan 05 legyen 7800h

Szaacutemoljuk ki a fenti beaacutelliacutetaacutesaink mellett adoacutedoacute jelfrekvenciaacutet Az oacuterajelkristaacutely frekvenciaacuteja 16 777 216 Hz A szaacutemlaacuteloacute F000h = 61 440-ig kuacuteszik Ezzel az eacuterteacutekkel elosztva az oacuterajelkristaacutely frekvenciaacutejaacutet 27307 Hz-et kapunk Mivel 64-es oacuterajelosztaacutest fogunk beaacutelliacutetani ezt az eacuterteacuteket meacuteg 64-gyel el kell osztanunk A veacutegeredmeacuteny tehaacutet 427 Hz Eacutes ez az eacuterteacutek megfelel a feladat kiacutevaacutenalmainak A koacuted az uacutejdonsaacuteg tehaacutet a PWM hasznaacutelata elleneacutere rendkiacutevuumll roumlvid lesz paacuter sor az egeacutesz Leacutenyeges hogy a PWM-jel elindiacutetaacutesa utaacuten a főprogram olyan feladatot veacutegez amilyent csak akarunk a PWM-jel előaacutelliacutetaacutesa ugyanis teljes egeacuteszeacuteben hardveresen toumlrteacutenik Az alaacutebbi megoldaacutesnaacutel a főprogram feladata tovaacutebbi tennivaloacute hiaacutenyaacuteban a helyben jaacuteraacutes

Code39asmMOV PWM1H0F0h Az 1 uumlzemmoacutedban ez a keacutet baacutejt (alsoacute illMOV PWM1L000h felső) hataacuterozza meg az előaacutelliacutetandoacute PWM- jel frekvenciaacutejaacutet Itt a felső eacutes alsoacute baacutejt egyuumlttes eacuterteacuteke F000h = 61440 Az ADuC magjaacutenak oacuterajele 16 777 216 Hz iacutegy a PWM- jel frekvenciaacuteja 1677721661440 = 27307 Hz lesz (Ezt meacuteg leosztjuk majd hogy szemmel is laacutessunk valamit kuumlloumlnben nem tudunk oumlruumllni)MOV PWM0H078h Ez a keacutet baacutejt (szintuacutegy alsoacute eacutes felső baacutejtMOV PWM0L000h formaacuteban) a PWM-jel kitoumllteacutesi teacutenyezőjeacutet aacutelliacutetja beMOV PWMCON00011111b Ez a PWM-jelek legfontosabb konfiguraacutecioacutes regisztere Magyaraacutezat az eacuterteacutekekhez 7 bit - Az 1 uumlzemmoacutedban eacuterdektelen 6-5-4 bit - Uumlzemmoacuted kivaacutelasztaacutesa Naacutelunk 001 lesz ami az 1 uumlzemmoacutedot definiaacutelja 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa Naacutelunk 11 ami 64-gyel valoacute osztaacutest jelent Iacutegy lesz a PWM-jeluumlnk veacutegső frekvenciaacuteja 427 Hz 1-0 bit - Oacuterajel kivaacutelasztaacutesa Naacutelunk 11

Created by XMLmind XSL-FO Converter

PWM-jelek

ami a mag oacuterajeleacutet jelentiJMP $ Keacutesz Veacutegtelen ciklus

Egy nagyon gyakorlatias kis huacutezaacutes kedveacuteeacutert moacutedosiacutetsuk egy kicsit a [28 feladat]ot

29 feladat

PWM-jel felhasznaacutelaacutesaacuteval villogtassuk az oumlsszes LED-et a LED-soron 3 Hz eacutes 6 Hz koumlzoumltti frekvenciaacuteval [Code40]

E feladat megoldaacutesa a PWM-jel előaacutelliacutetaacutesaacuteig toumlkeacuteletesen megegyezik a [28 feladat]eacuteval A kuumlloumlnbseacuteg az hogy a PWM-jelet az oumlsszes LED-en meg kellene jeleniacutetenuumlnk Ezt uacutegy tesszuumlk hogy egy veacutegtelen ciklusban a P27-es bitet tehaacutet a PWM-jel szintjeit keacutepviselő bitet beraacutemoljuk a Carry bitbe majd ennek eacuterteacuteke alapjaacuten magasra vagy alacsonyra aacutelliacutetjuk az oumlsszes toumlbbi bitet a 2-es porton Tesszuumlk ezt logikai maszkolaacutessal Roumlvidseacutege miatt Code40-et teljes terjedelmeacuteben ismertetjuumlk de a PWM-jel beaacutelliacutetaacutesait most csak nagyon szűkszavuacutean kommentezzuumlk

Code40asmMOV PWM1H0F0h Az 1 uumlzemmoacutedban ez a keacutet baacutejt hataacuterozzaMOV PWM1L000h meg a PWM-jel frekvenciaacutejaacutet F000h = 61440 fvco = 16 777 216 Hz iacutegy a PWM-jel frekvenciaacuteja 1677721661440 = 27307 Hz lesz (Ezt meacuteg leosztjuk majd 64-gyelMOV PWM0H078h Ez a keacutet baacutejt a PWM-jel kitoumllteacutesiMOV PWM0L000h teacutenyezőjeacutet aacutelliacutetja beMOV PWMCON00011111b 6-5-4 bit - 1 uumlzemmoacuted 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa 64-gyel 1-0 bit - A mag oacuterajelebitekMOV CP27 A PWM-jelet keacutepviselő portbit eacuterteacutekeacutenek beraacutemolaacutesa a C bitbeJC magas Ha C=1 ugrunk inteacutezkedniANL P210000000b Ha C=0 toumlroumlljuumlk a P2-es port toumlbbi bitjeacutetJMP bitek Ugraacutes vissza a PWM-jel figyeleacuteseacutehezmagasORL P201111111b A P2-es port toumlbbi bitjeacutenek magasra aacutelliacutetaacutesaJMP bitek Ugraacutes vissza a PWM-jel figyeleacuteseacutehez

2 Pulzaacuteloacute LED-ekLED-ek digitaacutelis meghajtaacutesakor elő lehet olyan hataacutest ideacutezni amit a laikus aki csak azt tudja hogy egy LED vagy be van kapcsolva vagy ki van kapcsolva mindig varaacutezslatnak tart Ez a hataacutes a LED-ek pulzaacutelaacutesa azaz folytonos aacutetmenetűnek tűnő foumllizziacutetaacutesa eacutes elhalvaacutenyiacutetaacutesa Az ilyen eacutes ehhez hasonloacute megoldaacutesokhoz igazaacuten joacutel tudnak joumlnni a PWM-jelek Miről is van szoacute Pillantsunk vissza a [Neacutegyszoumlgjel] aacutebraacutera Ha neacutegyszoumlgjellel hajtunk meg egy LED-et akkor a LED bizonyos ideig be van kapcsolva bizonyos ideig meg ki Kis frekvenciaacutenaacutel a LED nyilvaacuten villogni fog Eacutes a helyzet az hogy nagy frekvenciaacutenaacutel is villogni fog de a szem időbeli felbontaacutesaacutenak korlaacutetai miatt neacutehaacutenyszor 10 Hz-es villogaacutest maacuter nem eacuteszleluumlnk Amit eacuteszleluumlnk az az hogy a LED vilaacutegiacutet de kicsit (vagy sokkal) halvaacutenyabban mintha aacutellandoacute egyenaacuterammal hajtanaacutenk meg 100 Hz koumlruumlli frekvenciaacutet maacuter a perifeacuterikus laacutetaacutesunkkal sem eacuteszleluumlnk bdquoLebukaacutesrdquo ilyenkor meacuteg előfordulhat ha valaki a PWM-jellel meghajtott LED-et tartalmazoacute panelt keacutezbe veszi eacutes joacutel megraacutezza (nem erősen csak gyorsan) akkor a villoacutedzaacutes meacuteg tetten eacuterhető 200 Hz-neacutel maacuter iacutegy sem nagyon Amennyiben tehaacutet adott egy megfelelően nagy frekvenciaacutejuacute neacutegyszoumlgjel akkor a kitoumllteacutesi teacutenyező variaacutelaacutesaacuteval ugyanazokkal a jelszintekkel laacutetszoacutelag kisebb vagy nagyobb feacutenyerősseacuteggel uumlzemeltethetuumlnk LED-eket Ha a kitoumllteacutesi teacutenyező variaacutelaacutesaacutera elegendően nagy felbontaacutest alkalmazunk (30-40 fokozat akaacuter eleacuteg is lehet) akkor a LED feacutenyerősseacutegeacutenek noumlveleacutese eacutes csoumlkkenteacutese folytonosnak fog tűnni Erről az oumltletről szoacutel a koumlvetkező feladatunk

30 feladat

PWM-jel felhasznaacutelaacutesaacuteval folytonosnak tűnő aacutetmenettel izziacutetsuk foumll eacutes halvaacutenyiacutetsuk el az oumlsszes LED-et a LED-soron azaz pulzaacuteljanak a LED-ek [Code41 Code42]

A koraacutebban elmondottak alapjaacuten a feladat megoldaacutesa a PWM-jel kitoumllteacutesi teacutenyezőjeacutenek leacutepeacutesenkeacutenti

Created by XMLmind XSL-FO Converter

PWM-jelek

vaacuteltoztataacutesa Arra azeacutert figyelnuumlnk kell hogy a vaacuteltozaacutes ne ugraacutesszerűnek tűnjoumln Aacutelliacutetsuk be tehaacutet a PWM-jel eacuterteacutekeit uacutegy hogy 32+1 fokozatunk legyen A +1 kuumlloumln feltuumlnteteacutese azeacutert indokolt mert a teljesen kikapcsolt aacutellapot is fokozatnak szaacutemiacutet ahogy azt hamarosan laacutetni fogjuk

Aacutelliacutetsuk be a PWM1HPWM1L regiszterpaacuter eacuterteacutekeacutet 2000h-ra Ez decimaacutelisan 8 192-t jelent iacutegy a jel frekvenciaacuteja 16 777 216 Hz 8 192 = 2 048 Hz lesz mindaddig ameddig tovaacutebbi beaacutelliacutetaacutessal nem osztjuk tovaacutebb Osztoacutenak a vaacuteltozatossaacuteg kedveacuteeacutert vaacutelasszuk most a 16-os eacuterteacuteket iacutegy a teacutenyleges jelfrekvenciaacutenk 2 048 16 = 128 Hz lesz ami egeacuteszen bdquoemberkoumlzelirdquo eacuterteacuteknek mondhatoacute (Tanulni azeacutert lehet belőle mert ezt maacuter a perifeacuterikus laacutetaacutesunkkal sem eacuteszleljuumlk viszont ha megraacutezzuk a panelt akkor a villoacutedzaacutes meacuteg tetten eacuterhető)

A kitoumllteacutesi teacutenyezőt a PWM0HPWM0L regiszterpaacuterral aacutelliacutetjuk be Mi most azt fogjuk tenni hogy a PWM0H regiszter eacuterteacutekeacutet 00h eacutes 20h koumlzoumltt noumlveljuumlk eacutes csoumlkkentjuumlk szisztematikusan Mivel 20h = 32 ezeacutert a kikapcsolt aacutellapottal oumlsszesen 32+1 = 33 fokozatunk lesz Azt azonban ne felejtsuumlk el hogy a panel LED-jei fordiacutetott logikaacuteval műkoumldnek iacutegy a kitoumllteacutesi teacutenyező noumlveleacutese fogja halvaacutenyiacutetani a LED-eket eacutes a csoumlkkenteacutese okoz erősoumldeacutest

Egy dolgot kell meacuteg megoldanunk a P27-es bit eacuterteacutekeacutet szeacutepen aacutet kell maacutesolgatnunk a toumlbbi portbitbe is Ezt megtehetneacutenk uacutegy is mint a [29 feladat]naacutel de kiveacutetelesen vaacutelasszuk a favaacutegoacute megoldaacutest eacutes maacutesolgassuk a P27-es bit eacuterteacutekeacutet egyeseacutevel a toumlbbi portbitbe Ezt uacutegyis egy időhuacutezoacute szubrutinba fogjuk aacutegyazni iacutegy meacuteg joacutel is joumln aacutettekinthető toumllteleacutek gyanaacutent az időhuacutezoacute programreacutesz legbelső ciklusmagjaacutehoz Az időhuacutezoacute szubrutin ciklusainak veacutegrehajtaacutesi szaacutemaacutet most uacutegy hataacuteroztuk meg hogy A=10 meghiacutevaacutessal 001 s a vaacuterakozaacutesi idő Ennek ellenőrzeacuteseacutet az olvasoacutera biacutezzuk A program elejeacuten az EQU fordiacutetoacutei direktiacutevaacutet arra fogjuk hasznaacutelni hogy eacuterteacuteket adjunk egy szimboacutelumnak (wait) Ezt a megoldaacutest azeacutert vaacutelasztottuk hogy amikor vaacuteltoztatni akarunk az időhuacutezaacutes meacuterteacutekeacuten ne kelljen azt toumlbb helyen is aacutetiacuternunk a koacuted uacutejrafordiacutetaacutesa előtt A szubrutint ugyanis a wait szimboacutelum eacuterteacutekeacutevel fogjuk meghiacutevni

MOV AwaitCALL SDELAY

A koacuted meacuteg a most alkalmazott időhuacutezoacute szubrutin feltuumlnteteacuteseacutevel sem lesz hosszuacute

Code41asmMOV PWM1H020h Az 1 uumlzemmoacutedban ez a keacutet baacutejt hataacuterozzaMOV PWM1L000h meg a PWM-jel frekvenciaacutejaacutet 2000h = 8192 fvco = 16 777 216 Hz iacutegy a PWM-jel frekvenciaacuteja 167772168192 = 2048 Hz lesz (Ezt meacuteg leosztjuk majd 16-tal)MOV PWM0H020h Ez a keacutet baacutejt a PWM-jel kitoumllteacutesiMOV PWM0L000h teacutenyezőjeacutet aacutelliacutetja be Mivel a LED-ek fordiacutetott logikaacuteval műkoumldnek ez a kikapcsolt aacutellapotMOV PWMCON00011011b 6-5-4 bit - 1 uumlzemmoacute 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa 16-tal 1-0 bit - A mag oacuterajelesignal1 MOV Await Konstans betoumllteacutese a vaacuterakozaacuteshozCALL SDELAY Vaacuterakozoacute eacutes bitteriacutető szubrutinMOV APWM0H PWM0H vizsgaacutelata koumlvetkezikCJNE A0down Eleacuterte maacuter a 0-tJMP signal2 Ha igen ugrunk a kitoumllteacutesi teacutenyező csoumlkkenteacuteseacutehezdownMOV PWMCON0 PWM-generaacutelaacutes lekapcsolaacutesaDEC PWM0H A kitoumllteacutesi teacutenyező regisztereacutenek csoumlkkenteacuteseMOV PWMCON00011011b PWM-generaacutelaacutes engedeacutelyezeacuteseJMP signal1 A felizziacutetaacutes folytataacutesasignal2MOV Await Konstans betoumllteacutese a vaacuterakozaacuteshozCALL SDELAY Vaacuterakozoacute eacutes bitteriacutető szubrutinMOV APWM0H PWM0H vizsgaacutelata koumlvetkezikCJNE A020hup Eleacuterte maacuter 20h-tJMP signal1 Ha igen ugrunk a kitoumllteacutesi teacutenyező noumlveleacuteseacutehez

Created by XMLmind XSL-FO Converter

PWM-jelek

upMOV PWMCON0 PWM-generaacutelaacutes lekapcsolaacutesaINC PWM0H A kitoumllteacutesi teacutenyező regisztereacutenek noumlveleacuteseMOV PWMCON00011011b PWM-generaacutelaacutes engedeacutelyezeacuteseJMP signal2 A halvaacutenyiacutetaacutes folytataacutesa Szubrutin SDELAY Parameacuteteraacutetadaacutes A Ha A=10 akkor 001 s a vaacuterakozaacutes SDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezik Ha A=10 akkor 001 s a vaacuterakozaacutescik7MOV R6111cik6MOV CP27 A PWM-jel eacuterteacutekeacutenek C-be toumllteacuteseMOV P26C Favaacutegoacute moacutedon szeacutetteriacutetjuumlk a P2-es portMOV P25C oumlsszes toumlbbi bitjeacutenMOV P24CMOV P23CMOV P22CMOV P21CMOV P20CDJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel

A figyelmes olvasoacutenak foumlltűnhet hogy a PWM0H regiszter eacuterteacutekeacutenek noumlveleacutese eacutes csoumlkkenteacutese előtt kikapcsoljuk a PWM-jelet majd utaacutena azonnal uacutejra elindiacutetjuk Erre valoacutejaacuteban nem lenne szuumlkseacuteg viszont az a tapasztalat hogy ha nem iacutegy jaacuterunk el akkor a LED-ek feacutenye a pulzaacutelaacutes koumlzben időnkeacutent bdquoraacutengatrdquo egy kicsit Ennek oka valoacutesziacutenűleg az lehet hogy a kitoumllteacutesi teacutenyező menet koumlzbeni vaacuteltoztataacutesaacuteval a PWM-hez tartozoacute szaacutemlaacuteloacute aloacutel a veacutegeacuterteacutekneacutel bdquokihuacutezzuk a talajtrdquo Hiszen ha meacuteg menne tovaacutebb a szaacutemlaacuteloacute de menet koumlzben csoumlkkentetjuumlk a veacutegeacuterteacuteket akkor keacutenytelen meacuteg egy koumlrt leszaacutemlaacutelni Ha viszont a koacutedban leiacutertakat alkalmazzuk semmi ilyesmi nem tapasztalhatoacute

Ha maacuter ilyen joacutel belejoumlttuumlnk a LED-ek pulzaacuteltataacutesaacuteba csavarjunk meacuteg egyet a dolgon Eacuterjuumlk most el azt hogy amiacuteg a LED-sor egyik fele foumllizzik a maacutesik fele eacuteppen elhalvaacutenyul Eacutes fordiacutetva Enneacutel a vaacuteltozatnaacutel maga a főprogram toumlkeacuteletesen megegyezik a [30 feladat] koacutedjaacuteban szereplő reacutesszel Az elteacutereacutes az időhuacutezoacute szubrutinban lesz Keacutet aproacute reacuteszlet Az egyik az hogy a LED-ek portbitjeinek feleacutere nem a PWM-jel C-bitbe toumlltoumltt eacuterteacutekeacutet tesszuumlk ki hanem annak az inverzeacutet Ez plusz egy utasiacutetaacutest jelent (CPL C) iacutegy az időhuacutezaacutes ciklusainak is moacutedosiacutetanunk kell az ismeacutetleacutesszaacutemaacutet (Az időhuacutezaacutes pontossaacutegaacutenak ellenőrzeacuteseacutet ismeacutet az olvasoacutera biacutezzuk) Mivel a vaacuteltozaacutesok csak az időhuacutezoacute szubrutint eacuterintik a most koumlvetkező vaacuteltozatnaacutel csak ezt ismertetjuumlk A keacutet elteacutereacutest sziacutenessel jeloumlljuumlk

Code42asmSDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezik Ha A=10 akkor 001 s a vaacuterakozaacutescik7MOV R6105cik6MOV CP27 A PWM-jel eacuterteacutekeacutenek C-be toumllteacuteseMOV P26C Favaacutegoacute moacutedon szeacutetteriacutetjuumlk a P2-es portMOV P25C oumlsszes toumlbbi bitjeacutenMOV P24CCPL C A C bit invertaacutelaacutesaMOV P23CMOV P22CMOV P21CMOV P20CDJNZ R6cik6DJNZ R7cik7

Created by XMLmind XSL-FO Converter

PWM-jelek

RET Visszateacutereacutes a szubrutinboacutel

Created by XMLmind XSL-FO Converter

19 fejezet - AD-aacutetalakiacutetaacutesA tankoumlnyvben eddig elemi feladatocskaacutek soraacuten keresztuumll megtanulhattuk hogy hogyan programozunk assemblyben hogyan adhatunk ki vezeacuterlőjeleket kuumllső aacuteramkoumlroumlk szaacutemaacutera hogyan fogadhatunk keacutetaacutellapotuacute kuumllső jeleket eacutes hogy hogyan generaacutelhatunk PWM-jeleket raacuteadaacutesul szinte tetszőleges felbontaacutesuacute eacutes frekvenciaacutejuacute PWM-jeleket melyekkel maacuter fokozatokat is megvaloacutesiacutethatunk Ez idaacuteig rendben is lenne de hiaacutenyzik meacuteg valami Nagyon hiaacutenyzik meacuteg valami Ez pedig kuumllső jelek keacutetaacutellapotuacutetoacutel elteacuterő eacutertelmezeacutese A valoacutesaacutegban ugyanis nem minden binaacuteris hiaacuteba reacutesze a mikrovezeacuterlő digitaacutelis vilaacutegunknak tehaacutet kuumllső jeleket (pl feszuumlltseacuteget) is megfelelő felbontaacutessal kell detektaacutelnunk rengeteg probleacutemaacutenaacutel Az ilyen elektronikai megoldaacutest hiacutevjaacutek analoacutegndashdigitaacutel-aacutetalakiacutetaacutesnak az eszkoumlzt pedig ami ezt meg tudja valoacutesiacutetani analoacutegndashdigitaacutel aacutetalakiacutetoacutenak

1 Az ADuC 842-es AD-aacutetalakiacutetoacutejaAz ADuC 842-es analoacutegndashdigitaacutel-aacutetalakiacutetoacutejaacutenak blokkja gyors 8-csatornaacutes 12 bit felbontaacutesuacute feacuteloldali taacutepellaacutetaacutesuacute (nem kell negatiacutev taacutep is) aacutetalakiacutetaacutest tesz lehetőveacute A profi felhasznaacuteloacutenak meacuteg kalibraacutelaacutesi lehetőseacutege is van Az AD-aacutetalakiacutetoacute a szukcessziacutev approximaacutecioacute elveacuten műkoumldik melynek haacutettere egy AD-aacutetalakiacutetaacutesra valoacute kondenzaacutetor Az aacutetalakiacutetaacutes lehet egyszeri (ez persze ismeacutetelhető) vagy folytonos uumlzemmoacuteduacute a referenciafeszuumlltseacuteg lehet belső vagy kuumllső jel Az AD-aacutetalakiacutetoacute az esetlegesen csatlakoztatott kuumllső memoacuteria eleacutereacuteseacuteben is szerepet jaacutetszik Az ADuC 842-es AD-aacutetalakiacutetoacuteja gyaacuterilag kalibraacutelt bekapcsolaacuteskor a kalibraacutecioacutes konstansok betoumlltődnek hogy optimaacutelis műkoumldeacutes legyen biztosiacutethatoacute

Az AD-aacutetalakiacutetoacute belső referenciafeszuumlltseacutege 25 V iacutegy a 12-bites felbontaacutessal (212 = 4 096) 061 mV pontossaacuteg eacuterhető el (25 4 095 = 061) Ez nagyon sok alkalmazaacutesnaacutel elegendő A digitalizaacutelt feszuumlltseacutegeacuterteacutekek ismeacutet csak egy kettős regiszterben eacuterhetők el (ADCDATAHADCDATAL) de figyeljuumlnk ara hogy az ADCDATAH regiszter felső 4 bitje csatornaazonosiacutetaacutesra szolgaacutel Ezt szemleacutelteti az alaacutebbi aacutebra

191 aacutebra - Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei

Az AD-aacutetalakiacutetaacuteshoz haacuterom konfiguraacutecioacutes regiszter tartozik ADCCON1 ADCCON2 eacutes ADCCON3 Ez utoacutebbi kizaacuteroacutelag a konverter kalibraacutecioacutejaacutenaacutel kap szerepet iacutegy ennek taacutergyalaacutesaacutetoacutel eltekintuumlnk mert a tankoumlnyvben csak neacutehaacuteny elemei megoldaacutest taacutergyalunk A keacutet maacutesik regiszter leiacuteraacutesaacutet a [Az ADCCON1 SFR parameacuteterei] eacutes a [Az ADCCON2 SFR parameacuteterei] tartalmazza

191 taacuteblaacutezat - Az ADCCON1 SFR parameacuteterei

ADCCON1 AD Conversion Control Register

Az AD-aacutetalakiacutetaacutes vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 40h = 0100 0000 b

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 MD1 1 ndash bekapcsoljuk

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

az AD-aacutetalakiacutetoacutet 0 ndash kikapcsoljuk az AD-aacutetalakiacutetoacutet

6 EXT_REF 1 ndash kuumllső referencia hasznaacutelata 0 ndash a belső referencia hasznaacutelata Nem taacutergyaljuk

5 CK1 Az oacuterajel osztoacuteeacuterteacutekeacutenek bitjei az AD-aacutetalakiacutetaacutes sajaacutet oacuterajeleacutehez Az AD-aacutetalakiacutetoacute hibamentes műkoumldeacuteseacutehez 838 MHz-es vagy annaacutel kisebb oacuterajel szuumlkseacuteges A tipikus AD-aacutetalakiacutetaacutes 16 AD-aacutetalakiacutetaacutesi oacuterajelet koumlvetel plusz a kivaacutelasztott adateleacutereacutesi idő Az osztaacutesi araacutenyt az alaacutebbiak koumlzuumll vaacutelaszthatjuk

CK1 CK0 Oacuterajelosztoacute

0 0 32

0 1 4 (Ne hasznaacuteljuk akkor ha az oacuterajel CD

osztoacutebitje 0)

1 0 8

1 1 2

4 CK0

3 AQ1 Az adateleacutereacutesi bitekkel

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

kivaacutelaszthatjuk azt az időt amely rendelkezeacutesre fog aacutellni a bemeneti koumlvető- eacutes tartoacuteerősiacutető szaacutemaacutera hogy lekeacuterdezze a bemeneti jelet Az adateleacutereacuteshez 3 vagy toumlbb AD-aacutetalakiacutetaacutesi oacuterajel javasolt

AQ1 AQ0 AD-aacutetalakiacutetaacutesi oacuterajelek szaacutema

0 0 1

0 1 2

1 0 3

1 1 4

2 AQ0

1 T2C Timer 2 hasznaacutelata Nem taacutergyaljuk

0 EXC Kuumllső triggerjel hasznaacutelata Nem taacutergyaljuk

192 taacuteblaacutezat - Az ADCCON2 SFR parameacuteterei

ADCCON2 AD Conversion Control Register 2

Az AD-aacutetalakiacutetaacutes 2 vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Leiacuteraacutes

7 ADCI Az AD-aacutetalakiacutetaacutes megszakiacutetaacutesaacutenak bitje

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

Aacutetalakiacutetaacutesi ciklus veacutegezteacutevel 1-re aacutell Ha a program megszakiacutetaacutesi rutinra ugrik a sajaacutet megszakiacutetaacutesi vektoraacuten keresztuumll hardveresen toumlrlődik Kuumlloumlnben a felhasznaacuteloacutenak kell toumlroumllnie

6 DMA A DMA-moacuted engedeacutelyezőbitje Nem taacutergyaljuk

5 CCONV A folytonos uumlzemmoacuted bitje 1-re aacutelliacutetva folyamatos AD-aacutetalakiacutetaacutes toumlrteacutenik azaz uacutej aacutetalakiacutetaacutesi ciklus indul az előző veacutegezteacutevel

4 SCONV Az egyszeri aacutetalakiacutetaacutes bitje Egyetlen aacutetalakiacutetaacutesi ciklus toumlrteacutenik eacutes annak veacutegeacuten a bit automatikusan 0-ra vaacutelt

3 CS3 Csatornakivaacutelasztoacute bitek

CS3 CS2 CS1 CS0 Csatorna szaacutemaegyeacuteb megjegyzeacutes

0 0 0 0 0

0 0 0 1 1

0 0 1 0 2

0 0 1 1 3

0 1 0 0 4

0 1 0 1 5

0 1 1 0 6

0 1 1 1 7

1 0 0 0 Hőmeacuterseacutekletmonitorozaacutes Nem

taacutergyaljuk

1 0 0 1 DAC0 Nem taacutergyaljuk

1 0 1 0 DAC1 Nem

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

taacutergyaljuk

1 0 1 1 AGND Nem taacutergyaljuk

1 1 0 0 VREF Nem taacutergyaljuk

1 1 1 1 DMA STOP Nem taacutergyaljuk

A toumlbbi kombinaacutecioacute foglalt

2 CS2

1 CS1

0 CS0

2 Egyszerű AD-aacutetalakiacutetaacutesEbben az alfejezetben AD-aacutetalakiacutetaacutest veacutegzuumlnk tetszőleges feszuumlltseacutegforraacuteson egyszeri aacutetalakiacutetaacutesi ciklusokat hasznaacutelva Nagyon leacutenyeges hogy az aacutetalakiacutetandoacute feszuumlltseacuteg ne legyen nagyobb +25 V-naacutel Erről egyeacutebkeacutent mindig a felhasznaacuteloacutenak kell gondoskodnia iacutegy ha sajaacutet alkalmazaacutest eacutes aacuteramkoumlrt keacutesziacutetuumlnk nagyon-nagyon figyeljuumlnk erre a szabaacutelyra eacutes ennek megfelelően tervezzuumlk aacuteramkoumlreinket Az ADuC 842-es chip egyeacutebkeacutent akkor sem megy toumlnkre ha kicsivel tuacutelleacutepjuumlk a +25 V feszuumlltseacutegkorlaacutetot kezdeni azonban a korlaacutetot meghaladoacute eacuterteacutekkel uacutegysem tudunk semmit mert ekkor az aacutetalakiacutetott eacuterteacutek maacuter reacuteg eleacuterte a maximumot A feszuumlltseacutegforraacutes polaritaacutesa meacuteg keacutenyesebb uumlgy ha azt veacuteletlenuumll foumllcsereacuteljuumlk amikor raacutekapcsoljuk az AD-aacutetalakiacutetoacute bemeneteacutere a feszuumlltseacuteget akkor bizony felszaacutell a meacuterőfuumlsthellip A [Az AD-aacutetalakiacutetaacutes szabaacutelyai] aacutebra az AD-aacutetalakiacutetaacuteshoz tartozoacute szabaacutelyokat ismeacutetli meg nagy betűkkel sziacutenesbenhellip

192 aacutebra - Az AD-aacutetalakiacutetaacutes szabaacutelyai

Mindezek utaacuten maacuter nekiveselkedhetuumlnk első AD-aacutetalakiacutetoacute alkalmazaacutesunknak

31 feladat

Meacuterjuumlnk feszuumlltseacuteget a mikrovezeacuterlővel a 0 V - +25 V tartomaacutenyban eacutes a meacutert eacuterteacuteket kuumlldjuumlk el a soros porton a PC-nek de az AD-aacutetalakiacutetoacutenak csak a legeacuterteacutekesebb 8 bitjeacutet hasznaacuteljuk [Code43]

Előszoumlr is gondoljuk veacutegig mit jelent az hogy az AD-aacutetalakiacutetoacute legeacuterteacutekesebb 8 bitje A [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei] aacutebra mutatja hogy mely regiszterekben eacutes azokon beluumll hol talaacuteljuk a digitalizaacutelt jelszint 12 bitjeacutet Nekuumlnk most a 8 legeacuterteacutekesebb kell azaz az alsoacute neacutegyet kihajiacutetjuk Kezdeti proacutebaacutelkozaacutesnak ez is bőven megfelel hiszen a felbontaacutesunk meacuteg iacutegy is 00098 V lesz A leacutenyeg az hogy a

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

szuumlkseacuteges bitjeink fele az ADCDATAH maacutesik fele az ADCDATAL regiszterben lapul A [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei] aacutebra mutatja hogy mely bitekre van szuumlkseacuteguumlnk

193 aacutebra - Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei

A keacutet regiszterből a 8 szuumlkseacuteges bit kihalaacuteszaacutesa egyszerűbb lesz mint gondolnaacutenk A 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben van egy erre igen alkalmas utasiacutetaacutes

SWAP A

Az utasiacutetaacutes egyszerűen felcsereacuteli az akkumulaacutetor keacutet feacutelbaacutejtjaacutet Maga a mnemonik iacutegy ahogy van toumlrteacutenetesen eacutertelmes szoacute angolul azt jelenti hogy kicsereacutel megcsereacutel Ha tehaacutet az akkumulaacutetor eacuterteacuteke mondjuk A=10010110 akkor a SWAP A utasiacutetaacutes veacutegrehajtaacutesa utaacuten A=01101001 aacutell elő Ennek ismereteacuteben azt fogjuk tenni hogy betoumlltjuumlk az akkumulaacutetorba az ADCDATAH regiszter tartalmaacutet lenullaacutezzuk annak felső neacutegy bitjeacutet megcsereacuteljuumlk a keacutet feacutelbaacutejtot majd a kapott eacuterteacuteket elmentjuumlk egy vaacuteltozoacuteba (voltage) Iacutegy a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 4 bitje (11-8) a helyeacutere keruumllt Ez utaacuten betoumlltjuumlk az akkumulaacutetorba az ADCDATAL regiszter tartalmaacutet kitoumlroumlljuumlk annak alsoacute neacutegy bitjeacutet megcsereacuteljuumlk a keacutet feacutelbaacutejtot majd a kapott eacuterteacutekhez hozzaacuteadjuk voltage tartalmaacutet eacutes maacuter elő is aacutellt az az eacuterteacutek amely helyieacuterteacutek szerint helyes sorrendben tartalmazza a digitalizaacutelt feszuumlltseacutegeacuterteacutek 11-4 bitjeacutet azaz a 8 legeacuterteacutekesebbet Eacutes ezt az eacuterteacuteket maacuter elmenthetjuumlk akaacuter vissza a voltage vaacuteltozoacuteba Mindez assembly nyelven iacutegy fest

MOV AADCDATAHANL A00001111bSWAP AMOV voltageAMOV AADCDATALANL A11110000bSWAP AADD AvoltageMOV voltageA

Ezek utaacuten tehaacutet megkaparintottuk a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfontosabb 8 bitjeacutet ami termeacuteszetesen vaacuteltozatlanul 0 V eacutes +25 V koumlzoumltti jelszintet reprezentaacutel csak kisebb felbontaacutessal annaacutel mintha 12 bituumlnk lenne Az a helyzet hogy a +25 V maximaacutelis feszuumlltseacutegszinttel egeacuteszen nagy szerencseacutenk van Egy 8 biten aacutebraacutezolt binaacuteris szaacutem legnagyobb eacuterteacuteke ugyanis 255 ami majdnem a szaacutezszorosa 25-nek Iacutegy nem koumlvetuumlnk el tuacutel nagy hibaacutet ha a feszuumlltseacutegszint gyanaacutent kapott 8-bites szaacutemot egyszerűen elosztjuk 100-zal eacutes azt tekintjuumlk a bdquomeacutertrdquo feszuumlltseacutegeacuterteacuteknek termeacuteszetesen voltban kifejezve A hiba amit elkoumlvetuumlnk 1ndash250255 = 00196 lt 2 ami sok alkalmazaacutesnaacutel meacuteg mindig bőven megfelelő (Mindez persze akkor igaz ha a mikrovezeacuterlő gyaacuteri kalibraacutecioacuteja megfelelően pontos)

Az egybaacutejtos eacuterteacutek elosztaacutesa 100-zal eacutes az eacuterteacutek tizedes jegyeinek elkuumlloumlniacuteteacutese nem nagy műveacuteszet Felhasznaacuteljuk a maacuter ismert DIV AB osztoacute utasiacutetaacutest meacuteghozzaacute sorozatban Előszoumlr is elosztjuk a voltage vaacuteltozoacutenk eacuterteacutekeacutet 100-zal Ekkor A-ban maacuteris előaacutell a szaacutezasok eacuterteacuteke A maradeacutek ugyebaacuter B-ben lesz Ezt aacutettesszuumlk A-ba majd elosztjuk 10-zel Ez utaacuten A-ban a tiacutezesek eacuterteacutekeacutet kapjuk meg B-ben pedig az egyesek maradnak Eacutes ennyi az egeacutesz A szaacutezasok tiacutezesek eacutes egyesek eacuterteacutekeacutet el kell mentenuumlnk egy-egy vaacuteltozoacuteba (value100 value10 eacutes value1) hiszen azokat el kell majd kuumlldenuumlnk a PC-nek A szaacutemeacuterteacutekeket termeacuteszetesen ASCII szaacutemjegy-karakterekkeacute kell majd alakiacutetanunk Eacutes azt se felejtsuumlk el hogy a szaacutezasok szaacutemjegye utaacuten kuumlldenuumlnk kell egy pontot is (rsquorsquo) hogy szeacutep legyen a formaacutetumunk Az egyesek utaacuten pedig meacuteg azt kuumlldjuumlk el hogy rsquo Vrsquo Az AD-aacutetalakiacutetaacutest a [31 feladat] megoldaacutesaacutenaacutel egyszeres uumlzemmoacutedban fogjuk hasznaacutelni az oacuterajelosztoacutet eacutes az adateleacutereacutesi időt pedig a lehető legnagyobbra vesszuumlk hiszen jelen esetben semmi sem suumlrgőshellip A kivaacutelasztott AD-csatorna a nullaacutes lesz Arra nagyon figyeljuumlnk hogy a panelon mely tuumlskeacuteket kell hasznaacutelnunk Hogy veacuteletlenuumll se nyuacuteljunk melleacute a [A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is)] aacutebraacutet szaacutenjuk uacutetmutatoacutenak

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

194 aacutebra - A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is)

Az AD-aacutetalakiacutetaacutesnaacutel az SCONV indiacutetoacutebitet fogjuk hasznaacutelni (laacutesd [Az ADCCON2 SFR parameacuteterei]) Ennek 1-re aacutelliacutetaacutesaacutenaacutel elindul az AD-aacutetalakiacutetaacutes eacutes ez a bit csak akkor vaacutelt vissza 0-ra ha az aacutetalakiacutetaacutesi ciklus veacuteget eacutert Iacutegy koumlnnyedeacuten tudunk erre vaacuterakozni a programban

SETB SCONVJB SCONV$

Ha a program ezen a keacutet soron (a koacutedban sziacutenessel kiemeljuumlk) tuacuteljut vidaacuteman kibaacutenyaacuteszhatjuk a digitalizaacutelt feszuumlltseacutegeacuterteacuteket az ADCDATAH eacutes ADCDATAL regiszterekből

A koacuted a soros porti kommunikaacutecioacute miatt nem nevezhető roumlvidnek de semmi csavar vagy bravuacuteros truumlkk sincsen benne A joacute oumlreg DELAY szubrutinunkat most sem tuumlntetjuumlk foumll A soros porti kommunikaacutecioacute

Code43asmvoltage DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejavalue100 DATA 031h A szaacutezasok eacuterteacutekedarabszaacutemavalue10 DATA 032h A tizesek eacuterteacutekedarabszaacutemavalue1 DATA 033h Az egyesek eacuterteacutekedarabszaacutemaMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutet az ADCCON1 regiszterrel Magyaraacutezat 7 bit 1 bekapcsoljuk az aacutetalakiacutetoacutet 6 bit 0 nem hasznaacutelunk kuumllső referenciaacutet 5-4 bit 00 a legnagyobb oacuterajel-osztoacutet hasznaacuteljuk (32) hogy biztosan legyen eleacuteg idő az aacutetalakiacutetaacutesra 3-2 bit 11 a lehető legtoumlbb időt hagyjuk az adatgyűjteacuteshez is 1-2 bit 00 nem hasznaacuteljuk a tovaacutebbi funkcioacutekatnextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutes Addig tehaacutet vaacuterakozunkMOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageA Elmentjuumlk az eddigi aacutellaacutestMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-etADD Avoltage Ehhez pedig csak hozzaacute kell adni voltage tartalmaacutet eacutes keacuteszen is vagyunkMOV voltageA Itt maacuter a kiacutevaacutent baacutejtot mentjuumlk elMOV Avoltage Elosztjuk a feszuumlltseacutegeacuterteacuteketMOV B100 100-zal Iacutegy előaacutell a szaacutezasokDIV AB szaacutemaMOV value100A Elmentjuumlk a szaacutezasokat

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

MOV AB A-ba tesszuumlk a 100-zal valoacute osztaacutes maradeacutekaacutetMOV B10 Most 10-zel osztunkDIV ABMOV value10A A-ban az eredmeacuteny azaz a tiacutezesek szaacutemaMOV value1B B-ben a maradeacutek azaz az egyesek szaacutemaMOV Avalue100 Elkuumlldjuumlk a PC-nek a szaacutezasokatADD A030h de ASCII karakterkeacutentCALL SENDCHARMOV A Megy utaacutena a tizedespontCALL SENDCHARMOV Avalue10 Aztaacuten a tiacutezesekADD A030hCALL SENDCHARMOV Avalue1 Aztaacuten az egyesekADD A030hCALL SENDCHARMOV DPTRfarok A kuumlldeni kiacutevaacutent szoumlvegreacutesz veacutegeacutenekCALL SENDSTRING elkuumlldeacutese karakterlaacutenckeacutentMOV A100 1 maacutesodpercig vaacuterakozunk hogy neCALL DELAY oumlmoumlljoumln a PC-nek tuacutel gyorsan a meacutert eacuterteacutekek sorozataJMP next Ugrunk vissza a koumlvetkező meacutereacuteshez A karakterlaacutenc veacutege farok DB V10130$INCLUDE(UARTIOASM)

A program műkoumldeacuteseacutet most nem videoacuteval hanem kicsit elteacuterő esettanulmaacutennyal mutatjuk be A [Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel] aacutebraacuten laacutethatoacute moacutedon ceruzaelemek feszuumlltseacutegeacutet meacuteregettuumlk mert az garantaacuteltan nem leacutepi tuacutel a +25 V-ot Keacutet ceruzaelemuumlnk volt digitaacutelis multimeacuteterrel meacuterve egyiknek 135 V maacutesiknak 083 V volt az uumlresjaacuteraacutesi feszuumlltseacutege A mikrovezeacuterlővel veacutegzett meacutereacutesek sorozata a [Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek] aacutebraacuten laacutethatoacute A pirossal bekeretezett adatok a keacutet ceruzaelemre vonatkoznak Laacutethatoacute hogy az elteacutereacutesek csak 2 koumlruumlliek ami pont oumlsszhangban van a tizedes toumlrt előaacutelliacutetaacutesakor kapott szisztematikus elteacutereacutessel

A keacutet bekeretezett adatsor koumlzoumltti eacuterteacutekek kisseacute zagyvaacutenak tűnnek de azonnal megadjuk a magyaraacutezatot Ekkor csereacuteltuumlk le a kezuumlnkben leacutevő ceruzaelemet eacutes a meacuterővezeteacutekek egyszerűen csak bdquoloacutegtak a levegőbenrdquo Ilyenkor neacutemi veacuteletlenszerű eacuterteacuteksorozat utaacuten a meacutert eacuterteacutek beaacutell a maximumra Ez laacutethatoacute a [Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek] aacutebraacuten is

195 aacutebra - Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel

196 aacutebra - Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

Veacuteguumll azt a megjegyzeacutest kiacutevaacutenjuk meacuteg hozzaacutefűzni az alfejezetben leiacutertakhoz hogy a pontos feszuumlltseacutegeacuterteacutek előaacutelliacutetaacutesaacutehoz vagy megiacuterjuk a bonyolult aritmetikai rutinokat assemblyben vagy a C nyelvhez fordulunk vagy a lebegőpontos szaacutemiacutetaacutest maacuter sokkal inkaacutebb a PC-n veacutegezzuumlk el alkalmas koumlrnyezetben Lebegőpontos műveletekbe vagy egyeacuteb nehezen eacuterthető matematikai truumlkkoumlk alkalmazaacutesaacuteba assemblyben ezen a szinten nem kiacutevaacutentunk belebonyoloacutedni

Created by XMLmind XSL-FO Converter

20 fejezet - AlkonykapcsoloacuteMegfigyeleacutesek alapjaacuten elmondhatoacute hogy az elektronika iraacutent eacuterdeklődni kezdő gyerekek eacutes tineacutedzserek előbb mindenaacuteron villogoacutekat keacutesőbb akusztikus erősiacutetőket akarnak eacutepiacuteteni Az előbbi nyilvaacuten egyszerűbb viszont szoacute szerint laacutetvaacutenyosabb Villogoacutet csinaacuteltunk maacuter eacuteppen eleget a tankoumlnyvben de maradjunk meacuteg egy kicsit az optoelektronika teruumlleteacuten eacutes keacutesziacutetsuumlnk olyan alkalmazaacutest amely sok optoelektronikai kurzusban az aacutellatorvosi loacute szerepeacutet jaacutetssza Ez az alkalmazaacutes az alkonykapcsoloacute Meg lehet valoacutesiacutetani tranzisztoros billenőkoumlroumlkkel műveleti erősiacutetős alapkapcsolaacutesokkal eacuterzeacutekelőkeacutent pedig felhasznaacutelhatunk fotoellenaacutellaacutest fotodioacutedaacutet eacutes fototranzisztort Vaacutelasszuk most ez utoacutebbit eacutes hasznaacuteljuk ki a mikrovezeacuterlőnk nyers erejeacutet azaz meacuterjuumlk az alkalmazaacuteshoz eacutepiacutetett aacuteramkoumlr valamely reacuteszeacuten a feszuumlltseacuteget majd ennek megfelelően kapcsoljuk be vagy ki a feacutenyforraacutest

A tankoumlnyvben az a ceacutelunk hogy mindig a lehető legegyszerűbb elektronikai megoldaacutest vaacutelasszuk Iacutegy műveleti erősiacutető elő sem keruumll Minden a tankoumlnyvben szereplő komolyabb alkalmazaacutest termeacuteszetesen sokkal igeacutenyesebben is meg lehetne tervezni uumlgyelve a linearitaacutesra jelkorlaacutetozaacutesra stb de a ceacutel eacuteppen a lehető legegyszerűbb elkeacutesziacutethetőseacuteg hogy csak egy mareacutek alkatreacuteszt kelljen felhasznaacutelnunk (eacutes legrosszabb esetben sajaacutet zsebből megvaacutesaacuterolnunk)

1 Besugaacuterzaacutesmeacutereacutes fototranzisztorralFototranzisztorokroacutel sok leacutenyeges ismeretet megtudhatunk a megfelelő elektronikai szakkoumlnyvekből [2] [3] [4] [5] [6] Itt most csupaacuten oumlsszefoglaloacute jelleggel emliacutetjuumlk meg főbb tulajdonsaacutegaikat ill az alkalmazaacuteshoz vaacutelasztott tiacutepus parameacutetereit

Fototranzisztoroknaacutel az eszkoumlz a baacutezisndashemitter aacutetmeneten a besugaacuterzaacutes hataacutesaacutera generaacuteloacutedoacute fotoaacuteramot erősiacuteti foumll Uacutegy is tekinthetuumlnk a fototranzisztorra mint egy szokvaacutenyos tranzisztorra csak a baacutezisaacuteramot a fotoaacuteram jelenti Eacuteppen ezeacutert a legtoumlbb fototranzisztor-tiacutepusnak csak az emittere eacutes a kollektora van kivezetve A baacutezist csak olyan tiacutepusoknaacutel vezetik ki amelyeket munkapont-beaacutelliacutetaacutesra szaacutennak A besugaacuterzaacutes aacuteltal generaacutelt fotoaacuteram szinte toumlkeacuteletes lineaacuteris araacutenyban van magaacuteval a besugaacuterzaacutessal A tranzisztorhataacutes pedig ezt a fotoaacuteramot erősiacuteti foumll Ha tehaacutet a kollektorndashemitter-aacutegba ellenaacutellaacutesokat koumltuumlnk akkor az azokon eső feszuumlltseacuteg meacutereacuteseacutevel figyelhetjuumlk a fototranzisztort eacuterő besugaacuterzaacutest Ilyenkor viszont a meacutert feszuumlltseacuteg maacuter nem lesz lineaacuterisan araacutenyos a besugaacuterzaacutessal attoacutel a tranzisztor jelleggoumlrbeacuteinek megfelelően kisebb-nagyobb meacuterteacutekben el fog teacuterni

Meg kell jegyeznuumlnk hogy a kataloacutegusok toumlbbnyire nem a besugaacuterzaacutes (Ee Wm2) fuumlggveacutenyeacuteben ismertetnek eszkoumlzkarakterisztikaacutekat hanem a megvilaacutegiacutetaacutes (Ev lx) fuumlggveacutenyeacuteben Ehhez azonban mindig illik megadni a karakterisztika felveacuteteleacuteneacutel hasznaacutelt feacutenyforraacutes sziacutenkeacutepeacutet vagy a felhasznaacutelt szabvaacutenyos megvilaacutegiacutetoacutet (pl CIE A) Igeacutenyes gyaacutertoacutek ezt megteszik A keacutet mennyiseacuteg nem ekvivalens hiszen a detektorok sziacutenkeacutepi eacuterzeacutekenyseacutege aacuteltalaacuteban nem egyezik meg a fotometriai mennyiseacutegek definiacutecioacutejaacutehoz szuumlkseacuteges laacutethatoacutesaacutegi fuumlggveacutennyel azaz V()-val [2] A koumlvetkező alkalmazaacuteshoz mi a TEPT4400 tiacutepusuacute fototranzisztort vaacutelasztottuk melynek sziacutenkeacutepi eacuterzeacutekenyseacutege a [A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege] aacutebraacuten laacutethatoacute (A diagram az adatlaproacutel szaacutermazik) Az aacutebraacutet tanulmaacutenyozva vilaacutegosnak kell lennie hogy a fototranzisztor a teljes laacutethatoacute sziacutenkeacuteptartomaacutenyban (380 nm - 780 nm) eacuterzeacutekeny de a koumlzeli infraacuteban is

201 aacutebra - A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

Tekintsuumlk most a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute rendkiacutevuumll egyszerű kis kapcsolaacutest A kollektor- ill emitteraacutegba koumltoumltt ellenaacutellaacutesok azonos meacuteretezeacuteseacuteből nyilvaacutenvaloacute hogy a meacuterendő UE feszuumlltseacuteg soha nem lehet nagyobb 25 V-naacutel Ha a mikrovezeacuterlővel UE-t figyeljuumlnk akkor a meacutert eacuterteacutek fuumlggveacutenyeacuteben ki-be kapcsolgathatunk egy laacutempaacutet eacutes maacuter keacuteszen is van az alkonykapcsoloacutenk Az az előnyuumlnk is meglesz hogy nagyon taacuteg tartomaacutenyban szoftveresen vaacutelaszthatjuk meg a kapcsolaacutesi jelszint eacuterteacutekeacutet Egyeacuteb esetekben a keacutet ellenaacutellaacuteseacuterteacutek araacutenyaacuteval jaacutetszhatunk de akkor figyelnuumlnk kell UE +25 V-os korlaacutetozaacutesaacutera

202 aacutebra - Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten

Eacutepiacutetsuumlk meg a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute egyszerű aacuteramkoumlrt de hagyjuk ki belőle a kondenzaacutetort Toumlltsuumlk le mikrovezeacuterlőnkre az egyszerű AD-aacutetalakiacutetaacutesra megiacutert Code43-at majd figyeljuumlk a kijelzett feszuumlltseacutegadatokat A vizsgaacutelatot a szerző otthoni aacutelloacutelaacutempaacuteja alatt veacutegezte amelybe egy spiraacutelis kompakt feacutenycső volt becsavarva Laacutethatoacute hogy a [Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt] aacutebraacuten bemutatott jelszint eleacuteg nagy ingadozaacutest mutat Keacuterdeacutes hogy mi ennek az oka Talaacuten nem hasznaacutelhatoacute az egyszerű kis kapcsolaacutesunk A vaacutelasz az hogy semmi baja a kapcsolaacutesnak az eacuterteacutekek azeacutert ugraacutelnak ennyire mert a kompakt feacutenycső toumlbb kilohertzes villoacutedzaacutesaacutet eacuterjuumlk tetten amit az emberi szem maacuter semmi esetre sem tud koumlvetni az AD-aacutetalakiacutetoacute viszont e szerint igenhellip Ennyire gyors az ADuC 842-es AD-aacutetalakiacutetoacuteja Ilyen esetekre gyoacutegyiacuter ha a meacuterőellenaacutellaacutessal paacuterhuzamosan bekoumltuumlnk egy megfelelően nagy kondenzaacutetort uacutegy 3-10 F kapacitaacutessal A tapasztalat szerint ez maacuter elegendő Ilyen nagy kapacitaacutesoknaacutel szinte kizaacuteroacutelag elektrolitkondenzaacutetort hasznaacutelhatunk de uumlgyeljuumlnk annak polaritaacutesaacutera mert fordiacutetott bekoumlteacutesneacutel az alkatreacutesz erősen foumllmelegedhet toumlnkremehet sőt foumll is robbanhat (Annyira azeacutert ez sem veszeacutelyes de szeacutethasad a tokozaacutes eacutes irtoacute buumldoumls lesz a helyiseacutegben) A kondenzaacutetor hataacutesaacutet (C = 10 F) a [Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben] aacutebra szemleacutelteti A feszuumlltseacutegingadozaacutes gyakorlatilag megszűnt

203 aacutebra - Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

204 aacutebra - Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben

2 Az alkonykapcsoloacute programjaA [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute kapcsolaacutes eacutes a kondenzaacutetor szerepeacutenek taacutergyalaacutesa utaacuten megfogalmazhatjuk a feladatot az alkonykapcsoloacutehoz

32 feladat

Keacutesziacutetsuumlnk alkonykapcsoloacutet amelyneacutel a detektor fototranzisztor a laacutempaacutet pedig a mikrovezeacuterlő valamely kimeneti bitje jelenti (A kapcsolaacutesi jelszint meghataacuterozaacutesa toumlrteacutenhet a koumlrnyezetnek megfelelően eacutes tapasztalati uacuteton) [Code44 Code45]

A feladat szoumlvegeacuteben az aacutell hogy a laacutempaacutet egy kimeneti bit fogja szimbolizaacutelni Ez a 2-es porton lesz majd (P20) eacutes az aacuteramkoumlr oumlsszeaacutelliacutetaacutesaacutenaacutel ide ceacutelszerűen egy LED-et fogunk koumltni a hozzaacute tartozoacute ellenaacutellaacutessal egyetemben Ezt a bitet azutaacuten maacuter komolyabb megvaloacutesiacutetaacutesnaacutel is fel tudjuk hasznaacutelni vezeacuterlőjel formaacutejaacuteban Ehhez a [TTL IC-k eacutes tranzisztorok a portokon] fejezetben talaacutelunk hasznos tanaacutecsokat

A koacuted egeacuteszen roumlvid lesz az aacuteramkoumlr műkoumldeacuteseacutehez pedig csak arra van szuumlkseacuteguumlnk hogy leaacuternyeacutekoljuk ill ne aacuternyeacutekoljuk le a fototranzisztort A kapcsolaacutesi szint megvaacutelasztaacutesa (a koacutedban sziacutenessel kiemelve) tapasztalati uacuteton toumlrteacutent előfordulhat hogy maacutes helyiseacutegben maacutes megvilaacutegiacutetaacutesi koumlruumllmeacutenyek koumlzoumltt joacutecskaacuten elteacuterő eacuterteacuteket eacuterdemes (kell) beaacutelliacutetanunk Az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa eacutes a regiszterek kezeleacutese eacuteppen uacutegy toumlrteacutenik mint a [31 feladat]naacutel Ennek reacuteszletes leiacuteraacutesa ott megtalaacutelhatoacute A koacutedban a hiszt ciacutemkeacutenek semmi szerep nincs ez csak viszonyiacutetaacutesi pontot jelent a koumlvetkező alfejezetben ismertetett Code45-houmlz

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

Code44asmMOV ADCCON110001100b Az AD-konverter konfiguraacutelaacutesanextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutes Addig tehaacutet vaacuterakozunkMOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageA Elmentjuumlk az eddigi aacutellaacutestMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-ethisztADD Avoltage Ehhez pedig csak hozzaacute kell adni voltage tartalmaacutet eacutes keacuteszen is vagyunk A-ban most maacuter a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 8 bitjeacutet talaacuteljukCJNE A30eval1 Ha Alt30 akkor bekapcsoljuk aeval1JC ledon vilaacutegiacutetaacutest Kuumlloumlnben kikapcsoljukSETB P20 LED kikapcsolaacutesaJMP nextledonCLR P20 LED bekapcsolaacutesaJMP next

A program ugyan ez egy kapcsolaacutesi szint moacutedszereacutenek megfelelő moacutedon műkoumldik de amikor az ember jaacutetszani kezd a műkoumldő aacuteramkoumlrrel hamar raacutejoumln hogy ez iacutegy nem biztos hogy joacute lesz nekuumlnk ugyanis ha a feszuumlltseacutegszint csak egy kicsit is ingadozik a kapcsolaacutesi eacuterteacutek koumlruumll a laacutempaacutenk aacutellandoacute jelleggel ki-be kapcsol Ez a LED-re neacutezve semmifeacutele koumlvetkezmeacutenyekkel nem jaacuter de a viselkedeacutes meacuteg ebben az esetben sem nevezhető szeacutepnek Ha maacutes tiacutepusuacute feacutenyforraacutest izzoacutelaacutempaacutet feacutenycsoumlvet stb kiacutevaacutenunk az alkonykapcsoloacuteval vezeacuterelni akkor viszont a gyakori ki-be kapcsolgataacutes kifejezetten kaacuteros lehet Ennek kikuumlszoumlboumlleacuteseacutere az alaacutebbi alfejezetben talaacutelunk megoldaacutest

3 HisztereacutezisA műszaki tudomaacutenyokban maacuter alapszinten talaacutelkozunk a hisztereacutezis fogalommal Ez azt jelenti hogy adott rendszer aacutellapotai koumlzoumltti aacutetmenet nem ugyanannaacutel a jelszinteacutel koumlvetkezik be egyik ill a maacutesik iraacutenyban A tovaacutebbi magyaraacutezathoz tekintsuumlk az [Hisztereacutezis keacutetaacutellapotuacute rendszerben] aacutebraacutet Ezen egy keacutetaacutellapotuacute rendszer aacutetmeneteihez tartozoacute hisztereacutezist szemleacuteltetjuumlk

205 aacutebra - Hisztereacutezis keacutetaacutellapotuacute rendszerben

A rendszernek keacutet aacutellapota van S1 eacutes S2 Az S1 aacutellapotboacutel az S2 aacutellapotba valoacute aacutetmenet az L mennyiseacuteg noumlvekedeacutesekor L2 szintneacutel koumlvetkezik be a fordiacutetott iraacutenyuacute aacutellapotvaacuteltaacutes viszont L1 szintneacutel Ezzel kikuumlszoumlboumllődik az a jelenseacuteg hogy a rendszer a keacutet aacutellapot koumlzoumltt vergődjoumln amikor is az aacutellapotok koumlzoumltti vaacuteltaacutes mindkeacutet iraacutenyban ugyanannaacutel a jelszinteacutel koumlvetkezik be Az L2 ndash L1 kuumlloumlnbseacuteget a hisztereacutezis szeacutelesseacutegeacutenek nevezzuumlk

Code44 minimaacutelis moacutedosiacutetaacutesaacuteval hisztereacutezist valoacutesiacutethatunk meg a programmal A betoldaacutest tartalmazoacute reacuteszt

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

maradeacutektalanul koumlzzeacutetesszuumlk a koacutedot azonban csak attoacutel a sortoacutel kezdve listaacutezzuk ahovaacute a hiszt ciacutemkeacutet helyeztuumlk A hisztereacutezist jelentő jelszintekre ugyanaz eacuterveacutenyes mint amit az előző alfejezetben is leiacutertunk tapasztalati uacuteton hataacuteroztuk meg őket eacutes maacutes koumlrnyezetben maacutes eacuterteacutekekre lehet (eacutes nagy valoacutesziacutenűseacuteggel lesz is) szuumlkseacuteg

Code45asmhisztADD Avoltage A-ban most maacuter a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 8 bitjeacutet talaacuteljukCJNE A20eval1 Ha A lt 20 akkor bekapcsoljuk aeval1JC ledon vilaacutegiacutetaacutestCJNE A40eval2 Ha A gt= 40 akkor kikapcsoljuk aeval2JNC ledoff vilaacutegiacutetaacutestJMP next Ugraacutes vissza meacuterniledonCLR P20 LED bekapcsolaacutesaJMP next Ugraacutes vissza meacuterniledoffSETB P20 LED kikapcsolaacutesaJMP next Ugraacutes vissza meacuterni

Az aacuteramkoumlruumlnk ezzel a programmal maacuter szebben műkoumldik a hisztereacutezis aacuteldaacutesos hataacutesa joacutel megfigyelhető az aacutellapotok koumlzoumltti vergődeacutes megszűnik (Laacutesd az alkalmazaacuteshoz tartozoacute videoacutet)

Created by XMLmind XSL-FO Converter

21 fejezet - TTL IC-k eacutes tranzisztorok a portokonAmennyiben valaki koumlzeacutepiskolai vagy egyetemi tanulmaacutenyai esetleg elektronikai hobbiteveacutekenyseacutege soraacuten foglalkozott logikai aacuteramkoumlroumlkkel valoacutesziacutenűleg ismeri a Texas TTL receptkoumlnyveacutet [7] Ha nem akkor tiszta sziacutevvel ajaacutenljuk mert nagyszerű munka (Antikvaacuteriumokban eacutes internetes piactereken meacuteg beszerezhető A szerző is ez utoacutebbi moacutedon tett szert raacute) Nos akaacuter iacutegy akaacuter uacutegy aacutell a helyzet a mikrovezeacuterlőhoumlz előbb-utoacutebb nem csak LED-ekből eacutes fototranzisztorokboacutel aacutelloacute aacuteramkoumlroumlket szeretneacutenk csatlakoztatni hanem ezekneacutel sokkal komolyabbakat is termeacuteszetesen akaacuter nagyobb teljesiacutetmeacutennyel Ilyenkor koumlzbuumllső fokozatokra meghajtoacutefokozatokra lesz szuumlkseacuteguumlnk Ezek a fokozatok jelenthetnek erre a ceacutelra tervezett TTL IC-ket eacutes kapcsoloacuteuumlzemben műkoumldtetett tranzisztorokat esetleg Darlington-kapcsolaacutesokat optocsatoloacutekat vagy releacuteket

Ebben a fejezetben elsősorban arra szeretneacutenk raacutemutatni hogy az eddig csupaacuten LED-ek meghajtaacutesaacutera hasznaacutelt P0-s eacutes P2-es portok koumlzoumltt van egy igen leacutenyeges kuumlloumlnbseacuteg Azt is meacuteg egyszer hangsuacutelyozni szeretneacutenk hogy aktiacutev kimenetkeacutent egyiket sem eacuterdemes hasznaacutelnunk A portok laacutebait foumlldre gond neacutelkuumll huacutezhatjuk szoftveresen abboacutel nem lesz baj Ilyenkor joacuteformaacuten csak a taacutepellaacutetaacutes (soros port) terhelhetőseacutege szab korlaacutetot az aacuteramerősseacutegnek 150-200 mA koumlruumlli aacuteramerősseacuteg eseteacuten maacuter eacuterdemes kuumllső taacutepegyseacuteget hasznaacutelnunk A keacutesőbbiekben erre is laacutetunk majd peacuteldaacutet Szeretneacutenk tovaacutebbaacute visszanyuacutelni a tranzisztorokhoz is eacutes megmutatni hogy milyen egyszerűen lehet veluumlk kuumllső egyseacutegeket kapcsolgatni

1 A felhuacutezoacute-ellenaacutellaacutesok szerepeA tankoumlnyvben LED-eket (termeacuteszetesen az előteacutet-ellenaacutellaacutesokat is mindig ide kell eacuterteni) kapcsolgattunk mind a P0-s mind a P2-es port bitjeivel Ilyenkor a LED akkor vilaacutegiacutetott ha a portok megfelelő laacutebaacutet foumlldre huacuteztuk azaz a LED katoacutedja neacutezett a port megfelelő laacuteba feleacute Hasznaacuteljuk most a portokat arra hogy TTL IC-knek adunk veluumlk bemeneti jelszinteket (Ki fog deruumllni hogy meacuteg a TTL IC-k bemenetei koumlzoumltt is akad kuumlloumlnbseacuteg) A peacuteldaacutekban ismeacutet csak LED-ekkel fogjuk jelezni az adott meghajtoacutefokozat műkoumldeacuteseacutet de innentől maacuter baacutetran mereacuteszkedhetuumlnk tovaacutebb is kijjebb ishellip

33 feladat

Kapcsolgassunk egy LED-et az SN74541-es vonalmeghajtoacuten keresztuumll Hasznaacuteljuk ehhez a mikrovezeacuterlő keacutet gombjaacutet [Code46]

A vaacutelasztaacutes azeacutert esett pont erre az IC-re mert ennek nem open collector-os kimenetei vannak hanem a kimenetei aktiacutev kimenetkeacutent hasznaacutelhatoacutek Akaacuter egy heacutetszegmenses kijelzőt is meghajthatunk veluumlk de uacutegy hogy ezek adjaacutek a kijelzőnek az aacuteramot Az ADuC 842-es P0-s eacutes P2-es portjaacuteval eacutes az IC bemeneteivel kapcsolatban irtoacute fontos tanulsaacuteggal fogunk szembesuumllni Előszoumlr is tekintsuumlk az [Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel] aacutebraacuten laacutethatoacute aacuteramkoumlrt

A TI74LS541-es IC tulajdonkeacuteppen 8 puffert vagy maacutes neacuteven vonalmeghajtoacutet tartalmaz Mi most ezek koumlzuumll egyetlen egyet fogunk hasznaacutelni A LED-nek az IC Y1-es kimenete ad aacuteramot amennyiben az A1-es bemenetnek magas logikai jelszintet adunk

211 aacutebra - Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

Mivel most az aacuteramkoumlr a leacutenyeges a koacutedot nagyon roumlvidre iacutertuk Az 1 gombbal bekapcsoljuk a 2 gombbal kikapcsoljuk a LED-et Most nem inverz logikaacuteroacutel van szoacute iacutegy a kimeneti bit magasra aacutelliacutetaacutesa jelenti a LED bekapcsolaacutesaacutet A koacutedban egyszerre kezeljuumlk a P20-s eacutes a P00-s biteket hogy ugyanazt a koacutedot hasznaacutelhassuk a koumlvetkezőkben bemutatandoacute elemzeacutesekhez

Code46asmORG 0060h A program helye a memoacuteriaacutebanbut1 BIT P32 Elnevezzuumlk az 1 gomb bitjeacutetbut2 BIT P33 Elnevezzuumlk a 2 gomb bitjeacutetout2 BIT P20 Az out2 bit definiaacutelaacutesaout0 BIT P00 Az out0 bit definiaacutelaacutesaMAINCLR out2 A kimeneti bitek toumlrleacuteseCLR out0waitJNB but1egy Ugrunk ha az 1 gomb le van nyomvaJNB but2nulla Ugrunk ha a 2 gomb le van nyomvaJMP wait Uacutejra gombnyomaacutesra vaacuterunknullaCLR out2 A kimeneti bitek toumlrleacuteseCLR out0JMP waitegySETB out2 A kimeneti bitek felaacutelliacutetaacutesaSETB out0JMP wait

Amennyiben az [Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel] aacutebraacuten laacutethatoacute moacutedon a vonalmeghajtoacute A1-es bemeneteacutet a P20-s laacutebra koumltjuumlk a mikrovezeacuterlő gombjaival egeacuteszseacuteges moacutedon kapcsolgathatoacute a LED Most joumln a meglepeteacutes Koumlssuumlk aacutet az A1-es bemenetet a P00-s laacutebra Azt fogjuk tapasztalni hogy hiaacuteba nyomogatjuk a gombokat a LED bizony meg se nyekken (nem vilaacutegiacutet) Eacutes most eacuterkeztuumlnk el a keacutet port koumlzoumltti igen leacutenyeges kuumlloumlnbseacuteghez Ez a kuumlloumlnbseacuteg az hogy a P2-es port tartalmaz felhuacutezoacute-ellenaacutellaacutesokat a P0-s viszont nem Ez utoacutebbinak a kimenete stabil magas jelszint helyett lebeg ami nem teszi lehetőveacute a 74541-es IC bemeneteacutenek magas jelszintre huacutezaacutesaacutet Erre van gyoacutegyiacuter hasznaacuteljunk kuumllső felhuacutezoacute-ellenaacutellaacutest ha maacuter a portba nincsen gyaacuterilag beeacutepiacutetve laacutesd [Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten] aacutebra A felhuacutezoacute-ellenaacutellaacutesok eacuterteacuteke 10 kΩ koumlruumlli legyen ezzel messze 1 mA alatt maradunk eacutes nem leacutepjuumlk aacutet a port terhelhetőseacutegeacutet Baj termeacuteszetesen akkor sem toumlrteacutenik ha P2-es port laacutebaira is felhuacutezoacute-ellenaacutellaacutesokat koumltuumlnk de erre a belső felhuacutezoacute-ellenaacutellaacutesok miatt nincs szuumlkseacuteg

Ha P00-s laacutebra az [Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten] aacutebraacuten laacutethatoacute moacutedon raacutekoumltjuumlk a felhuacutezoacute-ellenaacutellaacutest (legyen ez most 10 kΩ-os) a LED-uumlnk ismeacutet egeacuteszseacutegesen kapcsolgathatoacute a gombokkal A felhuacutezoacute-ellenaacutellaacutes műkoumldeacutese a koumlvetkező amennyiben a P00-s laacutebat foumlldre huacutezzuk foumlldpotenciaacutelra keruumll a vonalmeghajtoacute A1-es bemenete is a port laacutebaacuten pedig 05 mA folyik keresztuumll Amennyiben a P00-s laacuteb

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

jelszintjeacutet magasra aacutelliacutetjuk nem lebegni fog hanem az ellenaacutellaacuteson keresztuumll kiuumll stabil +5 V potenciaacutelra Eacutes ez a szint jelenik meg a vonalmeghajtoacute A1-es bementeacuten is

212 aacutebra - Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten

Eacuterdekes moacutedon nem mindegyik 74-es sorozatuacute IC bemeneteacutenek ilyen a kialakiacutetaacutesa mint a fent bemutatotteacute Ha vonalmeghajtoacutenak a 7406-os vagy 7407-es IC-t hasznaacuteltuk volna akkor azok vezeacuterleacutese felhuacutezoacute-ellenaacutellaacutes hasznaacutelata neacutelkuumll is ment volna a P0-s portroacutel Ennek okaacutenak taacutergyalaacutesa azonban maacuter tuacutelmutat e tankoumlnyv keretein A tanulsaacuteg az hogy taacutejeacutekozoacutedjuk a hasznaacutelni kiacutevaacutent vonalmeghajtoacutek bemeneteiről eacutes ha kell baacutetran hasznaacuteljunk felhuacutezoacute-ellenaacutellaacutesokat

2 Tranzisztorok mint kapcsoloacutekKuumllső aacuteramkoumlroumlk egyes reacuteszeinek meghajtaacutesaacutehoz tranzisztorokat is alkalmazhatunk Az előző alfejezetben koumlzreadott Code46-ot felhasznaacutelva egy-egy peacuteldaacutet mutatunk be npn- ill pnp-tranzisztor mint kapcsoloacuteelem hasznaacutelataacutera Mindkeacutet port eseteacuten

Tekintsuumlk az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel] aacutebraacutet Legyen most U = +5 V Ez egyaacuteltalaacuten nem kellene hogy iacutegy legyen hiszen akaacuter maacutes feszuumlltseacutegeacuterteacutekű taacutepellaacutetaacutest is hasznaacutelhatnaacutenk az aacuteramkoumlrhoumlz +12 V-ot +24 V-ot stb de az egyszerűseacuteg kedveacuteeacutert most ez is legyen +5 V Legyen a baacutezisellenaacutellaacutes eacuterteacuteke a tranzisztor erősiacuteteacutesi teacutenyezőjeacutenek megfelelően (A asymp 300) most R = 10 kΩ (RD eacuterteacuteke lehet baacutermi amit egy LED-hez adott U feszuumlltseacuteg eseteacuten hasznaacutelhatunk) Ekkor ha P20 magas jelszinten van (+5 V) akkor a tranzisztor teljesen kivezeacuterlődik iacutegy vilaacutegiacutetani fog a LED Ha P20-t foumlldpotenciaacutelra huacutezzuk akkor a tranzisztor lezaacuter eacutes a LED kialszik

213 aacutebra - Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

Az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel] aacutebraacuten laacutethatoacute aacuteramkoumlr a P00 laacuteb hasznaacutelataacuteval ebben az esetben sem műkoumldik Ennek megint csak a port laacuteba jelszintjeacutenek lebegeacutese az oka Felhuacutezoacute-ellenaacutellaacutes uumlgyes alkalmazaacutesaacuteval azonban ezen a helyzeten is segiacutethetuumlnk Figyeljuumlk meg az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal] aacutebraacuten laacutethatoacute aacuteramkoumlrt Amennyiben U = +5 V R1 eacutes R2 eacuterteacutekeacutet vaacutelaszthatjuk R2-nek azaz jelen esetben 5 kΩ-nak (56 kΩ eseteacuten sem lesz aacutem semmi kuumlloumlnbseacuteg a veacutegeredmeacutenyben) Ebben az esetben a P00-s laacuteb maacuter uacutegy tudja vezeacuterelni a tranzisztort ahogy azt az elejeacuten elterveztuumlk Ha U eacuterteacuteke nagyobb +5 V-naacutel akkor R1 eacutes R2 eacuterteacutekeacutenek meghataacuterozaacutesa csak nagyon keveacutessel igeacutenyel toumlbb figyelmesseacuteget

214 aacutebra - Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal

Ha pnp-tranzisztort akarunk hasznaacutelni akkor vessuumlnk egy pillantaacutest az [Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese] aacutebraacutera Ebben esetben nem lesz szuumlkseacuteguumlnk felhuacutezoacute-ellenaacutellaacutesra meacuteg akkor sem ha a P0-s portot hasznaacuteljuk a vezeacuterleacutesre Viszont most az U feszuumlltseacuteg maacuter nem lehet akaacutermilyen nagy hiszen ha az csak egy kicsivel is nagyobb 5 V-naacutel akkor a tranzisztor mindenkeacuteppen kinyit iacutegy elvesziacuteti kapcsoloacute jellegeacutet Ha azonban U = +5 V ebben az esetben is akkor azeacutert előnyoumls pnp-tranzisztor vaacutelasztaacutesa mert semmikor sem kell felhuacutezoacuteellenaacutellaacutest hasznaacutelnunk Mivel pnp-tranzisztort hasznaacutelunk az akkor nyit ki ha a vezeacuterleacuteseacutere hasznaacutelt portlaacutebat foumlldre huacutezzuk eacutes akkor zaacuter le amikor a vezeacuterlőlaacuteb jelszintje magas (+5 V)

215 aacutebra - Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

A BC182-es eacutes BC212-es univerzaacutelis jelerősiacutető-tranzisztorok kollektoraacuterama folytonos uumlzemmoacutedban 100 mA lehet Ha enneacutel is nagyobb aacuteramuacute eszkoumlzt kiacutevaacutenunk hasznaacutelni akkor maacuter valoacuteban indokolt a toumlbbfokozatuacute meghajtaacutes melyre tankoumlnyvi peacutelda szokott lenni a Darlington-kapcsolaacutes [4] [5] [6] Eacutes ahogy maacuter iacutertuk 100-200 mA aacuteramfelveacutetel eseteacuten maacuter kuumllső taacutepot hasznaacuteljunk hogy ne terheljuumlk tuacutel az USB-portot

Created by XMLmind XSL-FO Converter

22 fejezet - Hőmeacuterseacuteklet-meacutereacutesHisztereacutezises alkonykapcsoloacutet maacuter keacutesziacutetettuumlnk a [Alkonykapcsoloacute] fejezetben Maacuter az az alkalmazaacutes is olyan volt ami a gyakorlatban is minden tovaacutebbi neacutelkuumll hasznosiacutethatoacute tehaacutet maacuter nem tankoumlnyviacutezű gyermeteg peacuteldaacuteroacutel volt szoacute Most neacutezzuumlnk egy maacutesik olyan alkalmazaacutest amelyre szinteacuten sokszor lehet igeacuteny a gyakorlatban ez pedig a hőmeacuterseacuteklet-meacutereacutes Ezuacutettal nyilvaacuten valamilyen hőmeacuterseacuteklet-szenzorra lesz szuumlkseacuteguumlnk

1 TermisztorokHőmeacuterseacuteklet eacuterzeacutekeleacuteseacutere szaacutemtalan feacutele szenzort vaacutesaacuterolhatunk Az alkatreacutesz aacutera sok prameacutetertől fuumlgg elsődlegesen a pontossaacutegtoacutel eacutes a linearitaacutestoacutel Szeretneacutenk hűek maradni a tankoumlnyvben megfogalmazott elveinkhez iacutegy a legegyszerűbb legolcsoacutebb megoldaacutest vaacutelasztjuk azaz nem preciacutezioacutes eszkoumlzt de meacuteg csak nem is Pt100-ast fogunk hasznaacutelni hanem egy nagyon egyszerű kis termisztort A termisztorok hőmeacuterseacutekletfuumlggő ellenaacutellaacutesnak tekinthetők Vannak koumlzoumlttuumlk pozitiacutev ill negatiacutev hőfokteacutenyezőjű tiacutepusok Az előbbi azt jelenti hogy a hőmeacuterseacuteklet noumlvekedeacuteseacutevel noumlvekszik az eszkoumlz ellenaacutellaacutesa miacuteg az utoacutebbinaacutel ez pont fordiacutetva van

Hőmeacuterseacutekletmeacutereacutesre mi a KTY81-120 termisztort vaacutelasztottuk Az eszkoumlz olcsoacute koumlnnyen beszerezhető pozitiacutev hőfokteacutenyezőjű viszont karakterisztikaacuteja nem toumlkeacuteletesen lineaacuteris laacutesd [A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja] aacutebra No de semmi baj ebből meacuteg talaacuten tőkeacutet is kovaacutecsolhatunk ha uumlgyesek vagyunkhellip

221 aacutebra - A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja

Az eszkoumlz karakterisztikaacutejaacutet az adatlap 10 Celsius-fokonkeacutent tartalmazza hellyel-koumlzzel 5 fokonkeacutent Ez az adatsor iacutegy eleacuteggeacute heacutezagos ezeacutert interpolaacutecioacutet hajtunk veacutegre rajta A harmadfokuacute termeacuteszetes spline-interpolaacutecioacutet vaacutelasztjuk melyneacutel az alappontrendszert a 10-zel oszthatoacute hőmeacuterseacutekleteacuterteacutekek jelentik hogy az interpolaacutecioacutenaacutel a nagyon keacutenyelmesen megoldhatoacute ekvidisztaacutens esetet kapjuk Ekkor ugyan eacuteppen a kuumlloumlnleges jelentőseacutegű 25 degC-hoz tartozoacute eacuterteacuteket hagyjuk ki (elvileg pont itt 1 000 Ω a termisztor ellenaacutellaacutesa) de laacutetni fogjuk hogy ezzel hibaacutet gyakorlatilag nem veacutetuumlnk Az interpolaacutelt karakterisztikaacutet az [A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja] aacutebra mutatja Az interpolaacutecioacutes fuumlggveacuteny a T = 25 degC helyen 1 00011 Ω-ot vesz foumll ami az 1 000 Ω-hoz keacutepest csak 0011 -os elteacutereacutest jelent Mivel maga az adatlap 2 -os toleranciasaacutevot ad meg az ellenaacutellaacuteseacuterteacutekekhez ekkora kis hibaacuteval egyaacuteltalaacuten nem kell foglalkoznunk

222 aacutebra - A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Itt aacutelljunk meg egy pillanatra eacutes neacutezzuumlk meg hogy tudjuk-e korrigaacutelni a karakterisztikaacutet ha az esetleg arra szorulna Multimeacuteterrel raacutemeacuterve a szerző asztalaacuten oacuteraacutek oacuteta pihenő termisztorra 990 Ω-os ellenaacutellaacutes-eacuterteacutek volt meacuterhető 22 degC-os hőmeacuterseacutekletet felteacutetelezve az interpolaacutecioacutes fuumlggveacuteny ehhez az eacuterteacutekhez 9765 Ω-ot ad A keacutet eacuterteacutek haacutenyadosa 9909765 asymp 10138 iacutegy ezzel az eacuterteacutekkel szorozhatjuk a teljes interpolaacutecioacutes fuumlggveacutenyt a nagyobb pontossaacuteg eacuterdekeacuteben Az 10138 haacutenyadost kalibraacutecioacutes egyuumltthatoacutenak nevezzuumlk

A termisztoron aacutetfolyoacute aacuteram erősseacutegeacutet a gyakorlati alkalmazaacutesok soraacuten ceacutelszerű 1-2 mA alatt tartani Ha nem akarunk aacuteramgeneraacutetort keacutesziacuteteni ez megoldhatoacute uacutegy hogy a termisztorral sorosan koumltuumlnk egy maacutesik ellenaacutellaacutest a hőmeacuterseacuteklet megaacutellapiacutetaacutesaacutehoz pedig a termisztoron eső feszuumlltseacuteget meacuterjuumlk laacutesd alaacutebbi aacutebra

223 aacutebra - A termisztor soros kapcsolaacutesban

A soros ellenaacutellaacutes-paacuterra foumlliacutert feszuumlltseacutegosztoacute szerint

Vaacutelasszuk az U feszuumlltseacuteget 49 V-nak (A szerző oumlreg asztali szaacutemiacutetoacutegeacutepeacuten ennyit tudott nyuacutejtani az USB port) Tegyuumlk fel tovaacutebbaacute hogy a 0 degC - 60 degC tartomaacutenyban kell hőmeacuterseacutekletet meacuternuumlnk Kiacutevaacutencsisaacutegboacutel vizsgaacuteljuk meg hogy hogyan fog kineacutezni a hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika ha az RS ellenaacutellaacutes eacuterteacutekeacutet egyszer 500 Ω-nak ([A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal] aacutebra) maacutesszor 10 kΩ-nak ([A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal] aacutebra) vesszuumlk Szabad szemmel is laacutethatoacute hogy egyik karakterisztika sem toumlkeacuteletesen lineaacuteris ill hogy az egyik konkaacutev a maacutesik konvex fuumlggveacuteny Az egyeacutebkeacutent is probleacutemaacutet jelentene hogy RS = 500 Ω eseteacuten a termisztor feszuumlltseacutege joacutecskaacuten 25 V foumlloumltt van iacutegy a mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutet nem is hasznaacutelhatnaacutenk tovaacutebbi jelkondicionaacutelaacutes neacutelkuumll

224 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

225 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal

Proacutebaacuteljuk most RS eacuterteacutekeacutet megvaacutelasztani uacutegy hogy a fuumlggveacuteny a saacutergaacuteval jeloumllt darabja a lehető legnagyobb meacuterteacutekben megkoumlzeliacutetse a lineaacuteris alakot Tovaacutebbi reacuteszletezeacutes neacutelkuumll ehhez joacute oumltletnek tűnik ha a karakterisztika első derivaacuteltjaacutet numerikusan kiszaacutemoljuk azaz veacuteges differenciaacutekkal koumlzeliacutetjuumlk Ha most ezeknek a differenciaeacuterteacutekeknek vesszuumlk a szoacuteraacutesaacutet akkor az joacutel kifejezi a lineaacuteris alaktoacutel valoacute globaacutelis elteacutereacutest Mindezt persze csak akkor ha ezt a szoacuteraacuteseacuterteacuteket elosztjuk a differenciaeacuterteacutekek aacutetlagaacuteval ugyanis iacutegy tesszuumlk invariaacutenssaacute az ily moacutedon feleacutepiacutetett ceacutelfuumlggveacutenyuumlnket a fuumlggveacuteny amplituacutedoacutejaacuteval szemben Numerikus szeacutelsőeacuterteacutek-kereseacutest alkalmazva RS eacuterteacutekeacutere 2 385 Ω adoacutedik optimumkeacutent Ennek eseteacutet mutatja a [A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel] aacutebra Az optimummal meacuteg a feszuumlltseacutegeacuterteacutekre neacutezve is szerencseacutenk van a termisztor feszuumlltseacutege az előiraacutenyzott hőmeacuterseacuteklet-tartomaacutenyban bőven 25 V alatt marad A saacutergaacuteval jeloumllt fuumlggveacutenydarab gyakorlatilag lineaacuterisnak tekinthető

Amennyiben a saacutergaacuteval rajzolt fuumlggveacutenydarabot lineaacuteris fuumlggveacutennyel akarjuk helyettesiacuteteni meg kell hataacuteroznunk annak meredekseacutegeacutet (m) eacutes fuumlggőleges eltolaacutesaacutet (b) az

oumlsszefuumlggeacuteshez Az m meredekseacuteget keacutepezhetjuumlk uacutegy hogy vesszuumlk a numerikusan szaacutemolt differenciaeacuterteacutekek aacutetlagaacutet b-nek pedig egyszerűen a 0 degC-naacutel foumllvett eacuterteacuteket tekintjuumlk A [A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel] aacutebraacuten laacutethatoacute veacutekony fekete szakasz ezt a lineaacuteris fuumlggveacutenyt mutatja

226 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Az olvasoacutet megnyugtatjuk semmilyen fontos szaacutemiacutetaacutesroacutel nem maradt le az alfejezetben taacutergyalt oumlsszes szaacutemiacutetaacutesi reacuteszlet megtalaacutelhatoacute a KTY81-120xls faacutejlban azzal mindent reprodukaacutelni tud

2 HőmeacuterőAz előző alfejezetben eleacuteg reacuteszletesen foglalkoztunk a termisztor karakterisztikaacuteival iacutegy veacutegre megfogalmazhatunk egy hőmeacuterseacuteklet-meacutereacutesi feladatot

34 feladat

Meacuterjuumlk a mikrovezeacuterlővel 02 degC felbontaacutessal a szobaacutenk hőmeacuterseacutekleteacutet a 20 degC - 30 degC tartomaacutenyban A meacutert hőmeacuterseacuteklet-eacuterteacuteket kuumlldjuumlk el a soros porton a PC-nek A tartomaacutenyon kiacutevuumlli hőmeacuterseacuteklethez kuumlloumln uumlzenetet kuumlldjuumlnk [Code47]

Az előző alfejezetben is hivatkozott KTY81-120xls faacutejlban meghataacuteroztuk hogy az U = 49 V feszuumlltseacuteg eacutes az optimaacutelis RS = 2 385 Ω mellett mekkora termisztorfeszuumlltseacuteg tartozik adott hőmeacuterseacuteklethez A

feszuumlltseacutegeacuterteacutekekhez koumlnnyen meghataacuterozhatjuk a digitaacutelis aacutetalakiacutetaacutes eacuterteacutekeit a formulaacuteval Az előiacutert hőmeacuterseacuteklet-tartomaacuteny elejeacutet eacutes veacutegeacutet mutatja a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] feszuumlltseacutegeacuterteacutekkel AD-eacuterteacutekkel egyetemben Ez utoacutebbit decimaacutelisan eacutes hexadecimaacutelisan is

221 taacuteblaacutezat - A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata

T degC UR(T) V D dec D hex

200 14215 2328 918

202 14231 2331 91B

204 14247 2334 91E

206 14263 2336 920

208 14279 2339 923

hellip hellip hellip hellip

292 14955 2450 992

294 14971 2452 994

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

296 14987 2455 997

298 15003 2457 999

300 15019 2460 99C

Ha szemuumlgyre vesszuumlk a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] utolsoacute oszlopaacuteban leacutevő eacuterteacutekeket akkor foumll kell tűnnie annak a teacutenynek hogy valamennyi hexadecimaacutelis szaacutem első szaacutemjegye 9-es Ez most oacuteriaacutesi ajaacutendeacutek nekuumlnk az AD-aacutetalakiacutetaacutesnaacutel ugyanis a 12 bitből csak az alsoacute 8-ra lesz szuumlkseacuteguumlnk Tizenhatos szaacutemrendszerben ugyanis egy szaacutemjegy 4 bitet igeacutenyel ha aacutetiacuterjuk kettes szaacutemrendszerbe Ha tehaacutet tizenhatos szaacutemrendszerben foumlliacutert haacuteromjegyű szaacutemok helyett csak keacutetjegyűekre lesz szuumlkseacuteguumlnk akkor az mindig csak 8 bitet igeacutenyel kettes szaacutemrendszerben Ez pedig azt jelenti hogy egy az egyben hasznaacutelhatjuk az AD-aacutetalakiacutetoacute ADCDATAL regisztereacutet eacutes hogy az ADCDATAH regiszterre nem is lesz szuumlkseacuteguumlnk hiszen abban az aacutetalakiacutetott eacuterteacutek felső 4 bitje van (vouml [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei] aacutebra)

A tapasztalat azt mutatja hogy az AD-aacutetalakiacutetaacutes soraacuten kapott 12-bites eacuterteacutek alsoacute egy-keacutet bitje meacuteg nagyon stabil feszuumlltseacuteg mellett is eleacuteggeacute ingadozhat Ennek koumlvetkezteacuteben a kijelzett hőmeacuterseacuteklet-eacuterteacutek is kisebb-nagyobb ingadozaacutest mutat laacutesd [Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll] aacutebra Ezen oknaacutel fogva nem egy-egy meacutereacutes eredmeacutenye alapjaacuten eacuterdemes kiiacuteratnunk a hőmeacuterseacutekletet hanem toumlbb meacutereacutes eacuterteacuteket lenne joacute aacutetlagolnunk

227 aacutebra - Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll

Az aacutetlagolaacuteshoz toumlbbnyire maacuter lebegőpontos műveletekre lenne szuumlkseacuteguumlnk aminek megiacuteraacutesa assemblyben nem eacuteppen leaacutenyaacutelom Megtehetjuumlk hogy C fordiacutetoacuteeacutert sikoltunk de inkaacutebb gondolkodjunk egy kicsit Ha az ADCDATAL regiszterből kiemelt eacuterteacuteket nem egyedileg elszigetelten kezeljuumlk hanem tovaacutebbi vaacuteltozoacutek bevezeteacuteseacutevel toumlbb ilyet oumlsszeadunk majd a veacutegeacuten az oumlsszeget a meacutereacutesek darabszaacutemaacuteval elosztjuk akkor megvaloacutesiacutethatjuk az aacutetlagolaacutest Ehhez hasznaacuteljunk egy keacutetbaacutejtos vaacuteltozoacutet melynek lesz ugyebaacuter egy felső baacutejtja (datah) eacutes egy alsoacute baacutejtja (datal) E keacutet vaacuteltozoacute aacuteltal reprezentaacutelt 16-bites eacuterteacuteket nullaacutezzuk le majd adjuk hozzaacute a fuumlggetlen meacutereacutesek 8-baacutejtos eacuterteacutekeit de nagyon leacutenyeges hogy a hozzaacuteadaacutesok darabszaacutema kettő hatvaacutenya legyen Ennek a koumlvetelmeacutenyek a magyaraacutezataacutera hamarosan feacuteny deruumll Adjunk oumlssze peacuteldaacuteul 32 meacutereacutesi eacuterteacuteket Amikor a keacutetbaacutejtos regiszteruumlnk alsoacute baacutejtjaacutehoz hozzaacuteadjuk az aktuaacutelisan meacutert 8-bites eacuterteacuteket akkor mindig lehet aacutetvitel A felső baacutejthoz adjunk hozzaacute nullaacutet plusz az aacutetvitelt Menet koumlzben mentsuumlk mindig el a moacutedosult alsoacute ill felső baacutejtot iacutegy az eljaacuteraacutes veacutegeacutere kapunk egy 16-bites eacuterteacuteket amely 32 db 8-bites meacutereacutesi adat oumlsszegeacutet hordozza Assemblyben mindez iacutegy fest

MOV datal0 Nullaacutezzuk a datahdatalMOV datah0 regiszterpaacutertMOV R432 32-szoumlr meacuteruumlnk ebből keacutepezzuumlk az aacutetlagotmeasureSETB SCONV Egyszeri AD-konverzioacutetJB SCONV$ keacuteruumlnkMOV jelADCDATAL Kiolvassuk az ADCDATAL regisztertMOV Adatal Hozzaacuteadjuk datal-hez az aktuaacutelis

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

ADD Ajel kiolvasott eacuterteacuteketMOV datalA Elmentjuumlk a kapott alsoacute baacutejtotMOV Adatah Az aacutetviteli bittel egyuumltt 0-t adunkADDC A0 rsquodatahrsquo-hozMOV datahA Elmentjuumlk a kapott felső baacutejtotDJNZ R4measure Folytatjuk a meacutereacutest

A fenti koacutedreacuteszlet tehaacutet 32 meacutereacutesi adatot ad oumlssze az eredmeacuteny pedig a 16-bitesnek tekintendő datahdatal regiszterpaacuterban van Most joumln a kettő hatvaacutenyaacutera megfogalmazott igeacuteny magyaraacutezata A datahdatal regiszterpaacuter eacuterteacutekeacutet el kellene osztanunk 32-vel Szedjuumlk elő mindazt amit a kettes szaacutemrendszerről tudunk Ha egy akaacuterhaacutenybites eacuterteacuteket egy bittel balra leacuteptetuumlnk az uumlres helyre pedig nullaacutet iacuterunk akkor kettővel szorozzuk a szaacutemeacuterteacuteket Ha egy bittel jobbra leacuteptetuumlnk akkor kettővel osztunk eacutes egyuacutettal keacutepezzuumlk az egeacutesz reacuteszt Ha keacutet bittel leacuteptetuumlnk jobbra akkor 4-gyel osztunk eacutes keacutepezzuumlk az egeacutesz reacuteszt Iacutegy aztaacuten mivel 32 = 25 ezeacutert a keacutet regiszter tartalmaacutet egyuumlttesen 5 bittel kell jobbra leacuteptetnuumlnk

Vegyuumlnk egy peacuteldaacutet a fent leiacutert leacutepteteacutesre de az egyszerűseacuteg kedveacuteeacutert most csak 4 db 8-bites szaacutemot adunk oumlssze (eacutes iacutegy majd keacutet bittel leacuteptetuumlnk jobbra) Ezek decimaacutelis eacuterteacuteke legyen rendre 77 76 79 81 iacutegy az oumlsszeguumlk 313 Az oumlsszegzeacutest kettes szaacutemrendszerben iacutegy szemleacuteltetjuumlk

01001101 01001100 01001111 + 01010001 ---------- 100111001

Az eredmeacuteny maacuter keacutet baacutejtot igeacutenyel Egymaacutes mellett elteacuterő sziacutennel feltuumlntetve az eredmeacuteny felső eacutes alsoacute baacutejtjaacutet ezt kapjuk

datahdatal

00000001 00111001

Ha most keacutet bittel jobbra leacuteptetjuumlk a regiszterpaacuter egyuumlttes eacuterteacutekeacutet akkor ezt kapjuk

datahdatal hulladeacutek

xx000000 01001110 01

A fenti műveletneacutel a keacutet bdquoxrdquo azt akarja szimbolizaacutelni hogy teljesen mindegy milyen bitek joumlnnek be oda balroacutel hiszen a felső baacutejtra nem lesz a tovaacutebbiakban szuumlkseacuteguumlnk A bdquohulladeacutekrdquo szoacute pedig arra utal hogy az alsoacute baacutejtboacutel keacutet bitet elvesziacutetuumlnk de emiatt ne keseregjuumlnk hiszen ez jelenti az egeacutesz reacutesz keacutepzeacuteseacutet Ami most az alsoacute baacutejtban előaacutellt az 01001110 binaacuterisan ami decimaacutelisan 78 Ha pedig elosztjuk a neacutegy eredeti szaacutem oumlsszegeacutet 4-gyel akkor 3134 = 7825-oumlt kapunk aminek egeacutesz reacutesze 78 Imiacutegyen assemblyben tudtunk egyfajta aacutetlagolaacutest veacutegezni eacutes most maacuter eacuterthető hogy mieacutert volt fontos hogy az aacutetlagolni kiacutevaacutent adatok darabszaacutema kettő hatvaacutenya legyen

A leacutepteteacutesi művelethez azokat a bitforgatoacute utasiacutetaacutesokat hasznaacuteljuk amelyek C-n keresztuumll leacuteptetnek Iacutegy tudjuk megoldani azt hogy a felső baacutejtboacutel jobbra kinyomott bit megőrződjeacutek C-ben majd onnan beszippanthassuk balroacutel az alsoacute baacutejtba Ez assemblyben nem is olyan bonyolult

MOV R45 5-szoumlr leacuteptetuumlnk jobbraleptetMOV Adatah A-ba toumlltjuumlk a felső baacutejtot RRC A Jobbra forgatjuk Iacutegy legalsoacute bitje C-be keruumll Hogy mi leacutep be balroacutel az eacuterdektelenMOV datahA A moacutedosult felső baacutejtot elmentjuumlk MOV Adatal A-ba toumlltjuumlk az alsoacute baacutejtotRRC A Jobbra forgatjuk ezt is Balroacutel beleacutep a C-ben aacutelloacute bit Jobbra taacutevozik a foumlloumlslegesseacute vaacutelt legalsoacute bit C-be leacutep de ennek maacuter nincs jelentőseacutegeMOV datalA A moacutedosult alsoacute baacutejtot elmentjuumlkDJNZ R4leptet Folytatoacutedik a leacutepteteacutes ciklusa

A [Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal] aacutebra az aacutetlagolaacutes kellemes hataacutesaacutet a mutatja Az itt laacutetottakat eacuterdemes oumlsszehasonliacutetani a [Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll] aacutebraacuteval

228 aacutebra - Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

A [34 feladat] megoldaacutesaacutehoz meacuteg egy nagyon fontos momentumot tisztaacuteznunk kell Az aacutetlagolaacutest ugyan meguacutesztuk lebegőpontos műveletek neacutelkuumll de a hőmeacuterseacuteklet-eacuterteacutekek kiszaacutemiacutetaacutesaacutet a meacutert feszuumlltseacutegből maacuteshogy maacuter nem tudnaacutenk megoldani Ez akkor van iacutegy ha szaacutemolni akarjuk a hőmeacuterseacuteklet-eacuterteacutekeket Ha azonban maacutes megoldaacutest vaacutelasztunk akkor nem lesz szuumlkseacuteguumlnk szaacutemiacutetaacutesokra Ez a bdquomaacutes megoldaacutesrdquo az uacuten look-up table hasznaacutelata A look-up table olyan taacuteblaacutezatot jelent amelyben minden teacutetelesen benne van amire csak szuumlkseacuteguumlnk lehet Look-up table-t hasznaacutelni assemblyben egyeacutebkeacutent nem is akkora bdquoeacutegeacutesrdquo mint amekkoraacutenak elsőre hinneacutenk Sokszor meg lehet veluumlk keruumllni bonyolult szaacutemiacutetaacutesokat melyeket assemblyben gyoumltrelmes lenne megiacuterni Majdnem olyan ez mint a klasszikus eacutertelemben vett fuumlggveacutenytaacuteblaacutezat Ha visszatekintuumlnk a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata]ra akkor koumlnnyű meggondolni hogy a feladat megoldaacutesaacutera alkalmazott uacutej taacuteblaacutezatban csak a keacutetjegyűre csupasziacutetott hexadecimaacutelis szaacutemokra (hiszen a harmadik jegy mindig 9 lenne) eacutes a hőmeacuterseacuteklet szoumlveges eacuterteacutekeacutere lesz szuumlkseacuteguumlnk Valahogy ilyenformaacuten

DB 018h2000DB 01Bh2020DB 01Eh2040DB 020h2060DB 023h2080DB DB

Az adatbaacutejtokkeacutent megadott adathalmaz alkotja a programhoz szuumlkseacuteges look-up table-t Valamely sor első eleme első baacutejtja a felismerendő lecsupasziacutetott feszuumlltseacutegeacuterteacutek (laacutesd [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] 4 oszlop) Ez utaacuten minden sorban tovaacutebbi 5 baacutejt koumlvetkezik 4 baacutejtboacutel aacutell az első elemhez tartozoacute szoumlveges hőmeacuterseacuteklet-eacuterteacutek az oumltoumldik baacutejt pedig a karakterlaacutencot lezaacuteroacute 0 Ezek utaacuten semmi maacutesra nincs szuumlkseacuteguumlnk mint az előaacutelloacute aacutetlagolt meacutereacutesi adatot megkeresni a taacuteblaacutezatban majd kijelezni a hozzaacute tartozoacute hőmeacuterseacuteklet-eacuterteacuteket Hogy meglepeteacutes ne eacuterjen bennuumlnket ceacutelszerű megvizsgaacutelnunk hogy az aacutetlagolt eacuterteacutek egyaacuteltalaacuten szerepel-e a taacuteblaacutezatban Vagyis ha tuacutel alacsony vagy tuacutel magas a hőmeacuterseacuteklet akkor azt kuumlloumln kell jeleznuumlnk Ha ez nem aacutell fenn akkor kereshetuumlnk a taacuteblaacutezatban A kereseacutes koacuted-indirekt ciacutemzeacutessel toumlrteacutenik eacutes az aacutetlagolt meacutereacutesi adat ill a taacuteblaacutezat soraiban szereplő első elemek oumlsszehasonliacutetaacutesaacuteval Ha valamely sorban az első elem eacuterteacuteke nagyobb vagy egyenlő az aacutetlagolt meacutereacutesi adattal akkor az abban a sorban szereplő eacuterteacuteket jelezzuumlk ki Mivel a taacuteblaacutezat sorai rendezettek az első elemre neacutezve mindig egyeacutertelműen megtalaacuteljuk a helyes hőmeacuterseacuteklet-eacuterteacuteket Ehhez persze szuumlkseacuteg van a taacuteblaacutezatba foglaltakon kiacutevuumll eső hőmeacuterseacuteklet felismereacuteseacutere eacutes kuumlloumln kezeleacuteseacutere

Az adatmutatoacute kezeleacutese most kuumlloumlnoumls figyelmet igeacutenyel Tegyuumlk fel hogy ez most a taacuteblaacutezat valamely soraacutenak első elemeacutere mutat Ezt az elemet onneacutet ezek szerint gond neacutelkuumll kiolvashatjuk koacuted-indirekt ciacutemzeacutessel Amennyiben ezt az eacuterteacuteket kerestuumlk 1-gyel megnoumlveljuumlk az adatmutatoacute eacuterteacutekeacutet amely iacutegy a megfelelő hőmeacuterseacuteklet-eacuterteacutekre mint szoumlvegdarabra mutat majd meghiacutevhatjuk a szoumlvegkuumlldő szubrutint A koumlvetkező sor első elemeacutehez azonban nem 1-gyel hanem 6-tal kell megnoumlvelnuumlnk az adatmutatoacute eacuterteacutekeacutet hiszen 5 baacutejtot kell aacutetugranunk (a hőmeacuterseacuteklet-eacuterteacuteket eacutes a szoumlvegzaacuteroacute nullaacutet)

A [34 feladat] megoldaacutesaacutet jelentő koacuted maacuter nem lesz roumlvid de meacuteg mindig nem kell megijednuumlnk tőle A joacute oumlreg DELAY szubrutint most is kihagyjuk a tankoumlnyvbe beemelt reacuteszből A soros porti kommunikaacutecioacute eacutes az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa uacutegy toumlrteacutenik mint a koraacutebbi alkalmazaacutesokban ezeacutert azokat maacuter nem magyaraacutezzuk A

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

look-up table-nek a helytakareacutekossaacuteg veacutegett csak kis reacuteszleteacutet koumlzoumlljuumlk A koacuted teljes egeacuteszeacuteben eacutes reacuteszletes magyaraacutezatokkal egyetemben megtalaacutelhatoacute a koacutedkoumlnyvtaacuterban

A tankoumlnyv ezen pontjaacuten a 80518052-es processzormagoknak maacuter majdnem az oumlsszes geacutepi utasiacutetaacutesaacutet ismerjuumlk Az egyik ami meacuteg hiaacutenyzik a koumlvetkező

CLR A

Ez ekvivalens a

MOV A0

utasiacutetaacutessal csak fele olyan hosszuacute (egybaacutejtos) eacutes fele annyi oacuterajelciklust (egyet) igeacutenyel A mnemonikot maacuter eacutertjuumlk hiszen ilyennel a bitműveletek utasiacutetaacutesainaacutel maacuter talaacutelkoztunk eacutes pontosan ugyanazt jelenti (Clear ndash toumlroumll) Ez az uacutej utasiacutetaacutest a demonstraacutecioacute kedveacuteeacutert felbukkan a koacutedban is

Code47asmjel DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejadatah DATA 031h Az oumlsszeg vaacuteltozoacutejaacutenak felső baacutejtjadatal DATA 032h Az oumlsszeg vaacuteltozoacutejaacutenak alsoacute baacutejtjakorr EQU 12 A korrekcioacutes eacuterteacutek Tapasztalai uacuteton hataacuterozhatoacute megMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutetnextMOV datah0 Nullaacutezzuk az aacutetlagolaacutes vaacuteltozoacutejaacutenakMOV datal0 mindkeacutet baacutejtjaacutetMOV R432 Ennyiszer meacuteruumlnk ebből keacutepezzuumlk az aacutetlagotmeasureSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutesMOV jelADCDATAL A sajaacutetos hőmeacuterseacuteklettartomaacuteny miatt nekuumlnk most az aacutetalakiacutetott eacuterteacutek alsoacute 8 bitje kell csakMOV Adatal Hozzaacuteadjuk datal-hez az aktuaacutelisADD Ajel AD-eacuterteacuteketMOV datalA Elmentjuumlk a kapott alsoacute baacutejtotMOV Adatah Az aacutetviteli bittel egyuumltt 0-t adunkADDC A0 rsquodatahrsquo-hozMOV datahA Elmentjuumlk a kapott felső baacutejtotDJNZ R4measure Folytatjuk a meacutereacutest az aacutetlaghozMOV R45 Ennyiszer jobbra leacuteptetjuumlk aleptet datahdatal 16-bites eacuterteacuteket azazMOV Adatah tulajdonkeacuteppen 2-az-ennyiediken-nelRRC A osztjuk vagyis aacutetlagot keacutepezuumlnk a meacutereacutesiMOV datahA adatokboacutel A felső baacutejtboacutel a C bit segiacutetseacutegeacutevel aacutetleacuteptetjuumlkMOV Adatal a biteket az alsoacute baacutejtba Annak alsoacute bitjeiRRC A elvesznek de ne sirassuk őket A veacutegeacutenMOV datalA datal-ben az aacutetlageacuterteacutek szerepelDJNZ R4leptet Folytatjuk a bitek leacutepteteacuteseacutetMOV Adatal Korrigaacuteljuk a kapott aacutetlageacuterteacuteket aCLR C tapasztalati uacuteton meghataacuterozott korrekcioacutesSUBB Akorr konstanssalMOV datalA Elmentjuumlk a korrigaacutelt eacuterteacuteketMOV Adatal Ha 20 C-naacutel kisebb a meacutert hőmeacuterseacutekletCJNE A016hrelac1 akkor erről uumlzenetet kuumllduumlnk a PC-nekrelac1JC alacsonyCJNE A09Ehrelac2 Ha 30 C-naacutel nagyobb a meacutert hőmeacuterseacutekletrelac2 akkor erről uumlzenetet kuumllduumlnk a PC-nekJNC magasMOV DPTRlookup A look-up table ketdőciacutemeacutenek betoumllteacutese az adatmutatoacutebakeres

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

CLR A A-t nullaacutezukMOVC AA+DPTR Betoumlltjuumlk A-ba a look-up table adott soraacutenak hőmeacuterseacutekleteacuterteacutekeacutet jelentő szaacutemotCJNE Adatalrelac3 Oumlsszehasonliacutetjuk a meacutert aacutetlageacuterteacutekkelrelac3JNC kijelez Ha a taacuteblaacutezat eacuterteacuteke nagyobb vagy egyenlő az aacutetlageacuterteacutekneacutel akkor eleacutertuumlnk a kiiacuterandoacute hőmeacuterseacuteklethezINC DPTR Kuumlloumlnben a koumlvetkező sor joumln a taacuteblaacutezatbanINC DPTR de a koumlvetkező eacuterteacutekhez 6-szor meg kellINC DPTR noumlvelnuumlnk az adatmutatoacutet hiszen a 200INC DPTR stiacutelusuacute adat 4 baacutejt a szoumlvegzaacuteroacute 0 pedigINC DPTR az oumltoumldik Iacutegy a hatodik lesz a koumlvetkezőINC DPTR sor szaacutemadata a koumlvetkező vizsgaacutelathozJMP keres Folytatjuk a look-up table-ben valoacute kereseacutestkijelezINC DPTR Ha joacute sorban voltunk csak 1-gyel kellCALL SENDSTRING noumlvelni az adatmutatoacuten eacutes mehet is a hőmeacuterseacuteklet-eacuterteacutek a PC-nekMOV DPTRfok A kuumlldeni kiacutevaacutent szoumlvegreacutesz veacutegeacutenekCALL SENDSTRING elkuumlldeacutese karakterlaacutenckeacutentidohuzas MOV A100 1 maacutesodpercig vaacuterakozunk hogy neCALL DELAY oumlmoumlljoumln a PC-nek tuacutel gyorsan a meacutert eacuterteacutekek sorozataJMP next Ugrunk vissza a koumlvetkező meacutereacutesi blokkhozalacsonyMOV DPTRhideg A 20 C alatti hőmeacuterseacutekletre vonatkozoacuteCALL SENDSTRING uumlzenet elkuumlldeacutese a PC-nekJMP idohuzasmagasMOV DPTRmeleg A 30 C foumlloumltti hőmeacuterseacutekletre vonatkozoacuteCALL SENDSTRING uumlzenet elkuumlldeacutese a PC-nekJMP idohuzas Az uumlzenetek eacutes a look-up table fok DB C10130hideg DB Tlt198 C10130meleg DB Tgt30 C10130lookupDB 018h2000DB 01Bh2020DB 01Eh2040DB 020h2060DB 023h2080DB DB 092h2920DB 094h2940DB 097h2960DB 099h2980DB 09Ch3000$INCLUDE(UARTIOASM)

Vegyuumlk eacuteszre hogy a tuacutel alacsony ill tuacutel magas hőmeacuterseacutekletek megaacutellapiacutetaacutesaacutenaacutel hagytunk egy kis reacutest a look-up table első eacutes utolsoacute eacuterteacutekeacutehez keacutepest Ennek abban van szerepe hogy mindig biztosan sikeres legyen a look-up table-ben valoacute kereseacutes ill minden eacuterteacutek szerephez is tudjon jutni Ezek a kis reacutesek egyeacutebkeacutent kb 02 degC-t jelentenek a look-up table-ben szereplő eacuterteacutekek leacutepeacuteskoumlze alapjaacuten A koacutedban a reacuteseket jelentő eacuterteacutekeket saacutergaacuteval kiemeltuumlk

A koacuted tartalmaz egy korr nevű korrekcioacutes konstanst (zoumllddel kiemelve) eacutes neacutegy erre vonatkozoacute sort a bitleacutepteteacutes művelete utaacuten (sziacutenessel jeloumllve) Nos az optimaacutelisnak meghataacuterozott ellenaacutellaacutes 2 385 Ω az aacuteramkoumlri panelra viszont csak 2 374 Ω-ot tudtunk foumlltűzni azt is csak keacutet ellenaacutellaacutes kombinaacutecioacutejaacuteval Ez maacuter neacutemi elteacutereacutest eredmeacutenyez a szaacutemolt eacuterteacutekekhez keacutepest Sokkal nagyobb baj azonban az hogy uacutegy tűnik a szaacutemiacutetaacutesnaacutel felteacutetelezett 22 degC nem volt igaz sokkal inkaacutebb lehetett 23-24 degC a szaacutemiacutetoacutegeacutep asztalaacuten amikor megmeacutertuumlk a termisztor ellenaacutellaacutesaacutet Iacutegy amikor előszoumlr bdquoszoacutelalt megrdquo a hőmeacuterőnk kicsit toumlbbet mutatott mint egy bdquorendesrdquo hőmeacuterő amit ellenőrzeacutesi ceacutellal helyeztuumlnk keacutesőbb az asztalra Keacutenyszermegoldaacuteskeacutent vezettuumlk be a korr nevű korrekcioacutes konstanst viszont ezzel a kijelzett hőmeacuterseacuteklet-eacuterteacutekek szinkronizaacutelhatoacutevaacute vaacuteltak az asztalra

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

helyezett bdquorendesrdquo hőmeacuterő eacuterteacutekeivel Tanulsaacuteg legkoumlzelebb előszoumlr a gyakorlatban hozzaacutefeacuterhető ellenaacutellaacutest hataacuterozzuk meg eacutes annak eacuterteacutekeacutevel szaacutemoljunk illetve meacutereacutesek eacutes ne felteacutetelezeacutesek alapjaacuten kalibraacuteljuk a termisztorunkat eacutes akkor nem a veacutegeacuten kell korrigaacutelnunk A tankoumlnyvben meacutegis szaacutendeacutekosan hagytuk benne ezt a kis malőrt hiszen ilyen baacuterkivel előfordulhat akaacuter ceacuteges munka soraacuten is eacutes ilyenkor bizony azt kell neacuteznuumlnk hogy hogyan lehet korrigaacutelni az amuacutegy joacutel megalkotott bdquorendszertrdquo (Gondoljunk csak arra hogy mi toumlrteacutent akkor amikor a Hubble űrteleszkoacutep optikai elemeit tervezteacutek eacutes hogy hogyan hoztaacutek azt helyre)

3 Hőmeacuterseacuteklet-szabaacutelyozaacutesAz előző alfejezetben peacuteldaacutet laacutethattunk arra hogy hogyan meacuterhetuumlnk hőmeacuterseacutekletet a mikrovezeacuterlővel ha termisztort vaacutelasztunk szenzornak Most tűzzuumlnk ki olyan feladatot amely sokkal egyszerűbben megoldhatoacute eacutes tulajdonkeacuteppen sokkal laacutetvaacutenyosabb is lesz (Ennek fejeacuteben persze itt preciacutezkedeacutesről keveacutesbeacute beszeacutelhetuumlnk)

35 feladat

Keacutesziacutetsuumlnk hűtőventilaacutetoros hőmeacuterseacutekletszabaacutelyozoacutet a koumlvetkező moacutedon ha egy adott teacuterreacutesz hőmeacuterseacuteklete (termisztorral meacuterjuumlk) eleacuteri vagy meghaladja a 33 degC-ot akkor ezt a teacuterreacuteszt kezdje el hűteni a hűtőventilaacutetor Ha a hőmeacuterseacuteklet 28 degC alaacute csoumlkken akkor kapcsoljon ki a ventilaacutetor de ne azonnal hanem paacuter maacutesodperc keacuteslelteteacutessel A hőmeacuterseacuteklet 28 degC alatti mivoltaacutet egy zoumlld LED 33 degC feletti mivoltaacutet piros LED a koumlztes tartomaacutenyt narancssaacuterga LED jelezze [Code48]

A feladat szoumlvegeacuteből azonnal koumlvetkezik hogy a szabaacutelyozaacutes szempontjaacuteboacutel itt is hisztereacutezises keacutetaacutellapotuacute megoldaacutest kell megvaloacutesiacutetanunk Ez maacuter nem jelent kihiacutevaacutest hiszen az alkonykapcsoloacutenaacutel sikeresen kezeltuumlk ezt a probleacutemaacutet (laacutesd [32 feladat] [Hisztereacutezis] alfejezet Code45) Ami most eacuterdekesebb lesz az az a teacuteny hogy egy ventilaacutetort illesztuumlnk az aacuteramkoumlruumlnkbe eacutes azt iraacutenyiacutetjuk a termisztorra Ez fogja jelenteni a feladatban előiacutert bdquoteacuterreacuteszrdquo hőmeacuterseacutekleteacutenek befolyaacutesolaacutesaacutet

Ventilaacutetornak baacutetran vaacutelaszthatunk egy leselejtezett asztali PC taacutepegyseacutegeacuteből kioperaacutelt peacuteldaacutenyt ([Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor] aacutebra) Az ilyen ventilaacutetorok aacuteltalaacuteban 12 V taacutepfeszuumlltseacuteget igeacutenyelnek de a toumlbbseacuteguumlk 5 V taacutepfeszuumlltseacuteggel is szeacutepen muzsikaacutel A szerző kezeacutebe keruumllt ventilaacutetoron a koumlvetkező adatok vannak foumlltuumlntetve bdquoDC12V ndash 012Ardquo Nyilvaacutenvaloacutean 012 A 120 mA-t jelent Tűzzuumlk ki a feladatban előiacutertak melleacute most meacuteg azt a ceacutelt is hogy a ventilaacutetort maacuter kuumlloumln taacutepegyseacuteggel hajtsuk meg hogy lehetőleg ne terheljuumlk agyon a szaacutemiacutetoacutegeacutepuumlnk USB portjaacutet Az internetes forraacutesok zoumlme 500 mA terhelhetőseacuteget ad meg egyetlen USB portra Ebbe meacuteg belefeacuterne a mikrovezeacuterlő a haacuterom LED eacutes a ventilaacutetor aacuteramfelveacutetele is de meacutegis hasznaacuteljunk kuumllső taacutepegyseacuteget Veacuteguumll is eljoumltt az ideje ennek ishellip A tapasztalat amuacutegy is azt mutatja hogy ha a mikrovezeacuterlőt ugyanaz az USB port laacutetja el taacutepfeszuumlltseacuteggel mint amelyik a kuumllső aacuteramkoumlrt akkor a kuumllső aacuteramkoumlrnek maacuter 150-200 mA-es aacuteramfelveacuteteleacuteneacutel a mikrovezeacuterlő egyszerűen elaacutejul vagy egyeacuteb anomaacutelis műkoumldeacutesbe kezd Iacutegy LED-ek villogtataacutesaacuten eacutes egy-keacutet fotokapun tuacutel iraacuteny a kuumllső taacutepellaacutetaacutes

229 aacutebra - Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor

Baacuter a ventilaacutetor 12 V-ot igeacutenyelne mi most az emliacutetettek alapjaacuten kuumllső taacutepegyseacutegkeacutent meacutegis +5 V-ot szolgaacuteltatoacute kis egyseacuteget fogunk felhasznaacutelni Hasznaacutelhatnaacutenk teacutenylegesen +12 V-ot adoacute taacutepot is de előkotorhatnaacutenk fioacutekjaink meacutelyeacuteről a reacutegi mobiltelefonjaink mind a mai napig műkoumldő toumlltőtaacutepegyseacutegeit is De megproacutebaacuteljuk a legolcsoacutebban meguacuteszni Olyan megoldaacutessal amit maacutes logikai aacuteramkoumlroumlkhoumlz is minden tovaacutebbi neacutelkuumll

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

hasznaacutelhatunkhellip

Kereskedelmi forgalomban kaphatoacute olyan haacuteloacutezati feszuumlltseacuteggel műkoumldő adapter amely USB csatlakozoacuteval van felszerelve (laacutesd [USB csatlakozoacutes haacuteloacutezati adapter] aacutebra) Hasznaacuteljunk most ilyet Ezt olyan kaacutebellal kapcsolhatjuk a proacutebapanelra amelyet mi magunk fabrikaacutelunk Szerezzuumlnk egy USB-s nyomtatoacutekaacutebelt vagy vaacutegjunk le egyet egy bdquodoumlgloumltt egeacuterrőlrdquo vagy egyeacuteb toumlnkrement eszkoumlzről A kaacutebel szuumlkseacutegtelenneacute vaacutelt veacutegeacutet hasiacutetsuk foumll eacutes a piros (+5 V) eacutes fekete (GND) belső eacuterre (vouml [USB-kaacutebel belső vezeteacutekei] aacutebra) forrasszunk egy-egy tuumlskeacutet eacutes maacuter keacuteszen is vagyunk A pozitiacutev polaritaacutesuacute tuumlske oldalaacutet eacuterdemes megjeloumllnuumlnk nehogy bajt okozzunk a taacutep eacutes a foumlld figyelmetlenseacutegből eredő felcsereacuteleacuteseacutevel (A nyomtatoacutekaacutebel preparaacutelaacutesaacutenaacutel azeacutert legyuumlnk oacutevatosak Taacutevol-keleti gyaacutertmaacutenyoknaacutel ugyanis maacuter laacutettak olyat hogy szegeacuteny agyondolgoztatott meloacutesok felcsereacutelteacutek a vezeteacutekeket eacutes pont a fekete szigeteleacutesű volt a +5 V-os Ezeacutert multimeacuteterrel mindig taacutejeacutekozoacutedjunk)

2210 aacutebra - USB csatlakozoacutes haacuteloacutezati adapter

A kuumllső taacutepellaacutetaacutessal tehaacutet megvolnaacutenk Soha ne felejtsuumlk azonban minden esetben oumlsszefoumlldelni a kuumllső taacutepot eacutes a mikrovezeacuterlőt ([Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera] aacutebra) E neacutelkuumll a leacutepeacutes neacutelkuumll ugyanis aacuteltalaacuteban nem fognak műkoumldni az alkalmazaacutesaink

2211 aacutebra - Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera

A ventilaacutetort tartalmazoacute aacuteramkoumlr a [A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr] aacutebraacuten laacutethatoacute A taacutepfeszuumlltseacuteg sziacutenes jeloumlleacutese a kuumllső taacutepegyseacutegre utal Az aacuteramkoumlr műkoumldeacutese roppant egyszerű A [Tranzisztorok mint kapcsoloacutek] alfejezetben leiacutertak eacutertelmeacuteben a P0-s port laacutebaival felhuacutezoacute-ellenaacutellaacutes neacutelkuumll is vezeacuterelhetuumlnk pnp-tranzisztorokat Ha meggyőződtuumlnk arroacutel hogy a ventilaacutetor aacuteramfelveacutetele 100 mA-neacutel kevesebb akkor baacutetran hasznaacutelhatjuk a BC212-es univerzaacutelis jelerősiacutető tranzisztort (Esetuumlnkben ez a helyzet aacutell fenn) Nagyobb aacuteramfelveacutetelneacutel teljesiacutetmeacutenytranzisztoros Darlington-kapcsolaacutes vagy egyeacuteb erősiacutetőfokozat ajaacutenlhatoacute

2212 aacutebra - A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

A P00-s laacuteb foumlldre huacutezaacutesaacuteval nyitjuk a tranzisztort amely ilyenkor aacuteramot ad a ventilaacutetor motorjaacutenak Tanuljuk meg hogy minden esetben amikor tekercset tartalmazoacute eszkoumlzt vezeacuterluumlnk feacutelvezetőkkel veacutedődioacutedaacutet vagy veacutedődioacutedaacutekat kell alkalmaznunk ([Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera] aacutebra) Ennek oka az hogy amikor a tekercs elenged akkor az egy az addigi aacuteramiraacutennyal ellenteacutetes iraacutenyuacute feszuumlltseacutegimpulzust generaacutel az aacuteramkoumlrben (Ezt egyeacutebkeacutent Laplace-transzformaacutecioacuteval nagy eacutelvezet kiszaacutemolni) A veacutedődioacuteda szerepe az hogy ezt az impulzust levezesse Ennek hiaacutenyaacuteban szaacutemiacutetanunk kell a zaacuteroacuteiraacutenyuacute feacutelvezető-alkatreacutesz vagy -alkatreacuteszek aacutetuumlteacuteseacutere Veacutedődioacutedaacutenak gyengeaacuteramuacute haacuteloacutezatokban gyakorlatilag baacutermilyen dioacutedaacutet vaacutelaszthatunk Ha azonban igen gyors műkoumldeacutesre van szuumlkseacuteg mert peacuteldaacuteul nagy frekvenciaacuteval műkoumldtetuumlnk leacuteptetőmotorokat akkor Schottky-dioacutedaacutek hasznaacutelata javasolt

2213 aacutebra - Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera

Az asztali PC taacutepegyseacutegeacuteből kiműtoumltt ventilaacutetor egyeacutebkeacutent nem igeacutenyel veacutedődioacutedaacutet mert elektromosan kommutaacutelt megoldaacutest tartalmaz De ha ilyen reacuteszleteket nem tudunk az egyseacutegről akkor a dioacutedaacutet soha ne hagyjuk el Aacutertani semmikeacuteppen sem aacutertunk vele az aacuteramkoumlrnek hiaacutenya viszont nagy kaacutert okozhat

A hőmeacuterseacuteklet meacutereacuteseacutere ismeacutet a KTY81-120-as termisztort hasznaacuteljuk Pont uacutegy ahogy az az [A termisztor soros kapcsolaacutesban] aacutebraacuten laacutethatoacute Az aacuteramkoumlri panelunkon ugyanazt a 2 374 Ω-os ellenaacutellaacutes-kombinaacutecioacutet hasznaacuteljuk mint az előző alfejezetben A mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutet (0 csatorna) ismeacutet a termisztorra kapcsoljuk Digitaacutelis multimeacuteterrel a haacuteloacutezati USB-s adapter kimeneti egyenfeszuumlltseacutegeacutet 505 V-nak meacutertuumlk A jelszintek szaacutemiacutetaacutesaacutera keacutesziacutetett KTY81-120xls faacutejlban is ezt aacutelliacutetottuk be a feszuumlltseacutegosztoacute parameacutetereineacutel Ezekkel az adatokkal a [A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek]ban bemutatott eredmeacutenyeket kapjuk

222 taacuteblaacutezat - A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek

T degC UR(T) V D dec D hex D felső 8 bitje hex

28 1522 2 493 9BD 9B

33 1563 2 560 A00 A0

Az AD-aacutetalakiacutetaacutes most is uacutegy fog toumlrteacutenni mint az alkonykapcsoloacutenaacutel ([Egyszerű AD-aacutetalakiacutetaacutes] alfejezet [31 feladat] Code43) azaz a 12-bites eacuterteacuteknek csak a felső 8 bitjeacutet hasznaacuteljuk foumll mert ezekben is adoacutedik akkora

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

kuumlloumlnbseacuteg ami azonosiacutethatoacutevaacute teszi a hőmeacuterseacuteklet-eacuterteacutekekhez tartozoacute feszuumlltseacutegszinteket A koacutedban a koraacutebban maacuter ismertetett megoldaacutes miatt az AD-aacutetalakiacutetoacute konfiguraacutecioacutejaacutet itt maacuter nem magyaraacutezzuk A koacutedkoumlnyvtaacuterban viszont teljes reacuteszletesseacuteggel szerepelnek a kommentek

A hőmeacuterseacuteklet-tartomaacutenyok jeloumlleacuteseacutere 3 LED-et hasznaacutelunk ezeket a keacutenyelmesebb helykihasznaacutelaacutes eacuterdekeacuteben a P2-es port 1 3 eacutes 5 laacutebaacutera koumltjuumlk termeacuteszetesen a megfelelő előteacutet-ellenaacutellaacutessal Ehhez a leacutepeacuteshez maacuter nem eacutereztuumlk szuumlkseacutegesnek kuumlloumln aacuteramkoumlri rajz keacutesziacuteteacuteseacutet hiszen a tankoumlnyvben eddig leiacutertak alapjaacuten a LED-ek bekoumlteacuteseacutenek maacuter magaacutetoacutel eacutertetődőnek kell lennie

A hardveres uumlgyletek taacutergyalaacutesa utaacuten joumljjenek most a szoftveres finomsaacutegok A LED-es kijelzeacutes kuumlloumln kezelhető ez haacuteromaacutellapotuacute rendszert jelent de fuumlggetlen lesz a ventilaacutetor kapcsolgataacutesaacutetoacutel A ventilaacutetor bekapcsolt aacutellapotaacutehoz kuumlloumln jelzőbitet rendeluumlnk (forog) hogy teljesiacuteteni tudjuk a keacutesleltetett kikapcsolaacutest a visszahűteacutes utaacuten Az alsoacute hőmeacuterseacutekletszinthez a [A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek]ban a 9B hexadecimaacutelis eacuterteacutek tartozik A programban majd enneacutel 1-gyel nagyobb eacuterteacuteket adunk meg hataacuternak mert a kisebb relaacutecioacutet hasznaacuteljuk az oumlsszehasonliacutetaacuteskor (Veacuteletlenuumll uacutegy joumltt ki a leacutepeacutes hogy 1 degC kuumlloumlnbseacuteg igen joacute koumlzeliacuteteacutessel egyseacutegnyi elteacutereacutest jelent a 8 biten aacutebraacutezolt eacuterteacutekek koumlzoumltt) A hőmeacuterseacuteklet-szabaacutelyozaacuteshoz melleacutekeluumlnk folyamataacutebraacutet de abban csak a hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacuteseacutet taglaljuk A LED-ek kapcsolgataacutesaacutet sajaacutetos moacutedon de egyeacutertelműen jeloumlljuumlk laacutesd [A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese] aacutebra

2214 aacutebra - A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Az alkalmazaacutes laacutetvaacutenyossaacutega elleneacutere a koacuted roumlvidnek nevezhető A joacute oumlreg DELAY szubrutinunkat most sem tuumlntetjuumlk foumll

Code48asmORG 0060hvoltage DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejagreen BIT P25 A zoumlld LED bitjeorange BIT P23 A narancssaacuterga LED bitjered BIT P21 A piros LED bitjefan BIT P00 A ventilaacutetor kapcsoloacutebitje (0=ON 1=OFF)hideg EQU 09Ch Az alsoacute hőmeacuterseacuteklet-hataacuternaacutel (28 C) 1-gyel nagyobb eacuterteacutek (Majd a kisebb (lt) relaacutecioacutera jaacutetszunkmeleg EQU 0A0h A felső hőmeacuterseacuteklet-hataacuter (33 C) eacuterteacutekeforog BIT 00h A ventilaacutetor bekapcsolt aacutellapotaacutet őrző jelzőbit

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

MAINMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutetCLR forog A ventilaacutetor nem forognextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnkJB SCONV$MOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageAMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-etADD Avoltage A-ban maacuter a helyes feszuumlltseacutegeacuterteacutek lesz az oumlsszeadaacutes utaacutenCJNE Ahidegeval1 Kisebb a hőmeacuterseacuteklet mint az alsoacute hataacutereval1JC cold Ha igen ugrunk a hideg helyzet kezeleacuteseacutehezCJNE Amelegeval2 Nagyobbegyenlő a hőmeacuterseacuteklet mint a felső hataacutereval2JNC warm Ha igen ugrunk a meleg helyzetet kezelniSETB green Ide a koumlztes esetben csorog a programSETB red Zoumlld eacutes piros LED-ek OFFCLR orange Narancs LED ONMOV A50 05 s vaacuterakozaacutesCALL DELAYJMP next Ugraacutes vissza meacuterniwarm A meleg helyzet kezeleacuteseSETB orange Narancs eacutes zoumlld LED OFFSETB greenCLR red Piros LED ONJNB forogbekapcs Ha meacuteg nem forog a ventilaacutetor akkor bekapcsoljukMOV A50 Kuumlloumlnben 05 sCALL DELAY vaacuterakozaacutes eacutesJMP next iraacuteny vissza meacuternibekapcsCLR fan Bekapcsoljuk a ventilaacutetortSETB forog Beaacutelliacutetjuk a bekapcsolt aacutellapot jelzőbitjeacutetMOV A200 2 s vaacuterakozaacutesCALL DELAYJMP next Iraacuteny vissza meacuternicold A hideg helyzet kezeleacuteseSETB orange Narancs eacutesSETB red piros LED-ek OFFCLR green Zoumlld LED ONJB forogfujmeg Ha be van kapcsolva a ventilaacutetor akkor nem kapcsoljuk ki azonnal Kis vaacuterakozaacutes joumlnMOV A50 Kuumlloumlnben 05 sCALL DELAY vaacuterakozaacutes majdJMP next Iraacuteny vissza meacuternifujmegMOV A200 4 x 2 s vaacuterakozaacutes majdCALL DELAYCALL DELAYCALL DELAYCALL DELAYSETB fan a ventilaacutetor kikapcsolaacutesaCLR forog A kikapcsolt aacutellapot beaacutelliacutetaacutesaJMP next Iraacuteny vissza meacuterni

Az alkalmazaacutes gyakorlati kiproacutebaacutelaacutesa soraacuten azt tapasztaltuk hogy amikor a ventilaacutetor lehűti a termisztort eacutes a hőmeacuterseacuteklet uacutejra eleacuteri az alsoacute hataacutert akkor a ventilaacutetor tovaacutebbi 8 maacutesodperces uumlzeme utaacuten meacuteg előfordul hogy a hőmeacuterseacuteklet uacutejra foumllkuacuteszik az aacutetmeneti tartomaacutenyba de utaacutena maacuter szeacutepen stabilizaacuteloacutedik az alacsony hőmeacuterseacuteklet Ezt a zoumlld eacutes narancssaacuterga LED-ek ki-be kapcsoloacutedaacutesa mutatja Olyan is előfordult hogy a narancssaacuterga LED meacuteg keacutetszer-haacuteromszor is foumllvillant egyre roumlvidebb ideig mire a zoumlld LED feacutenye aacutellandoacutesult

Created by XMLmind XSL-FO Converter

23 fejezet - MegvilaacutegiacutetaacutesszabaacutelyozoacuteA [Alkonykapcsoloacute] fejezetben alkonykapcsoloacutet keacutesziacutetettuumlnk Maacuter az is szabaacutelyozaacutes volt raacuteadaacutesul hisztereacutezissel de meacuteg nem bdquovolt az igazirdquo Ezeket a szavakat azeacutert hasznaacuteljuk mert keacutet jelszintneacutel billent a rendszer ide vagy oda aztaacuten ezzel el is inteacuteztuumlk a szabaacutelyozaacutest Igaz pontosan ez volt a feladat ([32 feladat]) iacutegy szoacute nem eacuterheti a haacutez elejeacutet Amit viszont most fogunk alkotni az maacuter sokkal kifinomultabb lesz Folyamatos feszuumlltseacutegkoumlvető szabaacutelyozaacutest fogunk megvaloacutesiacutetani Elvileg mindent tudunk is hozzaacute hardveres uacutejdonsaacuteg nem lesz Az algoritmus lesz az eddigiektől elteacuterő

36 feladat

Keacutesziacutetsuumlnk folytonos uumlzemmoacuteduacute megvilaacutegiacutetaacutesszabaacutelyozoacutet A feacutenyforraacutes 3 feheacuter LED-ből aacutelljon melyek egy feacutenyeacuterzeacutekelőre iraacutenyulnak A 3 LED-del tartsuk aacutellandoacute szinten a megvilaacutegiacutetaacutest a szenzor poziacutecioacutejaacuteban (a fizikailag lehetseacuteges hataacuterokon beluumll) [Code49]

A szenzor aacuteramkoumlre pontosan ugyanaz lesz mint amit a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten bemutattunk azzal a kuumlloumlnbseacuteggel hogy most nem lesz szuumlkseacuteguumlnk az emitter-ellenaacutellaacutessal paacuterhuzamosan kapcsolt kondenzaacutetorra Ennek oka eacuteppen a gyors feszuumlltseacutegkoumlveteacutesben keresendő a kondenzaacutetor keacuteslelteteacutest okozna jel stabilizaacuteloacutedaacutesaacuteban ami feacutelrevinneacute a szabaacutelyozaacutesunkat A haacuterom LED-hez kuumlloumln aacuteramkoumlri rajz megadaacutesaacutet most is foumlloumlslegesnek tartjuk ezt az olvasoacute maacuter maga is foumll tudja eacutepiacuteteni az eddigiek utaacuten A feszuumlltseacuteg meacutereacutese az emitter-ellenaacutellaacuteson pontosan ugyanuacutegy toumlrteacutenik mint Code44-ben eacutes Code45-ben Ami most izgalmasabb lesz az az algoritmus Az bdquoizgalmasrdquo szoacute persze relatiacutev annyit mindenesetre elmondhatunk hogy ebben a tankoumlnyvben ilyet meacuteg nem csinaacuteltunk Műkoumldjoumln ugyanis az alkalmazaacutes uacutegy hogy ha a szenzor besugaacuterzaacutesa adott szint alaacute csoumlkken akkor fokozzuk a LED-ek feacutenyerősseacutegeacutet Mindaddig amiacuteg el nem eacuterjuumlk a kiacutevaacutent besugaacuterzaacutesi szintet Ha a koumlrnyezeti feacutenyviszonyok miatt a szenzor besugaacuterzaacutesa emelkedik akkor a LED-ek feacutenyerősseacutegeacutet csoumlkkentjuumlk Mindaddig amiacuteg el nem eacuterjuumlk a kiacutevaacutent szintet Egy nagyon keskeny hisztereacutezisnek helyet hagyunk a szoftverben haacutetha a gyakorlati tesztek soraacuten szuumlkseacutegesseacute vaacutelik A noumlveleacutes eacutes a csoumlkkenteacutes leacutepeacutesről leacutepeacutesre toumlrteacutenik eacutes ez lesz a fő kuumlloumlnbseacuteg a mostani megoldaacutes eacutes az egyszerű alkonykapcsoloacute koumlzoumltt A LED-ek feacutenyerősseacutegeacutenek vaacuteltoztathatoacutesaacutegaacutet PWM-jellel oldjuk meg

A gyakorlati megvaloacutesiacutetaacutes soraacuten a LED-ek a proacutebapanelon kb 6 cm-re helyezkedtek el a fototranzisztortoacutel (tokozaacutes homlokpontjaacutetoacutel tokozaacutes homlokpontjaacuteig laacutesd [A LED-ek elhelyezkedeacutese a fototranzisztorral szemben] aacutebra) Mindhaacuterom LED-et a fototranzisztorra iraacutenyiacutetottuk A LED-ek aacutellandoacute bekapcsolt aacutellapotaacuteban a Code43 programmal meacutertuumlk a fototranzisztor emitter-ellenaacutellaacutesaacuten a feszuumlltseacuteget (Code43-ba eacuteppen csak a LED-ek bekapcsolaacutesaacutenak soraacutet szuacutertuk be) Azt tapasztaltuk hogy ha a LED-ek ellenaacutellaacutesaacutet 1 kΩ-nak vaacutelasztjuk akkor a meacutert feszuumlltseacuteg 24 V Ezzel az eacuterteacutekkel eleacutegedettek lehettuumlnk mert nem eacuteri el a maximaacutelis eacuterteacuteket de koumlzel aacutell ahhoz

231 aacutebra - A LED-ek elhelyezkedeacutese a fototranzisztorral szemben

A PWM-jel beaacutelliacutetaacutesainaacutel nagyobb frekvenciaacutet vaacutelasztunk mint a [PWM-jelek] fejezetben bemutatott megoldaacutesoknaacutel Vessuumlnk uacutejra egy pillantaacutest a [A PWMCON SFR parameacuteterei]ra eacutes a [A PWM-generaacutetor 1 uumlzemmoacutedja] aacutebraacutera A

MOV PWMCON00010011b

beaacutelliacutetaacutes a sziacutenes teacutetelek sorrendjeacuteben azt jelenti hogy (eacuterdektelen bit) 1 PWM-uumlzemmoacuted nincs tovaacutebbi frekvenciaosztaacutes a mag oacuterajeleacutet hasznaacuteljuk Legyen a PWM1HPWM1L regiszterpaacuter eacuterteacuteke 0800h Ez decimaacutelisan 2 048-at jelent A jel frekvenciaacuteja ezek szerint 16 777 216 Hz 2 048 = 8 192 Hz lesz eacutes ez is marad mert nem alkalmazunk tovaacutebbi frekvenciaosztoacutet A LED-ek feacutenyerősseacutegeacutet pedig nem maacutessal mint a PWM-jel kitoumllteacutesi eacuterteacutekeacutevel fogjuk szabaacutelyozni (Ne felejtsuumlk hogy alacsony jelszint eseteacuten vilaacutegiacutetanak a LED-

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

ek) A kitoumllteacutesi teacutenyezőhoumlz 129 fokozatot rendeluumlnk A PWM0HPWM0L regiszterpaacuter eacuterteacutekeacutet oly moacutedon fogjuk aacutelliacutetani hogy az a koumlvetkező eacuterteacutekeket vegye foumll 0000h 0010h 0020h hellip 07F0h 0800h Vegyuumlk eacuteszre hogy ezeknek a neacutegyjegyű hexadecimaacutelis szaacutemoknak csak a keacutet koumlzeacutepső szaacutemjegyeacutet eacuterinti a fokozatok aacutelliacutetaacutesa (zoumllddel kiemelve) iacutegy ez az elkuumlloumlniacutetett eacuterteacutek egy baacutejton taacuterolhatoacute sőt csak 0-toacutel 80h-ig azaz 128-ig terjed A kitoumllteacutesi teacutenyező ilyeteacuten beaacutelliacutetaacutesaacutet hasonloacutean fogjuk megoldani mint az AD-jel feacutelbaacutejtjainak kiemeleacuteseacutet eacutes azokboacutel uacutejabb baacutejt oumlsszeszereleacuteseacutet A [A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese] aacutebra erre mutat peacuteldaacutet konkreacutet eacuterteacutekkel (6Ah) ahol a kitoumllteacutesi teacutenyező vaacuteltozoacutejaacutet a funkcioacutejaacutenak megfelelően lumint-nak neveztuumlk el (Luminous Intensity magyarul feacutenyerősseacuteg)

232 aacutebra - A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese

A kitoumllteacutesi teacutenyező beaacutelliacutetaacutesaacutet roumlgtoumln komplett szubrutinkeacutent (PWMVALUE) mutatjuk be az alaacutebbiakban

A PWM-jel kitoumllteacutesi teacutenyezőjeacutet beaacutelliacutetoacute szubrutin PWMVALUEMOV PWMCON0 A PWM-jel leaacutellMOV Alumint A-ba toumlltjuumlk lumint eacuterteacutekeacutetANL A11110000b Megtartjuk a felső feacutelbaacutejtot toumlroumlljuumlk az alsoacutetSWAP A Megcsereacuteljuumlk a keacutet feacutelbaacutejtotMOV PWM0HA A kapott eacuterteacuteket betesszuumlk a PWM0H regiszterbeMOV Alumint Ismeacutet A-ba toumlltjuumlk lumint eacuterteacutekeacutetANL A00001111b Megtartjuk az alsoacute feacutelbaacutejtot toumlroumlljuumlk a felsőtSWAP A Megcsereacuteljuumlk a keacutet feacutelbaacutejtotMOV PWM0LA A kapott eacuterteacuteket betesszuumlk a PWM0L regiszterbeMOV PWMCON00010011b Bekapcsoljuk a PWM-jeletRET

A PWM-jel kitoumllteacutesi teacutenyezőjeacutenek szubrutinkeacutent valoacute alkalmazaacutesa javiacutetja a főprogram aacutettekinthetőseacutegeacutet A koacuted e neacutelkuumll sem lenne bonyolult vagy zavaros de eacuteppen ideje a bdquostrukturaacutelt assemblyrdquo iraacutenyaacuteba mutatoacute programiacuteraacutes feleacute mozdulnunk

Ha maacuter ilyen nagy kedvet kaptunk a szubrutinokhoz iacuterjuk meg ilyen formaacuteban az AD-aacutetalakiacutetaacutesi reacuteszt is A koacutedreacuteszlet nagyon-nagyon hasonliacutet a [Egyszerű AD-aacutetalakiacutetaacutes] alfejezetben megadott a 12-bites eacuterteacutekből a felső 8 bitet levaacutelasztoacute reacuteszhez de a rend kedveacuteeacutert teljes terjedelmeacuteben koumlzoumlljuumlk magaacutet a szubrutint legfoumlljebb a kommenteket fogjuk roumlvidebbre Az AD-eacuterteacutek felső 8 bitje visszateacutereacuteskor az akkumulaacutetorban talaacutelhatoacute ez lesz a parameacuteteraacutetadaacutes a rutin eacutes főprogram koumlzoumltt

AD-aacutetalakiacutetaacutes eacutes a jeleacuterteacutek felső 8 bitjeacutenek betoumllteacutese az akkumulaacutetorba MEASURESETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnkJB SCONV$ MOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageAMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felső

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

SWAP A 4-etADD Avoltage A-ban most maacuter a kiacutevaacutent jeleacuterteacutek leszRET

A [36 feladat] megoldaacutesaacutet jelentő koacuted a keacutet szubrutinnal maacuter rendkiacutevuumll toumlmoumlrnek fog hatni Az eleacuterni kiacutevaacutent megvilaacutegiacutetaacutesi szint megadaacutesaacutehoz a koacutedban az EQU fordiacutetoacutei direktiacutevaacutet hasznaacuteljuk a keacutet eacuterteacutek pedig a level1 eacutes level2 neacutevre fog hallgatni Egymaacuteshoz keacutepesti elteacutereacutesuumlk jelenti a hisztereacutezist Ha kuumlloumlnbseacuteguumlk pontosan 1 akkor level1 eacuterteacuteke jelenti az eleacuterni kiacutevaacutent szintet A P27-es laacutebon megjelenő PWM-jelet a C bit segiacutetseacutegeacutevel maacutesoljuk aacutet a haacuterom vilaacutegiacutetaacutesra hasznaacutelt feheacuter LED-nek megfelelő portbitre (Ezeknek a biteknek a szaacutemozaacutesa most is a keacutenyelmesebb helykihasznaacutelaacutes eacuterdekeacuteben alakult uacutegy ahogy az az alaacutebbiakban laacutethatoacute)

Code49asmORG 0060h A teacutenyleges programkoacuted kezdetelumint DATA 030h A feacutenyerősseacuteg vaacuteltozoacutejavoltage DATA 031h A meacutert feszuumlltseacuteglevel1 EQU 80 Az eleacuterni kiacutevaacutent feszuumlltseacutegszint Ha enneacutel kisebbet meacuteruumlnk noumlveljuumlk a LED-ek feacutenyerősseacutegeacutetlevel2 EQU 81 Ha ezt a feszuumlltseacutegszintet eleacutertuumlk (vagy enneacutel nagyobbat) csoumlkkentjuumlk a LED-ek feacutenyerősseacutegeacutetMAINMOV ADCCON110001100b Az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa Bekapcsolaacutes eacutes 4 oacuterajelciklus hagyaacutesa az aacutetalakiacutetaacutesra 0 csatornaMOV PWM1H008h A PWM-generaacutetor konfiguraacutelaacutesaMOV PWM1L000h Az alapfrekvencia meghataacuterozaacutesa 0800h = = 2048 azaz f = 167772162048 Hz = = 8192 HzMOV lumint64 Kezdeti PWM-eacuterteacutek (0-toacutel 128-ig mehet)CALL PWMVALUE A PWM-jelhez szuumlkseacuteges eacuterteacutekek beiacuteraacutesa a regiszterekbe SzubrutinsignalMOV CP27 A PWM-jel leemeleacutese a P27 bitrőlMOV P21C Ennek az eacuterteacuteknek a kirakaacutesa a haacuteromMOV P23C LED portbitjeacutereMOV P25CCALL MEASURE Feszuumlltseacutegmeacutereacutes AD-aacutetalakiacutetaacutessalCJNE Alevel1eval3 Ha a jelszint level1 alatt van akkoreval3JC lighten noumlveljuumlk a feacutenyerőtCJNE Alevel2eval4 Ha a jelszint level2 vagy annaacutel nagyobbeval4JNC darken csoumlkkentjuumlk a feacutenyerőtJMP signal Uacutejra meacuteruumlnkdarkenMOV Alumint Soumlteacutetiacutetuumlnk a LED-enCJNE A128eval1 Eleacutert maacuter a maximumot a kitoumllteacutesi teacutenyezőeval1JNC signal Ha igen visszaugrunkINC lumint Ha nem noumlveljuumlk a kitoumllteacutesi teacutenyezőt azaz csoumlkkentjuumlk a LED-ek feacutenyerősseacutegeacutetCALL PWMVALUE A PWM-jel beaacutelliacutetaacutesaacutenak rutinja koumlvetkezikJMP signal Ugraacutes vissza meacuternilightenMOV Alumint Vilaacutegosiacutetunk a LED-enCJNE A1eval2 Eleacuterte maacuter a minimumot a kitoumllteacutesi teacutenyezőeval2JC signal Ha igen (0lt1) akkor visszaugrunkDEC lumint Ha nem akkor csoumlkkentjuumlk a kitoumllteacutesi teacutenyezőt azaz noumlveljuumlk a LED-ek feacutenyerősseacutegeacutetCALL PWMVALUE A PWM-jel beaacutelliacutetaacutesaacutenak rutinja koumlvetkezikJMP signal Ugraacutes vissza meacuterni

Lehet hogy első laacutetaacutesra nem tűnik biztosnak az hogy a PWM-jel frekvenciaacutejaacutet tartani tudja a főprogram a bitek maacutesolgataacutesaacuteval eacutes a szubrutinok hiacutevogataacutesaacuteval de a gyakorlati proacuteba azonnal megadja a vaacutelaszt A program

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

meglehetősen gyorsan fut iacutegy semmifeacutele perioacutedusveszteacutes vagy elcsuacuteszaacutes nem fog bekoumlvetkezni A PWM-jel 8 192 Hz-es frekvenciaacuteja eltoumlrpuumll az ADuC 842-es default 2 097 152 Hz-es oacuterajele mellett iacutegy mindenre jut idő Leacutenyegesen hosszabb főprogram termeacuteszetesen maacuter okozhatna probleacutemaacutet a frekvencia tartaacutesaacuteban

Created by XMLmind XSL-FO Converter

24 fejezet - Leacuteptetőmotor vezeacuterleacuteseA leacuteptetőmotorok nagy aacuteltalaacutenossaacutegban olyan egyenaacuteramuacute villamos motorok melyek fő feladata nem a folyamatos forgaacutes hanem meghataacuterozott szoumlgelfordulaacutessal jaacuteroacute leacutepeacutesek veacutegrehajtaacutesa Haacuterom fő tiacutepusukat szokaacutes megkuumlloumlnboumlztetni vaacuteltozoacute reluktanciaacutejuacute (tipikusan 75deg 15deg leacutepeacuteskoumlzzel) aacutellandoacute maacutegnesű (tipikusan 18deg 75deg 15deg 30deg leacutepeacuteskoumlzzel) eacutes hibrid leacuteptetőmotorok (tipikusan 09deg eacutes 18deg leacutepeacuteskoumlzzel) A leacuteptetőmotorok feleacutepiacuteteacuteseacutenek taacutergyalaacutesa nem ennek a tankoumlnyvnek a feladat sokkal inkaacutebb azok vezeacuterleacutese lesz az A leacuteptetőmotorok tiacutepusainak feleacutepiacuteteacuteseacutenek uumlzemmoacutedjaacutenak eacutes vezeacuterleacuteseacutenek hatalmas szakirodalma van Roumlvid oumlsszefoglaloacutet talaacutelunk peacuteldaacuteul a [8] eacutes [9] szakkoumlnyvben eacutes szeacutep illusztraacutecioacutekkal ellaacutetott magyaraacutezatokat a [10] weboldalon

A leacuteptetőmotor forgoacutereacuteszeacutet az aacutelloacutereacuteszre telepiacutetett jellemzően egyenaacuteramuacute tekercsekkel veszik koumlrbe A tekercsek megfelelő sorrendű be- eacutes kikapcsolaacutesaacuteval eleacuterhető hogy a forgoacutereacutesz mindig meghataacuterozott meacuterteacutekű elfordulaacutest veacutegezzen Ezekben a motorokban kefeacutere nincsen szuumlkseacuteg Egy-egy meghataacuterozott poziacutecioacuteba valoacute beaacutellaacuteskor alakul ki a maacuter emliacutetett szakszoacuteval a minimaacutelis maacutegneses reluktancia Ilyenkor a legroumlvidebbek a maacutegneses erővonalak

A leacuteptetőmotorokat előszeretettel hasznaacuteljaacutek mechatronikai alkalmazaacutesokban robotkarokban olvasoacutefejek iacuteroacutefejek mozgataacutesaacutenaacutel nyomtatoacutekban rajzgeacutepekben aacuteramkoumlrmaroacute geacutepekben preciacutezioacutes esztergaacutekban stb Preciacutezioacutes alkalmazaacutesokhoz jellemzően hibrid leacuteptetőmotorokat hasznaacutelnak Ezekre igaz az az aacutelliacutetaacutes hogy ha a motor aacutelloacutereacuteszeacuten n faacutezis (tekercspaacuter vagy ketteacuteosztott tekercs) a forgoacutereacuteszeacuten pedig m fog talaacutelhatoacute akkor a teljes koumlrbefordulaacutes nm leacutepeacutesből aacutell

Ebben a tankoumlnyvben keacutet szaacutemunkra fontos elvi tiacutepus roumlvid leiacuteraacutesaacutet adjuk meg hasznaacutelni pedig bipolaacuteris leacuteptetőmotort fogunk

1 Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorokAz aacuteramiraacuteny szempontjaacuteboacutel a leacuteptetőmotorok keacutet nagy osztaacutelyaacutet keacutepezik az unipolaacuteris eacutes a bipolaacuteris leacuteptetőmotorok Az unipolaacuteris szoacute azt jelenti hogy baacutermely tekercsről legyen is szoacute abban uumlzem koumlzben az aacuteram iraacutenya nem vaacuteltozik meg Ki- eacutes bekapcsolaacutes termeacuteszetesen toumlrteacutenhet eacutes toumlrteacutenik is A [Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra unipolaacuteris leacuteptetőmotor veacutegtelenuumll leegyszerűsiacutetett szemleacuteleteacutet mutatja A forgoacutereacuteszt jelkeacutepező nyilat itt aacutellandoacute maacutegneskeacutent kell eacutertelmeznuumlnk Az egyes vezeacuterlőjelek (1a 1b 2a 2b) alacsony feszuumlltseacutegszintre (foumlldre) toumlrteacutenő aacutelliacutetaacutesaacuteval mindig egyetlen tekercsben indul meg az aacuteram azaz egyetlen tekercs műkoumldik elektromaacutegneskeacutent A toumlbbi vezeacuterlőjel ekoumlzben magas feszuumlltseacutegszinten uumll Az aacutebraacuten a nyiacutellal jelkeacutepezett forgoacutereacutesz egyszeri koumlrbefordiacutetaacutesaacutehoz a koumlvetkező jelsorozatra van szuumlkseacuteg (a nevezett jel mindig foumlldpotenciaacutelt jelent) 1a 2a 1b 2b A jelsorozat ismeacutetleacuteseacutenek kezdeteacuten a koumlrbefordulaacutes megtoumlrteacutent

241 aacutebra - Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

Ha mindig csak egyetlen tekercs műkoumldik elektromaacutegneskeacutent akkor egeacuteszleacutepeacuteses uumlzemmoacutedroacutel beszeacuteluumlnk Ha ellenben keacutet szomszeacutedos tekercs is elektromaacutegneskeacutent uumlzemel akkor a forgoacutereacutesz a kettő koumlzeacute fog beaacutellni eacutes feacutelleacutepeacuteses uumlzemmoacuted valoacutesul meg A szemleacuteltetőaacutebraacuten az ehhez szuumlkseacuteges jelsorozat 1a 1a-2a 2a 2a-1b 1b 1b-2b 2b 2b-1a A jelsorozat ismeacutetleacuteseacutenek első elemeacuteneacutel lesz a koumlrbefordulaacutes teljes

Unipolaacuteris leacuteptetőmotort olcsoacuten beszerezni (esetleg toumlnkrement heacutetkoumlznapi eszkoumlzből kioperaacutelni) meglehetősen neheacutezkes Eacuterdekes moacutedon ritkaacuten fordul elő otthoni eszkoumlzeinkben Bipolaacuteris leacuteptetőmotort azonban igen joacute eseacutellyel talaacutelunk reacutegebbi CD-iacuteroacutekban eacutes tintasugaras nyomtatoacutekban Mindkeacutet eszkoumlzben a fej mozgataacutesaacutehoz hasznaacuteljaacutek (Ezekben esetben preciacutezioacutes alkalmazaacutesroacutel van szoacute iacutegy gyaniacutethatoacutean hibrid leacuteptetőmotorokkal talaacutelkozunk)

A [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra bipolaacuteris leacuteptetőmotor leegyszerűsiacutetett modelljeacutet mutatja A forgoacutereacuteszt jelkeacutepező nyilat itt is aacutellandoacute maacutegneskeacutent kell eacutertelmeznuumlnk Enneacutel az elrendezeacutesneacutel nincsen szuumlkseacuteg kuumlloumln taacutepvezeteacutekre viszont az aacuteramiraacuteny műkoumldeacutes koumlzben vaacuteltozni fog a tekercsekben Iacutegy aacutellandoacute aacuteramerősseacuteget felteacutetelezve haacuterom eset aacutellhat elő egyik iraacutenyba folyik az aacuteram maacutesik iraacutenyba folyik az aacuteram nem folyik aacuteram A [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten bemutatott modell szerint a teljes koumlrbefordulaacuteshoz egeacuteszleacutepeacuteses uumlzemmoacutedban a koumlvetkező jelszintek szuumlkseacutegesek (a toumlbbi nulla szinten uumll) (ndash1a +1b) (ndash2a +2b) (+1a ndash1b) (+2a ndash2b) Feacutelleacutepeacuteses uumlzemmoacuted itt is megvaloacutesiacutethatoacute (ndash1a +1b)

(ndash1a +1b ndash2a +2b) (ndash2a +2b) (ndash2a +2b +1a ndash1b) (+1a ndash1b) (+1a ndash1b +2a ndash2b) (+2a ndash2b) (+2a ndash2b ndash1a +1b) Az előbbi keacutet jelsorozatnaacutel a negatiacutev előjel csak hangsuacutelyozza a polaritaacutest a negatiacutev jelet kiveacutetelesen azonosiacutethatjuk a foumlldpotenciaacutellal (GND) is Figyeljuumlk meg a [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten hogy keacutet-keacutet tekercs nem fuumlggetlen egymaacutestoacutel iacutegy ezekneacutel sokkal inkaacutebb indokolt a tekercspaacuter megnevezeacutes

242 aacutebra - Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve

Leacuteptetőmotorok parameacutetereineacutel talaacutelkozunk meacuteg a keacutetfaacutezisuacute haacuteromfaacutezisuacute stb szakszavakkal is Ez azt jelenti hogy haacuteny fuumlggetlen tekercset (vagy tekercspaacutert) tartalmaz a motor Ennek eacutertelmeacuteben a [Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten laacutethatoacute seacutema neacutegyfaacutezisuacute (de unipolaacuteris) leacuteptetőmotort a [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten laacutethatoacute seacutema viszont csak keacutetfaacutezisuacute (de bipolaacuteris) leacuteptetőmotort szemleacuteltet

2 Bipolaacuteris leacuteptetőmotorok vezeacuterleacuteseA bipolaacuteris leacuteptetőmotorok tekercsein mindkeacutet iraacutenyban folyhat aacuteram Ennek biztosiacutetaacutesa nem magaacutetoacutel eacutertetődő de valakinek egyszer kipattant az agyaacuteboacutel az a megoldaacutes amit ma H-hiacutednak nevezuumlnk A [H-hiacuted] aacutebraacuten a H-hiacuted leacutenyegi vaacutezlata laacutethatoacute baacutermifeacutele ellenaacutellaacutesok neacutelkuumll A H-hiacuteddal egyetlen tekercsen tudjuk vaacuteltoztatni az aacuteram iraacutenyaacutet Ha az A jelszint alacsony eacutes a B magas akkor a bal felső eacutes a jobb alsoacute tranzisztor kinyit a maacutesik kettő lezaacuter Ekkor a tekercsen az aacutebra szerinti elrendezeacutesben jobbra folyik az aacuteram Amennyiben a keacutet jelszintet megcsereacuteljuumlk A-n eacutes B-n akkor az aacuteram a tekercsen balra folyik Azonos jelszintneacutel nem folyik aacuteram a tekercsen Nagyon fontos hogy veacutedődioacutedaacutek alkalmazaacutesaacutera itt is szuumlkseacuteg van Ezek hiaacutenyaacuteban a tekercs aacuteramaacutenak kikapcsolaacutesakor vagy eacuteppen iraacutenyaacutenak megvaacuteltoztataacutesakor a keletkező feszuumlltseacutegimpulzus aacutetuumltheti a tranzisztorokat

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

243 aacutebra - H-hiacuted

Annyi megjegyzeacutest meacuteg szeretneacutenk a H-hiacutedhoz hozzaacutefűzni hogy ha ilyen elvi kapcsolaacutes utaacuten kutakodunk a neten akkor igen gyakran azt a megoldaacutest talaacuteljuk amikor mind a neacutegy tranzisztor npn (vagy eacuteppen fordiacutetva pnp) tiacutepusuacute a tranzisztorok baacutezisai pedig nincsenek oumlsszekoumltve Aki azonban rakott maacuter oumlssze tranzisztorokboacutel H-hidat az garantaacuteltan belefutott abba a probleacutemaacuteba hogy neacutegy azonos tranzisztor eseteacuten elteacuterő baacutezisellenaacutellaacutesokat kell vaacutelasztanunk a bdquofelsőrdquo ill bdquoalsoacuterdquo tranzisztorokhoz eacutes meacuteg iacutegy sem tudjuk teljes aacuterammal hajtani a motort a koumlzbuumllső feszuumlltseacutegeseacutesek miatt Eacuterthetetlen de a keacutet npn eacutes keacutet pnp tranzisztort tartalmazoacute aacuteramkoumlri rajzok sokkal kisebb araacutenyban fordulnak elő Pedig enneacutel megszűnnek a neacutegy azonos tranzisztorboacutel eacutepiacutetett aacuteramkoumlrneacutel foumllmeruumllő probleacutemaacutek A duaacutelis tranzisztorpaacuterok baacutezisainak (termeacuteszetesen az ellenaacutellaacutes a gyakorlati kapcsolaacutesoknaacutel nem hagyhatoacute el) oumlsszekoumlteacutese akkor nyuacutejt keacutenyelmes műkoumldteteacutest ha ugyanakkora a motor taacutepfeszuumlltseacutege mint a vezeacuterlőjelekeacute A [H-hiacuted] aacutebraacuten ez azt jelenti hogy az A eacutes B vezeacuterlőjelek is +U vagy GND szintet vehetnek foumll

H-hidat oumlsszerakni olyasmi mint kaacutertyavaacuterat eacutepiacuteteni Előszoumlr szoacuterakoztatoacute de valoacutesziacutenűleg hamar leszokunk roacutela Ez iacutegy is van joacutel hiszen bipolaacuteris leacuteptetőmotorok vezeacuterleacuteseacutere szaacutemos ceacutel-IC kaphatoacute ilyen peacuteldaacuteul a tankoumlnyvben foumllhasznaacutelt L293D Ebben eleve benne vannak a veacutedődioacutedaacutek iacutegy nagyon keveacutes alkatreacutesszel tudjuk vezeacuterelni a leacuteptetőmotorunkat Keacutet tekercshez raacuteadaacutesul keacutet komplett H-hiacuted szuumlkseacuteges eacutes a

ceacutel-IC-k jellemzően eacuteppen ennyit tartalmaznak Nem veacuteletlenuumll

A fentebb leiacutertak utaacuten eleacuterkeztuumlnk ahhoz a ponthoz hogy szerezzuumlnk magunknak leacuteptetőmotort Ha főkeacutent hobbiceacutelokra eacutes gyakorlaacutesra gyakorlatozaacutesra gondolunk akkor a szerző tapasztalata alapjaacuten a legegyszerűbb eset az ha keriacutetuumlnk magunknak egy reacutegebbi szaacutemiacutetoacutegeacutephez hasznaacutelt CD-olvasoacutet Ezekbe annak idejeacuten joacutel kezelhető leacuteptetőmotort eacutepiacutetettek laacutesd [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebra (A beszerzeacuteshez javasolhatoacute leselejtezett geacutepek megkaparintaacutesa szervizes haverok bdquokoumlnyvjutalombanrdquo valoacute reacuteszesiacuteteacutese vagy lomis piacok intenziacutev laacutetogataacutesahellip) A reacutegebbi tiacutepusok hangsuacutelyozaacutesa azeacutert indokolt mert az uacutejabbakban jellemzően DC-motorokat hasznaacutelnak eacutes csaloacutedni fogunk A motor tiacutepusa sajnos kiacutevuumllről nem laacutetszik az egyseacutegen Tovaacutebbi lehetőseacuteg lehet meacuteg toumlnkrement tintasugaras nyomtatoacutekboacutel kiszerelni a fejmozgatoacute leacuteptetőmotort

244 aacutebra - CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

A [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebraacuten laacutethatoacute CD-olvasoacuteboacutel kiszerelt egyseacuteg leacuteptetőmotorja tehaacutet bipolaacuteris Erre a teacutenyre a neacutegy kivezeteacutes utal vouml [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra Az aacutebra felső reacuteszeacuten laacutethatoacute sziacutenes bevonatuacute vezeteacutekneacutegyes maacuter utoacutelagos forrasztaacutes eredmeacutenye A tovaacutebbiakra neacutezve nagyon fontos adat lesz szaacutemunkra hogy a motor tekercseinek ellenaacutellaacutesa 10 Ω ami 5 V-os taacutepfeszuumlltseacuteg eseteacuten tekercsenkeacutent 500 mA-es aacuteramfelveacutetelt jelenthet Az USB-port terhelhetőseacutegeacutet ez maacuter joacutecskaacuten meghaladja

3 A motor leacutepteteacuteseAz előző alfejezetek utaacuten eleacuterkezett az idő a tankoumlnyv utolsoacute feladatainak megfogalmazaacutesaacutera Most maacuter nem csak villogtatunk kijelezuumlnk adatokat fogadunk eacutes kuumlldoumlzgetuumlnk kapcsolgatunk szabaacutelyozunk hanem mozgatunk

37 feladat

Mozgassunk az ADuC-panel keacutet nyomoacutegombjaacuteval egyik ill maacutesik iraacutenyban leacuteptetőmotort egeacuteszleacutepeacuteses uumlzemmoacutedban [Code50]

A feladat megoldaacutesaacutenaacutel maradunk a [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebraacuten laacutethatoacute eszkoumlzneacutel a reacutegebbi tiacutepusuacute CD-olvasoacute egyseacutegből kiszerelt taacutelcaacutenaacutel amelyen nem csak a leacuteptetőmotor tanyaacutezik hanem az annak tengelyeacutere tapadoacute viacutezszintesen mozgathatoacute olvasoacutefej is Ez utoacutebbi naacutelunk funkcioacutejaacutet veszti csak abban fogunk gyoumlnyoumlrkoumldni hogy ide-oda tovaacutebbiacutetjuk a fejet eacutes raacuteuumlltetuumlnk egy LEGO-figuraacutet

Az L293D IC laacutebkiosztaacutesaacutet eacutes a motor tekercseinek bekoumlteacuteseacutet a [A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese] aacutebra mutatja A C1 eacutes C2 jelű tekercs a leacuteptetőmotor keacutet tekercseacutet (vagy tekercspaacuterjaacutet) szimbolizaacutelja A VS szimboacutelum az adatlappal oumlsszhangban a motor taacutepfeszuumlltseacutegeacutet jelenti Naacutelunk ez is +5 V nem csak a logikai jelek jelszintje

245 aacutebra - A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

A motorboacutel kijoumlvő neacutegy vezeteacutek szerepeacutenek meghataacuterozaacutesa sokszor egyedi taacutejeacutekozoacutedaacutest igeacutenyel Multimeacuteterrel azt koumlnnyen megaacutellapiacutethatjuk hogy melyik keacutet vezeteacutek tartozik egy tekercshez (vagy tekercspaacuterhoz) hiszen ezeken meacuterhetuumlnk veacutegesen kicsiny ellenaacutellaacutest Ha nem egymaacuteshoz tartozoacute keacutet vezeteacuteket markolunk foumll akkor azok nyilvaacuten szakadaacuteskeacutent viselkednek A leacutepteteacutesi szekvencia meghataacuterozaacutesaacutera sokszor az a legjobb moacuted ha a motor kivezeteacuteseit vezeacuterlő-IC-neacutelkuumll keacutezzel dugiszaacuteljuk a proacutebapanelon a taacutepra eacutes a foumlldre Hibaacutes szekvenciaacutenaacutel a motor csak előre-haacutetra fog cincogni miacuteg ha eltalaacuteljuk a helyes sorrendet akkor egyeacutertelműen foumllismerhető moacutedon elindul az egyik iraacutenyba A biztonsaacuteg kedveacuteeacutert fordiacutetott sorrendben is jaacutetsszuk le a jeleket hogy minden rendben lesz-e az ellenkező iacuteraacutenyuacute leacutepteteacuteseacuteneacutel is A joacutenak tűnő sorrendet jegyezzuumlk foumll eacutes uumlltessuumlk be a programunkba

Az előző alfejezetben emliacutetettuumlk hogy a leacuteptetőmotor tekercseinek ellenaacutellaacutesa 10 Ω ami +5 V-os taacutepfeszuumlltseacuteg eseteacuten 500 mA-es aacuteramfelveacutetelt jelent Keacutet tekercsneacutel ez 1 A iacutegy egy mezei PC USB portja ezt maacuter nem biacuterja el hiszen az aacuteltalaacuteban csak 500 mA-rel terhelhető De semmi baj a [USB csatlakozoacutes haacuteloacutezati adapter] aacutebraacuten laacutethatoacute adapter terhelhetőseacutege 12 A ami nekuumlnk toumlkeacuteletesen megfelel Maga az elrendezeacutes a [A leacuteptetőmotoros alkalmazaacutes elrendezeacutese] aacutebraacuten laacutethatoacute

246 aacutebra - A leacuteptetőmotoros alkalmazaacutes elrendezeacutese

A program a kivezeteacutesekhez aktuaacutelis sorrendjeacutehez tartozoacute leacutepteteacutesi szekvencia megaacutellapiacutetaacutesa utaacuten maacuter szinte semmiseacuteg Keacutet gombnyomaacutes koumlzoumltt szuumlkseacutegszerűen eltelő időt az EQU direktiacutevaacuteval a var szimboacutelumhoz rendeljuumlk hogy ha moacutedosiacutetani akarunk a leacutepteteacutes frekvenciaacutejaacuten akkor azt csak egyszer kelljen megtennuumlnk az uacutejrafordiacutetaacuteshoz Az SDELAY szubrutint most uacutegy moacutedosiacutetottuk hogy ha azt az A=100 eacuterteacutekkel hiacutevjuk meg akkor toumlrteacutenik 01 s vaacuterakozaacutes Ami itt eacuterdekes az az ahogyan a koacutedmemoacuteriaacuteboacutel toumlrteacutenő ciklikus olvasaacutest megoldjuk Neacutegyfeacutele bemeneti jelkombinaacutecioacutet kell adnunk a vezeacuterlő-IC-nek egy ciklusban (laacutesd [Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorok] alfejezet) Ezt kihasznaacuteljuk eacutes a koumlvetkező truumlkkoumlt alkalmazzuk ha egy regiszter eacuterteacutekeacutet (a koacutedban ez az R2) folyamatosan noumlveljuumlk de minden noumlveleacutes utaacuten csak az alsoacute keacutet bitjeacutet tartjuk meg a toumlbbit kihajiacutetjuk akkor a regiszter eacuterteacuteke koumlrbe-koumlrbe jaacuter 0 eacutes 3 koumlzoumltt A programban konkreacutetan 1 2 3 0 1 2 3 0 hellip Ez affeacutele moduloacutearitmetika A maacutesik iraacutenyban toumlrteacutenő leacutepteteacuteskor a regisztert folyamatosan csoumlkkentetni kell de az alsoacute keacutet bit kimaszkolaacutesa eacuteppen iacutegy műkoumldik a hataacutes ugyanez A koacutedban a koumlvetkező alkalmazaacutes roumlvid taacutergyalhatoacutesaacutega eacuterdekeacuteben keacutet sort sziacutenessel kiemeluumlnk A koacutedkoumlnyvtaacuterban talaacutelhatoacute videoacutefelveacutetelek koumlzoumltt az alkalmazaacutesok műkoumldeacuteseacutet eleacuteg nagy (var=10 200 Hz) frekvenciaacuteval mutatjuk be Ezt a frekvenciaacutet sokkal nagyobbra maacuter nem lehet venni mert a motor elkezdi teacuteveszteni a leacutepeacuteseket eacutes csak zuumlmmoumlg oumlssze-visszahellip

Code50asmORG 0060hgomb1 BIT P32 Elnevezzuumlk az 1 gomb bitjeacutetgomb2 BIT P33 Elnevezzuumlk a 2 gomb bitjeacutetvar EQU 200 A fordiacutetoacute szaacutemaacutera eacuterteacuteket rendeluumlnk a var szimboacutelumhozMAINMOV DPTRphase Betoumlltjuumlk az adatmutatoacuteba a phase ciacutemke ciacutemeacutetMOV R20 R2-be 0-t toumlltuumlnkwaitJNB gomb1forward Ugrunk ha az 1 gombot nyomtuk megJNB gomb2backward Ugrunk ha a 2 gombot nyomtuk meg

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

JMP waitforward Leacutepteteacutes az egyik iraacutenybaINC R2 Noumlveljuumlk R2-eacuterteacutekeacutetMOV AR2 A-ba tesszuumlkANL A00000011b Kimaszkoljuk az alsoacute keacutet bitetMOV R2A Visszaiacuterjuk a degradaacutelt eacuterteacuteket R2 iacutegy gyakorlatilag moduloacutearitmetikaacuteval megy 1230 1230 MOVC AA+DPTR Koacuted-indirekt ciacutemzeacutessel betoumlltjuumlk a vezeacuterlő-IC-nek szoacuteloacute bitmintaacutezatotMOV P2A Kitesszuumlk a P2 portraMOV AvarCALL SDELAY var eacuterteacutekeacutenek megfelelő vaacuterakozaacutes koumlvetkezikJMP wait Ugraacutes vissza a gombok figyeleacuteseacutehezbackward Leacutepteteacutes az egyik iraacutenybaDEC R2 Csoumlkkentjuumlk R2-eacuterteacutekeacutetMOV AR2 A-ba tesszuumlkANL A00000011b Kimaszkoljuk az alsoacute keacutet bitetMOV R2A Visszaiacuterjuk a degradaacutelt eacuterteacuteket R2 iacutegy gyakorlatilag moduloacutearitmetikaacuteval megy 3210 3210 MOVC AA+DPTR Koacuted-indirekt ciacutemzeacutessel betoumlltjuumlk a vezeacuterlő-IC-nek szoacuteloacute bitmintaacutezatotMOV P2A Kitesszuumlk a P2 portraMOV AvarCALL SDELAY var eacuterteacutekeacutenek megfelelő vaacuterakozaacutes koumlvetkezikJMP wait Ugraacutes vissza a gombok figyeleacuteseacutehez Szubrutin SDELAY Parameacuteteraacutetadaacutes A Ha A=100 akkor 01 s a vaacuterakozaacutesi idő SDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik7MOV R620cik6MOV R525cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel A vezeacuterlő-IC-nek (L293D) szoacuteloacute jelek a koacutedmemoacuteriaacuteban phaseDB 00010000bDB 00000100bDB 00001000bDB 00000010b

Az egeacuteszleacutepeacuteses uumlzemmoacuted utaacuten azonnal adoacutedik a koumlvetkező feladat

38 feladat

Mozgassunk az ADuC-panel keacutet nyomoacutegombjaacuteval egyik ill maacutesik iraacutenyban leacuteptetőmotort feacutelleacutepeacuteses uumlzemmoacutedban [Code51]

A [37 feladat]hoz keacutepest egyetlen elteacutereacutes lesz csupaacuten de ezt kihangsuacutelyozzuk feacutelleacutepeacuteses uumlzemmoacutedban hajtjuk meg a motort A helyzet az hogy itt 4 helyett 8 eleme lesz a leacutepteteacutesi szekvenciaacutenak hiszen a feles leacutepeacutesekben mindkeacutet tekercspaacuter aacuteram alatt van Ez a koacutedmemoacuteriaacuteban roumlgziacutetett bitmintaacutezatok szempontjaacuteboacutel az alaacutebbi listaacutet eredmeacutenyezi (eacutes ez a Code51 nevű programban talaacutelhatoacute meg)

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

phaseDB 00010000bDB 00010100bDB 00000100bDB 00001100bDB 00001000bDB 00001010bDB 00000010bDB 00010010b

Figyeljuumlk meg hogy minden maacutesodik sor a keacutet szomszeacutedos elem unioacuteja Sőt inkaacutebb a VAGY művelettel előaacutelloacute eacuterteacutek Mivel most 8 elemuumlnk van a koacuted a fentieken tuacutel mindoumlsszesen keacutet soraacuteban moacutedosul Amit Code50-ben saacutergaacuteval kiemeltuumlnk azt most erre kell aacutetiacuternunk

ANL A00000111b Kimaszkoljuk az alsoacute haacuterom bitet

Eacutes keacutesz hiszen az alsoacute haacuterom biten 0-toacutel 7-ig aacutebraacutezolhatunk szaacutemokat eacutes jelen esetben pont erre van szuumlkseacuteg A motor mozgataacutesa műkoumldik meacuteghozzaacute kifogaacutestalanul műkoumldik Eacutes ezt most maacuter baacutermikor nagyjaacuteboacutel baacutermilyen leacuteptetőmotorral meg tudjuk oldanihellip

Created by XMLmind XSL-FO Converter

25 fejezet - UtoacuteszoacuteA szerző tarsolyaacuteban szaacutemtalan oumltlet szaacutemtalan finomiacutetaacutesi lehetőseacuteg maradt meacuteg Azonban a tankoumlnyv maacuter iacutegy is tuacuteldagadt a szerződeacutesben meghataacuterozott karakterleuumlteacutesi szaacutemon Szaacutemiacutetaacutestechnikai koumlnyvet befejezni nem lehet csak abbahagyni Egy azonban biztos ha azok akiknek a szerző a tankoumlnyvet szaacutenta pozitiacutev visszacsatolaacutest indiacutetanak akkor lehet folytataacutesa Ha ismeacutet lesz TAacuteMOP paacutelyaacutezati lehetőseacuteg eacutes a szerző taacutemogataacutest kap lesz is folytataacutesa Az majd kideruumll hogy milyen tiacutepusuacute mikrovezeacuterlővel milyen programozaacutesi nyelven milyen alkalmazaacutesokkalhellip

Az olvasoacute ha teacutenyleg figyelmesen veacutegigkoumlvetett mindent maacuter uacutegy eacuterezheti hogy egy kicsit eacutert a dolgokhoz Megaacutellni itt persze nem eacuterdemes eacutes nem is szabad Hiszen nagyjaacuteboacutel most kezd laacutetszani az hogy meacuteg egy kis energiabefekteteacutes eacutes mindent bdquomegprogramozunkrdquo magunk koumlruumllhellip A szerző arra biztat mindenkit hogy folytassa az utat ha kell haacutet egyeduumll mert meg fogja eacuterni

A tankoumlnyv nyilvaacuten nem lett toumlkeacuteletes Lehet hogy ha meacuteg egyszer meg kellene iacuterni maacuter kicsit maacuteskeacuteppen alakulna Veacutelemeacutenyeket kunstruktiacutev kritikaacutekat a szerző mindenesetre sziacutevesen fogad hiszen az eacutelet oumlroumlk tanulaacutes Mindenkinek Ha a tankoumlnyv meacutegis a javaacutera vaacutelt a kedves olvasoacutenak akkor a szerzőnek csak annyi koumlzlendője maradt hogy kedves egeacuteszseacutegeacutere eacutes most neacutezzen koumlruumll a koumlrnyezeteacuteben hogy mire lehetne egy joacute kis mikrovezeacuterlős alkalmazaacutest keacutesziacuteteni

VEacuteGE

Created by XMLmind XSL-FO Converter

26 fejezet - Az Analog Devices hozzaacutejaacuterulaacutesaA tankoumlnyv iacuteraacutesaacutenak finiseacuteben a szerző levelet vaacuteltott az Analog Devices ceacuteggel hogy hozzaacutejaacuterulaacutesukat keacuterje neacutehaacuteny a ceacuteg aacuteltal forgalmazott oktatoacutekeacuteszletekhez tartozoacute

CD-n szereplő koacuted felhasznaacutelaacutesaacutehoz eacutes a tankoumlnyvbe valoacute integraacutelaacutesaacutehoz Az Analog Devices az engedeacutelyt megadta Kiacutevaacutensaacutegukra melleacutekeljuumlk a mintakoacutedokhoz tartozoacute aacutellaacutesfoglalaacutesukat

All ADuC842 code provided by ADI including this file is provided AS IS without warranty of any kind either expressed or implied You assume any and all risk from the use of this code It is the responsibility of the person integrating this code into an application to ensure that the resulting application performs as required and is safe

Ennek magyar fordiacutetaacutesa eacutertelmeacutet tekintve koumlvetkező

Az Analog Devices Reacuteszveacutenytaacutersasaacuteg (ADI Analog Devices Incorporated) aacuteltal koumlzzeacutetett valamennyi ADuC842-es koacuted uacutegy tekintendő ahogyan azt koumlzzeacutetetteacutek Ezekre semmifeacutele garancia sem koumlzvetlen sem koumlzvetett nem vonatkozik Ezen koacuted hasznaacutelataacutenak baacuterminemű eacutes valamennyi felelősseacutegeacutet annak felhasznaacuteloacuteja viseli A koacutedot baacutermifeacutele alkalmazaacutesba beeacutepiacutető szemeacutely felelősseacutege annak biztosiacutetaacutesa hogy az eredmeacutenykeacutent előaacutelloacute alkalmazaacutes az azzal szemben taacutemasztott koumlvetelmeacutenyeknek megfelelően eacutes biztonsaacutegosan műkoumldjoumln

Az ilyesfeacutele jogi megfogalmazaacutesok időnkeacutent ijesztők de itt ezt koumltelesseacuteguumlnk volt koumlzoumllni A fentiek mindoumlsszesen egyetlen szubrutinlistaacutera eacutes a 842-es architektuacuteraacutehoz tartozoacute szimboacutelumlistaacutera vonatkoznak UARTIOASM eacutes MOD842 A ceacuteg engedeacutelyeacutevel ezeket csatolhattuk a tankoumlnyvhoumlz

Created by XMLmind XSL-FO Converter

27 fejezet - KoumlszoumlnetnyilvaacuteniacutetaacutesA műszaki tankoumlnyvhoumlz illő jobbaacutera taacutergyilagos stiacutelust feacutelreteacuteve szeretneacutem felsorolni azoknak az embereknek a neveacutet akiknek nagyon sokat koumlszoumlnhettem a programozaacutesi eacutes elektronikai szaacuternyproacutebaacutelgataacutesaim soraacuten

Koumlszoumlnoumlm Bőczeacuten Csabaacutenak eacutes Bőczeacuten Laacuteszloacutenak mindazt amit tőluumlk a szaacutemiacutetaacutestechnikai nyaacuteri TIT-taacuteborban aacuteltalaacutenos iskolaacutes koromban megtanultam Koumlszoumlnoumlm Koltay Peacuteternek (kezdetben annaacutel a ceacutegneacutel a Keriparnaacutel volt programozoacute ahol eacutedesapaacutem is dolgozott) azt az eacuteveken aacutet tartoacute biztataacutest eacutes terelgeteacutest ami igen csak a hasznomra vaacutelt a keacutesőbbiekben Koumlszoumlnoumlm Kispitye Attilaacutenak hogy nagyon sokat aacutetadott nekem a maacuter akkor is kaacutepraacutezatos programozoacutei tudaacutesaacuteboacutel eacutes megtaniacutetott a Commodore 64 assembly nyelvű programozaacutesaacutenak rengeteg forteacutelyaacutera Koumlszoumlnoumlm Matisz Attilaacutenak a koumlzeacutepiskolaacutes fizikatanaacuteromnak hogy az aacuteltala vezetett szakkoumlroumln megismerkedhettem a Pascal nyelvvel eacutes olyasmivel is amire keacutesőbb ismertem csak raacute hogy nahaacutet hiszen az maacuter numerikus matematika volt csak meacuteg nem uacutegy hiacutevtuk

Az egyetemi eacutevek alatti eacutelmeacutenyekeacutert eacutes az akkor megszerzett tudaacuteseacutert a legőszinteacutebb koumlszoumlnetemet szeretneacutem kifejezni Jamniczky Aacuterpaacuted tanaacuter uacuternak Aki tőle tanulta a villanytant annak baacuterhol baacutermikor joumlhetett a meacutely viacutez Horvaacuteth Laacuteszloacute eacutes Szeacutekely Saacutendor analiacutezis tanaacuteraim neacutelkuumll pedig eseacutelyem se lett volna uacutegy megtanulni a matematikaacutet hogy Laplace-trafoacuteval toumlbbnyire meacuteg mindig gond neacutelkuumll tudjam aacuteramkoumlroumlk viselkedeacuteseacutet szaacutemolni De uacutegy hogy eacutertsem is amit csinaacutelok Sok segiacutetseacuteget eacutes oumltletet kaptam Csizmadia Ferenctől eacutes Bognaacuter Endreacutetől a gyakorlati elektronikaacuteba tett kalandjaim soraacuten A mechatronika iraacutenyaacuteba indiacutetoacute bogarat pedig Szalai Istvaacuten tette a fuumllembe Ezen az uacuteton joacutel joumltt Gurin Peacuteter logikai aacuteramkoumlroumlk oacuteraacuteja eacutes bizony sokszor nem boldogultam volna Molnaacuter Gergely tapasztalata eacutes segiacutetseacutege neacutelkuumll

Kedves tanaacuteraim kolleacutegaacuteim Haacutelaacutes vagyok Nektek minden aproacutesaacutegeacutert is

Kuumlloumln koumlszoumlnet illeti Molnaacuter Gergőt eacutes Szalai Istvaacutent neacutehaacuteny speciaacutelis teacutemakoumlr aacutetneacutezeacuteseacuteeacutert Burgundi Daacutevidot az ADuC-panel dokumentaacutelaacutesaacuteeacutert eacutes Koumlrmendy Gaacutebort a tankoumlnyv kritikus aacutetolvasaacutesaacuteeacutert

Veacuteguumll koumlszoumlnetet kell mondanom feleseacutegemnek Eacutevaacutenak eacutes a kis Babadeacuteknak Attila Benceacutenek azeacutert hogy tuumlrelmesen kivaacutertaacutek amiacuteg elkeacutesziacutetem a tankoumlnyvet eacutes deacutelutaacutenonkeacutent esteacutenkeacutent bizony kevesebb időt tudtam raacutejuk szaacutenni mint amennyit megeacuterdemeltek volna

Created by XMLmind XSL-FO Converter

28 fejezet - Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei paneljaEbben a fuumlggeleacutekben aacuteramkoumlri ill beuumllteteacutesi rajzokkal alkatreacuteszlistaacuteval kiacutevaacutenunk segiacuteteni annak aki konkreacutetan a tankoumlnyvhoumlz hasznaacutelt mikrovezeacuterlős panelt oacutehajtja megeacutepiacuteteni vagy legyaacutertatni ilyen megrendeleacuteseket vaacutellaloacute ceacuteggel A tankoumlnyvhoumlz melleacutekeljuumlk a gyaacutertaacuteshoz szuumlkseacuteges uacuten Gerber-faacutejlokat eacutes a Drill-faacutejlokat Ettől a kezdő olvasoacute nem lesz sokkal boldogabb iacutegy az alaacutebbiakban tovaacutebbi segiacutetseacuteget adunk a panel elkeacutesziacuteteacuteseacutehez

Letoumllthető melleacutekletek toumlmoumlriacutetett formaacutetumban(telepiacutetők forraacuteskoacutedok rajzok stb) Mellekletzip

A [A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből] eacutes [A hallgatoacutei panel NYAacuteK-terve alulneacutezetből] aacutebra a tankoumlnyvben hasznaacutelt panel nyomtatott aacuteramkoumlri (NYAacuteK-) terveacutet mutatja mind feluumll- mind alulneacutezetből A [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] eacutes [A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza] aacutebraacuten a panel beuumllteteacutesi rajza laacutethatoacute a keacutet neacutezetből Ezek a rajzok akkor nyuacutejtanak oacuteriaacutesi segiacutetseacuteget amikor megrendeljuumlk az alkatreacuteszeket eacutes magunk akarjuk őket raacuteforrasztani a panelra Meg kell jegyeznuumlnk hogy neacutehaacuteny poziacutecioacute a tankoumlnyvben hasznaacutelt panelon uumlresen maradt Ilyen a [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] aacutebra jobb felső traktusaacuteban laacutethatoacute U8 jelű eacutes a kuumllső taacutepellaacutetaacutes biztosiacutetaacutesaacutera szolgaacuteloacute alkatreacuteszek C2 C5 IC2 eacutes X1 jelű poziacutecioacuteja A panel a tankoumlnyvben bemutatott alkalmazaacutesokban ezek uumlresen hagyaacutesaacuteval is toumlkeacuteletesen műkoumldoumltt

Joacutetanaacutecskeacutent azt javasoljuk az olvasoacutenak hogy ha nincs kellő gyakorlata az aproacute alkatreacuteszek forrasztaacutesaacuteban akkor ezt a műveletet ne az ADuC 842-es chip laacutebaival kezdje Ugyanez igaz az FT232-es USB-soros aacutetalakiacutetoacute-IC-re is A toumlbbi alkatreacutesz maacuter koumlnnyebben kezelhető

Az alkatreacuteszlistaacutet a [A hallgatoacutei panel alkatreacuteszlistaacuteja] tartalmazza A keacutet kritikus teacutetel maga az ADuC 842-es chip ill a MAX4478ASD tiacutepusjelű műveleti erősiacutető Ez utoacutebbi veacutedelmi feladatot laacutet el befeleacute neacutezve vedi a mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutenak első keacutet csatornaacutejaacutet (a toumlbbit nem) kifeleacute neacutezve puffert testesiacutet meg a DA-aacutetalakiacutetaacuteshoz (szintuacutegy annak első keacutet csatornaacutejaacutehoz) E keacutet teacutetel neacutelkuumll az alkatreacuteszlista oumlsszes eleme a legkedvezőbb aacuterakkal dolgozoacute hazai mikroelektronikai csomagkuumlldő szolgaacutelatok tarifaacuteit figyelembe veacuteve 2013 tavaszaacuten 5 000 - 6 000 Ft-eacutert beszerezhető volt A MAX4478ASD műveleti erősiacutető keveacutes hazai ceacutegneacutel kaphatoacute viszont nem tuacutelsaacutegosan draacutega kb 1 000 Ft Az ADuC 842-es chip maacuter borsosabb aacuteron kaphatoacute ha uacutegy akarjuk megvenni aacutera kb 6 500 Ft Viszont e keacutet kritikus alkatreacutesz beszerzeacuteseacutet megoldhatjuk oly moacutedon is hogy ingyenes mintaacutet rendeluumlnk a ceacutegtől Ennek az eljaacuteraacutesnak a bemutataacutesa azonban maacuter nem ennek a tankoumlnyvnek a feladata Akaacuterhogyan is szerezzuumlk be a 842-es mikrovezeacuterlőt figyeljuumlnk oda a tiacutepusmegjeloumlleacutesre A tankoumlnyvben hasznaacutelt panelon az ADUC842BSZ62-5 tiacutepusuacute mikrovezeacuterlő foglalt helyet A BSZ jeloumlleacutes a tokozaacutest azonosiacutetja ennek 52 laacuteba van Magaacutera a tokozaacutesra az MQFP betűszoacutet hasznaacuteljaacutek Ez a Metric Quad Flat Package (metrikus neacutegyszoumlgletű lapos tokozaacutes) kifejezeacutesből szaacutermazik A 62-es szaacutem a 62 kbyte koacutedmemoacuteriaacutera utal az 5-oumls szaacutemjegy pedig a taacutepfeszuumlltseacutegre (+5 V) Az MQFP tokozaacutes rajzaacutet a [Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők] aacutebraacuten laacutethatjuk az adatok millimeacuteterben eacutertendők Maga a rajz az Analog Devices aacuteltal koumlzzeacutetett faacutejlboacutel szaacutermazik

A [A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel] eacutes [A keacutesz panel alulneacutezetben] aacutebraacuten a keacutesz panel laacutethatoacute feluumll- eacutes alulneacutezetből immaacuteron nem tervrajzkeacutent hanem lefeacutenykeacutepezve Az eacuterintkezőtuumlskeacutek funkcionaacutelis leiacuteraacutesaacutehoz a [A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel] aacutebraacuten a [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] aacutebra szaacutemozaacutesaacuteval oumlsszhangban megszaacutemoztuk a tuumlskeacuteket Ezek leiacuteraacutesaacutet a [A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja]ban talaacuteljuk

A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesaacutet a [A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra] aacutebra eacutes a [A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa] mutatja Ezen a csatlakozoacuten keresztuumll kapcsolhatjuk a mikrovezeacuterlő paneljaacutet proacutebapanelokhoz vagy baacutermihez amihez csak akarjuk Konkreacutet szalagkaacutebel elkeacutesziacuteteacuteseacutet azonban maacuter az olvasoacutera biacutezzuk A Fuumlggeleacutekben leiacutertak alapjaacuten ez maacuter nem fog neheacutezseacuteget okozni

281 aacutebra - A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

281 taacuteblaacutezat - A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa

Szalagkaacutebel-csatlakozoacute laacuteba Hozzaacuterendeleacutes az ADuC 842-esen (laacutebsorszaacutem)

1 +5 V

2 GND

3 P07 (52 laacuteb)

4 P06 (51 laacuteb)

5 P05 (50 laacuteb)

6 P04 (49 laacuteb)

7 P03 (46 laacuteb)

8 P02 (45 laacuteb)

9 P01 (44 laacuteb)

10 P00 (43 laacuteb)

11 P27 (39 laacuteb)

12 P26 (38 laacuteb)

13 P25 (37 laacuteb)

14 P24 (36 laacuteb)

15 P23 (31 laacuteb)

16 P22 (30 laacuteb)

17 P21 (29 laacuteb)

18 P20 (28 laacuteb)

19 P37 (25 laacuteb)

20 P36 (24 laacuteb)

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

282 aacutebra - A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből

283 aacutebra - A hallgatoacutei panel NYAacuteK-terve alulneacutezetből

284 aacutebra - Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők

285 aacutebra - A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

286 aacutebra - A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza

287 aacutebra - A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

288 aacutebra - A keacutesz panel alulneacutezetben

282 taacuteblaacutezat - A hallgatoacutei panel alkatreacuteszlistaacuteja

Mennyiseacuteg EacuterteacutekTiacutepus Tokozaacutes Poziacutecioacuteszaacutemok

2 47u E35-10 C2 C5

2 22p C0603 C11 C12

1 10n C0805 C32

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

7 100n C0805 C1 C6 C10 C13 C16 C30 C31

2 100n C1206 C7 C8

6 100R R0805 R5 R6 R9 R10 R13 R16

3 1k R0805 R1 R2 R3

2 1R R0805 R15 L2

2 47k R0805 R14 R17

1 1R R1206 R4

1 47K ellenaacutellaacutes-haacuteloacute SIL9 RN2

1 32768 kHz-es oacuterakvarc

TC26V Q1

4 nyomoacutegombok B3F-10XX 6x6 tact S5 S6 S7 S8

1 20-poacutelusuacute 90deg-os aljzat

ML20L SV1

1 taacutepcsatlakozoacute 733989-5 X1

1 USB-B aljzat USB-B-SMT X2

1 LM7805 stabilizaacutetor-IC

TO220 IC2

1 ADuC 842 PQFP52 IC1

1 MAX4478ASD SO14 IC3

1 FT232RL SSOP28 IC4

9 LED18MM 18 mm LED1 ndash LED9

4 JUMPER 254 mm 6 mm JP1-9

1 Tuumlskesor 254 mm 63 JP

283 taacuteblaacutezat - A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja

Tuumlske Leiacuteraacutes

1B +5 V

1J RESET (15 laacuteb)

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

2B (41 laacuteb)

2J 1 kΩ-os ellenaacutellaacuteson keresztuumll foumlldre koumltve ha esetleg kuumllső aacuteramkoumlrrel szaacutendeacutekozunk letoumllteacutesi funkcioacutekat megvaloacutesiacutetani

3B GND

3J P32 (18 laacuteb) 47 kΩ-os felhuacutezoacute-ellenaacutellaacutessal taacutepra koumltve

4 A USB-soros konverter-IC oumlsszekoumlteacutese az ADuC 842-es mikrovezeacuterlővel Amennyiben kuumllső taacutepot akarunk hasznaacutelni akkor a 6-os blokkra keruumll keacutet jumper de akkor a 4-es blokk valamennyi jumpereacutet le kell vennuumlnk

5B GND

5J P33 (19 laacuteb) 47 kΩ-os felhuacutezoacute-ellenaacutellaacutessal taacutepra koumltve

61B Kuumllső taacutep eseteacuten e keacutet tuumlskeacutere kell jumpert tenni Ekkor a 4-es blokk valamennyi jumpereacutet el kell taacutevoliacutetani

61J

62B Kuumllső taacutep eseteacuten e keacutet tuumlskeacutere kell jumpert tenni Ekkor a 4-es blokk valamennyi jumpereacutet el kell taacutevoliacutetani

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

62J

71B GND

71J +5 V

72B ADC 7 (14 laacuteb)

72J ADC 6 (13 laacuteb)

73B ADC 5 (12 laacuteb)

73J ADC 4 (11 laacuteb)

74B ADC 3 (4 laacuteb)

74J ADC 2 (3 laacuteb)

75B ADC 1 erősiacutetővel pufferelt AD-csatorna Nem koumlzvetlenuumll kapcsoloacutedik a 2 laacutebhoz

75J ADC 0 erősiacutetővel pufferelt AD-csatorna Nem koumlzvetlenuumll kapcsoloacutedik az 1 laacutebhoz

81B GND

81J +5 V

82B Ezek a tuumlskeacutek semmihez sincsenek koumltve Nincs funkcioacutejuk

82J

83B

83J

84B

84J

85B DAC 1 pufferelve az erősiacutetővel Nem koumlzvetlenuumll kapcsoloacutedik az 10 laacutebhoz

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

85J DAC 0 pufferelve az erősiacutetővel Nem koumlzvetlenuumll kapcsoloacutedik a 9 laacutebhoz

9B P35 (23 laacuteb)

9J P34 (22 laacuteb)

Created by XMLmind XSL-FO Converter

Irodalomjegyzeacutek[1] Analog Devices MicroConverterreg 12-Bit ADCs and DACs with Embedded High Speed 62-kB Flash MCU

ADuC841ADuC842ADuC843 p 65 Table 32

[2] Szentiday Klaacutera Feacutelvezető fotodetektorok Műszaki Koumlnyvkiadoacute Budapest 1977 ISBN 963 10 1742 7

[3] Texas Optoelektronikai receptek Műszaki Koumlnyvkiadoacute Budapest 1979 ISBN 963 10 2683 2

[4] Tietze U Schenk Ch Analoacuteg eacutes digitaacutelis aacuteramkoumlroumlk Műszaki koumlnyvkiadoacute Budapest 5 javiacutetott kiadaacutes 1993 ISBN 963 16 0010 6

[5] Beuth K Beuth O Az elektronika alapjai ndash II Feacutelvezetők Műszaki koumlnyvkiadoacute Budapest 1994 ISBN 963 16 0427 6

[6] Kovaacutecs Csongor Elektronikus aacuteramkoumlroumlk General Press Budapest 1997 ISBN 978 963 9076 32 7

[7] Texas TTL receptek Műszaki Koumlnyvkiadoacute Budapest 1978 ISBN 963 10 2491 1

[8] Bolton W Mechatronics Pearson Harlow England 5th edition 2011 Chapter 97 ISBN 978 0 273 74286 9

[9] Chapman S J Electric Machinery Fundamentals WCBMcGraw-Hill Boston 3rd edition 1999 p 640-644 ISBN 0 07 011950 3

[10] wwwstepperworldcom

Created by XMLmind XSL-FO Converter

Page 4: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

1 Az ADuC 842 megszakiacutetaacutesai 552 Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes 573 Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutes 604 A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok 63

12 Kuumllső aacuteramkoumlroumlk LED-ekkel 671 Jelzőlaacutempa vezeacuterleacutese 672 Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedja 713 Jelzőlaacutempa toumlbb uumlzemmoacuteddal 72

13 Kuumllső aacuteramkoumlr fotokapuval 7714 Heacutetszegmenses kijelző meghajtaacutesa 8015 Kommunikaacutecioacute az UART-tal 84

1 Az UART soros interfeacutesz 842 Baacutejtok fogadaacutesa eacutes kuumlldeacutese assemblyben 903 Soros porti kommunikaacutecioacute pollozaacutessal 924 Soros porti kommunikaacutecioacute megszakiacutetaacutessal 955 Koacutedreacuteszletek beeacutepiacuteteacutese sajaacutet programunkba 966 Az ADuC vezeacuterleacutese PC-vel 99

16 Iacuteraacutes a memoacuteriaacuteba 1011 Iacuteraacutes az alsoacute eacutes a felső RAM-ba 1022 Iacuteraacutes a belső adatmemoacuteriaacuteba 105

17 Időziacutetőkszaacutemlaacuteloacutek 1081 Egyszerű időmeacutereacutes az időziacutetővel 1112 Stopperoacutera keacutet fotokapuval 113

18 PWM-jelek 1171 PWM-jel előaacutelliacutetaacutesa a mikrovezeacuterlő jelgeneraacutetoraacuteval 1172 Pulzaacuteloacute LED-ek 121

19 AD-aacutetalakiacutetaacutes 1251 Az ADuC 842-es AD-aacutetalakiacutetoacuteja 1252 Egyszerű AD-aacutetalakiacutetaacutes 129

20 Alkonykapcsoloacute 1341 Besugaacuterzaacutesmeacutereacutes fototranzisztorral 1342 Az alkonykapcsoloacute programja 1363 Hisztereacutezis 137

21 TTL IC-k eacutes tranzisztorok a portokon 1391 A felhuacutezoacute-ellenaacutellaacutesok szerepe 1392 Tranzisztorok mint kapcsoloacutek 141

22 Hőmeacuterseacuteklet-meacutereacutes 1441 Termisztorok 1442 Hőmeacuterő 1473 Hőmeacuterseacuteklet-szabaacutelyozaacutes 153

23 Megvilaacutegiacutetaacutesszabaacutelyozoacute 15924 Leacuteptetőmotor vezeacuterleacutese 163

1 Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorok 1632 Bipolaacuteris leacuteptetőmotorok vezeacuterleacutese 1643 A motor leacutepteteacutese 166

25 Utoacuteszoacute 17026 Az Analog Devices hozzaacutejaacuterulaacutesa 17127 Koumlszoumlnetnyilvaacuteniacutetaacutes 17228 Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja 173Irodalomjegyzeacutek Error Reference source not found

Created by XMLmind XSL-FO Converter

Az aacutebraacutek listaacuteja11 A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll 112 A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek 231 A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll 932 Az Analog Devices soros porti letoumlltőprogramjaacutenak feluumllete 933 A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete 1051 Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire 1761 Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor bitjeire 2281 Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval 3282 Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel 3283 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő 3384 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő 3485 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk 3586 Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk 3691 A 8 feladat (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja 4392 A Lower RAM bitenkeacutent ciacutemezhető teruumllete 4493 A 9 feladat (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja 4594 Az alsoacute RAM neacutegy regiszterbankja 4895 Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete 49101 A 12 feladat (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja 53111 A 13 feladat (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja 58112 A 15 feladatban megkoumlvetelt LED-leacutepteteacutes 63113 A 15 feladat (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja 64121 Fontos tudnivaloacute a portokkal kapcsolatban 67122 A 16 feladat (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 67123 A 16 feladat megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef 68124 A 16 feladat moacutedosiacutetott megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef 70125 A 17 feladat megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek 72131 A 18 feladat (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 77132 Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel 78133 A fototranzisztor foumlldre huacutezza a P21-es laacutebat iacutegy az arra koumltoumltt LED vilaacutegiacutet 78141 A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese 80142 Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa 80143 Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel 80144 A 20 feladat (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja 82151 USB-kaacutebel belső vezeteacutekei 84152 A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten 88153 A 21 feladat (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja 92154 Az ASCII karakterkeacuteszlet 32-től 126-ig 94161 Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese 101162 A 25 feladat (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja 102171 A 27 feladat (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes 113181 Neacutegyszoumlgjel 117

Created by XMLmind XSL-FO Converter

Mikrovezeacuterlők mechatronikai alkalmazaacutesai

182 A PWM-generaacutetor 1 uumlzemmoacutedja 119191 Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei 125192 Az AD-aacutetalakiacutetaacutes szabaacutelyai 129193 Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei 130194 A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is) 131195 Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel 132196 Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek 132201 A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege 134202 Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten 135203 Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt 135204 Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben 136205 Hisztereacutezis keacutetaacutellapotuacute rendszerben 137211 Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel 139212 Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten 141213 Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel 141214 Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal 142215 Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese 142221 A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja 144222 A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja 144223 A termisztor soros kapcsolaacutesban 145224 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal 145225 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal 146226 A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel 146227 Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll 148228 Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal 149229 Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor 1532210 USB csatlakozoacutes haacuteloacutezati adapter 1542211 Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera 1542212 A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr 1542213 Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera 1552214 A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese 156231 A LED-ek elhelyezkedeacutese a fototranzisztorral szemben 159232 A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese 160241 Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve 163242 Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve 164243 H-hiacuted 165244 CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral 165245 A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese 166246 A leacuteptetőmotoros alkalmazaacutes elrendezeacutese 167281 A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra 173282 A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből 175283 A hallgatoacutei panel NYAacuteK-terve alulneacutezetből 175284 Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők 175285 A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza 175286 A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza 176287 A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel 176288 A keacutesz panel alulneacutezetben 177

Created by XMLmind XSL-FO Converter

A taacuteblaacutezatok listaacuteja21 A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese 451 Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll 1652 Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten 2071 Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese 2472 A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese 2573 A DPCON SFR taacutergyalt bitjei 2791 Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata 3992 A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata 3993 A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata 3994 A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata 4195 A PSW SFR parameacuteterei 49101 Az időegyseacutegek SFR-jeinek parameacuteterei 51102 A TIMECON SFR parameacuteterei 52111 A kuumllső megszakiacutetaacutesok jellemzői 57112 Az IE SFR parameacuteterei 57113 Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei 60114 A TIMECON SFR parameacuteterei reacuteszletesebben 60115 Az IEIP2 SFR parameacuteterei (reacuteszlet) 61151 Az USB-kaacutebel vezeteacutekeinek funkcioacuteja 84152 Az SCON SFR parameacuteterei 85153 Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese 86154 Az T3CON SFR parameacuteterei 87155 A soros porti kommunikaacutecioacute tipikus eacuterteacutekei 90156 Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai 90157 A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz 96171 A TMOD SFR parameacuteterei 108172 A TCON SFR parameacuteterei 110181 A PWMCON SFR parameacuteterei 117191 Az ADCCON1 SFR parameacuteterei 125192 Az ADCCON2 SFR parameacuteterei 127221 A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata 147222 A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek 155281 A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa 174282 A hallgatoacutei panel alkatreacuteszlistaacuteja 177283 A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja 178

Created by XMLmind XSL-FO Converter

1 fejezet - Előszoacute eacutes ars poeticaE tankoumlnyv szerzője jelen fejezet elkezdeacuteseacutenek pillanataacuteban 38 eacuteves eacutes 298 napos Toumlrteacutent az hogy az aacuteltalaacutenos iskola 7 osztaacutelyaacutenak elveacutegzeacutese utaacuten a nyaacuteri szuumlnetben szuumllei beiacuterattaacutek szaacutemiacutetoacutegeacutepes TIT-tanfolyamra ahol a meacuteltaacuten legendaacutevaacute vaacutelt Commodore szaacutemiacutetoacutegeacutepek BASIC nyelvű programozaacutesaacuteval ismerkedhetett Deacutelelőttoumlnkeacutent Deacutelutaacutenonkeacutent aztaacuten ment a jaacuteteacutek amiacuteg ki nem dobtaacutek a csoportot hogy bdquomost maacuter joacute lenne haza mennirdquohellip

Innentől kezdve nem volt megaacutellaacutes egy joacute darabig Szaacutemiacutetoacutegeacutepes szakkoumlr nyolcadikban (BASIC) sajaacutet Commodore 64-es (laacutesd [A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll] aacutebra) vaacutesaacuterlaacutesa Ausztriaacuteban az assembly nyelvű programozaacutes elsajaacutetiacutetaacutesa szaacutemiacutetoacutegeacutepes szakkoumlr gimnaacuteziumban (ott maacuter egy idő utaacuten XT eacutes Pascal) veacuteguumll az akkori Veszpreacutemi Egyetem Műszaki Informatika szakja (eljoumltt a C ideje)

11 aacutebra - A legendaacutes Commodore 64 melyen generaacutecioacutek nőttek foumll

A szerző egyetemi tanulmaacutenyai utaacuten ott maradt az egyetemen megszerezte a PhD fokozatot taniacutetott a Műszaki Informatika Karon majd a Meacuternoumlki Kar Fizika eacutes Mechatronika Inteacutezeteacuteben koumltoumltt ki Ott nagy lelkesedeacutessel uumllt be egyik kolleacutegaacuteja Mikrovezeacuterlők oacuteraacutejaacutera eacutes roppant moacuted eacutelvezte hogy uacutejra assemblyben programozhat eacutes sok-sok hardverkoumlzeli eacutelmeacutenye lehet Ezt a kurzust keacutesőbb a kolleacutega versenyszfeacuteraacuteba toumlrteacutenő taacutevozaacutesa utaacuten legnagyobb oumlroumlmeacutere meg is oumlroumlkoumllte 2012-ben eljoumltt az idő hogy a TAacuteMOP paacutelyaacutezatcsalaacuted kereteacuteben elektronikus tankoumlnyvet keacutesziacutethessen a mikrovezeacuterlők mechatronikai alkalmazaacutesaacuteroacutel

Egyetemi jegyzetet tankoumlnyvet iacuterni nem is olyan koumlnnyű Előszoumlr a szerzőnek el kell doumlntenie hogy kikből aacutell a ceacutelcsoport majd azt hogy mely konkreacutet hardveren eacutes milyen alkalmazaacutesokon keresztuumll igyekszik bemutatni a mikrovezeacuterlők programozaacutesaacutet Ez a tankoumlnyv ugyanis nem aacuteltalaacutenossaacutegban kiacutevaacuten foglalkozni a mikrovezeacuterlők mechatronikai alkalmazaacutesaacuteval hanem a koumlvetkező haacuterom ceacutelkitűzeacutest proacutebaacutelja megvaloacutesiacutetani

bull Az ADuC 842-es mikrovezeacuterlő lehetőseacutegeinek megismereacutese

bull Az assembly nyelv alapjainak elsajaacutetiacutetaacutesa

bull Elemi aacuteramkoumlri kapcsolaacutesokkal egyszerű mechatronikai alkalmazaacutesok megoldaacutesa

A fenti haacuterom ponthoz kieleacutegiacutető magyaraacutezat kiacutevaacutenkozik Vegyuumlk haacutet őket sorba

A vaacutelasztaacutes azeacutert esett az Analog Devices ADuC 842-es mikrovezeacuterlőjeacutere (wwwanalogcom) mert a Pannon Egyetem Fizika eacutes Mechatronika Inteacutezeteacuteben ilyen tiacutepusuacute eszkoumlzoumlkkel toumlrteacutent a Mikrovezeacuterlők taacutergy oktataacutesa maacuter a szerző csatlakozaacutesa előtt A mikrovezeacuterlőkhoumlz Kaacutentor Zoltaacuten docens uacuter tervezett univerzaacutelisan hasznaacutelhatoacute sok feladat megoldaacutesaacutera alkalmas oktataacutesi ceacutelokra remekuumll hasznaacutelhatoacute panelt Aztaacuten taacutevozott a versenyszfeacuteraacuteba

Előfordulhat hogy az ADuC 842-es mikrovezeacuterlőt sokan maacuter elavultnak tartjaacutek azonban szeretneacutenk megnyugtatni a keacutetkedőket az eszkoumlz kivaacuteloacutean alkalmas arra hogy az egyetemi hallgatoacutek megfelelő szakmai ismereteket szerezzenek a mikrovezeacuterlők lelkivilaacutegaacuteroacutel A megleacutevő bdquogeacutepparkotrdquo iacutegy nagy veacutetek lenne egyszerűen kihajiacutetani Az elektronikus tankoumlnyv aacuteltal szolgaacuteltatott bdquokurzusrdquo elveacutegezeacutese utaacuten baacuterki koumlnnyedeacuten aacutetnyergelhet maacutes tiacutepusuacute mikrovezeacuterlőre Olyan ez mintha megfelelő neacutemet nyelvtudaacutes utaacuten arra keacutenyszeruumllneacutenk esetleg oumlnkeacutent doumlnteneacutenk uacutegy hogy paacuter hoacutenapon beluumll eacutertelmesen kommunikaacuteljunk hollandul vagy eacuteppen sveacuteduumll Higgyeacutek el menni fog Oumltoumldannyi erőfesziacuteteacutessel mint az első nyelvneacutel

Az assembly nyelv emlegeteacutese sokakban kellemetlen eacuterzeacuteseket leneacutezeacutest vagy eacuteppen paacutenikreakcioacutet vaacutelt ki Valoacute igaz ceacuteges koumlrnyezetben ritkaacuten hasznaacuteljaacutek sokkal inkaacutebb koumlvetelik meg a C nyelv vagy tovaacutebbi script-nyelvek

Created by XMLmind XSL-FO Converter

Előszoacute eacutes ars poetica

ismereteacutet Ennek nyilvaacuten megvan a maga oka A szerző viszont uacutegy gondolja hogy ha maacuter egyszer mikrovezeacuterlővel fogunk egyszerű kis aacuteramkoumlroumlket szenzorokat eacutes leacuteptetőmotort műkoumldtetni mindenkeacuteppen eacuterdemes az assembly nyelvvel kezdeni Ezen keresztuumll eacutertjuumlk meg ugyanis igazaacuten a hardverkoumlzeli programozaacutes leacutenyegeacutet eacutes eacutelhetjuumlk aacutet azt az eacutelmeacutenyt amikor joacuteformaacuten keacutet ujjunk koumlzeacute csippenthetjuumlk a biteket Termeacuteszetesen koumlnnyen belefuthatunk olyan probleacutema melynek megoldaacutesa sokkal keacutenyelmesebb C nyelven iacutert programmal de a mikrovezeacuterlőkkel toumlrteacutenő ismerkedeacutesneacutel maradunk az assemblyvel nyelvneacutel

A mikrovezeacuterlő mechatronikai alkalmazaacutesaacutehoz kuumllső aacuteramkoumlroumlkre lesz szuumlkseacuteg Ebben a tananyagban nem taacutergyalunk bonyolult bdquopoacutekhaacuteloacutekatrdquo az aacuteramkoumlroumlk egeacuteszen csekeacutely villamossaacutegtani elektronikai ismeretek alapjaacuten koumlnnyen aacutetlaacutethatoacutek lesznek műkoumldeacutesuumlk koumlnnyen megeacuterthető lesz

A tankoumlnyv termeacuteszetesen nem lesz teljes Egyetlen szaacutemiacutetaacutestechnikai jegyzet vagy koumlnyv sem lehet teljes Viszont toumlrekedni fogunk arra hogy az ADuC 842-es mikrovezeacuterlő csaknem valamennyi utasiacutetaacutesaacutet ciacutemzeacutesmoacutedjaacutet hasznaacuteljuk ill lehetőseacutegeinek nagyjaacuteboacutel a feleacutere műkoumldő programot alkalmazaacutest ismertessuumlnk A tananyag feleacutepiacuteteacutese iteratiacutev jellegű lesz Ez azt jelenti hogy nem kimeriacutető moacutedon ismertetuumlnk egy-egy teacutemakoumlrt (pl portokat megszakiacutetaacutesokat vagy időziacutetőket) hanem mindig csak olyan meacuterteacutekben ahogyan azt az adott reacutesz megkiacutevaacutenja Aztaacuten a koumlvetkező feladatnaacutel meacutelyebben Aztaacuten meacuteg meacutelyebbenhellip

Lassan az előszoacute veacutegeacutehez eacuteruumlnk A szerző szeretne meacuteltoacute emleacuteket aacutelliacutetani neacutehaacuteny szakkoumlnyvnek (laacutesd [A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek] aacutebra) melyek neacutelkuumll nem sokra ment volna a joacute oumlreg Commodore 64-es programozaacutesaacuteval eacutes a nagyon egyszerű LED-ek villogtataacutesaacutera alkalmas kuumllső aacuteramkoumlr barkaacutecsolaacutesaacuteval gimnazista koraacuteban Ezek a koumlnyvek feleacutepiacuteteacutesuumlk egyes reacuteszeik peacuteldakeacutent aacutellnak a szerző előtt A mai kor hallgatoacutei maacuter nem biztos hogy foumllismerik őket de idősebb csalaacutedtagjaik baraacutetaik koumlzoumltt bizonyaacutera akadnak ilyenek

12 aacutebra - A Commodore 64-hez kaphatoacute a szerző paacutelyafutaacutesaacuteban meghataacuterozoacute szerepet jaacutetszoacute igeacutenyes tankoumlnyvek eacutes szakkoumlnyvek

A szerző őszinteacuten remeacuteli hogy elektronikus tankoumlnyveacutet eacuterdeklődeacutessel eacutes haszonnal fogjaacutek forgatni (goumlrgetni) mechatronikus hallgatoacutek villamosmeacuternoumlk hallgatoacutek informatikus hallgatoacutek de akaacuter eacuterdeklődő koumlzeacutepiskolaacutesok is

Ez a tankoumlnyv nem szakkoumlnyv Nem szakembereknek keacuteszuumllt Egyetemi hallgatoacuteknak keacuteszuumllt akik a tankoumlnyvben leiacutertak elsajaacutetiacutetaacutesa utaacuten joacute eseacutellyel a szakember-jeloumllt szinten talaacuteljaacutek majd magukat Eacutes ha lesz hozzaacute erejuumlk eacutes kitartaacutesuk akkor nem is olyan sokkal keacutesőbb igazi szakemberek lesznek

Joacute tanulaacutest programozaacutest aacuteramkoumlreacutepiacuteteacutest eacutes meacuteg toumlbb oumlnaacutelloacute megvaloacutesiacutetott oumltletet kiacutevaacutenva

Kraacutenicz Balaacutezs

Created by XMLmind XSL-FO Converter

Előszoacute eacutes ars poetica

szerző

Veszpreacutem 2013 aacuteprilisa

Created by XMLmind XSL-FO Converter

2 fejezet - Ismerkedeacutes az assembly programozaacutesi nyelvvel1 Az assembly nyelvről aacuteltalaacutebanSzaacutemiacutetoacutegeacutepek programozaacutesaacutera szaacutemos programnyelvet fejlesztettek ki a hőskor oacuteta A legalacsonyabb szintű programozaacutesi nyelv a geacutepi koacuted Ez a nyelv a programot alkotoacute binaacuteris utasiacutetaacutesok azaz puszta szaacutemeacuterteacutekek sorozataacuteboacutel aacutell A geacutepi koacutedban valoacute programozaacutes meglehetősen neheacutezkes lenne (a hőskorban viszont egy ideig teacutenylegesen iacutegy csinaacuteltaacutek) ezeacutert egy-egy roumlvidiacuteteacutest uacutegynevezett mnemonikot rendelnek minden egyes utasiacutetaacuteshoz A mnemonik aacuteltalaacuteban az utasiacutetaacutes jelenteacuteseacutet leiacuteroacute toumlmoumlr toumlbbnyire angol kifejezeacutesből alkotott betűszoacute Ezeket a mnemonikokat oumlnmagukban szokaacutes assembly utasiacutetaacutesoknak nevezni Az ADuC 842-es mikrovezeacuterlő 8052-es tiacutepusuacute magjaacutenak keacuteszleteacuteből neacutehaacuteny utasiacutetaacutest az [A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese] mutat be melyben a hexadecimaacutelis szaacutemokat a szaacutem utaacuten iacutert h-val jeloumlljuumlk

21 taacuteblaacutezat - A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese

Geacutepi koacuted Assembly mnemonik Angol kifejezeacutes Magyar jelenteacutes

14h DEC A Decrement Accumulator Az akkumulaacutetor eacuterteacutekeacutenek csoumlkkenteacutese eggyel

74h MOV Adata Move Data to Accumulator A data eacuterteacutekű adatbaacutejt (be)mozgataacutesa az akkumulaacutetorba

23h RL A Rotate Accumulator Left Az akkumulaacutetor elforgataacutesa egy bittel balra

Az [A 80518052-es processzormag neacutehaacuteny geacutepi koacuteduacute utasiacutetaacutesa mnemonikja eacutes annak jelenteacutese] alapjaacuten magaacutetoacutel eacutertetődő hogy assembly nyelven koumlnnyebb programozni mint geacutepi koacutedban Geacutepi koacutedban ugyanis teacutenylegesen puszta szaacutemokat kellene iacuterogatnunk egymaacutes utaacuten program gyanaacutent A keacutet kifejezeacutest egyeacutebkeacutent eacuterdekes moacutedon sokszor sok helyen oumlsszekeverik Uumlgyeljuumlnk tehaacutet a helyes megnevezeacutesre mi assembly nyelven fogunk programokat iacuterni

A fentiek utaacuten baacuterki megkeacuterdezheti hogy hogyan lesz az assembly utasiacutetaacutesokboacutel teacutenylegesen geacutepi koacuted amit maacuter meg lehet etetni a processzorral Nos erre valoacute a fordiacutetoacuteprogram azaz az assembler Az assembler teacutenylegesen geacutepi koacutedot aacutelliacutet elő amit aztaacuten alkalmas letoumlltőprogrammal raacutetoumllthetuumlnk a mikrovezeacuterlőre eacutes futtathatjuk azt Iacutegy kel tehaacutet eacuteletre az assembly nyelven iacutert programunk

Az assembly nyelvű programozaacutesroacutel azt lehet mondani hogy olyan ez mint amikor egy haacutezat az utolsoacute teacuteglaacuteig eacutes csavarig mi aacutelliacutetunk oumlssze miacuteg magas szintű programozaacutesi nyelvekneacutel keacuteszen kapjuk a falakat esetleg az egeacutesz helyiseacutegeket Az assembly nyelvvel baacutermelyik memoacuteriaciacutemet eleacuterhetjuumlk eacutes kizaacuteroacutelag tőluumlnk fuumlgg hogy annak tartalmaacutet mikeacutent eacutertelmezzuumlk mire hasznaacuteljuk Nincsenek tehaacutet kuumlloumlnfeacutele vaacuteltozoacutetiacutepusaink egyaacuteltalaacuten vaacuteltozoacuteink sincsenek csak memoacuteriarekeszeink Ez furcsaacuten hangozhat annak aki maacuter tanult valamilyen magas szintű programozaacutesi nyelvet (BASIC PASCAL C) de ez az igazsaacuteg Mindenesetre ettől nem kell megijedni

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

assembly nyelven is minden megoldhatoacute eacutes bizonyos probleacutemakoumlrre mint peacuteldaacuteul erősen hardverkoumlzeli uumlgyek kezeleacuteseacutere sokszor alkalmasabb mint a magas szintű nyelvek

2 MemoacuteriaAzt a hardverelemet vagy modult amely keacutepes adatok taacuterolaacutesaacutera memoacuteriaacutenak nevezzuumlk Tulajdonkeacuteppen akaacuter egyetlen kondenzaacutetort is memoacuteriaacutenak nevezhetuumlnk egy aacuteramkoumlrben hiszen taacuteroloacuteroacutel van szoacute A digitaacutelis szaacutemiacutetaacutestechnika vilaacutegaacuteban enneacutel persze sokkal toumlbbre van szuumlkseacuteg Ebben az esetben memoacuteriaacutenak azt a hardveregyseacuteget nevezzuumlk amelyik toumlbbnyire azonos meacuteretű digitaacutelis informaacutecioacuteegyseacutegeket keacutepes rendezett moacutedon taacuterolni A legegyszerűbb esetben ez az informaacutecioacuteegyseacuteg egy baacutejt ami nyolc bitből aacutell A memoacuteriaegyseacuteg meacutereteacutet a szerint adjuk meg hogy az haacuteny darabot keacutepes taacuterolni a vaacutelasztott informaacutecioacuteegyseacutegből jelen esetben a baacutejtboacutel A memoacuteriaegyseacutegeket aacuteltalaacuteban uacutegy tervezik hogy a teljes meacuteret a kettő valamely hatvaacutenyaacuteval egyezzen meg A memoacuteria meacutereteacutenek megadaacutesakor az SI-prefixumokat hasznaacuteljaacutek ami persze nem teljesen korrekt hiszen peacuteldaacuteul az 1 kilobaacutejt a szaacutemiacutetaacutestechnikaacuteban szigoruacutean 1 024 baacutejtot jelent a kilo (k) SI-prefixum viszont 103 = 1 000-rel egyenlő Volt proacutebaacutelkozaacutes ide passzoloacute prefixumok bevezeteacuteseacutere (kibi = 210 = 1 024 mebi = 220 = 1 048 576 gibi = 230 stb) csak ez valamieacutert egyelőre nem tudott elterjedni

A memoacuteria rendezett mivolta azt jelenti hogy a memoacuteriarekeszek egyeacutertelműen azonosiacutethatoacutek toumlbbnyire sorszaacutem alapjaacuten Ezt a sorszaacutemot hiacutevjuk egyszerűen memoacuteriaciacutemnek Aacuteltalaacutenos iskolaacutes szakkoumlroumlkoumln ezt a megszaacutemozott fioacutekok metaforaacutejaacuteval szoktaacutek szemleacuteltetni eacutes valljuk be ez a szeacutep analoacutegia egyetemi szinten is kifogaacutestalanul megaacutellja a helyeacutet

Az ADuC mikrovezeacuterlők memoacuteriaszervezeacutese egeacuteszen sajaacutetos Ennek taacutergyalaacutesa az iteratiacutev feleacutepiacuteteacutesuumlnknek megfelelően a keacutesőbbi fejezetekben toumlrteacutenik Ha maacuter a memoacuteriaacuteknaacutel tartunk emliacutetsuumlk meg hogy keacutet sajaacutetos memoacuteriafeleacutepiacuteteacutes terjedt el a szaacutemiacutetaacutestechnikaacuteban Az egyiket Neumann-architektuacuteraacutenak hiacutevjaacutek a Magyarorszaacutegon szuumlletett zsidoacute szaacutermazaacutesuacute elkeacutepesztően briliaacutens elmeacutejű matematikus tiszteleteacutere Enneacutel az architektuacuteraacutenaacutel koumlzoumls memoacuteriaacuteban taacuteroljuk a programkoacutedot eacutes az adatokat is Iacutegy tehaacutet egy koacuted minden tovaacutebbi neacutelkuumll aacutetiacuterhatja sajaacutet magaacutet A maacutesik tiacutepus a Harvard-architektuacutera Enneacutel az architektuacuteraacutenaacutel kuumlloumln memoacuteria szolgaacutel a programkoacuted eacutes az adatok taacuterolaacutesaacutera A mikrovezeacuterlőkneacutel sokkal inkaacutebb ez utoacutebbi megoldaacutes terjedt el Ilyen a mieacutenk is

3 RegiszterekAz assembly nyelvről szoacuteloacute aacuteltalaacutenos leiacuteraacutesban azt a hasonlatot hasznaacuteltuk hogy olyan ez mintha az utolsoacute teacuteglaacuteig eacutes csavarig mi magunk raknaacutenk oumlssze egy haacutezat Ehhez nyilvaacuten kell betonkeverő talicska vakoloacutekanaacutel kalapaacutecs eacutes meacuteg sok minden maacutes Baacutermilyen alacsony szintű program veacutegrehajtaacutesaacutenaacutel is segeacutedeszkoumlzoumlkre van szuumlkseacuteguumlnk hiszen magaacuteval az assembly nyelvvel oumlnmagaacuteban nem tudnaacutenk mivel műveleteket veacutegrehajtani Ezek a segeacutedeszkoumlzoumlk a mikroprocesszoroknaacutel elsősorban a memoacuteriarekeszek a regiszterek eacutes a jelzőbitek vagy flag-ek Ez utoacutebbiakroacutel keacutesőbb lesz majd szoacute

A memoacuteriarekeszek koumlzvetlen eacutes gyors eleacutereacutese az assembly nyelv nagy előnye Egy-egy mikroprocesszor architektuacuteraacutejaacutenaacutel toumlbbfeacutele memoacuteriaciacutemnek lehet kituumlntetett szerepe hiszen a memoacuteriarekeszek tartalmaacuteval aacuteltalaacuteban kezdeni akarunk valamit meg akarjuk vizsgaacutelni eacuterteacutekuumlket logikai vagy algebrai műveletet akarunk veacutegrehajtani rajtuk el akarjuk menteni tartalmukat stb Az ilyesfeacutele műveletek megkoumlnnyiacuteteacuteseacutere eacutes a lehető leggyorsabb veacutegrehajtaacutesaacutera a mikroprocesszorok kituumlntetett memoacuteriarekeszekkel biacuternak ezek megnevezeacutese a regiszter

Baacuter ezt a fejezetet meacuteg mindig eleacuteggeacute aacuteltalaacutenos leiacuteraacutesnak szaacutenjuk a konkreacutet peacuteldaacutek bemutataacutesa maacuter a 80518052-es processzormag utasiacutetaacuteskeacuteszleteacutevel toumlrteacutenik Jegyezzuumlk meg hogy valamennyi memoacuteriarekesz ill

regiszter egybaacutejtos azaz eacuterteacuteke a legegyszerűbb eacutertelmezeacutes szerint a halmazboacutel szaacutermazik Olyan eset azonban előfordulhat hogy keacutet egybaacutejtos regiszter oumlsszetartozik eacutes inkaacutebb azt mondjuk hogy keacutetbaacutejtos regiszterről van szoacute

Aacuteltalaacutenossaacutegban elmondhatoacute hogy a mikroprocesszoroknak van egy elsődleges fontossaacuteguacute regiszteruumlk amit akkumulaacutetornak hiacutevnak Az assembly nyelvek erre szinte minden esetben az A szimboacutelummal hivatkoznak Egyszerűbb mikroprocesszorok eseteacuteben az akkumulaacutetor meacuterete mindoumlsszesen egyetlen baacutejt azaz nyolc bit A program veacutegrehajtaacutesa soraacuten joacuteformaacuten minden szaacutemiacutetaacutes eacutes művelet az akkumulaacutetorban toumlrteacutenik eacutes ide keruumll vissza a szaacutemiacutetaacutes vagy művelet veacutegeredmeacutenye is

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

A 80518052-es processzormagnak az akkumulaacutetoron kiacutevuumll van meacuteg heacutet darab kiemelt fontossaacuteguacute regisztere R0 R1 R7 Ezeket nagyon sok feladatra alkalmazhatjuk ahogy azt majd a keacutesőbbiekben laacutetni fogjuk

4 Koumlzvetlen ciacutemzeacutesCiacutemzeacutesmoacutedon azt a moacutedot eacutertjuumlk ahogyan egy memoacuteriarekesz tartalmaacutet eleacuterjuumlk Az assembly nyelveknek minden olyan ciacutemzeacutesmoacutedot tartalmazniuk kell melyekkel meacuteg a legbonyolultabb probleacutema is megoldhatoacute Az persze maacuter maacutes keacuterdeacutes hogy ez mekkora erőfesziacuteteacutest ill programbonyolultsaacutegot jelent A gyaacutertoacutek azonban sokszor keacutenyelmesebbeacute teszik a programozoacute eacuteleteacutet eacutes olyan ciacutemzeacutesmoacutedot is megvaloacutesiacutetanak amelyre tulajdonkeacuteppen nem is lenne okvetlenuumll szuumlkseacuteg de felhasznaacutelaacutesaacuteval szaacutemos probleacutema esetleg sokkal gyorsabban eacutes koumlnnyebben oldhatoacute meg

Az előző alfejezet utaacuten maacuter mutathatunk peacuteldaacutet arra az esetre amikor az akkumulaacutetorba egy a programozoacute aacuteltal roumlgziacutetett eacuterteacuteket mondjuk 28-at kell betoumllteni Ehhez megtanuljuk azt az utasiacutetaacutest amellyel adatokat lehet mozgatni Ennek mnemonikja MOV a mnemonik pedig az angol Move (mozgat) szoacuteboacutel szaacutermazik Az utasiacutetaacutes szintaxisaacutenaacutel nagyon fontos hogy előszoumlr azt a memoacuteriarekeszt nevezzuumlk meg amelyikbe az adatot mozgatni akarjuk maacutesodikkeacutent pedig azt a memoacuteriarekeszt amelyikből mozgatni akarjuk az adatot A fenti feladat tehaacutet iacutegy oldhatoacute meg

MOV A75

Ezt a ciacutemzeacutesmoacutedot koumlzvetlen ciacutemzeacutesnek (angolul Immediate Addressing) nevezzuumlk Azeacutert koumlzvetlen a ciacutemzeacutes mert az akkumulaacutetorba vagy aacuteltalaacutenosan a kijeloumllt helyre toumlrteacutenő adatmozgataacuteshoz nem kell eleacuterni semmilyen maacutes memoacuteriarekeszt hiszen az adatot koumlzvetlenuumll mozgatjuk a kijeloumllt helyre Ezt mindig a kettős kereszt () szimboacutelummal jeloumlljuumlk Ezt az assemblernek fel kell ismernie eacutes helyesen kell lefordiacutetania a programkoacutedot Geacutepi koacutedban az utasiacutetaacutest koacutedoloacute szaacutemeacuterteacutek eacutes a konkreacutet adat egymaacutest koumlvető memoacuteriarekeszekben helyezkedik el vagyis az adat koumlzvetlenuumll az utasiacutetaacutes koacutedjaacutet koumlveti

Ha maacuter itt tartunk tanuljuk meg hogy koumlzvetlen ciacutemzeacutesekneacutel hogyan hasznaacutelhatunk binaacuteris hexadecimaacutelis vagy akaacuter karakteres eacuterteacutekmegadaacutest Az alaacutebbi koumlzvetlen ciacutemzeacutesek mind szinonimaacutek a 80518052-es processzormagok assembly nyelven toumlrteacutenő programozaacutesaacutehoz hasznaacutelhatoacute assemblerekneacutel

MOV A75 MOV A04Bh MOV A01001011b MOV ArsquoKrsquo

Jegyezzuumlk meg a szintaxist Decimaacutelis eacuterteacuteket a felhasznaacutelt szaacutemjegyek szaacutemaacutetoacutel fuumlggetlenuumll mindenfeacutele egyeacuteb jeloumlleacutes neacutelkuumll iacuterunk a kettős kereszt utaacuten A hexadecimaacutelis eacuterteacutekek megadaacutesa mindig egy 0-val kezdődik majd az azt koumlvető teacutenylegesen a hexadecimaacutelis szaacutemot jeloumllő keacutet karakter (hexadecimaacutelis szaacutemjegy) utaacuten egy h betűt iacuterunk Binaacuteris eacuterteacutekmegadaacutesnaacutel a nyolc szaacutemjegyet (1-et vagy 0-t) egy b betű koumlveti ASCII koacuted megadaacutesaacutenaacutel pedig nyugodtan hasznaacutelhatjuk magaacutet a karaktert csak tegyuumlk aposztroacutefok koumlzeacute A koumlzvetlen ciacutemzeacutes szerencseacutere az Rn regiszterekre is műkoumldik

MOV RnrsquoKrsquo

Itt az n betű indexkeacutent eacutertelmezendő csak a programkoacutedok stiacutelusa szerint nem suumlllyesztett betűtiacutepussal iacuterjuk Az előző alfejezet utolsoacute bekezdeacuteseacuteben bemutatott R regiszterek darabszaacutema szerint n eacuterteacuteke 0 eacutes 7 koumlzoumltti egeacutesz szaacutem lehet

5 Direkt ciacutemzeacutesKeacutepzeljuumlnk el egy olyan memoacuteriamodult melynek meacuterete mindoumlsszesen 256 baacutejt (Azeacutert ilyet keacutepzeljuumlnk el mert az ADuC 842-es architektuacuteraacutejaacutenaacutel ez meacuteg sokszor vissza fog koumlszoumlnni ugyanis pontosan ilyen modulokboacutel eacutepuumll foumll a memoacuteria) A memoacuteriarekeszek ciacutemei ezek szerint 0-toacutel 255-ig terjednek hexadecimaacutelisan iacuterva 00h-toacutel FFh-ig Ha valamelyik speciaacutelis regiszterbe szeretneacutenk betoumllteni valamelyik memoacuteriaciacutemen talaacutelhatoacute eacuterteacuteket akkor direkt ciacutemzeacutest (angolul Direct Addressing) hasznaacutelunk

Neacutezzuumlk a koumlvetkező peacuteldaacutet

MOV A030h

Ennek veacutegrehajtaacutesa utaacuten az akkumulaacutetorba az az eacuterteacutek keruumll amelyik a 30h-s ciacutemen talaacutelhatoacute A 30h-s ciacutemen talaacutelhatoacute eacuterteacutek ettől szerencseacutere nem vaacuteltozik meg

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

Az adatmozgataacutes sorrendje fordiacutetott is lehet termeacuteszetesen

MOV 030hR2

Ennek veacutegrehajtaacutesa utaacuten a 30h memoacuteriaciacutemre az az eacuterteacutek keruumll amelyik az R2-es regiszterben talaacutelhatoacute Ekkor az R2-es regiszter tartalma szintuacutegy vaacuteltozatlanul marad

Direkt ciacutemzeacutessel az akkumulaacutetor eacutes az R0 R1 R7 regiszterek valamelyike koumlzoumltt is koumlnnyen bonyoliacutethatoacute az adatmaacutesolaacutes peacuteldaacuteul

MOV AR5

vagy

MOV R6A

Jegyezzuumlk azonban meg hogy ha az egyik R regiszter tartalmaacutet akarjuk a maacutesikba toumllteni akkor erre a műveletre nincsen elegaacutens utasiacutetaacutes Ha tehaacutet mondjuk R0 tartalmaacutet akarjuk R7-be maacutesolni akkor segiacutetseacuteguumll hiacutevhatjuk peacuteldaacuteul az akkumulaacutetort

MOV AR0MOV R7A

Direkt ciacutemzeacutessel egyik memoacuteriarekesz tartalmaacutet aacutetmaacutesolhatjuk a maacutesik memoacuteriarekeszbe

MOV 03Eh03Ah

Ennek veacutegrehajtaacutesa utaacuten a 3Ah ciacutemen talaacutelhatoacute eacuterteacutek a 3Eh ciacutemre maacutesoloacutedik A direkt ciacutemzeacutest tartalmazoacute adatmozgataacutest az utasiacutetaacuteskeacuteszlet leiacuteraacutesai toumlbbnyire a

MOV AdirectMOV directAMOV RndirectMOV directRnMOV directdirect

teacutetelekkel illetik a leacutenyeg hogy szerepel bennuumlk a direct utalaacutes

A maacuter sokat hasznaacutelt MOV utasiacutetaacutesnak van olyan variaacutensa is amelyben keveredik a direkt eacutes a koumlzvetlen ciacutemzeacutes

MOV 032h125

Ennek veacutegrehajtaacutesa utaacuten a decimaacutelisan 125-oumlt jelentő eacuterteacutek keruumll a 32h ciacutemre Aacuteltalaacutenos hivatkozaacutesa a koumlvetkező

MOV directdata

6 Oumlsszehasonliacutetaacutesok eacutes ugraacutesokMinden assembly nyelvben lennie kell olyan utasiacutetaacutesoknak melyek lehetőveacute teszik regiszterek vagy memoacuteriarekeszek tartalmaacutenak oumlsszehasonliacutetaacutesaacutet Ha ez nem iacutegy lenne nem lehetne programelaacutegazaacutest csinaacutelni eacutes csak primitiacutev koacutedokat tudnaacutenk iacuterni Ha maacuter szoacuteba keruumllt az elaacutegazaacutes akkor nyilvaacutenvaloacutean olyan utasiacutetaacutesokra is szuumlkseacuteg van amelyekkel a program vezeacuterleacuteseacutet a veacutegrehajtandoacute reacuteszekhez lehet ugratni Aki magas szintű programozaacutesi nyelvekkel kezdte a programozaacutes alapjait annak ez most nagyon idegen lesz de assemblyben mesteri moacutedon lehet oumlssze-vissza ugraacuteltatni a program veacutegrehajtaacutesaacutet eacutes mindezt uacutegy hogy annak meacuteg eacutertelme is legyen

Az oumlsszehasonliacutetaacutesok eredmeacutenyeacuteről sokszor uacutegy eacutertesuumlluumlnk hogy egy speciaacutelis regiszter valamely kituumlntetett bitje vagy bitjei adott jelenteacutes szerint aacutellnak be 0-ra vagy 1-re Az ilyen jelzőbiteket szoktaacutek angolul flag-nek nevezni Talaacutelkozni fogunk majd olyan jelzőbittel amelyik egy eacuterteacutek-oumlsszehasonliacutetaacutesnaacutel 1-re aacutell be ha az egyik eacuterteacutek kisebb mint a maacutesik eacutes 0-ra aacutell be ha ez nem iacutegy van azaz nagyobb vagy egyenlő Ezek utaacuten egy arra alkalmas utasiacutetaacutessal elugrathatjuk a programot akkor ha a jelzőbit eacuterteacuteke 1 kuumlloumlnben a program veacutegrehajtaacutesa szeacutepen csorog tovaacutebb Ez az elugrataacutes aacuteltalaacuteban a jelzőbit 0 eacuterteacutekeacutere is megfogalmazhatoacute Lesznek azutaacuten olyan utasiacutetaacutesok is amelyek egymagukban veacutegeznek oumlsszehasonliacutetaacutest majd az eredmeacuteny valamilyen tulajdonsaacutegaacutenak

Created by XMLmind XSL-FO Converter

Ismerkedeacutes az assembly programozaacutesi nyelvvel

megfelelően ugratjaacutek el a programvezeacuterleacutest vagy hagyjaacutek tovaacutebb csorogni a programot

Az olvasoacutet megnyugtatjuk hamarosan peacuteldaacutek oumlzoumlneacutevel tesszuumlk vilaacutegossaacute az [Ismerkedeacutes az assembly programozaacutesi nyelvvel] fejezetben leiacutertakat

Created by XMLmind XSL-FO Converter

3 fejezet - Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlrAz ADuC 842-es chiphez hasznaacutelhatoacute assembler a letoumlltőprogram eacutes egyeacuteb szoftverek ismerteteacutese nem e tankoumlnyv elsődleges feladata viszont nem is hiaacutenyozhat ha a teacutemaacuteval most ismerkedő hallgatoacutek teacutenylegesen hasznaacutelni akarjaacutek az eszkoumlzoumlket iacutegy roumlviden szoacutelnunk kell ezekről is

A hallgatoacutei panelt amelyre ezt a tankoumlnyvet alapozzuk Dr Kaacutentor Zoltaacuten a Fizika Inteacutezet egykori munkataacutersa tervezte Itt most csak a fő funkcioacuteit foglaljuk oumlssze a reacuteszletes aacuteramkoumlri terv a Fuumlggeleacutekben talaacutelhatoacute olyan reacuteszletesseacuteggel hogy az eszkoumlz reprodukaacutelhatoacute legyen A [A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll] aacutebra keacutet neacutezetből mutatja a panelt Talaacutelhatoacute rajta egy USB-csatlakozoacute eacutes egy 20-poacutelusuacute szalagkaacutebel-csatlakozoacute Az USB-csatlakozoacutehoz baacutetran hasznaacutelhatunk a nyomtatoacuteknaacutel megszokott USB-kaacutebelt Ezzel kapcsolhatjuk panelunkat a szaacutemiacutetoacutegeacutephez A 20-poacutelusuacute szalagkaacutebel-csatlakozoacute tuumlskeacuteire keacutet teljes IO-port laacutebai a +5 V-os taacutepfeszuumlltseacuteg eacutes a foumlld (GND) vannak kivezetve A csatlakozoacute tuumlskeacuteinek funkcioacutekiosztaacutesaacutet a fuumlggeleacutekben talaacuteljuk Ugyanez igaz a panelboacutel kiaacutelloacute egyeacuteb tuumlskeacutek ismerteteacuteseacutere is

31 aacutebra - A hallgatoacutei panel melyre a tankoumlnyv eacutepuumll

A panelon joacutel foumllismerhető egy nyolcas LED-sor eacutes maga az ADuC 842-es mikrovezeacuterlő Talaacutelunk meacuteg neacutegy nyomoacutegombot a panel hosszabbik eacuteleacutehez (a Pannon Egyetem felirathoz) koumlzelebbi kettőnek baacutermilyen funkcioacutet adhatunk szoftveresen A szalagkaacutebel-csatlakozoacutehoz legkoumlzelebb elhelyezkedő gomb a resetgomb A negyedik a program letoumllteacuteseacutet lehetőveacute tevő uumlzemmoacutedba aacutelliacutetja a mikrovezeacuterlőt Ilyenkor uacutegy kell eljaacuternunk hogy egyik ujjunkkal lenyomjuk ezt a gombot majd ezt fel nem engedve lenyomjuk a resetgombot is Iacutegy aacutell az eszkoumlz letoumlltőuumlzemmoacutedba

Az ADuC 842-es processzormagja a 8052-es Ez csak nagyon keveacutes reacuteszletben (főkeacutent a memoacuteriateruumlletek meacutereteacuteben) kuumlloumlnboumlzik a 8051-es magtoacutel iacutegy nem veacuteletlen hogy az Analog Devices gyaacuteri CD-i is a 8051-es programozaacutesaacutera alkalmas assemblert tartalmazzaacutek Ennek neve asm51exe Gyaacuteri CD hiacutejaacuten az Internetről toumllthetjuumlk le ezt az alkalmazaacutest melyet meacuteg DOS alaacute fejlesztettek Windows XP-n meacuteg simaacuten futtathatoacute parancsuumlzemmoacutedban vagy valamely alkalmas Commander-t hasznaacutelva Keacutesőbbi Windows rendszer eseteacuten emulaacutetorra lesz szuumlkseacuteguumlnk Az asm51exe assemblerhez komplett leiacuteraacutesokat is koumlnnyen talaacutelunk az Interneten Ezeacutert itt csak annyit emliacutetuumlnk meg hogy assembly koacutedot tartalmazoacute faacutejl (aacuteltalaacuteban sima szoumlvegfaacutejl legfoumlljebb asm kiterjeszteacutest szokaacutes neki adni) lefordiacutetaacutesa utaacuten egy LST eacutes egy HEX kiterjeszteacutesű faacutejl generaacuteloacutedik Az LST faacutejlban (ez is egyszerű szoumlvegfaacutejl) taacutejeacutekozoacutedhatunk a fordiacutetoacute aacuteltal talaacutelt hibaacutekroacutel eacutes a memoacuteriaciacutemek hozzaacuterendeleacuteseacuteről Aacuteltalaacutenossaacutegban elmondhatoacute hogy az LST faacutejlba toumlbbnyire csak akkor kukkantunk bele ha a fordiacutetoacute hibaacuteba uumltkoumlzoumltt

A HEX kiterjeszteacutesű faacutejl az amit le kell toumlltenuumlnk a mikrovezeacuterlőre hogy ott futtatni tudjuk Ehhez megfelelő letoumlltőprogramra van szuumlkseacuteguumlnk Az Analog Devices honlapjaacuteroacutel (wwwanalogcom) ez az alkalmazaacutes szabadon letoumllthető a faacutejl neve wsd_setup_v705 az alkalmazaacuteseacute pedig Windows Serial Dowloader Első letoumllteacutes előtt a legfontosabb dolgunk az hogy a Configuration menuumlpontnaacutel beaacutelliacutetsuk a mikrovezeacuterlő aacuteltal lefoglalt Com Port szaacutemaacutet Ezt a Windows VezeacuterlőpultrarrRendszerrarrHardverrarrEszkoumlzkezelőrarrPortok (COM eacutes LPT) helyen talaacuteljuk Az alkalmazaacutes feluumlleteacutet az alaacutebbi aacutebra mutatja

32 aacutebra - Az Analog Devices soros porti letoumlltőprogramjaacutenak feluumllete

Created by XMLmind XSL-FO Converter

Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr

A keacutesőbbiekben a soros porti kommunikaacutecioacute lefolytataacutesaacutehoz eacutes a mikrovezeacuterlőről a PC-re eacuterkező uumlzenetek megjeleniacuteteacuteseacutehez szuumlkseacuteguumlnk lesz arra alkalmas szoftverre Az Interneten sok ilyen alkalmazaacutes eleacuterhető A szerző a Hercules nevű freeware alkalmazaacutest hasznaacutelta a tankoumlnyvbe bekeruumllt kommunikaacutecioacutes peacuteldaacutekat ezzel valoacutesiacutetotta meg Ennek az alkalmazaacutesnak a feluumlleteacutet az [A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete] aacutebraacuten laacutethatjuk A Serial menuumlpontnaacutel ugyanazt a COM Portot kell beaacutelliacutetanunk mint a letoumlltőprogramnaacutel Hasznaacutelat koumlzben arra azonban nagyon figyeljuumlnk hogy ha a Hercules alkalmazaacutesban nem zaacuterjuk be a koraacutebban megnyitott soros portot akkor nem tudunk uacutejabb programot letoumllteni a mikrovezeacuterlőre a Windows Serial Downloader-rel Ez a figyelmetlenseacuteg kaacutert nem bosszuacutesaacutegot viszont annaacutel inkaacutebb tud okoznihellip

33 aacutebra - A Hercules kommunikaacutecioacutes alkalmazaacutes feluumllete

Created by XMLmind XSL-FO Converter

4 fejezet - Első programunk villogtassuk a panel LED-jeit1 feladat

Az oktataacutesi ceacutelra tervezett panelon egy LED-sor talaacutelhatoacute amely 8 darab LED-ből aacutell Villogtassuk a LED-eket 1 Hz-es frekvenciaacuteval uacutegy hogy egyszer az egyik oldali neacutegy maacutesszor a maacutesik oldali neacutegy vilaacutegiacutetson [Code01]

A feladat megoldaacutesa nagyon egyszerű lesz csak paacuter sorboacutel fog aacutellni Ennek elleneacutere neacutehaacuteny dolgot meacuteg meg kell beszeacutelnuumlnk hogy eacutertsuumlk mi mieacutert keruumll a programba A magyaraacutezatokat a koumlvetkező neacutehaacuteny alfejezetben talaacuteljuk de mindig csak annyit amennyire eacuteppen szuumlkseacuteguumlnk van

1 Portok eacutes funkcioacuteregiszterekAz ADuC 842-es mikrovezeacuterlőnek neacutegy darab nyolcbites portja van melyek nagyon sokfeacutele ceacutelra toumlbbek koumlzt IO-műveletekre hasznaacutelhatoacutek A portoknak megfelelő neacutegy baacutejt a mikrovezeacuterlő memoacuteriaacutejaacutenak egy-egy ciacutemeacuten talaacutelhatoacute Emliacutetettuumlk maacuter hogy egy-egy speciaacutelis memoacuteriarekeszt regiszternek szoktunk nevezni Na haacutet mi lenne speciaacutelisabb egy szaacutemiacutetoacutegeacutepneacutel mint az IO-portok Az ADuC 842-es mikrovezeacuterlő műkoumldeacuteseacutet konfiguraacutecioacutejaacutet a portokon kiacutevuumll meacuteg nagyon sok tovaacutebbi memoacuteriarekesz tartalma befolyaacutesolja Eacuteppen a kituumlntetett szerepuumlk miatt ezek a bizonyos memoacuteriarekeszek a speciaacutelis funkcioacutejuacute regiszterek (angolul Special Function Register roumlvidiacutetve SFR) elnevezeacutest kaptaacutek

A hallgatoacutei panelon a 2 port felel a LED-ek műkoumldeacuteseacuteeacutert Ennek a portnak A0h a ciacuteme de hogy az ilyesfeacutele ciacutemeket ne kelljen fejben tartani programozaacutesnaacutel az assemblerben ehhez kuumlloumln szimboacutelumot rendeltek P2 Ismerve ezt a szimboacutelumot soha toumlbbet nem kell a konkreacutet ciacutemmel foglalkoznunk

A P2 SFR bitjei egy-egy LED-nek felelnek meg Tudnunk kell hogy az ADuC mikrovezeacuterlő portjai aacuteltalaacuteban nem hasznaacutelhatoacutek aktiacutev kimenetkeacutent ha meacutegis akkor is csak paacuter tized mA aacuteram leadaacutesaacutera keacutepesek kuumlloumlnben fuumlstjelenseacutegek leacutepnek foumll Iacutegy aztaacuten talaacuten nem meglepő hogy a P2-re koumltoumltt LED-ek fordiacutetott logikaacuteval fognak műkoumldni azaz akkor vilaacutegiacutetanak ha a nekik megfelelő bit eacuterteacuteke 0 Ha ez a bit 1 akkor a LED nem vilaacutegiacutet Ennek tudataacuteban az olvasoacute biztos lehet abban hogy a LED-ek katoacutedja neacutez a port laacutebai feleacute Azt is mondhatjuk hogy a P2 port laacutebaival a LED-ek katoacutedjait foumlldre huacutezzuk iacutegy tud folyni az aacuteram

Ha az első 4 LED-et akarjuk bekapcsolni akkor ezt kell tennuumlnk

MOV P211110000b

Ha az maacutesik 4 LED-et akkor ezt

MOV P200001111b

2 Egyszerű ciklusszervezeacutesA programozaacutes egyik legfontosabb eleme a ciklusszervezeacutes Mire joacute egy ciklus Talaacuteloacute lehet az a definiacutecioacute hogy egy ciklussal valamely programreacuteszt bizonyos felteacuteteleknek megfelelő moacutedon toumlbbszoumlr veacutegrehajtunk Ezt a bizonyos programreacuteszt ciklusmagnak szoktaacutek nevezni A ciklusokhoz toumlbbnyire szuumlkseacuteg van egy olyan memoacuteriarekeszre vagy regiszterre melynek eacuterteacuteke meghataacuterozza hogy haacutenyszor hajtoacutedik veacutegre a ciklusmag Ezt a memoacuteriarekeszt vagy regisztert ciklusvaacuteltozoacutenak is nevezhetjuumlk Ciklusokat szervezni mind magas szintű programozaacutesi nyelvekben mind assemblyben toumlbbfeacutelekeacuteppen lehetseacuteges A legegyszerűbb eset talaacuten az amikor a ciklusmagot előre definiaacutelt moacutedon n-szer hajtjuk veacutegre Ezt az n-t adjuk meg magaacuteban a programkoacutedban iacutegy az semmilyen kuumllső vagy belső felteacuteteltől nem fuumlgg

Az ADuC utasiacutetaacutesai koumlzoumltt van egy olyan amelyet remekuumll felhasznaacutelhatunk a fenti kiacutevaacutenalmak szerint Ez a DJNZ utasiacutetaacutes A mnemonik az angol Decrement and Jump if Not Zero (csoumlkkent eacutes ugrik ha nem nulla) kifejezeacutesből szaacutermazik Ennek az utasiacutetaacutesnak keacutet variaacutensa van az egyik szintaxisa a koumlvetkező

DJNZ Rnrel

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

Az Rn azt jelenti hogy ehhez az utasiacutetaacuteshoz baacutermelyik R regisztert hasznaacutelhatjuk Ez az utasiacutetaacutes felteacuteteles elaacutegazaacutest azaz felteacutetelhez koumltoumltt ugraacutest valoacutesiacutet meg A felteacutetel jelen esetben az hogy az Rn regiszter ne legyen egyenlő 0-val Ha a regiszter tartalma meacutegis 0 akkor a program szeacutepen csorog tovaacutebb Ha nem 0 akkor viszont ugraacutes toumlrteacutenik Azt hogy hovaacute ugrik a program vezeacuterleacutese a rel eacuterteacutek mutatja meg Nagyon leacutenyeges hogy ide ne akaacutermilyen memoacuteriaciacutemet keacutepzeljuumlnk Lesz utasiacutetaacutes arra is amelyikkel baacutermekkoraacutet lehet ugratni de itt most maacutesroacutel van szoacute relatiacutev ugraacutes toumlrteacutenik Azeacutert relatiacutev ugraacutes mert ahhoz a memoacuteriaciacutemhez keacutepest ugrik előre vagy haacutetra a program vezeacuterleacutese amelyiken a DJNZ utasiacutetaacutes talaacutelhatoacute Fontos megjegyeznuumlnk hogy baacutermely ilyesfeacutele relatiacutev ugraacutes előrefeleacute 127 baacutejtot visszafeleacute pedig 128 baacutejtot nem leacutephet tuacutel Kezdő programozoacutek sokszor meglepődnek azon (aztaacuten moacutedosult tudataacutellapotba keruumllnek eacutes oumlkoumllcsapaacutesokkal buumlntetik a billentyűzetet pedig az semmiről nem tehet) hogy a laacutetszoacutelag teljesen joacute programkoacutedjukra hibaacutet jelez a fordiacutetoacute Ez sokszor azeacutert van mert relatiacutev ugraacutessal tuacutelleacutepik a 127 ill 128 baacutejtot Ennek kiveacutedeacuteseacutet a keacutesőbbiekben szintuacutegy megtanuljuk

Az assemblyben iacutert koacutedban az ugraacutesok helyeacutenek megjeloumlleacuteseacutere ciacutemkeacuteket hasznaacutelunk Az alkalmazott assemblerben a ciacutemkeacutek eacutekezetes betűket nem tartalmazhatnak eacutes kettősponttal veacutegződnek Vegyuumlk peacuteldaacutenak a koumlvetkező nyuacutelfarknyi koacutedot

MOV R725

label

[ciklusmag]

DJNZ R7label

A fenti koacutedocska a [ciklusmag]-nak nevezett reacuteszt pontosan 25-szoumlr hajtja veacutegre Keacutepzeljuumlk el ugyanis hogy R7 tartalma maacuter csak 1 Ha lefut a ciklusmag akkor a DJNZ utasiacutetaacutes R7 tartalmaacutet 1-gyel csoumlkkenti azaz 1-ről 0-ra majd oumlsszehasonliacutetja azt 0-val Mivel egyezeacutes van ezeacutert maacuter nem toumlrteacutenik ugraacutes a label ciacutemkeacutere (ugraacutes akkor toumlrteacutenik amikor a vizsgaacutelt regiszter tartalma elteacuter 0-toacutel) hanem csorog tovaacutebb a program R7 tartalma ekkor garantaacuteltan 0

A ciklusokat termeacuteszetesen egymaacutesba is aacutegyazhatjuk Eacuteppen uacutegy ahogy a nagyobb hal megeszi a kisebb halat vagy halakat Olyan nincs hogy a halak szaacuteja oumlsszeakad eacutes egyik se tudja megenni a maacutesikat Ciklusok egymaacutesba aacutegyazaacutesaacutera hamarosan laacutetunk peacuteldaacutet

3 SzubrutinokTeacutetelezzuumlk foumll hogy a programunk valamely reacuteszeacutet sokszor (neacutehaacutenyszor igen sokszor ki tudja haacutenyszor stb) akarjuk veacutegrehajtani Ilyenkor nem ceacutelszerű ezt a reacuteszt favaacutegoacute moacutedon sokszor (neacutehaacutenyszor igen sokszor ki tudja haacutenyszor stb) beleiacuterni a programba mert van erre egy uumlgyes megoldaacutes Ezt az uumlgyes megoldaacutest szubrutinnak hiacutevjaacutek A program baacutermely helyeacuteről hiacutevhatunk szubrutinokat Ilyenkor az a memoacuteriaciacutem ahol a program vezeacuterleacutese tartott elmentődik egy meghataacuterozott memoacuteriateruumlletre (ezt hiacutevjaacutek veremnek erről bővebben keacutesőbb) majd a vezeacuterleacutes a szubrutinhoz ugrik Azt a keacutetbaacutejtos regisztert amelyben az aktuaacutelisan veacutegrehajtandoacute utasiacutetaacutes ciacuteme talaacutelhatoacute programszaacutemlaacuteloacutenak hiacutevjuk (angolul Program Counter) A szubrutin veacutegeacutet speciaacutelis utasiacutetaacutessal kell jeleznuumlnk Ha ezt elfelejtjuumlk akkor a vezeacuterleacutes nem ugrik vissza az eredeti helyre hanem a program fut tovaacutebb eacutes aacuteltalaacuteban anomaacutelis műkoumldeacutesbe kezd vagy joacutel lefagyhellip Ha ellenben a helyeacutere iacuterjuk a szubrutint lezaacuteroacute utasiacutetaacutest akkor a verembe keruumllt ciacutem visszatoumlltődik a programszaacutemlaacuteloacuteba eacutes a program futaacutesa a szubrutint megiacutevoacute utasiacutetaacutes utaacuteni ponttoacutel folytatoacutedik Szubrutin hiacutevaacutesaacutenak utasiacutetaacutesa

CALL subroutine

A mnemonik toumlrteacutenetesen teljes egeacuteszeacuteben az angol Call szoacute ami hiacutevaacutest jelent Ha valaki belekukkant az 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacutebe akkor nem is talaacutelja meg a CALL utasiacutetaacutest Talaacutel viszont keacutet maacutesikat ACALL (Absolute Call within 2K block) eacutes LCALL (Long Call) A helyzet az hogy az ACALL utasiacutetaacutessal olyan szubrutint hiacutevhatunk melynek kezdőciacuteme ugyanabban a 2 kilobaacutejtos memoacuteriablokkban van mint a hiacutevoacute utasiacutetaacutes Az LCALL utasiacutetaacutesnaacutel maacuter nincsen semmi ilyesfeacutele megkoumlteacutes Ennek a furcsasaacutegnak az eacutertelme az hogy az ACALL utasiacutetaacutes gyorsabban veacutegrehajtoacutedik eacutes raacuteadaacutesul geacutepi koacutedkeacutent egy baacutejttal kevesebb helyet foglal a memoacuteriaacuteban Ennek akkor van szerepe amikor olyan nagy programot iacuterunk hogy maacuter nagyon oda kell figyelni arra hogy azt bele tudjuk passziacuterozni a memoacuteriaacuteba esetleg eacuteppen azeacutert mert a memoacuteria meacuterete csak neacutehaacutenyszor 2 kilobaacutejt Azonban ha szerencseacutenk van olyan assemblerrel dolgozhatunk amelyik a ciacutemkeacutek elhelyezkedeacutese alapjaacuten uacutegyis eldoumlnti hogy melyiket jobb hasznaacutelni (mondjuk meacuteretre optimalizaacutel) iacutegy nyugodtan hasznaacutelhatjuk simaacuten csak a CALL-t

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

A szubrutinboacutel toumlrteacutenő visszateacutereacutes utasiacutetaacutesa a RET A mnemonik az angol Return from Subroutine (visszateacutereacutes a szubrutinboacutel) kifejezeacutesből szaacutermazik Peacutelda szubrutin hiacutevaacutesaacutera

MOV R725

label

CALL subroutineDJNZ R7label

subroutine

[szubrutin tartalma]

RET

Ez a kis peacuteldaprogramocska eacuteppen uacutegy tartalmaz egy a ciklust mint az előző fejezet peacuteldaacuteja Itt azonban a ciklusmag semmi egyebet nem csinaacutel mint meghiacutev egy szubrutint A ciklusvaacuteltozoacute gyanaacutent felhasznaacutelt R7 regiszter kezdeti eacuterteacuteke alapjaacuten tudhatjuk hogy a szubrutint a ciklus pontosan 25-szoumlr hiacutevja meg Aztaacuten hogy a szubrutin mit tartalmaz az maacuter a programozoacute dolgahellip

4 Ugraacutes a koacutedon beluumllAki eddig magas szintű strukturaacutelt programozaacutest tanult az nagyon joacutel tudja hogy ott hivatalboacutel utaacutelni kellett a koumlzvetlen ugraacutest megvaloacutesiacutetoacute utasiacutetaacutest Nem iacutegy az assemblyben Koumlzvetlen ugraacutesok vagy egyaacuteltalaacuten ugraacutesok neacutelkuumll valamire valoacute assembly koacuted elkeacutepzelhetetlen Ebbe jobb ha beletoumlrőduumlnk A koumlzvetlen ugraacutes utasiacutetaacutesaacutenak a mnemonikja a JMP amely az angol Jump (ugrik) szoacuteboacutel szaacutermazik Az utasiacutetaacutes egyik verzioacuteja utaacuten adott memoacuteriaciacutemet kell megadnunk amelyet termeacuteszetesen ciacutemkeacutevel is reprezentaacutelhatunk

JMP address

Erre az utasiacutetaacutesra ugyanaz az eacuterdekesseacuteg eacuterveacutenyes mint a CALL utasiacutetaacutesra Ezt sem talaacuteljuk meg a 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben Talaacutelunk viszont haacuterom maacutesikat AJMP (Absolute Jump within 2K block abszoluacutet ugraacutes 2K-os blokkon beluumll) LJMP (Long Jump taacutevoli ugraacutes) eacutes SJMP (Short Jump koumlzeli ugraacutes) Az AJMP 2 kilobaacutejtos blokkon beluumlli ugraacutest tud megvaloacutesiacutetani Az LJMP-ra ilyen megkoumlteacutes maacuter nem vonatkozik Az SJMP utasiacutetaacutes relatiacutev ugraacutest valoacutesiacutet meg Ez azt jelenti hogy ez is csak 128 baacutejtnyi taacutevolsaacutegot jelenthet visszafeleacute eacutes 127 baacutejtnyit előre Az utasiacutetaacutesok koumlzoumltt most is a hossz eacutes a veacutegrehajtaacutesi idő a kuumlloumlnbseacuteg Eacutes ha szerencseacutenk van az assembler a ciacutemkeacutek alapjaacuten uacutegyis meghataacuterozza melyik lesz az optimaacutelis amikor simaacuten csak JMP-ot iacuterunk

5 Oacuterajel veacutegrehajtaacutesi időA logikai aacuteramkoumlroumlkből alkotott haacuteloacutezatok a legtoumlbb esetben oacuterajellel műkoumldnek Ezeket hiacutevjuk szekvenciaacutelis haacuteloacutezatoknak A mikroprocesszorok szinteacuten oacuterajelet igeacutenyelnek műkoumldeacutesi sebesseacuteguumlket eacuteppen az oacuterajel frekvenciaacutejaacuteval szokaacutes megadni Az ADuC 842-es oacuterajele maximaacutelisan 16 777 216 Hz Bekapcsolaacuteskor azonban az oacuterajel nem ekkora hanem csak 2 097 152 Hz Ez az uacuten default oacuterajel Az ADuC oacuterajele megfelelő SFR-rel futaacutes koumlzben vaacuteltoztathatoacute (PLLCON SFR) Erre azonban kezdő szinten nem lesz szuumlkseacuteguumlnk

A geacutepi koacuteduacute utasiacutetaacutesok mindegyikeacutenek veacutegrehajtaacutesa egeacutesz szaacutemuacute oacuterajelciklust igeacutenyel Vannak 1 2 3 4 eacutes 9 oacuterajelciklust foumllemeacutesztő utasiacutetaacutesok Azzal hogy egy utasiacutetaacutes haacuteny oacuterajelciklus alatt hajtoacutedik veacutegre aacuteltalaacuteban nem kell toumlrődnuumlnk Egyszer azonban szaacutemoljuk ki hogy mennyi ideig tart egy roumlvidke koacuted peacuteldaacuteul az alaacutebbiak veacutegrehajtaacutesa Előtte azonban meacuteg megtanuljuk hogy a NOP utasiacutetaacutes ami az angol No Operation (nincs művelet) kifejezeacutesből szaacutermazik pontosan azt csinaacutelja hogy semmit sem csinaacutel Eacutes ehhez kemeacuteny 1 oacuterajelciklust emeacuteszt foumll

MOV R7100cik7MOV R622cik6MOV R5237cik5

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET

Az egyes utasiacutetaacutesok veacutegrehajtaacutesaacutenak ciklusszaacutemai a koumlvetkezők

MOV Rndata - 2NOP - 1DJNZ Rnrel ndash 3RET - 4

Ezek alapjaacuten a fenti program oumlsszesen oacuterajelciklust igeacutenyel A szaacutemiacutetaacutes aacutetgondolaacutesa nem neheacutez de inkaacutebb segiacutetuumlnk egy kicsit A legbelső zaacuteroacutejelben az aacutell hogy Ez a NOP utasiacutetaacutes eacutes a koumlzvetlenuumll utaacutena aacutelloacute DJNZ R5cik5 aacuteltal igeacutenyelt oacuterajelciklus A legbelső ciklus melynek R5 a ciklusvaacuteltozoacuteja a kezdeti eacuterteacutek szerint pontosan 237-szer hajtoacutedik veacutegre Innen joumln a 237-es szorzoacute Ahaacutenyszor veacutegrehajtoacutedik ez a ciklus annyiszor kell kieacuterteacutekelni a ciklusvaacuteltozoacutera eacuterveacutenyes kileacutepeacutesi felteacutetelt csakuacutegy mint az oumlsszes toumlbbi ciklusnaacutel Maga a kezdeti eacuterteacutek megadaacutesa R5-nek 2 oacuterajelciklust

igeacutenyel Emiatt szerepel a 2-es az előtt A legbelső ciklus be van aacutegyazva egy kijjebb leacutevő ciklusba ami 22-szer hajtoacutedik veacutegre eacutes aminek ciklusvaacuteltozoacuteja R6 Csakhogy R6 eacuterteacutekeacutenek kieacuterteacutekeleacutese azaz a

koumlvetkező DJNZ utasiacutetaacutes is mindig 3 oacuterajelciklust igeacutenyel Ebből szaacutermazik a 3-as szaacutem az utaacuten Ez előtt a 2-es szaacutem R6 kezdeti eacuterteacutekeacutenek megadaacutesaacutet jelenti Ez a kieacuterteacutekeleacutesekre vonatkozoacute fenti magyaraacutezat szerint meacuteg nyilvaacuten a 22-es szorzoacuten beluumll van Eacutes iacutegy tovaacutebb a teljes kifejezeacutes veacutegeacuteig Az utolsoacute 4-es a szubrutinboacutel valoacute visszateacutereacutes utasiacutetaacutesaacutenak a RET-nek a veacutegrehajtaacutesi ideje A default oacuterajel-frekvenciaacuteval azaz 2 097 152 Hz-cel szaacutemolva 2 097 106 oacuterajelciklus lefutaacutesi ideje 0999 978 maacutesodperc Iacutegy ezzel a kis szubrutinnal nagyjaacuteboacutel 1 maacutesodperces időkeacuteslelteteacutest valoacutesiacutethatunk meg a neacutelkuumll hogy ismerneacutenk az ADuC időziacutetőfunkcioacuteit A keacutesőbbiekben termeacuteszetesen azok koumlzuumll is toumlbbet kiveseacutezuumlnk

6 Az első alkalmazaacutes koacutedjaAz [1 feladat] megoldaacutesaacutehoz immaacuteron mindent tudunk maacuter csak az assemblerrel kapcsolatban kell neacutehaacuteny dolgot tisztaacuteznunk Ezt uacutegy fogjuk tenni hogy előszoumlr veacutegre megneacutezzuumlk magaacutet a koacutedot aztaacuten hozzaacutefűzzuumlk a magyaraacutezatot Az [1 feladat] megoldaacutesaacutet jelentő koacuted a koumlvetkező

Code01asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelataCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a program- vezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacutenORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacutedMAINMOV P211110000b Bekapcsoljuk az alsoacute 4 LED-etCALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintMOV P200001111b Bekapcsoljuk a felső 4 LED-etCALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintJMP MAIN Visszaugratjuk az elejeacutere a programot Tulajdonkeacuteppen veacutegtelen ciklust hozunk leacutetreDELAY Időhuacutezoacute szubrutinMOV R750 05 sec keacuteslelteteacutescik7MOV R622cik6MOV R5237cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel

Created by XMLmind XSL-FO Converter

Első programunk villogtassuk a panel LED-jeit

END

A magyaraacutezatok elkezdeacutese előtt felhiacutevjuk a figyelmet arra amit talaacuten az olvasoacute is kitalaacutelt maacuter a koacutedba szuacutert megjegyzeacutesek pontosvesszővel kezdődnek

A koacuted maacutesodik sora eddig ismeretlen teacutetelt tartalmaz $MOD842 Ez a fordiacutetoacutei direktiacuteva arra utasiacutetja az assemblert hogy az ADuC 842-es architektuacuteraacutehoz tartozoacute szimboacutelumlistaacutet hasznaacutelja Ebben a faacutejlban ugyanis joacutel eacuterthető szimboacutelumokat rendeltek a kituumlntetett memoacuteriaciacutemekhez regiszterekhez eacutes speciaacutelis funkcioacutejuacute regiszterekhez Ha maacuter kellő jaacutertassaacutegot szerzett az olvasoacute a teacutemaacuteban eacuterdemes egyszer belekukkantania ebbe a faacutejlba Az elektronikus tankoumlnyvben a tovaacutebbiakban a helytakareacutekossaacuteg veacutegett ezt a direktiacutevaacutet nem tuumlntetjuumlk foumll de jegyezzuumlk meg hogy minden lefordiacutetandoacute koacutednak ezzel kell kezdődnie amennyiben a 842-es architektuacuteraacutet hasznaacuteljuk

A maacutesodik uacutejdonsaacuteg a CSEG direktiacuteva Ezzel jelezzuumlk a fordiacutetoacuteak hogy innentől kezdődik a programkoacuted A koacutedszegmens az END direktiacutevaacuteval zaacuterul Ezekre a direktiacutevaacutekra ugyanaz lesz eacuterveacutenyes a tankoumlnyvben mint a $MOD842-ra

A harmadik uacutejdonsaacuteg az ORG direktiacuteva Ezzel jelezzuumlk az assemblernek hogy mely memoacuteriaciacutemre keruumlljoumln a lefordiacutetott koacuted Ennek fontos szerepe lesz a programok elhelyezeacuteseacuteneacutel Tudnunk kell ugyanis hogy amikor a mikrovezeacuterlő elindul vagy reset toumlrteacutenik akkor a programvezeacuterleacutes a 0000h ciacutemre ugrik Szokjunk hozzaacute ahhoz hogy innen azonnal elugratjuk a programot egy haacutetreacutebb talaacutelhatoacute ciacutemre ugyanis a keacutesőbb taacutergyalandoacute megszakiacutetaacutesok vektorai szeacutepen sorban a koacutedmemoacuteria elejeacuten helyezkednek el Ha semmifeacutele megszakiacutetaacutest sem hasznaacutelunk erre az elugrataacutesra nincs szuumlkseacuteg de jobb ha az oumlsszes koacutedunkat uacutegy iacuterjuk hogy annak eacuterdemi reacutesze kicsit haacutetreacutebb kezdődik mint 0000h Elmondhatjuk hogy a 0060h ciacutemtől kezdődően maacuter semmi veszeacutely nem leselkedik raacutenk a program szervezeacuteseacutenek szempontjaacuteboacutel iacutegy ezt a ciacutemet baacutetran vaacutelaszthatjuk a program eacuterdemi reacutesze kezdeteacutenek

A koacutedban az ORG 0000h sor utaacuten az aacutell hogy JMP MAIN A MAIN itt egy ciacutemke eacutes ide fog ugrani a program indulaacutes vagy reset utaacuten Most maacuter az is eacuterthető hogy mieacutert előzi meg a MAIN ciacutemkeacutet az ORG 0060h direktiacuteva eacutes eacuterteacutek ezen a ciacutemen kezdődik a program eacuterdemi reacutesze

A koacuted maga annyira egyszerű hogy foumlloumlsleges blokkdiagramban megadni az algoritmust A leiacuteraacutes roumlviden bekapcsoljuk az alsoacute 4 LED-et (a toumlbbit kikapcsoljuk) vaacuterakozunk feacutel maacutesodpercet bekapcsoljuk a felső 4 LED-et (a toumlbbit kikapcsoljuk) vaacuterakozunk feacutel maacutesodpercet aztaacuten kezdjuumlk eloumllről az egeacuteszet Az időhuacutezaacutest szubrutin veacutegzi uacutegy ahogyan azt a [Szubrutinok] eacutes [Oacuterajel veacutegrehajtaacutesi idő] alfejezetekben megtaacutergyaltuk

Itt eacutes most szeretneacutenk leszoumlgezni hogy a tovaacutebbiakban az elektronikus tankoumlnyvben szereplő koacutedokba magukba csak annyi kommentet iacuterunk amennyi okvetlenuumll szuumlkseacuteges Ez főkeacutent az uacutejdonsaacutegokat eacutes a főbb egyseacutegeket eacuterinti Az elektronikus tankoumlnyvhoumlz azonban koacutedtaacuter is tartozik amely az azonnal lefordiacutethatoacute ellenőrzoumltt keacutesz koacutedokat tartalmazza Ezeket a koacutedokat minden esetben eleacuteg nagy reacuteszletesseacuteggel kikommentezzuumlk hogy akkor is eacuterthető legyen ha majd a tankoumlnyvben leiacutertak megtanulaacutesa utaacuten mondjuk egy eacutevvel nyuacutelunk vissza valamelyik alkalmazaacuteshoz A koacutedtaacuter nem csak a koacutedokat tartalmazza hanem oumlsszetettebb alkalmazaacutesoknaacutel aacuteramkoumlri rajzokat feacutenykeacutepeket eacutes sok esetben meacuteg roumlvid videofelveacutetelt is

Created by XMLmind XSL-FO Converter

5 fejezet - Csiacutek a LED-ekenMi a legnagyobb kuumlloumlnbseacuteg az ADuC mikrovezeacuterlőnk eacutes egy heacutetkoumlznapi szaacutemiacutetoacutegeacutepes munkaaacutellomaacutes koumlzoumltt Az egyik az hogy a mikrovezeacuterlőn gyaacuterilag semmifeacutele operaacutecioacutes rendszer nem talaacutelhatoacute (Ez persze nem azt jelenti hogy nem is lehet raacute keacutesziacuteteni) A maacutesik leacutenyeges kuumlloumlnbseacuteg pedig a [Az ADuC 842 eacutes a hallgatoacutei aacuteramkoumlr] fejezet alapjaacuten talaacuten maacuter nyilvaacutenvaloacutevaacute vaacutelt semmifeacutele monitor nem csatlakozik a panelhoz A jelenlegi szintuumlnkoumln a 8 LED-ből aacutelloacute sor az egyetlen visszajelzeacutesi lehetőseacuteguumlnk azonban meglepően sokatmondoacute lehet meacuteg ez is pedig mindoumlsszesen egyetlen baacutejt kijelzeacuteseacutere alkalmas

A LED-sort termeacuteszetesen sokfeacutele funkcioacutehoz tudjuk munkaacutera fogni kuumlloumlnfeacutele mintaacutezatokat jeleniacutethetuumlnk meg rajta Ennek meacuteg a mechatronikai alkalmazaacutesok szempontjaacuteboacutel nem sok haszna lesz viszont joacutekat fogunk szoacuterakozni tovaacutebbaacute rengeteget tanulunk vele aminek maacuter majd igen A bevezető utaacuten tekintsuumlk a koumlvetkező feladatot

2 feladat

Jeleniacutetsuumlnk meg a LED-soron egy egyre hosszabb csiacutekot amely noumlvekedeacutes koumlzben minden faacutezisnaacutel vaacuterakozik egy keveset teliacutetődeacutes utaacuten pedig uacutejraindul [Code02]

Kuumlloumlnfeacutele mintaacutezatoknak a LED-soron valoacute előaacutelliacutetaacutesaacutehoz keacutet moacutedszert alkalmazhatunk Az egyik az hogy a koacutedmemoacuteriaacuteban előre roumlgziacutetett bitmintaacutekat taacuterolunk majd kiolvassuk azokat Ezt a keacutesőbbiekben meg is tanuljuk A maacutesik moacutedszer az hogy aritmetikai truumlkkoumlkkel a program futaacutesa koumlzben aacutelliacutetjuk elő a mintaacutezatot Oldjuk meg a [2 feladat]ot most ilyen moacutedon

1 Bitek sorszaacutemozaacutesaA szaacutemiacutetaacutestechnikaacuteban heacutetkoumlznapi fogalmainkkal ellenteacutetben az objektumok szaacutemozaacutesaacutet nem 1-gyel kezdjuumlk hanem toumlbbnyire 0-val Ha egy baacutejt bitjeiről van szoacute akkor azok sorszaacutemozaacutesa szintuacutegy 0-val kezdődik iacutegy termeacuteszetes kifejezeacutes lesz az hogy nulladik bit Egy baacutejt bitjeinek helyieacuterteacutekeacutet decimaacutelis eacuterteacutekeacutet eacutes sorszaacutemaacutet a [Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll] mutatja

51 taacuteblaacutezat - Bitek sorszaacutemozaacutesa helyieacuterteacuteke decimaacutelis eacuterteacuteke egy baacutejton beluumll

Bit sorszaacutema Hatvaacuteny Decimaacutelis eacuterteacutek

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 eacutes aritmetikai utasiacutetaacutesok

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

A [2 feladat] megoldaacutesaacutehoz szuumlkseacuteguumlnk lesz arra az utasiacutetaacutesra amelyik a logikai negaacuteltjaacutet vagy maacutes szoacuteval komplementereacutet megint maacutes szoacuteval inverzeacutet keacutepezi az akkumulaacutetornak

CPL A

A mnemonik az angol Complement Register (regiszter komplementere) kifejezeacutesből szaacutermazik Ha az akkumulaacutetor tartalma peacuteldaacuteul 10001101 akkor a CPL A utasiacutetaacutes kiadaacutesa utaacuten az akkumulaacutetor tartalma 01110010 lesz vagyis csakugyan az eredeti tartalmaacutenak logikai negaacuteltja vagy komplementere esetleg inverze

A koumlvetkező utasiacutetaacutes amelyre szuumlkseacuteguumlnk lesz az aacutetvitel neacutelkuumlli oumlsszeadaacutes utasiacutetaacutesa ADD A mnemonik az angol Add Accumulator (hozzaacutead az akkumulaacutetorhoz) kifejezeacutesből szaacutermazik Ennek az utasiacutetaacutesnak ahogy azt maacuter a MOV utasiacutetaacutesnaacutel megiacutezlelhettuumlk toumlbb verzioacuteja van mi most haacuterommal ismerkeduumlnk meg Az utasiacutetaacutesok ciacutemzeacutesmoacutedja az elektronikus tankoumlnyvben eddig elmondottak alapjaacuten vilaacutegos kell hogy legyen

ADD ARn ADD Adirect ADD Adata

Mindhaacuterom esetben az akkumulaacutetor tartalmaacutehoz adjuk vagy valamelyik R regiszter tartalmaacutet vagy egy adott memoacuteriarekesz tartalmaacutet vagy a koumlzvetlenuumll megadott eacuterteacuteket Aacutetvitel neacutelkuumll Az aacutetvitelt is figyelembe vevő oumlsszeadaacutesroacutel keacutesőbb szoacutelunk

Ismerkedjuumlnk meg meacuteg keacutet utasiacutetaacutessal melyek igen nagy segiacutetseacuteguumlnkre lehetnek ha aritmetikai műveletekkel eacutes truumlkkoumlkkel szeretneacutenk adott bitmintaacutezatot mint eacuterteacuteket előaacutelliacutetani az akkumulaacutetorban Ez a keacutet utasiacutetaacutes a bitforgataacutes műveletet hajtja veacutegre az akkumulaacutetoron Az egyik balra forgat

RL A

A maacutesik jobbra forgat

RR A

A mnemonikok az angol Rotate Accumulator Left (akkumulaacutetor forgataacutesa balra) eacutes Rotate Accumulator Right (akkumulaacutetor forgataacutesa jobbra) kifejezeacutesekből szaacutermaznak A forgataacutes azt jelenti hogy az akkumulaacutetor tartalma egy bittel balrajobbra csuacuteszik a szeacuteleacuten kileacutepő bit pedig visszakeruumll a meguumlruumllt helyre a maacutesik oldalon Peacuteldaacuteul legyen az akkumulaacutetor tartalma 00001111 RL A utaacuten az akkumulaacutetor tartalma 00011110 RL R utaacuten pedig 10000111 lesz A [Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire] aacutebraacuten rajzos magyaraacutezattal szemleacuteltetjuumlk a bitforgatoacute utasiacutetaacutesok műkoumldeacuteseacutet Ezekkel az utasiacutetaacutesokkal sok huncutsaacutegot meg tudunk valoacutesiacutetani ahogy azt majd hamarosan laacutetni fogjuk

51 aacutebra - Az RL A (fent) eacutes RR A (lent) utasiacutetaacutesok hataacutesa az akkumulaacutetor bitjeire

3 Parameacuteteraacutetadaacutes szubrutinnakAki valamely magas szintű programozaacutesi nyelvvel kezdett az nagyon joacutel tudja hogy parameacutetert aacutetadni valamely fuumlggveacutenynek vagy eljaacuteraacutesnak meglehetősen koumlnnyű Aki meacuteg nem tudja mit jelent ez keacutepzelje el azt a szituaacutecioacutet hogy a [Oacuterajel veacutegrehajtaacutesi idő] eacutes [Az első alkalmazaacutes koacutedja] alfejezetben bemutatott időhuacutezoacute szubrutint nem aacutellandoacutesult 05 vagy eacuteppen 1 maacutesodperces időhuacutezaacutesra akarjuk hasznaacutelni hanem rugalmasan aacuteltalunk tetszeacutes szerint megadott eacuterteacutekkel Assemblyben uacutegy megy ez hogy a szubrutinnak tudnia kell hogy a műkoumldeacuteseacutehez szuumlkseacuteges eacuterteacuteket honnan veszi (mely regiszterből vagy memoacuteriaciacutemről) a szubrutin meghiacutevaacutesa előtt viszont a szuumlkseacuteges eacuterteacuteket be kell toumllteni a keacuterdeacuteses regiszterbe majd ez utaacuten meghiacutevni a szubrutint Doumlntsuumlnk most uacutegy hogy a parameacuteteraacutetadaacutesra hasznaacutelt regiszter az akkumulaacutetor legyen Ezek utaacuten moacutedosiacutetsuk a [Az első alkalmazaacutes koacutedja] alfejezetben bemutatott szubrutint a koumlvetkező moacutedon

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

DELAYMOV R7Acik7MOV R622cik6MOV R5237cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET

Ezzel azt eacuterjuumlk el hogy a szubrutin a meghiacutevaacutesakor az akkumulaacutetorboacutel toumllti be a szuumlkseacuteges eacuterteacuteket az R7 regiszterbe Ez az eacuterteacutek az egybaacutejtos adatterjedelemnek megfelelően 0 eacutes 255 koumlzoumltt lehet A rutin műkoumldeacutese alapjaacuten ha 0-t adjunk neki az olyan lenne mintha 256-toacutel szaacutemlaacutelnaacutenk vissza Hiszen amikor a DJNZ a 0-t eggyel csoumlkkenti akkor az eacuterteacutek visszafeleacute aacutetfordul 255-re

A szubrutin meghiacutevaacutesa mondjuk 06 maacutesodperces vaacuterakozaacuteshoz iacutegy toumlrteacutenik

MOV A60CALL DELAY

Ha a szubrutinnak kell parameacutetert aacutetadnia a főprogramnak az assemblyben hasonloacutean toumlrteacutenik mint fordiacutetva a szubrutinnak valamely memoacuteriarekeszekbe vagy regiszterekbe kell iacuternia az aacutetadni kiacutevaacutent parameacutetereket a főprogramnak viszont tudnia kell hol keresse azokat A leacutenyeg az hogy bonyolultabb programoknaacutel a szubrutinok ne iacuterjaacutek foumlluumll egymaacutes parameacuteteraacutetadaacutesi adatteruumlleteit Erre nagyon figyelni kell assemblyben

4 A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkelAhhoz hogy a csiacutek egyes faacutezisait elő tudjuk aacutelliacutetani a maacuter ismert ill a [ Logikai eacutes aritmetikai utasiacutetaacutesok] alfejezetekben bemutatott utasiacutetaacutesokkal mindenekelőtt tisztaacutezzuk mire van szuumlkseacuteguumlnk Ha egy noumlvekvő csiacutekot szeretneacutenk a LED-ekkel kijelezni akkor a koumlvetkező bitmintaacutezatokra mint faacutezisokra lesz szuumlkseacuteguumlnk

11111111

11111110

11111100

11111000

11110000

11100000

11000000

10000000

00000000

Hogy lehet ilyen sort leacutetrehozni Erre nyilvaacuten szaacutezfeacutele megoldaacutes van de tekintsuumlk azt amikor előszoumlr is egyetlen 1-es bitet leacuteptetuumlnk sorban balra

00000001

00000010

00000100

00001000

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

00010000

00100000

01000000

10000000

Figyeljuumlk meg hogy az első listaacutenak 9 miacuteg a maacutesodiknak csak 8 tagja van Ha a maacutesodik listaacutenak az elemeit szeacutepen sorban hozzaacuteadjuk 00000000-hoz de uacutegy hogy a koumlvetkező listatagot mindig az addig megkapott eredmeacutenyhez adjuk hozzaacute akkor az egyes faacutezisok iacutegy alakulnak

00000000

00000001

00000011

00000111

00001111

00011111

00111111

01111111

11111111

Eacutes ha ennek a listaacutenak az elemeit negaacuteljuk (keacutepezzuumlk a komplementeruumlket invertaacuteljuk őket) maacuteris eleacuterkeztuumlnk a kiacutevaacutent eredmeacutenyhez

A koumlvetkező koacuted nem pofonegyszerű neacutemi ravaszkodaacutest tartalmaz A fontos parameacuteterek listaacutejaacutet eacutes eacuterteacutekeit azonban a koacuted utaacuten taacuteblaacutezatban foglaljuk oumlssze hogy koumlvetni lehessen mit toumlrteacutenik Az olvasoacutet arra biztatjuk hogy addig ne haladjon tovaacutebb amiacuteg ezt a koacutedot meg nem eacutertette A [Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten] ehhez nagy segiacutetseacuteget fog nyuacutejtani A koacutedban az R2 regiszterben azok az eacuterteacutekek aacutellnak elő amelyeket a fenti maacutesodik lista tartalmaz Az R3 regiszterben keacutepződnek azok az eacuterteacutekek amelyeket a fenti harmadik lista tartalmaz Nagyon fontos szerepet jaacutetszik a keacutet regiszter kezdeti eacuterteacuteke ill az hogy a regiszterek eacuterteacutekeacutet a LED-ek portjaacutenak vaacuteltoztataacutesa előtt vagy utaacuten manipulaacuteljuk A koacutedban a [Az első alkalmazaacutes koacutedja] alfejezetben roumlgziacutetettek szerint maacuter nem tuumlntetjuumlk foumll az aacutellandoacute fordiacutetoacutei direktiacutevaacutekat eacutes jelen esetben a [Parameacuteteraacutetadaacutes szubrutinnak] alfejezetben bemutatott parameacuteteraacutetadaacutest is teljesiacutető időhuacutezoacute DELAY szubrutint sem Iacuteme a koacuted

Code02asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a programvezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacutenORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacutedMAINMOV R30 Kezdeti eacuterteacutek R3-nak Ebben gyűlnek a csiacutek egyes faacutezisainak megfelelő eacuterteacutekek de ezt majd meacuteg negaacutelnunk kell A kezdeti eacuterteacutek 0 azaz egyetlen LED sem vilaacutegiacutetMOV R210000000b Kezdeti eacuterteacutek R2-nek Amikor ezt az eacuterteacuteket előszoumlr forgatjuk balra akkor kapjuk meg az első hasznaacutelhatoacute eacuterteacuteket azaz 00000001-t amit majd az addigi de meacuteg nem invertaacutelt eredmeacutenyhez adunkMOV R49 Kilencszer fut le ez a ciklus hiszen 9 faacutezisboacutel aacutell a csiacutekcsikMOV AR3 A-ba toumlltjuumlk R3-at azaz a csiacuteknak

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

megfelelő eacuterteacuteketCPL A Negaacuteljuk A-tMOV P2A Kitesszuumlk a LED-ek portjaacuteraMOV A10 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (01 s)MOV AR2 A-be toumlltjuumlk R2-tRL A Balra forgatjuk az eacuterteacuteketMOV R2A Visszatoumlltjuumlk R2-be R2-ben alakul ki a koumlvetkező lista 00000001 00000010 00000100 stbMOV AR3 A-ba toumlltjuumlk R3-at azaz a csiacutek aktuaacutelis faacutezisaacutetADD AR2 Hozzaacuteadjuk a balra leacuteptetett bitet Iacutegy alakul ki a koumlvetkező lista 00000001 00000011 00000111 stbMOV R3A Visszaiacuterjuk R3-ba a csiacutek koumlvetkező faacutezisaacutetDJNZ R4csik Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Visszaugratjuk az elejeacutere a programot

A [Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten]ban a program keacutet kritikus jelentőseacutegű vaacuteltozoacutejaacutenak azaz az R2 eacutes R3 regisztereknek eacuterteacutekeit tuumlntetjuumlk foumll leacutepeacutesről leacutepeacutesre bdquoKezdrdquo jelenti a kezdeti eacuterteacuteket bdquoBe1rdquo a ciklus első veacutegrehajtaacutesaacutenaacutel a beleacutepeacutesi bdquoKi1rdquo a kileacutepeacutesi eacuterteacuteket bdquoBe2rdquo eacutes bdquoKi2rdquo ugyaniacutegy a ciklus maacutesodik veacutegrehajtaacutesaacutenaacutel stb A P2-es portra a ciklus minden egyes veacutegrehajtaacutesaacutenaacutel az R3 regiszterben taacuterolt eacuterteacutek komplementere keruumll ki Ez utaacuten a regiszterek tartalma megvaacuteltozik Tulajdonkeacuteppen ez az utoacutemunkaacutelat jelenti a programban a ravaszkodaacutest hiszen ezzel a regisztereket előkeacutesziacutetjuumlk a ciklus koumlvetkező futaacutesaacutehoz Laacutethatoacute hogy amikor a ciklus valamely lefutaacutesa veacuteget eacuter a koumlvetkező lefutaacutes ugyanazokkal a regisztereacuterteacutekekkel kezdődik

52 taacuteblaacutezat - Az R2 eacutes R3 regiszterek eacuterteacuteke a Code02asm program futaacutesa soraacuten

Programaacutellapot 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

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken

Ki9 00000001 00000000

Created by XMLmind XSL-FO Converter

6 fejezet - Csiacutek a LED-eken toumlmoumlrenAz előző alfejezetben a [2 feladat] megoldaacutesaacutenak assembly koacutedja talaacuten egy kicsit nehezen volt emeacuteszthető Sebaj szokjunk hozzaacute ahhoz hogy az assemblyben ilyesfeacutele gondolatmentek sűrűn fordulnak elő Azonban meg szeretneacutenk nyugtatni az olvasoacutet egy joacute darabig sokkal egyszerűbb koacutedokkal fogjuk bemutatni az ADuC lehetőseacutegeit Vizsgaacuteljuk most meg hogy hogyan lehetne sokkal egyszerűbben megoldani a [2 feladat]ot akkor ha meacuteg neacutehaacuteny utasiacutetaacutest ismeruumlnk

1 A Carry bitAz [Regiszterek] alfejezetben maacuter emliacutetettuumlk hogy az assembly nyelvű programozaacutesnaacutel bizonyos az architektuacuteraacutera jellemző jelzőbitek vagy flag-ek is fontos szerephez jutnak Ismerkedjuumlnk meg haacutet azzal a bittel amelyik az ADuC mikrovezeacuterlőkneacutel kulcsszerepet jaacutetszik nagyon sok műveletneacutel Ezt a bitet Carry bitnek vagy roumlviden C bitnek hiacutevjaacutek A Carry angol szoacute magyarul aacutetvitelt (is) jelent Ez szoros oumlsszefuumlggeacutesben aacutell a C bit szerepeacutevel Mire hasznaacutelhatoacute a C bit Mit jelez Mit mutat Főbb hasznaacutelati teruumlletei a koumlvetkezők

1 Keacutet baacutejt oumlsszeadaacutesakor tartalmazhatja a kezdeti aacutetvitelt ill jelzi ha az eredmeacuteny aacutetvitelt tartalmaz

2 Keacutet baacutejt kivonaacutesakor tartalmazhatja a kezdeti aacutetvitelt ill jelzi ha az eredmeacuteny aacutetvitelt tartalmaz

3 Jelezheti a kieacuterteacutekelt relaacutecioacute mint logikai kifejezeacutes igaz vagy hamis mivoltaacutet oumlsszehasonliacutetoacute utasiacutetaacutesoknaacutel

4 Bitforgatoacute műveletekneacutel ideiglenes taacuteroloacutekeacutent műkoumldhet

5 Bitműveletekneacutel a logikai kifejezeacutesek egyik operandusa

Amint laacutethatoacute a C bit hasznaacutelhatoacutesaacutega nagyon szeacuteleskoumlrű Sokszor maacuter a miatt bizonytalanodnak el a kezdő programozoacutek hogy egyaacuteltalaacuten van-e olyan utasiacutetaacutes amelynek veacutegrehajtaacutesa nem befolyaacutesolja a C bit eacuterteacutekeacutet Termeacuteszetesen van aacutem csakugyan sok utasiacutetaacutes van hataacutessal a C bitre Iacutegy amikor valaki oumlnaacutelloacutean boumlngeacuteszi a 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacutet akkor azt is mindig neacutezze meg hogy egy adott utasiacutetaacutes mit tesz a C bittel

A C bit eacuterteacutekeacutet befolyaacutesoloacute legegyszerűbb utasiacutetaacutesok a koumlvetkezők

SETB C CLR C CPL C

Az első utasiacutetaacutes magasra aacutelliacutetja a C bitet tehaacutet C = 1 lesz A maacutesodik utasiacutetaacutes toumlrli a C bitet tehaacutet C = 0 lesz A harmadik utasiacutetaacutes eredmeacutenye maacuter sejthető invertaacutelja a C bitet A mnemonikok rendre az angol Set Bit (bit magasra aacutelliacutetaacutesa) kifejezeacutesből ill Clear (toumlroumll) eacutes Complement (komplementer) szavakboacutel szaacutermaznak

2 Bitforgataacutes C-n keresztuumllA maacuter bemutatott bitforgatoacute utasiacutetaacutesoknak tehaacutet RL-nek eacutes RR-nek van olyan vaacuteltozatuk is amely a C-biten keresztuumll veacutegzi a forgataacutest Ez azt jelenti hogy az akkumulaacutetor kileacuteptetett bitje C-be keruumll a beleacutepő bit viszont C-ből eacuterkezik A keacutet utasiacutetaacutes mnemonikja a koumlvetkező

RLC A

eacutes

RRC A

A mnemonikok az angol Rotate Accumulator Left through C (akkumulaacutetor forgataacutesa balra C-n keresztuumll) eacutes Rotate Accumulator Right through C (akkumulaacutetor forgataacutesa jobbra C-n keresztuumll) kifejezeacutesekből szaacutermaznak Koumlnnyű meggondolni hogy ha a C-bit eacuterteacutekeacutet szabadon aacutelliacutetgathatjuk akkor azt leacuteptethetuumlnk be az akkumulaacutetorba amit csak akarunk A C-biten keresztuumll dolgozoacute bitforgatoacute utasiacutetaacutesok hataacutesaacutet a [Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor bitjeire] aacutebra szemleacutelteti

61 aacutebra - Az RLC A (fent) eacutes RRC A (lent) utasiacutetaacutesok hataacutesa C-re eacutes az akkumulaacutetor

Created by XMLmind XSL-FO Converter

Csiacutek a LED-eken toumlmoumlren

bitjeire

Az uacutej utasiacutetaacutesok ismereteacuteben fogalmazzuk aacutet a [2 feladat]ot

3 feladat

Jeleniacutetsuumlnk meg a LED-soron egy egyre hosszabb csiacutekot amely noumlvekedeacutes koumlzben minden faacutezisnaacutel vaacuterakozik egy keveset teliacutetődeacutes utaacuten pedig uacutejraindul Hasznaacuteljuk a C-n keresztuumlli bitforgataacutes műveleteacutet [Code03]

A [A bitmintaacutek előaacutelliacutetaacutesa aritmetikai műveletekkel] alfejezet első listaacuteja mutatja hogy milyen bitmintaacutezatokat kell a 2-es portra kitennuumlnk hogy előaacutelljanak a megjeleniacutetendő csiacutek egyes faacutezisai Laacutetni fogjuk hogy milyen hateacutekony eszkoumlzt ad a kezuumlnkbe a C-n keresztuumll toumlrteacutenő bitforgataacutes Teacutetelezzuumlk foumll ugyanis hogy az akkumulaacutetor tartalma 11111111 Ez ugyebaacuter az első faacutezis amikor egyetlen LED sem vilaacutegiacutet Ha ezek utaacuten toumlroumlljuumlk a C bitet (C = 0) majd kiadjuk az RLC A utasiacutetaacutest akkor az akkumulaacutetor tartalma 11111110 lesz Az eredeti eacuterteacutek bal szeacutelső azaz 7 bitje azaz aktuaacutelisan 1 leacutep be C-be Ezzel az eacuterteacutekkel a tovaacutebbiakban semmi dolgunk A koumlvetkező faacutezis előaacutelliacutetaacuteshoz uacutejra toumlroumlljuumlk a C bit eacuterteacutekeacutet uacutejra alkalmazzuk a C-n keresztuumlli bitforgataacutest eacutes iacutegy tovaacutebb Ezzel az eljaacuteraacutessal sokkal egyszerűbben aacutelliacutetjuk elő a csiacutek egyes faacutezisainak bitmintaacutezataacutes mint amikor aritmetikai eacutes logikai műveletekkel tettuumlk A koacuted is sokkal roumlvidebbeacute toumlmoumlrebbeacute eacutes koumlnnyebben eacuterthetőveacute vaacutelik Figyeljuumlnk arra hogy a csiacutek faacutezisainak megfelelő eacuterteacutekeket az R3 regiszterben taacuteroljuk hiszen az akkumulaacutetort az időhuacutezoacute szubrutin meghiacutevaacutesaacutehoz hasznaacutelni fogjuk Ez a szubrutin (DELAY) toumlkeacuteletesen megegyezik azzal amit a [Parameacuteteraacutetadaacutes szubrutinnak] alfejezetben keacutesziacutetettuumlnk Iacuteme a koacuted

Code03asm ORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Mindjaacutert el is poumlccintjuumlk a programvezeacuterleacutest feljebb a memoacuteriaacuteba hiszen a keacutesőbbiekben tanult megszakiacutetaacutesok vektorai foglalnak helyet a koacutedmemoacuteria legelejeacuten ORG 0060h Itt kezdődik a memoacuteriaacuteban a teacutenyleges koacuted MAIN MOV R311111111b Kezdeti eacuterteacutek R3-nak Ebben gyűlnek a csiacutek egyes faacutezisainak megfelelő eacuterteacutekek melyek a P2-es portra iacuterandoacutek A kezdeti eacuterteacutek az oumlsszes LED-et kikapcsolja MOV R49 Kilencszer fut le ez a ciklus hiszen 9 faacutezisboacutel aacutell a csiacutek csik MOV P2R3 Kitesszuumlk a LED-ek portjaacutera a csiacutek eacuterteacutekeacutet MOV A10 A megfelelő parameacuteterrel CALL DELAY meghiacutevjuk az időhuacutezaacutest (01 s) MOV AR3 A-ba toumlltjuumlk a csiacutek aktuaacutelis eacuterteacutekeacutet CLR C Toumlroumlljuumlk a C bitet RLC A Beleacuteptetjuumlk A-ba a C bitet jobbroacutel balra MOV R3A Visszaiacuterjuk R3-ba a csiacutek uacutej faacutezisaacutet DJNZ R4csik Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutet JMP MAIN Ugraacutes vissza a program elejeacutere

Created by XMLmind XSL-FO Converter

7 fejezet - Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutelA [Csiacutek a LED-eken] eacutes [Csiacutek a LED-eken toumlmoumlren] fejezetekben megtanultuk hogyan lehet szisztematikusan mintaacutezatokat alkotni melyeket aztaacuten kijeleztuumlnk az ADuC-panel LED-soraacuten Azonnal adoacutedik a keacuterdeacutes mi van ha tetszőlegesen vaacutelasztott mintaacutezatokat szeretneacutenk kijelezni A vaacutelasz erre az hogy ez is koumlnnyűszerrel megoldhatoacute csupaacuten egy igen fontos regisztert eacutes egy uacutej ciacutemzeacutesmoacutedot kell megismernuumlnk hozzaacute A koumlvetkező feladatot tehaacutet iacutegy fogalmazzuk meg

4 feladat

Jeleniacutetsuumlnk meg a LED-soron a koacutedmemoacuteriaacuteban előre roumlgziacutetett mintaacutezatokat [Code04 Code05]

1 Az adatmutatoacuteA 80518052-es processzormagoknak van olyan regiszteruumlk is amelyikkel a memoacuteriaacuteban talaacutelhatoacute adatokat eacuterhetjuumlk el szisztematikusan Ez a regiszter az adatmutatoacute angol neveacuten Data Pointer Nagyon fontos tudnunk hogy ez a regiszter valoacutejaacuteban haacuterombaacutejtos azaz haacuterom egybaacutejtos regiszterből aacutell Ezek megnevezeacutese DPP DPH DPL A roumlvidiacuteteacutesek az angol Data Pointer Page Data Pointer High eacutes Data Pointer Low kifejezeacutesekből szaacutermaznak A DPP regiszterrel ebben a tankoumlnyvben nem foglalkozunk (ez mutatja a megciacutemzendő memoacuteriateruumllet adott lapjaacutet) eleacuteg lesz most nekuumlnk a DPHDPL regiszterkettős Ez a keacutet regiszter szorosan oumlsszetartozik egyuumltt egy 16-bites ciacutemet alkot Ezzel a 16-bites ciacutemmel 64 kilobaacutejtos memoacuteriateruumllet ciacutemezhető A memoacuteriateruumlletek 256-baacutejtos egyseacutegeit nevezik lapoknak Iacutegy pl az 1 lap a 64 kbyte-on beluumll a 0100h ciacutemtől a 01FFh ciacutemig tart A DPH regiszter az adatmutatoacute felső baacutejtja miacuteg a DPL regiszter az alsoacute baacutejtja Ezek egyuumlttes eacutertelmezeacuteseacutehez nyuacutejt segiacutetseacuteget a [Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese] Magaacutet a regiszterkettőst innentől kezdve DPTR-nek fogjuk jeloumllni hiszen egyuumlttesen alkotjaacutek az adatmutatoacutet (Data Pointer-t) Laacutethatoacute hogy a DPTR adatmutatoacute iacutegy oumlsszesen 16-bites binaacuteris eacuterteacuteket reprezentaacutel Ha ezt memoacuteriaciacutemzeacutesre hasznaacuteljuk akkor iacutegy joumln ki a 64 kbyte hiszen 216 = 65 536 = 641 024 = 64210 (vouml [Memoacuteria] alfejezet)

71 taacuteblaacutezat - Az adatmutatoacute alsoacute baacutejtja felső baacutejtja eacutes azok egyuumlttes eacutertelmezeacutese

DPH bitjei DPL bitjei

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

A keacutetbaacutejtos DPTR regiszter

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

2 Eacuterteacutekek noumlveleacutese eacutes csoumlkkenteacuteseAz assembly nyelvek elemi utasiacutetaacutesi koumlzeacute tartozik a memoacuteriarekeszek tartalmaacutenak 1-gyel valoacute noumlveleacutese eacutes csoumlkkenteacutese Ezeket az utasiacutetaacutesokat szigoruacute eacutertelemben aritmetikai utasiacutetaacutesoknak kell tekintenuumlnk de enneacutel a besorolaacutesnaacutel azeacutert rezeg a leacutec No de semmi baj az egyszerű noumlvelő eacutes csoumlkkentő utasiacutetaacutesok neacutelkuumll neacuteha szinte keacuteptelenseacuteg de legalaacutebbis igen neheacutezkes lenne megiacuterni azt amit akarunk

A memoacuteriarekesz noumlveleacuteseacutet veacutegrehajtoacute utasiacutetaacutes mnemonikja INC ami az angol Increment Register (regiszter noumlveleacutese) kifejezeacutesből szaacutermazik a memoacuteriarekesz csoumlkkenteacuteseacutet veacutegrehajtoacute utasiacutetaacutes mnemonikja DEC ami az angol Decrement Register (regiszter csoumlkkenteacutese) kifejezeacutesből joumln Az eddig ismertetett ciacutemzeacutesmoacutedokkal a keacutet utasiacutetaacutes vaacuteltozatai a koumlvetkezők

INC AINC Rn

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

INC directINC DPTRDEC ADEC RnDEC direct

Laacutethatoacute hogy az adatmutatoacute noumlveleacuteseacutere leacutetezik utasiacutetaacutes de csoumlkkenteacuteseacutere nincs Ez azonban ne keseriacutetsen el bennuumlnket az ADuC 842-es a megfelelő SFR hasznaacutelataacuteval konfiguraacutelhatoacute uacutegy hogy az adatmutatoacuteval toumlrteacutenő ciacutemzeacutes veacutegrehajtaacutesa utaacuten annak eacuterteacuteke automatikusan 1-gyel nőjoumln vagy akaacuter 1-gyel csoumlkkenjen Egyeacuteb esetekben nekuumlnk kell gondoskodnunk DPTR noumlveleacuteseacuteről vagy csoumlkkenteacuteseacuteről

3 A koacuted-indirekt ciacutemzeacutesAz assembly nyelvekben aacuteltalaacuteban leacuteteznek olyan utasiacutetaacutesok melyekkel indirekt ciacutemzeacutes valoacutesiacutethatoacute meg Aki tanult maacuter magas szintű programozaacutesi nyelvet annak a mutatoacutek koncepcioacuteja jelenthet neacutemi fogoacutedzkodoacutet Az indirekt ciacutemzeacutes leacutenyege az hogy egy roumlgziacutetett ciacutemhez egy segeacutedregiszter vagy az adatmutatoacute tartalmaacutet meacuteg hozzaacuteadja a processzor eacutes az iacutegy kapott ciacutemen leacutevő memoacuteriarekeszhez nyuacutel hozzaacute A reacuteszletes magyaraacutezatot jelen esetben mindjaacutert egy konkreacutet ciacutemzeacutestiacutepussal ismertetjuumlk Ennek a ciacutemzeacutesnek a neve koacuted-indirekt ciacutemzeacutes (angolul Code Indirect Addressing) Azeacutert koacuted-indirekt mert a processzor a koacutedmemoacuteriaacutehoz feacuter hozzaacute eacutes maacutesol ki onnan adatot Iacuterni a megciacutemzett helyre nyilvaacuten nem tud hiszen a koacutedmemoacuteria futaacutes koumlzben csak olvashatoacute memoacuteriakeacutent műkoumldik Neacutezzuumlk milyen szintaxisa van annak a koacuted-indirekt ciacutemzeacutessel dolgozoacute utasiacutetaacutesnak amellyel foglalkozni fogunk

MOVC AA+DPTR

Kicsit csemegeacutezzuumlnk az utasiacutetaacutes megjeleneacuteseacuten A MOV utasiacutetaacutest maacuter ismerjuumlk toumlbbfeacutele ciacutemzeacutesmoacuteddal Azonnal feltűnhet hogy ehhez keacutepest a fenti utasiacutetaacutes meacuteg egy C karaktert tartalmaz Ez a C betű utal a koacutedhoz toumlrteacutenő hozzaacutefeacutereacutesre A MOVC mnemonik ugyanis az angol Move Code Byte to Accumulator (koacutedbaacutejt (be)mozgataacutesa az akkumulaacutetorba) kifejezeacutesből szaacutermazik Ami meacuteg feltűnhet az az a teacuteny hogy a ciacutemzeacutesneacutel szerepel a kukac karakter Ez a karakter nekuumlnk magyaroknak kukac a hollandoknak majomfarkinca (apenstaartje) aminek itt semmi eacutertelme eacutes egy angol anyanyelvű ember egy e-mail-ciacutem felolvasaacutesakor a kukac karakterhez eacuterve azt mondja hogy at ([aeligt] prepoziacutecioacute jelenteacutese -naacutel -neacutel) Helymegjeloumlleacutesre hasznaacutelja Gondolkodjunk most ezzel a logikaacuteval A MOVC utasiacutetaacutes a MOV előtag alapjaacuten adatot fog maacutesolni a koacutedboacutel erre a C karakter utal Az utasiacutetaacutes első operandusa az A iacutegy a maacutesolaacutes ceacutelaacutellomaacutesa az akkumulaacutetor Most joumln az hogy honneacutet toumlrteacutenik a maacutesolaacutes ennek ciacutemeacutet uacutegy hataacuterozzuk meg hogy az adatmutatoacutehoz (DPTR) hozzaacuteadjuk az akkumulaacutetor (A) aktuaacutelis eacuterteacutekeacutet DPTR+A Veacuteguumll a kukac karakter mutatja hogy a DPTR+A művelettel megadott ciacutem a forraacutesciacutem azaz onnan toumlrteacutenik az ott aacutellomaacutesozoacute adat kiolvasaacutesa Figyeljuumlnk oda arra hogy enneacutel az utasiacutetaacutesnaacutel az akkumulaacutetor tartalma foumlluumlliacuteroacutedik A koacuted-indirekt ciacutemzeacutes megeacuterteacuteseacutehez az [A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese] nyuacutejt segiacutetseacuteget

72 taacuteblaacutezat - A koacuted-indirekt ciacutemzeacutes szemleacutelteteacutese

Koacutedmemoacuteria ciacutemei Eacuterteacutekek

0200h 20

0201h 11

0202h 3

0203h 28

0204h 19

0205h 72

0206h 10

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

0207h 5

DPTR A A eacuterteacuteke a MOVC AA+DPTR utasiacutetaacutes veacutegrehajtaacutesa utaacuten

0200h 0 20

0200h 2 3

0200h 6 10

0200h 7 5

0204h 0 19

0204h 3 5

4 Adatok elhelyezeacutese a koacutedbanAdatok elhelyezeacutese a koacutedban viszonylag egyszerűen toumlrteacutenik Ehhez csak a DB (Data Byte magyarul adatbaacutejt) fordiacutetoacutei direktiacutevaacutet kell ismernuumlnk Az adatok felsorolaacutesaacutet jelentő teruumlletnek vagy konkreacutet ciacutemet vagy ciacutemkeacutet (ez a gyakoribb) kell adnunk amint azt az alaacutebbi koacutedreacuteszletben laacutethatjuk

adatok

DB 11111111b Az adattoumlmb elemeiDB 01111110bDB 00111100bDB 00011000bDB 00000000bDB

A DB direktiacutevaacutek megadaacutesa utaacuten az eacuterteacutekadaacutes pontosan azzal a szintaxissal toumlrteacutenhet mint amit a koumlzvetlen ciacutemzeacutesneacutel laacutettunk ([Koumlzvetlen ciacutemzeacutes] alfejezet) de most nincs szuumlkseacuteg a kettős keresztre ()

Az adatmutatoacuteba a ciacutemkeacutevel ellaacutetott memoacuteriateruumllet kezdőciacutemeacutet a koumlvetkező szintaxissal toumllthetjuumlk

MOV DPTRadatok

Ennek az utasiacutetaacutesnak az aacuteltalaacutenos megjeloumlleacutese a koumlvetkező

MOV DPTRdata16

A koumlzvetlen ciacutemzeacutes rendben is van de figyeljuumlnk oda arra hogy az adatmutatoacutenak 16-bites adatot kell megadnunk hiszen 64 kilobaacutejt megciacutemzeacuteseacutehez eacuteppen ennyi szuumlkseacuteges

Eleacuterkeztuumlnk haacutet ahhoz a ponthoz hogy megoldjuk a [4 feladat]ot A koacutedhoz folyamataacutebraacutet nem tartunk szuumlkseacutegesnek most sem mert ismeacutet csak nagyon egyszerű esettel aacutellunk szemben Nyolc bitmintaacutezatot fogunk kijelezni a LED-soron majd uacutejraindiacutetjuk a ciklust iacutegy joacutepofa mozgoacute mintaacutezatok hataacutesaacutet keltő alkalmazaacutest kapunk A koacutedboacutel eacuteppen uacutegy hiaacutenyozni fognak az aacutellandoacute direktiacutevaacutek eacutes az időhuacutezoacute szubrutin (DELAY) mint a koraacutebbi neacutehaacuteny esetben

Code04asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTER JMP MAIN Ugraacutes a teacutenyleges programkezdethet ORG 0060h A teacutenyleges program kezdete

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

MAINMOV DPTRadatok Az adatok toumlmbjeacutenek ciacuteme az adatmutatoacuteba keruumllMOV R30 Az R3 regisztert hasznaacuteljuk indexregiszternek az indirekt ciacutemzeacuteshezMOV R48 8-szor fut le ez a ciklus mert 8 adatbaacutejtot akarunk kijeleznidisplMOV AR3 A-ba tesszuumlk a soros indexuumlnket R3-boacutelMOVC AA+DPTR Adat olvasaacutesa a koacutedmemoacuteriaacuteboacutel koacuted-indirekt ciacutemzeacutesselMOV P2A A beolvasott adat kihelyezeacutese a LED-sorraMOV A20 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (02 s)INC R3 Az indexregiszteruumlnk eacuterteacutekeacutenek noumlveleacutese a ciklus koumlvetkező lefutaacutesaacutehozDJNZ R4displ Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Ugraacutes vissza a program elejeacutereadatokDB 01111110b Az adattoumlmb elemeiDB 00111100bDB 10011001bDB 11000011bDB 11100111bDB 11000011bDB 10011001bDB 00111100b

5 Az adatmutatoacute automatikus noumlveleacuteseAz előző alfejezetben bemutatott koacutedban az adatmutatoacute eacuterteacutekeacutet nem vaacuteltoztattuk Indexeleacuteshez csak az akkumulaacutetorra volt szuumlkseacuteguumlnk Maacutes lenne a helyzet ha 255-neacutel toumlbb adatbaacutejtot szeretneacutenk kijelezni Ekkor az akkumulaacutetor oumlnmaga maacuter nem lenne eleacuteg az indexeleacutesre iacutegy gondoskodnunk kellene az adatmutatoacute noumlveleacuteseacuteről is Van viszont lehetőseacuteg arra hogy az ADuC 842-es minden egyes koacuted-indirekt ciacutemzeacutes utaacuten automatikusan 1-gyel noumlvelje DPTR-t Ehhez egy SFR-be kell elhelyeznuumlnk a megfelelő eacuterteacuteket

A speciaacutelis funkcioacutejuacute regiszterekről roumlviden maacuter tettuumlnk emliacuteteacutest a [Portok eacutes funkcioacuteregiszterek] alfejezetben Az elektronikus tankoumlnyv haacutetraleacutevő reacuteszeacuteben sokszor fogunk hasznaacutelni SFR-eket Ehhez elengedhetetlenuumll szuumlkseacuteges lesz az Analog Devices ceacuteg aacuteltal a 842-es architektuacuteraacutehoz melleacutekelt leiacuteraacutes tanulmaacutenyozaacutesa [1] Ennek a tankoumlnyvnek nem az a feladata hogy minden SFR minden funkcioacutejaacutet kimeriacutetően bemutassa Sok SFR-rel fogunk dolgozni de nem mindegyikkel Amelyekkel dolgozunk azoknak sem tudjuk mindig minden konfiguraacutecioacutejaacutet bemutatni Amennyire azonban lehetseacuteges tankoumlnyvhoumlz illő moacutedon proacutebaacuteljuk meg taglalni az aktuaacutelisan hasznaacutelt SFR kivaacutelasztott konfiguraacutecioacutejaacutenak hataacutesaacutet Az SFR-eknek aacuteltalaacuteban van sajaacutet nevuumlk melyekkel hivatkozhatunk raacutejuk Ezek a nevek is toumlbbnyire mnemonikok melyek angol kifejezeacutesekből szaacutermaznak Ezek a nevek szerepelnek toumlbbek koumlzoumltt az assemblerhez tartozoacute MOD842 faacutejlban is Szaacutemos SFR bitenkeacutent ciacutemezhető azaz minden bitjeacutenek kuumlloumln neve van melyeket a C bithez hasonloacutean aacutelliacutetgathatunk magasra vagy alacsonyra A toumlbbi SFR bitenkeacutent nem csak egeacutesz baacutejtkeacutent ciacutemezhető Ebben az esetben a mi felelősseacuteguumlnk az hogy minden bitnek pontosan azt az eacuterteacuteket adjuk ami a felhasznaacutelni kiacutevaacutent hataacutest kivaacuteltja Az [1] referenciakeacutent megadott ADuC841_2_3pdf faacutejlban mely a gyaacutertoacutetoacutel megvaacutesaacuterolt CD-ről szaacutermazik az SFR-ek taacutergyalaacutesnaacutel mindig koumlzlik azok mnemonikjaacutet teljes angol neveacutet memoacuteriaciacutemeacutet bekapcsolaacuteskor felvett default eacuterteacutekeacutet eacutes bitenkeacutenti ciacutemezhetőseacutegeacutet Uacutegy gondoljuk hogy ezek koumlzuumll a legfontosabbakat mi is mindig oumlsszefoglaljuk egy taacuteblaacutezatban kiegeacutesziacutetve a magyar megnevezeacutessel

Visszateacuterve az adatmutatoacutera az adatmutatoacute műkoumldeacuteseacutet befolyaacutesoloacute SFR adatait a [A DPCON SFR taacutergyalt bitjei]ban talaacuteljuk Kezdő szintuumlnk miatt csak keacutet bitjeacutenek hataacutesaacutet ismertetjuumlk

73 taacuteblaacutezat - A DPCON SFR taacutergyalt bitjei

DPCON Data Pointer Control

Adatmutatoacute-vezeacuterlő

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Bit neve Leiacuteraacutes

3 DP0m1 Az adatmutatoacute viselkedeacutese

DP0m1 DP0m0 Uumlzemmoacuted

0 0 Normaacutel (8052-es) viselkedeacutes

0 1 MOVX eacutes MOVC utasiacutetaacutesok utaacuten DPTR

noumlveleacutese 1-gyel

1 0 MOVX eacutes MOVC utasiacutetaacutesok utaacuten DPTR

csoumlkkenteacutese 1-gyel

1 1 DPTR alsoacute baacutejtjaacutenak kipeckeleacutese

(16-bites eszkoumlzoumlkneacutel lehet hasznos)

2 DP0m0

Az egyes SFR-ek lehetőseacutegeinek taacutergyalaacutesakor arra biztatjuk az olvasoacutet hogy ezzel az elektronikus tankkoumlnyvvel paacuterhuzamosan tanulmaacutenyozza az emliacutetett ADuC841_2_3pdf faacutejl megfelelő reacuteszeacutet Az adatmutatoacute műkoumldeacuteseacutet befolyaacutesoloacute DPCON SFR oumlsszes bitjeacutenek magyaraacutezata itt talaacutelhatoacute meg [1 p 51 Table 21] A hivatkozott taacuteblaacutezatboacutel kideruumll hogy a bemutatott adatmutatoacutet elsődleges adatmutatoacutenak kell neveznuumlnk mert van egy maacutesodlagos vagy hűbb fordiacutetaacutessal aacuternyeacutek-adatmutatoacute is Ez utoacutebbival azonban nem foglalkozunk Az elsődleges adatmutatoacute viselkedeacuteseacutet a DPCON 3 eacutes 2 bitje hataacuterozza meg Ha e keacutet bit eacuterteacuteke egyuumlttesen 01 akkor az azt a műkoumldeacutest vaacuteltja ki hogy minden egyes MOVC (eacutes MOVX de erről majd keacutesőbb) utasiacutetaacutes utaacuten DPTR eacuterteacuteke 1-gyel nő Ezek szerint ilyenkor az akkumulaacutetorra igaziboacutel nincs is szuumlkseacuteguumlnk a ciacutemzeacuteshez de mivel az mindig reacutesze a koacuted-indirekt ciacutemzeacutesnek ezeacutert ceacutelszerű az eacuterteacutekeacutet 0-n tartani (Rafinaacuteltabb programozoacutek persze kombinaacutelhatjaacutek a kettőthellip) Mindazt amit most elmondtunk a koumlvetkező koacutedban mutatjuk be Ez a koacuted a bemutatott reacutesztől eltekintve toumlkeacuteletesen megegyezik Code04-gyel laacutesd előző alfejezet Ezzel az adatmutatoacutes truumlkkel a koacuted meacuteg roumlvidebbeacute vaacutelik

Created by XMLmind XSL-FO Converter

Adatok kiolvasaacutesa a koacutedmemoacuteriaacuteboacutel

Code05asmMAINMOV DPCON00000100b Annak beaacutelliacutetaacutesa hogy az elsődleges adatmutatoacute automatikusan 1-gyel nőjoumln valahaacutenyszor veacutegrehajtoacutedik a MOVC utasiacutetaacutesMOV DPTRadatok Az adatok toumlmbjeacutenek ciacuteme az adatmutatoacuteba keruumllMOV R48 8-szor fut le ez a ciklus mert 8 adatbaacutejtot akarunk kijeleznidisplMOV A0 A koacuted-indirekt ciacutemzeacuteshez 0-t teszuumlnk A-ba mert most majd a DPTR fog automatikusan nőniMOVC AA+DPTR Adat olvasaacutesa a koacutedmemoacuteriaacuteboacutel koacuted-indirekt ciacutemzeacutesselMOV P2A A beolvasott adat kihelyezeacutese a LED-sorraMOV A20 A megfelelő parameacuteterrelCALL DELAY meghiacutevjuk az időhuacutezaacutest (02 s)DJNZ R4displ Lekezeljuumlk a ciklus kileacutepeacutesi felteacuteteleacutetJMP MAIN Ugraacutes vissza a program elejeacutere

Created by XMLmind XSL-FO Converter

8 fejezet - Felteacutetelek kezeleacuteseA 80518052-es processzormagok utasiacutetaacuteskeacuteszlete nem bővelkedik oumlsszehasonliacutetaacutesokat lehetőveacute tevő utasiacutetaacutesokban Persze azzal a neacutehaacutennyal ami rendelkezeacutesuumlnkre aacutell mindent el lehet inteacutezni csak hozzaacute kell szokni a logikaacutejukhoz Felteacutetelek kezeleacuteseacutere egy programban szinte mindig szuumlkseacuteg van Ha maacuter akaacutercsak egyetlen ciklust is iacuterunk annak kileacutepeacutesi felteacutetele is felteacutetel Ez az egyik legfontosabb eset A maacutesik az amikor valamely logikai kifejezeacutes igaz vagy hamis mivolta alapjaacuten el kell aacutegaztatnunk a programot Ebben a fejezetben megmutatjuk hogy mikeacutent lehet pontosan ugyanuacutegy műkoumldő ciklusokat toumlbbfeacutelekeacuteppen megiacuterni A bemutatott moacutedszerek nem kimeriacutető elemzeacutest jelentenek ezek alapjaacuten (vagy eacuteppen ezektől fuumlggetlenuumll) tovaacutebbi ciklusszervezeacutesi gondolatmeneteket bizonyaacutera az olvasoacute is koumlnnyen ki tud talaacutelni

1 Oumlsszeadaacutes eacutes kivonaacutesAz aacutetvitel neacutelkuumlli oumlsszeadaacutes utasiacutetaacutesaacutet maacuter bemutattuk a [Logikai eacutes aritmetikai utasiacutetaacutesok] alfejezetben azonban a teljesseacuteg kedveacuteeacutert uacutejra felsoroljuk a maacuter ismert ciacutemzeacutesmoacuteduacute vaacuteltozatokat

ADD ARnADD AdirectADD Adata

Ez az utasiacutetaacutes befolyaacutesolja a C bit eacuterteacutekeacutet Ha az oumlsszeadaacutes eredmeacutenye nagyobb mint 255 akkor a C bit 1 lesz kuumlloumlnben 0 Ezeacutert hiacutevjaacutek aacutetviteli bitnek Ennek segiacutetseacutegeacutevel lehet toumlbb baacutejton aacutebraacutezolt szaacutemokat oumlsszeadni de akkor azt maacuter oumlsszeadaacutes koumlzben figyelembe kell venni amit az ADD utasiacutetaacutes nem tesz Az oumlsszeadaacutesnak van olyan vaacuteltozata is amely nem csak az operandust adja az akkumulaacutetorhoz hanem a C bit tartalmaacutet is Az aacutetviteles oumlsszeadaacutes mnemonikja ADDC ami az angol Add Accumulator with Carry (hozzaacutead az akkumulaacutetorhoz aacutetvitellel) kifejezeacutesből szaacutermazik A művelet veacutegrehajtaacutesa befolyaacutesolja a C bit eacuterteacutekeacutet baacutermi volt is az a művelet elveacutegzeacutese előtt Jelenteacutese a művelet utaacuten ugyanaz mint az ADD utasiacutetaacutesnaacutel Az aacutetviteles oumlsszeadaacutes utasiacutetaacutesa az eddig megtanult ciacutemzeacutesmoacutedokkal

ADDC ARnADDC AdirectADDC Adata

Hogy joacutel eacuterthető legyen megismeacuteteljuumlk a C bittel kapcsolatos tudnivaloacutekat Vannak olyan utasiacutetaacutesok melyek veacutegrehajtaacutesaacutenaacutel nem mindegy hogy mi volt a C bit eacuterteacuteke az utasiacutetaacutes veacutegrehajtaacutesa előtt Vannak aztaacuten olyan utasiacutetaacutesok amelyek veacutegrehajtaacutesa befolyaacutesolja a C bit eacuterteacutekeacutet de ez csak az utasiacutetaacutes veacutegrehajtaacutesa utaacuten deruumll ki A keacutet eset teljesen maacutest jelent eacutes figyeljuumlnk arra hogy bizonyos utasiacutetaacutesokra mind a keacutet megfogalmazaacutes igaz

A teljesseacuteg kedveacuteeacutert el kell mondanunk hogy a C bit mellett van meacuteg keacutet jelzőbit vagy flag melyek eacuterteacutekeacutet befolyaacutesoljaacutek az aritmetikai műveletek Ezek az AC ill OV bitek Az AC roumlvidiacuteteacutes az angol Auxiliary Carry (segeacuted- kiegeacutesziacutető aacutetvitel) kifejezeacutesből az OV pedig az Overflow (tuacutelcsordulaacutes) szoacuteboacutel szaacutermazik AC pont ugyanazt jelzi mint C csak nem a 7 bitneacutel hanem a 3 bitneacutel (a bitek szaacutemozaacutesaacutet 0-val kezdve) OV a kettes komplemensben aacutebraacutezolt előjeles szaacutemoknaacutel jut szerephez Ezekkel a jelzőbitekkel egyelőre nem foglalkozunk

A kivonaacutes utasiacutetaacutesaacutenak mnemonikja SUBB ami az angol Subtract from Accumulator with Borrow (kivonaacutes az akkumulaacutetorboacutel koumllcsoumlnzeacutessel) kifejezeacutesből szaacutermazik A borrow azaz koumllcsoumlnzeacutes szoacute magyaraacutezatra szorul Amerikaacuteban az terjedt el keacutet szaacutem papiacuteron toumlrteacutenő kivonaacutesaacutenaacutel hogy ha kisebb szaacutemjegyből kell nagyobbat kivonni valamely helyieacuterteacutekneacutel akkor a kisebbiacutetendő koumlvetkező jegyeacutet csoumlkkentik eggyel majd ezt a koumllcsoumlnvett eacuterteacuteket adjaacutek hozzaacute aacutetmenetileg a kisebbiacutetendő probleacutemaacutes szaacutemjegyeacutehez Az eggyel csoumlkkentett jegyet aacutet is huacutezzaacutek majd odaiacuterjaacutek az eggyel kisebb szaacutemjegyet Ez a koumllcsoumlnzeacutes szerepel az utasiacutetaacutes megnevezeacuteseacuteben A műveletet magyarul mi hiacutevjuk nyugodtan simaacuten aacutetviteles kivonaacutesnak A SUBB utasiacutetaacutes vaacuteltozatai a maacuter ismert ciacutemzeacutesmoacutedokkal

SUBB ARnSUBB AdirectSUBB Adata

A SUBB utasiacutetaacutes veacutegrehajtaacutesaacutenaacutel a C bit eredeti eacuterteacuteke is beszaacutemiacutet Ha az utasiacutetaacutes veacutegrehajtaacutesa előtt C = 1 akkor eleve lesz koumllcsoumlnzeacutes ha C = 0 akkor nem lesz (Foumlldi halandoacute ez utoacutebbi eacutertelemben gondolna elsőkeacutent a kivonaacutes műveletre) Kivonaacutesnaacutel ahogy az vaacuterhatoacute maga az eredmeacuteny is befolyaacutesolja a C bitet C akkor lesz 1

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

ha a kivonandoacute nagyobb mint a kisebbiacutetendő azaz az akkumulaacutetor eacuterteacuteke (AC eacutes OV eacuterteacuteke itt is ahhoz hasonloacutean alakul mint az oumlsszeadoacute utasiacutetaacutesoknaacutel) Ha nem akarunk magunknak meglepeteacutest a SUBB utasiacutetaacutes hasznaacutelataacutenaacutel nagyon figyeljuumlnk arra hogy mi a C bit eacuterteacuteke a veacutegrehajtaacutes előtt

2 Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesokEbben a fejezetben oumlsszeszedjuumlk azokat az oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesokat melyekkel ciklusokat lehet szervezni eacutes egyeacuteb programelaacutegazaacutesokat megvaloacutesiacutetani

A [Egyszerű ciklusszervezeacutes] alfejezetben maacuter taacutergyaltuk a DJNZ utasiacutetaacutest az R segeacutedregiszterekkel Ezt most megismeacuteteljuumlk a felsorlaacutesban eacutes most maacuter egy maacutesik ciacutemzeacutessel is eacuterteni fogjuk

DJNZ RnrelDJNZ directrel

Az utasiacutetaacuteshoz tartozoacute magyaraacutezat megtalaacutelhatoacute az emliacutetett alfejezetben

A maacutesik oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutes a CJNE A mnemonik az angol Compare and Jump if Not Equal (oumlsszehasonliacutet eacutes ugrik ha nem egyenlő) kifejezeacutesből szaacutermazik Ciacutemzeacutesmoacuted alapjaacuten az alaacutebbi verzioacutek leacuteteznek

CJNE AdirectrelCJNE AdatarelCJNE Rndatarel

A haacuterom operandusboacutel az első azt jelenti amit oumlsszehasonliacutetunk Ez lehet az akkumulaacutetor vagy valamelyik R regiszter tartalma A maacutesodik operandus az amihez hasonliacutetunk a harmadik pedig egy relatiacutev ugraacutes meacuterteacuteke azaz az ugraacutes meacuterteacuteke az utasiacutetaacutes poziacutecioacutejaacutehoz keacutepest +127 eacutes ndash128 baacutejt koumlzoumltt Assemblyben ezt aacuteltalaacuteban ciacutemkeacutekkel adjuk meg eacutes az assembler az ami a kokreacutet eacuterteacuteket meghataacuterozza Ugraacutes akkor toumlrteacutenik ha a keacutet oumlsszehasonliacutetott objektum eacuterteacuteke nem egyenlő Kuumlloumlnben a program csorog tovaacutebb

A harmadik eacutes negyedik oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutes a JZ eacutes a JNZ A mnemonikok az angol Jump if Accumulator Zero (ugrik ha az akkumulaacutetor nulla) eacutes Jump if Accumulator Not Zero (ugrik ha az akkumulaacutetor nem nulla) kifejezeacutesből szaacutermaznak Ezek csak az akkumulaacutetor eacuterteacuteke alapjaacuten ugratnak vagy nem ugratnak

JZ relJNZ rel

Ennyi Bitekre vonatkozoacutean meacuteg vannak elaacutegazaacutesi utasiacutetaacutesok azokat keacutesőbb vesszuumlk De toumlbb teacutenyleg nincs Neacutehaacuteny truumlkkoumlt azonban meacuteg a keacutesőbbiekben ismertetuumlnk az ugroacute utasiacutetaacutesokkal kapcsolatban

3 Hat variaacutecioacute egy feladatraAz előző alfejezetek utaacuten proacutebaacuteljunk kuumlloumlnfeacutele moacutedon ciklusokat szervezni valami laacutetszoacutelag eacutertelmes feladatot teljesiacutetve de uacutegy hogy a ciklusszervezeacutes moacutedjainak logikaacuteja akaacuter jelentősen elteacuterhet egymaacutestoacutel a laacutetszat azonban toumlkeacuteletesen ugyanaz maradjon

5 feladat

Szaacutemoljunk el a programmal 1-től 15-ig eacutes kis vaacuterakozaacutessal jeleniacutetsuumlk meg a LED-soron az eacuterteacutekeket a kettes szaacutemrendszerben [Code06 Code07 Code08 Code09 Code10 Code11]

Ennek a feladatnak a megoldaacutesaacutenaacutel hat elteacuterő ciklusszervezeacutest fogunk kielemezni Ezekhez most maacuter folyamataacutebraacutet is rajzolunk A megadott koacutedreacuteszletekben az időhuacutezoacute szubrutinunk meacuteg mindig az mint az előző neacutehaacuteny feladat megoldaacutesaacutenaacutel iacutegy ezt uacutejra ismeacutet csak foumlloumlsleges lenne megadnunk Jelenleacuteteacutere csak az azt meghiacutevoacute utasiacutetaacutes fog utalni

Az első megoldaacutesban a DJNZ utasiacutetaacutest hasznaacuteljuk A ciklusvaacuteltozoacute az R4 regiszter lesz a kijelezendő eacuterteacutekek vaacuteltozoacuteja pedig R3 Leacutenyeges hogy az első megoldaacutesban e keacutet vaacuteltozoacutenak semmi koumlze nem lesz egymaacuteshoz az egyik (R4) csak azeacutert lesz felelős hogy a ciklus 15-szoumlr fusson le miacuteg a maacutesik (R3) eacuterteacutekeacutet kuumlloumln kezeljuumlk A megoldaacutes folyamataacutebraacuteja az [Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval] aacutebraacuten laacutethatoacute Vegyuumlk eacuteszre hogy a DJNZ utasiacutetaacutes nem csak a felteacutetelt jelkeacutepező teacutetelt valoacutesiacutetja meg hanem az az előtt aacutelloacute

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

eacuterteacutekcsoumlkkenteacutest is

81 aacutebra - Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval

Az [Ciklusszervezeacutes kuumlloumln ciklusvaacuteltozoacuteval eacutes eacuterdemi vaacuteltozoacuteval] aacutebraacuten laacutethatoacute folyamataacutebra koacutedja a koumlvetkező

Code06asmMOV R31 Kezdeti eacuterteacutek R3-nakMOV R415 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a kijelezendő eacuterteacuteketCPL A Vesszuumlk a komplementereacutetMOV P2A Kijelezzuumlk a LED-soronMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 Noumlveljuumlk a kijelezendő eacuterteacuteketDJNZ R4cik Lekezeljuumlk a ciklusvaacuteltozoacutet Ugrunk vissza ha R4 eacuterteacuteke meacuteg nem 0 Ha maacuter igen csorog tovaacutebb a program azaz kileacutepuumlnk a ciklusboacutelJMP $ Oumlnmagaacutera ugratjuk vissza a programot A program helyben jaacuter toumlbbet semmit sem csinaacutel

A koacutedban egyetlen aproacute uacutejdonsaacutegot laacutethatunk Ez a legutolsoacute utasiacutetaacutesnaacutel a $ jel a JMP utaacuten Ez azt jelenti hogy az ugraacutes az utasiacutetaacutesra oumlnmagaacutera toumlrteacutenik iacutegy igen toumlmoumlr alakjaacutet laacutetjuk egy veacutegtelen ciklusnak Itt a program megakad eacutes innentől kezdve helyben jaacuter

A feladat maacutesodik megoldaacutesaacuteban ugyanuacutegy szervezzuumlk a ciklust mint az előbb de a kijelezendő eacuterteacutekekhez most nem hasznaacutelunk kuumlloumln vaacuteltozoacutet hanem azokat kifejezetten a ciklusvaacuteltozoacuteboacutel aacutelliacutetjuk elő aritmetikai műveletekkel Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code07)

82 aacutebra - Az eacuterdemi eacuterteacutekek előaacutelliacutetaacutesa aritmetikai műveletekkel a ciklusvaacuteltozoacuteboacutel

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code07asmMOV R415 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV A16 A-ba tesszuumlk a kijelezendő eacuterteacuteketCLR C C-t toumlroumlljuumlk a kivonaacuteshozSUBB AR4 A=16-R4 lesz az eredmeacuteny azaz a kijelezendő eacuterteacutek 1-től megy 15-igCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintDJNZ R4cik Lekezeljuumlk a ciklusvaacuteltozoacutet Ugrunk vissza ha R4 eacuterteacuteke meacuteg nem 0 Ha maacuter igen csorog tovaacutebb a program azaz kileacutepuumlnk a ciklusboacutelJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat harmadik megoldaacutesaacuteban maacuteshogy szervezzuumlk a ciklust Most a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet Tulajdonkeacuteppen ez lesz a ciklusvaacuteltozoacute is A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet a ciklus veacutegeacuten eacuterteacutekeljuumlk ki azaz a ciklus haacutetul tesztelő lesz Ehhez a CJNE utasiacutetaacutest hasznaacuteljuk Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code08)

83 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code08asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetCJNE R316cik R3 utolsoacute eacuterteacuteke ami joacute nekuumlnk a 15 Ha ez utaacuten noumlveluumlnk rajta egyet akkor 16-ot kapunk Ez a 16-os eacuterteacutek lesz joacute kileacutepeacutesi felteacutetelnek Ha ezt meacuteg nem eacutertuumlk el ugrunk visszaJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat negyedik megoldaacutesaacuteban szintuacutegy a CJNE utasiacutetaacutest hasznaacuteljuk Most is a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet eacutes ismeacutet ez lesz a ciklusvaacuteltozoacute is A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet azonban a ciklus elejeacuten eacuterteacutekeljuumlk ki azaz a ciklus eloumll tesztelő lesz Ennek a megoldaacutesnak a folyamataacutebraacuteja a [ Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code09)

84 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus eloumll tesztelő

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

Code09asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikCJNE R316rendben Ha R3 meacuteg nem eacuterte el a 16-ot akkor joumlhet a ciklusmag Ugrunk a rsquorendbenrsquo ciacutemkeacutereJMP kiugrik Ha R3 maacuter 16-tal egyenlő akkor ide csorog a program Elhagyjuk a ciklust Kiugratjuk a ciklus moumlgeacute

rendben

MOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetJMP cik Visszaugrunk a ciklus elejeacutere az ott leacutevő vizsgaacutelathoz

kiugrik

JMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

A feladat oumltoumldik megoldaacutesaacuteban szintuacutegy a kijelezendő eacuterteacutekek vaacuteltozoacuteja (R3) jaacutetssza a kulcsszerepet Ismeacutet ez lesz a ciklusvaacuteltozoacute A ciklusboacutel valoacute kileacutepeacutes felteacuteteleacutet ismeacutet csak ciklus veacutegeacuten eacuterteacutekeljuumlk ki azaz a ciklus megint haacutetul tesztelő lesz Ehhez azonban most a JNZ utasiacutetaacutest hasznaacuteljuk Ennek a megoldaacutesnak a folyamataacutebraacuteja a [Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk] aacutebraacuten laacutethatoacute a koacuted eacuterdemi reacutesze pedig koumlzvetlenuumll utaacutena (Code10)

85 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JNZ utasiacutetaacutest hasznaacuteljuk

Code10asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutet kor kell kileacutepni ha R3-at 16-ra noumlveltuumlk hiszen utolsoacute hasznos eacuterteacuteke 15MOV AR3 A-ba tesszuumlk R3-atCLR C Toumlroumlljuumlk C-t a kivonaacuteshozSUBB A16 A=R3-16JNZ cik Ha az eredmeacuteny nem 0 akkor meacuteg nem eacutertuumlk el 16-ot azaz a kileacutepeacutesi felteacutetelt Ekkor ugrunk vissza a ciklus elejeacutereJMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

Veacuteguumll a feladat hatodik megoldaacutesaacuteban az a kuumlloumlnbseacuteg az oumltoumldikhez keacutepest hogy itt a JZ utasiacutetaacutest hasznaacuteljuk Ehhez mind a folyamataacutebra ([Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk] aacutebra) mind a koacuted (Code11) neacutemileg moacutedosul hogy most akkor toumlrteacutenjen ugraacutes ha egy eredmeacuteny eacuteppen nulla Figyeljuumlk meg hogy e keacutet utolsoacute algoritmusnaacutel hol helyezkedik el a ciklusvaacuteltozoacute eacuterteacutekeacutenek noumlveleacutese a kileacutepeacutesi felteacutetel kieacuterteacutekeleacuteseacutehez keacutepest

86 aacutebra - Az eacuterdemi eacuterteacutekeket maga a ciklusvaacuteltozoacute jelenti A ciklus haacutetul tesztelő A kileacutepeacutesi felteacutetelt aritmetikai művelettel keacutepezzuumlk eacutes nullaacutera hegyezzuumlk ki Az elaacutegazaacuteshoz a JZ utasiacutetaacutest hasznaacuteljuk

Code11asmMOV R31 A ciklusvaacuteltozoacute kezdeti eacuterteacutekecikMOV AR3 A-ba tesszuumlk a ciklusvaacuteltozoacutetCPL A Vesszuumlk a komplementereacutet a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-soron a LED-ek portjaacutenMOV A40 Parameacuteteraacutetadaacutes időhuacutezaacuteshoz (04 s)CALL DELAY Meghiacutevjuk az időhuacutezoacute szubrutintMOV AR3 A-ba tesszuumlk R3-atCLR C Toumlroumlljuumlk C-t a kivonaacuteshozSUBB A15 A=R3-15JZ kiugrik Ha az eredmeacuteny 0 akkor eleacutertuumlk R3 utolsoacute hasznos eacuterteacutekeacutet Ez a kileacutepeacutesi felteacutetel Kiugrunk a ciklusboacutelINC R3 1-gyel noumlveljuumlk a ciklusvaacuteltozoacute eacuterteacutekeacutetJMP cik Ugraacutes vissza a ciklus elejeacutere

kiugrik

Created by XMLmind XSL-FO Converter

Felteacutetelek kezeleacutese

JMP $ A program helyben jaacuter toumlbbet semmit sem csinaacutel

Az [5 feladat] megoldaacutesaacutera gyaacutertott hat elteacuterő oumltlet nem az oumlsszes lehetőseacuteget jelenti Sok-sok aproacute reacuteszletekben elteacuterő moacutedszert lehetne meacuteg bemutatni A ceacutel mindenesetre az volt hogy megmutassuk az olvasoacutenak hogy meacuteg a nagyon keveacutes elaacutegazaacutesi utasiacutetaacutessal is milyen ceacuteliraacutenyos moacutedon van lehetőseacuteg ciklusok szervezeacuteseacutere eacutes felteacutetelek kieacuterteacutekeleacuteseacutere Sajaacutet programban pedig az aktuaacutelis feladattoacutel fuumlggően baacutetran lehet uumlgyeskedni a legroumlvidebb koacuted leggyorsabb veacutegrehajtaacutes legkevesebb felhasznaacutelt regiszter stb eacuterdekeacuteben

Created by XMLmind XSL-FO Converter

9 fejezet - Nyomoacutegombok a panelonAz ADuC 842 egyik portjaacutenak keacutet laacuteba alkalmas arra hogy az azon toumlrteacutenő vaacuteltozaacutest kuumllső esemeacutenykeacutent eacuterteacutekelje a processzor Ezzel kicsit keacutesőbb behatoacutebban foglalkozunk de maacuter most is keacutepesek vagyunk arra hogy ezeket a laacutebakat programboacutel figyeljuumlk A hallgatoacutei panelon egy-egy nyomoacutegomb van koumltve a 3 port 2 eacutes 3 laacutebaacutera Amikor ezeket a nyomoacutegombokat lenyomjuk akkor foumlldre huacutezzuk a laacutebakat Ha a gombok nincsenek lenyomva akkor a laacutebak magas jelszinten uumllnek

A nyomoacutegombok keacutenyelmes hasznaacutelataacutehoz tanuljuk meg az assembler BIT fordiacutetoacutei direktiacutevaacutejaacutet Ezzel a direktiacutevaacuteval bitekhez rendelhetuumlnk szimboacutelumokat peacuteldaacuteul

led1 BIT P20led2 BIT P27but1 BIT P32but2 BIT P33

Az első keacutet sor a 2 port (a LED-sor portja) keacutet szeacutelső bitjeacutet rendeli a led1 ill led2 szimboacutelumhoz miacuteg az utolsoacute keacutet sor a nyomoacutegombok portbitjeit rendeli a but1 ill but2 szimboacutelumhoz Figyeljuumlk meg hogyan hivatkozunk adott port adott bitjeacutere A P jelenti a portot az utaacutena aacutelloacute szaacutem a port sorszaacutema a tizedespont utaacuteni szaacutem pedig a portbit sorszaacutema (0-val kezdve)

1 Gombnyomaacutes detektaacutelaacutesaEbben az alfejezetben egy nagyon elemi kis feladatot oldunk meg a nyomoacutegombokkal kapcsolatban

6 feladat

A panel nyomoacutegombjainak lenyomaacutesaacutera vilaacutegiacutetson egy-egy LED a panel LED-soraacuten Egyuumlttes megnyomaacutesukkor mindkeacutet LED vilaacutegiacutetson A LED-ek bekapcsolaacutesa pontosan a lenyomaacutes idejeacuteig tartson [Code12]

A feladat megoldaacutesaacutehoz a MOV utasiacutetaacutesnak keacutet uacutej verzioacutejaacutet tanuljuk meg azokat amelyekkel adott bitet mozgatunk a Carry bitbe ill fordiacutetva

MOV CbitMOV bitC

A [6 feladat] megoldaacutesa amilyen roumlvid annyira laacutetvaacutenyos lesz műkoumldeacutes koumlzben A koacuted teacutenyleg csak paacuter sor iacutegy teljes egeacuteszeacuteben koumlzoumlljuumlk A bitek definiaacutelaacutesa gyakorlatilag baacuterhol toumlrteacutenhet a koacutedon beluumll

Code12asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelatabut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaled1 BIT P20 Az egyik szeacutelső LED szimboacutelumaled2 BIT P27 A maacutesik szeacutelső LED szimboacutelumaCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV Cbut1 Az 1 gomb bitjeacutenek mozgataacutesa C-beMOV led1C Aztaacuten C kirakaacutesa a led1 portbitreMOV Cbut2 A 2 gomb bitjeacutenek mozgataacutesa C-beMOV led2C Aztaacuten C kirakaacutesa a led2 portbitreJMP MAIN Kezdjuumlk eloumllrőlEND

2 Logikai műveletek bitekkelEzzel az alfejezettel eleacuterkeztuumlnk ahhoz a ponthoz ami a szaacutemiacutetaacutestechnikaacuteban aacuteltalaacuteban elkeruumllhetetlen

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

oumlsszefoglaljuk a logikai műveleteket eacutes az azokhoz tartozoacute utasiacutetaacutesokat Egyelőre mindezt a bitek szintjeacuten A baacutejtokkal ezek alapjaacuten kicsit keacutesőbb maacuter egeacuteszen koumlnnyen el fogunk baacutenni

Az előző alfejezetben megismerkedtuumlnk az egyedileg kezelhető bitek fogalmaacuteval eacutes maacutesoltuk is őket ide-oda Ezeket a biteket termeacuteszetesen eacuteppen uacutegy lehet magasra aacutelliacutetani toumlroumllni eacutes invertaacutelni mint a C bitet (laacutesd [A Carry bit] alfejezet)

SETB bitCLR bitCPL bit

Egyedi bitekkel a keacutet legfontosabb logikai műveletet veacutegezhetjuumlk el az EacuteS ill VAGY műveletet A biztonsaacuteg kedveacuteeacutert a [Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata]ban eacutes a [A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata] felideacutezzuumlk e keacutet művelet igazsaacutegtaacuteblaacutezataacutet csak a műveletekre az angol szoacutet hasznaacuteljuk Ha maacuter itt tartunk ne maradjon ki a negaacutecioacute művelete sem ([A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata])

91 taacuteblaacutezat - Az EacuteS (AND) művelet igazsaacutegtaacuteblaacutezata

A B A AND B

0 0 0

0 1 0

1 0 0

1 1 1

92 taacuteblaacutezat - A VAGY (OR) művelet igazsaacutegtaacuteblaacutezata

A B A OR B

0 0 0

0 1 1

1 0 1

1 1 1

93 taacuteblaacutezat - A negaacutecioacute (NOT) művelet igazsaacutegtaacuteblaacutezata

A NOT A

0 1

1 0

A fenti keacutet logikai művelet utasiacutetaacutesa bit tiacutepusuacute operandusokra a koumlvetkező

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

ANL CbitORL Cbit

A mnemonikok első keacutet betűje nyilvaacutenvaloacute az utaacutenuk koumlvetkező L pedig valoacutesziacutenűleg az angol Logical (logikai) szoacuteboacutel szaacutermazik A 80518052-es processzormag programozaacutesaacuteval foglalkozoacute szakkoumlnyvek mindenesetre ezekre a mnemonikokra nem adnak kimeriacutető magyaraacutezatot

Nagyon fontos szem előtt tartanunk hogy az eredmeacuteny mindig a C bitbe keruumll Mintha a koumlvetkező moacutedon iacuternaacutenk foumll a műveleteket

C = C AND bit

C = C OR bit

Amennyiben uacutegy adoacutedik a helyzet hogy a logikai műveletek elveacutegzeacuteseacutehez nem a bit neacutevvel illetett bitre hanem annak komplementereacutere (negaacuteltjaacutera inverzeacutere) van szuumlkseacuteg akkor a koumlvetkező keacutet utasiacutetaacutes lehet a segiacutetseacuteguumlnkre

ANL CbitORL Cbit

Ez utoacutebbi keacutet utasiacutetaacutes nem azonos a fentebbi kettővel geacutepi koacutedjuk is elteacuterő A perjel () utal arra hogy a művelet a C biten eacutes a megciacutemzett bit negaacuteltjaacuten hajtoacutedik veacutegre

3 Elaacutegazaacutesok bitek alapjaacutenA JZ eacutes JNZ utasiacutetaacutesok logikaacutejaacutet koumlvetve bitek eacuterteacuteke alapjaacuten is leacutetrehozhatunk felteacuteteles ugraacutesokat

JC relJNC relJB bitrelJNB bitrel

A mnemonikok az angol Jump if CBit Set (ugraacutes ha Cbit magas) eacutes Jump if CBit Not Set (ugraacutes ha Cbit nem magas (tehaacutet alacsony)) kifejezeacutesekből szaacutermaznak Az ugraacutes meacuterteacuteke a relatiacutev ciacutemkeacutenek megfelelően megint csak ndash128 eacutes +127 baacutejt koumlzoumltti eacuterteacutek lehet A harmadik eacutes negyedik utasiacutetaacutesnaacutel az első operandus azaz a bit arra utal hogy konkreacutet bitre kell hivatkoznunk Hogy teljes legyen a lista megadjuk az oumltoumldik ide tartozoacute utasiacutetaacutest is

JBC bitrel

Ez a mnemonik az angol Jump if Bit Set and Clear Bit kifejezeacutesből szaacutermazik Akkor toumlrteacutenik ugraacutes ha a hivatkozott bit eacuterteacuteke 1 eacutes ugraacuteskor mindjaacutert toumlrlődik is ez a bit Ez az utasiacutetaacutes viszonylag ritkaacuten keruumll elő de attoacutel meacuteg bizonyos helyzetekben nagyon is hasznos lehet

4 Logikai műveletek baacutejtokkalA [Logikai műveletek bitekkel] alfejezetben aacutettekintettuumlk a legelemibb logikai műveleteket kuumlloumlnaacutelloacute bitek eseteacuteben Hasonloacute moacutedon lehet logikai műveleteket veacutegezni baacutejtokon egyszerűen arroacutel van szoacute hogy keacutet baacutejtnak mindig az azonos helyieacuterteacutekű bitjein veacutegezzuumlk a műveletet A baacutejtokon azaz regiszterek vagy memoacuteriarekeszek tartalmaacuten veacutegrehajthatoacute logikai műveletek listaacuteja a maacuter ismert ciacutemzeacutesmoacutedokkal a koumlvetkező

ANL ARnANL AdirectANL AdataANL directAANL directdataORL ARnORL AdirectORL AdataORL directAORL directdata

Baacutejtok eseteacuteben szerencseacutere leacutetezik utasiacutetaacutes arra a logikai műveletre amelyet talaacuten sok olvasoacute titokban maacuter

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

hiaacutenyolt is ez lesz a kizaacuteroacute VAGY Angolul exclusive OR-nak hiacutevjaacutek iacutegy mi is az ebből szaacutermazoacute XOR roumlvidiacuteteacutest hasznaacuteljuk a [A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata]ban Eacuterdekes hogy bitekre nem hoztak leacutetre a gyaacutertoacutek ilyen utasiacutetaacutest

94 taacuteblaacutezat - A kizaacuteroacute VAGY (XOR) művelet igazsaacutegtaacuteblaacutezata

A B A XOR B

0 0 0

0 1 1

1 0 1

1 1 0

A kizaacuteroacute VAGY műveletre vonatkozoacute utasiacutetaacutesok listaacuteja iacutegy fest

XRL ARnXRL AdirectXRL AdataXRL directAXRL directdata

A mnemonik az Exclusive OR Logical (kizaacuteroacute vagy logikai) angol kifejezeacutesből szaacutermazhat

Az ebben a fejezetben felsorolt ciacutemzeacutesmoacutedoknaacutel a logikai művelet eredmeacutenye mindig az első operanduskeacutent megadott regiszterbe vagy memoacuteriaciacutemre keruumll

5 Bitek moacutedosiacutetaacutesa baacutejton beluumllA baacutejtokra vonatkozoacute logikai műveletekkel aproacute de igen fontos feladatokat oldhatunk meg Az EacuteS művelettel tetszőlegesen vaacutelasztott biteket toumlroumllhetuumlnk egy baacutejtban fuumlggetlenuumll attoacutel hogy mi volt azok eredeti eacuterteacuteke Mindezt uacutegy hogy a toumlbbi bit eacuterteacuteke nem vaacuteltozik meg Vegyuumlk peacuteldaacutenak azt az esetet amikor toumlroumllni akarjuk egy baacutejt 1 eacutes 3 bitjeacutet Ebben az esetben az EacuteS művelet egyik operandusa az 11110101 lesz tehaacutet oda iacuterunk nullaacutekat ahol a bit toumlrleacuteseacutet veacutegezzuumlk Az ilyen műveletekre hasznaacutelt bitmintaacutekat maszknak vagy logikai maszknak nevezzuumlk Konkreacutet peacutelda bitek toumlrleacuteseacutere

11001100

AND 11110101

--------

11000100

Laacutethatoacute hogy ami a kijeloumllt helyeken az eredeti baacutejtban 1 volt az csakugyan 0-vaacute vaacutelt ami 0 volt az maradt 0 a toumlbbi bit pedig vaacuteltozatlan maradt

Ha most az a ceacutelunk hogy az előbbi helyeken eacuteppen magasra aacutelliacutetsuk a biteket akkor az előbbi maszk inverzeacutet hasznaacuteljuk azaz 00001010-t Tehaacutet oda iacuterunk 1-et ahol a magasra aacutelliacutetaacutest veacutegezzuumlk EacuteS művelet helyett most a VAGY műveletre van szuumlkseacuteguumlnk

11001100

OR 00001010

--------

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

11001110

Laacutethatoacute hogy ami a kijeloumllt helyeken az eredeti baacutejtban 0 volt az csakugyan 1-gyeacute vaacutelt ami 1 volt az maradt 1 a toumlbbi bit pedig vaacuteltozatlan maradt

A kizaacuteroacute VAGY művelettel meacuteg a fentiekneacutel is nagyobb huncutsaacutegot tudunk kivitelezni invertaacutelhatjuk a kijeloumllt helyen leacutevő biteket

11001100

XOR 00001010

--------

11000110

Ezek a maszkolaacutesi truumlkkoumlk nagyon hasznos eszkoumlzt adnak a kezuumlnkbe assembly nyelvű programozaacutes soraacuten hiszen igen sokszor kell majd egyes regiszterek bitjeit elszigetelt a toumlbbitől fuumlggetlen moacutedon aacutelliacutetgatnunk

6 Gombnyomaacutesok vizsgaacutelataEbben az alfejezetben olyan feladatot fogalmazunk meg a nyomoacutegombokkal kapcsolatban melynek megoldaacutesaacutehoz szuumlkseacuteg lesz az előző keacutet alfejezetben ismertetett utasiacutetaacutesokra

7 feladat

A panel nyomoacutegombjainak lenyomaacutesaacutera vilaacutegiacutetson egy-egy LED a panel LED-soraacutenak egyik ill maacutesik szeacuteleacuten Egyuumlttes megnyomaacutesukkor az oumlsszes LED vilaacutegiacutetson A LED-ek bekapcsolaacutesaacutet a gombnyomaacutesok pillanatnyi aacutellapota hataacuterozza meg [Code13]

A [6 feladat] megoldaacutesaacutenaacutel nem volt maacutes dolgunk mint hogy beraacutemoljuk a nyomoacutegomboknak megfelelő biteket a LED-ek bitjeibe Ez annak volt koumlszoumlnhető hogy mind a nyomoacutegombok mind a LED-ek inverz logikaacuteval dolgoznak azaz ha az ezeknek megfelelő bit 0 akkor vilaacutegiacutet egy LED ill van lenyomott aacutellapotban a nyomoacutegomb Most azonban enneacutel toumlbbre lesz szuumlkseacuteg Az algoritmus nem bonyolult folyamataacutebraacutera nincs is szuumlkseacuteg Code12 szimboacutelumait alapul veacuteve figyeljuumlk meg csupaacuten az alaacutebbi haacuterom sort mert ez lesz a [6 feladat] megoldaacutesaacutenak a lelke

CLR CORL Cbut1ORL Cbut2

Mi toumlrteacutenik itt Előszoumlr toumlroumlljuumlk a C bitet Utaacutena VAGY műveletet hajtunk veacutegre C-n szeacutepen sorban mindkeacutet gomb bitjeacutevel Ha mindkeacutet gomb le van nyomva (but1=but2=0) akkor a haacuterom sor veacutegrehajtaacutesa utaacuten C eacuterteacuteke 0 Ha csak az egyik gomb van lenyomva (valamelyikuumlk bitjeacutenek eacuterteacuteke 1) akkor a haacuterom sor veacutegrehajtaacutesa utaacuten C = 1 Ha egyik gomb sincs lenyomva akkor is ugyanezt kapjuk Laacutethatoacute tehaacutet hogy a kritikus esetet vagyis azt amikor mindkeacutet gombot lenyomtuk az jelzi ha a haacuterom sor veacutegrehajtaacutesa utaacuten C = 0 Eacutes ezzel a felteacutetellel maacuter meg tudunk fogalmazni elaacutegazaacutest A koacutedot ismeacutet teljes terjedelmeacuteben koumlzoumlljuumlk Vegyuumlk eacuteszre hogy a bitek szimboacutelumainak definiacutecioacuteja most maacutes helyen aacutell mint Code12-ben hiszen azt aacutelliacutetottuk hogy az ilyen sorok gyakorlatilag baacuterhol elhelyezkedhetnek a koacutedban

Code13asm$MOD842 Az ADUC842 szimboacutelumainak hasznaacutelataCSEG A koacutedszegmens kezdeteORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaled1 BIT P20 Az egyik szeacutelső LED szimboacutelumaled2 BIT P27 A maacutesik szeacutelső LED szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV Cbut1 Az 1 gomb bitjeacutenek mozgataacutesa C-beMOV led1C Aztaacuten C kirakaacutesa a led1 portbitreMOV Cbut2 A 2 gomb bitjeacutenek mozgataacutesa C-be

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

MOV led2C Aztaacuten C kirakaacutesa a led2 portbitreCLR C Toumlroumlljuumlk C-tORL Cbut1 VAGY műveletet hajtunk veacutegre a nyomoacutegombok keacutet bitjeacutevelORL Cbut2 Ha valamelyik gomb nincs lenyomva (azaz eacuterteacuteke 1) akkor a VAGY műveletek veacutegeredmeacutenye 1 Ha mindkeacutet gombot lenyomjuk (bitjeik eacuterteacuteke 0) akkor a VAGY műveletek veacutegeredmeacutenye 0JNC dupla Ugrunk ha mindkeacutet gomb le van nyomvaORL P201111110b Akaacutermi is volt eddig a LED-eken kikapcsoljuk a koumlzeacutepső hatot a keacutet szeacutelsőt nem baacutentjukJMP MAIN Ugraacutes vissza a program elejeacutereduplaMOV P20 Az oumlsszes LED bekapcsolaacutesaJMP MAIN Kezdjuumlk eloumllrőlEND

7 Leacutepteteacutes nyomoacutegombbalNyomoacutegombokat toumlbbnyire nem a nyomogataacutes oumlroumlmeacuteeacutert hasznaacutelunk hanem valamilyen funkcioacutet adunk nekik A koumlvetkező feladat egeacuteszen egyszerű kis alkalmazaacutest fogalmaz meg melyben egyetlen nyomoacutegombeacute lesz a főszerep

8 feladat

Az 1 nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Uacutej leacutepeacutes csak a gomb felengedeacutese eacutes uacutejboacuteli lenyomaacutesa utaacuten toumlrteacutenhet [Code14]

Ha veacutegiggondoljuk hogy mire lesz itt szuumlkseacuteguumlnk sejthetjuumlk hogy a gomb lenyomaacutesaacutenak teacutenyeacutet valahogyan roumlgziacutetenuumlnk kell eacutes uacutej leacutepeacutes csak akkor koumlvetkezhet be ha a gombot felengedtuumlk majd uacutejra lenyomtuk azaz a lenyomaacutes teacutenyeacutenek aacutellapota megszűnik majd uacutejra fennaacutell Ezt az aacutellapotjelzeacutest most a C bittel valoacutesiacutetjuk meg keacutesőbb tanulunk raacute jobban hasznaacutelhatoacute megoldaacutest is Magaacutehoz az elvhez azonban a C bit is toumlkeacuteletesen megfelel A megvaloacutesiacutetaacutes folyamataacutebraacuteja a [A (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute

91 aacutebra - A [8 feladat] (leacutepteteacutes nyomoacutegombbal) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A koacuted maga nem tuacutel hosszuacute a koumltelező direktiacutevaacutekat ismeacutet elhagyjuk

Code14asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesaCLR C A C bit toumlrleacutese Ebben a programban arra hasznaacuteljuk hogy jelezze a lenyomaacutes aacutellapotaacutetwaitJNB but1lenyom Ugrunk ha a gomb le van nyomvaCLR C Toumlroumlljuumlk C-t mert felengedtuumlk a gombotJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozlenyomJC wait Ha maacuter lenyomott aacutellapotban van a gomb akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB C Ha meacuteg nem volt lenyomva a gomb akkor most maacuter le van nyomva Jelezzuumlk ezt az aacutellapotot a C bitenMOV AP2 Eggyel odeacutebb leacuteptetjuumlk a LED-et aRL A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

Amikor nagy eacutelvezettel nyomogatjuk a gombot hogy a vilaacutegiacutetoacute LED laacutetszoacutelag szaladgaacuteljon koumlrbe-koumlrbe neacuteha eacuterdekes jelenseacuteget tapasztalunk A nyomoacutegomb mechanikai szerkezeteacutetől fuumlggően ugyanis sokszor nem csekeacutely valoacutesziacutenűseacuteggel előfordul az hogy a LED hirtelen kettőt ugrik egy helyett Eacutes ez nem programhiba A jelenseacuteg neve prellegeacutes A prellegeacutes neacutemet eredetű szoacute (prellen ndash csapoacutedik kocog pattog visszapattan) az elektronikaacuteban azt jelenti hogy valamely alkatreacutesz jellemzően kapcsoloacute vagy nyomoacutegomb nem stabilan vaacutelt aacutet egyik aacutellapotaacuteboacutel a maacutesikba hanem toumlbbszoumlr zaacuterja ill szakiacutetja meg az aacuteramkoumlrt Ez a jelenseacuteg a most keacutesziacutetett alkalmazaacutesunkban anomaacutelis viselkedeacutest ideacutezhet elő Nagyon fontos hogy a prellegeacutes lehetőseacutegeacutenek mindig tudataacuteban legyuumlnk eacutes amikor csak tehetjuumlk veacutedekezzuumlnk ellene Keacutesőbb arra is mutatunk peacuteldaacutet hogy ezt hogyan tehetjuumlk meg

8 Bitvaacuteltozoacutek hasznaacutelataA [Nyomoacutegombok a panelon] fejezet bevezetőjeacuteben bemutattuk hogy hogyan lehet szimboacutelumokat rendelni konkreacutet bitekhez mint nyomoacutegombokhoz eacutes portbitekhez A [7 feladat] megoldaacutesaacutenaacutel a C bitet hasznaacuteltuk aacuteltalaacutenos ceacuteluacute keacutetaacutellapotuacute vaacuteltozoacutenak azaz bitvaacuteltozoacutenak Ott meacuteg elegendő volt egynek a hasznaacutelata Ez azonban csak ritkaacuten tarthatoacute igen sokszor egyneacutel joacuteval toumlbb bitvaacuteltozoacutera lesz szuumlkseacuteguumlnk amelyek maacuter nem a C bitet fogjaacutek terhelni

Az ADuC 842-es architektuacutera memoacuteriaacuteja 0 lapjaacutenak első 128 baacutejtjaacutet Lower RAM-nak azaz alsoacute RAM-nak hiacutevjaacutek Ez a memoacuteriateruumllet kuumlloumlnoumlsen eacuterdekes Az elektronikus tankoumlnyvben toumlbbszoumlr elővesszuumlk a memoacuteria speciaacutelis teruumlleteinek teacutemakoumlreacutet most azonban csak azt a teruumlletet taacutergyaljuk amelyik bitenkeacutent ciacutemezhető laacutesd [A Lower RAM bitenkeacutent ciacutemezhető teruumllete] aacutebra

92 aacutebra - A Lower RAM bitenkeacutent ciacutemezhető teruumllete

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A bitenkeacutent ciacutemezhető teruumllet memoacuteriaciacutemei 20h-toacutel 2Fh-ig tartanak A 20h memoacuteriaciacutemen pl egy nyolcbites baacutejt talaacutelhatoacute eacuteppen uacutegy mint maacuteshol Megfelelő ciacutemzeacutessel ez a baacutejt teljes egeacuteszeacuteben feluumlliacuterhatoacute Azonban ezt a kincset eacuterő memoacuteriateruumlletet nem iacutegy szokaacutes hasznaacutelni hiszen az ADuC 842-es architektuacuteraacuteja lehetőveacute teszi hogy a 20h-toacutel 2Fh-ig terjedő ciacutemeken leacutevő baacutejtokat bitenkeacutent ciacutemezhessuumlk Vagyis az emliacutetett 20h ciacutemen elhelyezkedő baacutejt minden egyes bitjeacutehez kuumlloumln hozzaacutefeacuterhetuumlnk eacutes felhasznaacutelhatjuk őket a programjainkban Peacuteldaacuteul jelzőbitkeacutent bitvaacuteltozoacutekeacutent Az alaacutebbi lista a bitenkeacutent ciacutemezhető memoacuteriateruumllet hozzaacuterendeleacuteseacutere mutat peacuteldaacutekat

bit0 BIT 00h

bit1 BIT 01h

gomb BIT 1Fh

marker BIT 5Bh

last_bit BIT 7Fh

Ezek utaacuten baacutermelyik bitre vonatkozoacute utasiacutetaacutesba baacutetran beiacuterhatnaacutenk a bit aacuteltalaacutenos megnevezeacutes (laacutesd [Logikai műveletek bitekkel] eacutes [Elaacutegazaacutesok bitek alapjaacuten] alfejezet) helyeacutere a fenti listaacuteban megadott neveket

A bitvaacuteltozoacutek megismereacutese utaacuten megfogalmazzuk a [9 feladat]ot amely a [8 feladat] tovaacutebbfejleszteacutese mindkeacutet iraacutenyra

9 feladat

A keacutet nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Az 1 gombbal balra a 2 gombbal jobbra toumlrteacutenjen a leacutepteteacutes Uacutej leacutepeacuteshez a gombok felengedeacutese eacutes uacutejboacuteli lenyomaacutesa szuumlkseacuteges [Code15]

Enneacutel a feladatnaacutel uacutegy tűnik hogy nem lesz eleacuteg egyetlen jelzőbit De ez nem jelent probleacutemaacutet hiszen maacuter tudjuk hogyan hasznaacutelhatunk bitvaacuteltozoacutekat A [A (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatjuk a [9 feladat] folyamataacutebraacutejaacutet amelyen a kritikus bitvaacuteltozoacutek a koumlvetkezők le1 le2 Ha ezek a jelzőbitek magasak akkor az 1 ill 2 gomb lenyomott aacutellapotban van Minden tovaacutebbi uumlgylet uacutegy toumlrteacutenik mint a [8 feladat] megoldaacutesaacutenaacutel

93 aacutebra - A [9 feladat] (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

A [A (bitvaacuteltozoacutek hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten szereplő folyamataacutebra baacuter terjedelmesebb mint az eddigiek a koacuted nem lesz ennyire ijesztő

Code15asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumale1 BIT 00h Az 1 gomb lenyomott aacutellapotaacutet jelző bitvaacuteltozoacutele2 BIT 01h A 2 gomb lenyomott aacutellapotaacutet jelző bitvaacuteltozoacute

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

ORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesaCLR le1 A gombok lenyomott aacutellapotaacutet jelzőCLR le2 bitvaacuteltozoacutek toumlrleacutesewaitJNB but1balra Ugrunk ha az 1 gomb le van nyomvaJNB but2jobbra Ugrunk ha a 2 gomb le van nyomvaCLR le1 Ha egyik gomb sincs lenyomva toumlroumlljuumlk azokCLR le2 jelzőbitjeitJMP wait Uacutejra gombnyomaacutesra vaacuterunkbalraJB le1wait Ha baacutermelyik gomb lenyomott aacutellapotban vanJB le2wait akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB le1 Ha meacuteg nem volt lenyomva az 1 gomb akkor most maacuter le van nyomva Jelezzuumlk ez az aacutellapototMOV AP2 Eggyel balra leacuteptetjuumlk a LED-et a RL A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozjobbraJB le1wait Ha baacutermelyik gomb lenyomott aacutellapotban vanJB le2wait akkor visszaugrunk arra vaacuterni haacutetha felengedjuumlkSETB le2 Ha meacuteg nem volt lenyomva a 2 gomb akkor most maacuter le van nyomva Jelezzuumlk ez az aacutellapototMOV AP2 Eggyel jobbra leacuteptetjuumlk a LED-et a RR A bitforgataacutes művelettelMOV P2AJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

A prellegeacutes jelenseacutege enneacutel az alkalmazaacutesnaacutel eacuteppen uacutegy megfigyelhető mint Code14-neacutel Eacuteppen uacutegy tudomaacutesul vettuumlk eacutes eacuteppen uacutegy nem tettuumlnk ellene semmit mint előzőleg Tudaacutesunk jelenlegi szintjeacuten meacuteg pironkodva tovaacutebbleacutephetuumlnk de komoly alkalmazaacutesoknaacutel ez maacuter nem maradhat ennyiben

9 A prellegeacutes kikuumlszoumlboumlleacutese vaacuterakozaacutessalEbben az alfejezetben a feladat legyen hasonloacute a [9 feladat]hoz de moacutedosiacutetsuk azt egy kicsikeacutet Most ne az legyen a leacutenyeg hogy fel kelljen engedni a nyomoacutegombokat a koumlvetkező leacutepeacuteshez hanem az hogy bizonyos időnek el kelljen telnie ahhoz hogy uacutejboacuteli kieacuterteacutekeleacutes koumlvetkezzeacutek be

10 feladat

A keacutet nyomoacutegombbal leacuteptessuumlnk egyetlen vilaacutegiacutetoacute LED-et koumlrbe-koumlrbe a LED-soron Az 1 gombbal balra a 2 gombbal jobbra toumlrteacutenik a leacutepteteacutes A gombok uacutejboacuteli kieacuterteacutekeleacuteseacutehez neacutemi időkeacuteslelteteacutesen keresztuumll vezessen az uacutet [Code16]

Enneacutel a feladatnaacutel nem lesz szuumlkseacuteguumlnk bitvaacuteltozoacutekra viszont uacutejra előhuacutezzuk a joacutel bevaacutelt időhuacutezoacute szubrutinunkat (laacutesd [Parameacuteteraacutetadaacutes szubrutinnak] alfejezet) Amikor nyomoacutegomb lenyomaacutesaacutet eacuterzeacutekeli a program akkor elveacutegzi azt a műveletet amit kell (jelen esetben a bitforgataacutest) utaacutena pedig neacutehaacuteny tized maacutesodpercig vaacuter Iacutegy a prellegeacutest kikuumlszoumlboumlljuumlk viszont a vaacuterakozaacutest jelentő idő holt idő mert ott tovaacutebbi beavatkozaacutesra esemeacutenykezeleacutesre egyelőre nem lesz lehetőseacuteguumlnk Egyszerűbb esetekben ez nem is baj de kifinomultabb igeacutenyek eacutes feladatok eseteacuteben ez a moacutedszer nem engedhető meg Amikor eleacuteruumlnk a megszakiacutetaacutesok taacutergyalaacutesaacuteig erre a helyzetre is mutatni fogunk megoldaacutest A gombnyomaacutes eacuteszleleacutese utaacuteni cselekveacutes eacutes vaacuterakozaacutes egyszerűbb mint az előző keacutet feladat megoldaacutesaacutenak gondolatmenete iacutegy folyamataacutebra megadaacutesa sem szuumlkseacuteges A koacuted koumlnnyen eacutertelmezhető Eacutes annak is nyilvaacutenvaloacutenak kell lennie hogy enneacutel a megoldaacutesnaacutel akaacuter raacute is tenyerelhetuumlnk a nyomoacutegombokra akkor is leacutepkedni fog koumlrbe a LED Ha mindkeacutet gomb le van nyomva akkor viszont visszaugratjuk a vezeacuterleacutest a vaacuterakozaacuteshoz A leacutepeacutesek maximaacutelis sebesseacutegeacutet egyeacutebkeacutent eacuteppen a prellegeacutest kikuumlszoumlboumllő vaacuterakozaacutes hataacuterozza meg Ezt a szubrutint eacuteppen uacutegy nem tuumlntetjuumlk foumll mint a koraacutebbi programoknaacutel mert az nem vaacuteltozik meg most is ugyanazt hasznaacuteljuk (DELAY)

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

Code16asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezbut1 BIT P32 Az 1 gomb szimboacutelumabut1 BIT P33 A 2 gomb szimboacutelumaORG 0060h Itt kezdődik a memoacuteriaacuteban a koacuted eacuterdemi reacuteszeMAINMOV P211111110b A legszeacutelső LED bekapcsolaacutesawaitJNB but1balra Ugrunk ha az 1 gomb le van nyomvaJNB but2jobbra Ugrunk ha a 2 gomb le van nyomvaJMP wait Uacutejra gombnyomaacutesra vaacuterunkbalraJNB but2wait Ha a 2 gomb is le van nyomva (azaz itt eacuteppen mind a kettő) akkor visszaugrunk a vaacuterakozaacuteshozMOV AP2 Eggyel balra leacuteptetjuumlk a LED-et a RL A bitforgataacutes művelettelMOV P2AMOV A10 01 s időhuacutezaacutes joumln aCALL DELAY szubrutinnalJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehozjobbraJNB but1wait Ha az 1 gomb is le van nyomva (azaz itt eacuteppen mind a kettő) akkor visszaugrunk a vaacuterakozaacuteshozMOV AP2 Eggyel jobbra leacuteptetjuumlk a LED-et a RR A bitforgataacutes művelettelMOV P2AMOV A10 01 s időhuacutezaacutes joumln aCALL DELAY szubrutinnalJMP wait Ugrunk vissza a gomb helyzeteacutenek vizsgaacutelataacutehoz

10 A teljes alsoacute RAMAz alsoacute RAM-roacutel maacuter foumllvillantottunk neacutehaacuteny reacuteszletet a [Bitvaacuteltozoacutek hasznaacutelata] alfejezetben Ott kizaacuteroacutelag a bitenkeacutent ciacutemezhető teruumlletet taacutergyaltuk Az alsoacute RAM-nak azonban van meacuteg keacutet fontos teruumllete Az első ilyen teruumllet ciacutemei 00h-toacutel 1Fh-ig tartanak azaz oumlsszesen 32 memoacuteriarekeszről van szoacute Ezen a teruumlleten helyezkednek el a memoacuteriaacuteban az R regiszterek Eacutes az a helyzet hogy ezekből a regiszterekből oumlsszesen neacutegy peacuteldaacuteny leacutetezik nyolcasaacuteval rendezve Olyan ez mintha nyolcfioacutekos szekreacutenyből lenne oumlsszesen neacutegy darabunk a szobaacutenkban Az R regiszterek ciacutemeit a [Az alsoacute RAM neacutegy regiszterbankja] aacutebra mutatja Bal szeacutelen a decimaacutelis ciacutemek mellettuumlk a hexadecimaacutelis eacuterteacutekek majd a regiszterek nevei

94 aacutebra - Az alsoacute RAM neacutegy regiszterbankja

A neacutegy darab nyolcfioacutekos szekreacutenyuumlnkkel viszont lesz egy kis baj Mindig csak egyiket hasznaacutelhatjuk A 80518052-es processzormagnaacutel ez azt jelenti hogy a neacutegy regiszterbank koumlzuumll mindig pontosan egy lesz aktiacutev azaz ha peacuteldaacuteul kiadjuk a MOV AR3 utasiacutetaacutest akkor az akkumulaacutetorba vagy a 03h vagy a 0Bh vagy az 13h vagy az 1Bh ciacutemről toumlltődik be a tartalom vagyis az eacuteppen aktuaacutelis R3 regiszter tartalma A regiszterbank kivaacutelasztaacutesa a PSW (Program Status Word ndash programaacutellapot) SFR-rel toumlrteacutenik Default esetben a 0 regiszterbank aktiacutev Ebben a tankoumlnyvben a tovaacutebbiakban nem vaacuteltunk regiszterbankot a default beaacutelliacutetaacutest hasznaacuteljuk A PSW (Program Status Word) SFR viszont annyira fontos hogy teljes tartalmaacutet megadjuk (laacutesd [A PSW SFR parameacuteterei]) eacutes nem csak hivatkozunk az ADuC 842-es leiacuteraacutesaacutera [1 p 21 Table 5]

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

95 taacuteblaacutezat - A PSW SFR parameacuteterei

PSW Program Status Word

Programaacutellapot

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Angol neacutev Magyar neacutev

7 CY Carry Flag Aacutetviteli bit

6 AC Auxiliary Carry Flag

Kiegeacutesziacutető aacutetviteli bit

5 F0 General-Purpose Flag

Aacuteltalaacutenos ceacuteluacute jelzőbit

4 RS1 Register Bank Select Bits

Regiszterbankot kivaacutelasztoacute bitek

3 RS0 RS1

0

0

1

1

RS0

0

1

0

1

Bank

0

1

2

3

2 OV Overflow Flag Tuacutelcsordulaacutes-bit

1 F1 General-Purpose Flag

Aacuteltalaacutenos ceacuteluacute jelzőbit

0 P Parity Bit Paritaacutesbit

A [A Lower RAM bitenkeacutent ciacutemezhető teruumllete] eacutes [Az alsoacute RAM neacutegy regiszterbankja] aacutebra alapjaacuten laacutethatoacute hogy a 128 baacutejt meacuteretű alsoacute RAM-ban 00h-toacutel 1Fh-ig a regiszterbankok helyezkednek el 20h-toacutel 2Fh-ig pedig a bitenkeacutent ciacutemezhető teruumllet De mi van 30h-toacutel 7Fh-ig Ezt a teruumlletet aacuteltalaacutenos ceacuteluacute teruumlletnek hiacutevjuk laacutesd [Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete] aacutebra

95 aacutebra - Az alsoacute RAM aacuteltalaacutenos ceacuteluacute teruumllete

Ez a teruumllet elvileg szabad arra hasznaacuteljuk amire akarjuk Kivaacuteloacutean alkalmas baacutejtmeacuteretű vaacuteltozoacutek definiaacutelaacutesaacutera csak most egy maacutesik a DATA direktiacutevaacutet kell hasznaacutelnunk az assemblerben peacuteldaacuteul

byte0 DATA 030hbyte1 DATA 031h

Created by XMLmind XSL-FO Converter

Nyomoacutegombok a panelon

last_byte DATA 07Fh

Iacutegy tehaacutet maacuter nem csak bitvaacuteltozoacuteink hanem baacutejtvaacuteltozoacuteink is lehetnek meacuteghozzaacute az alsoacute RAM-ban oumlsszesen 80 darab Ez talaacuten nem tűnik soknak elsőre de laacutetni fogjuk hogy ezzel a kis szabad hellyel is mennyi mindent meg lehet oldani

Created by XMLmind XSL-FO Converter

10 fejezet - A belső oacutera hasznaacutelataAz ADuC 842-es architektuacuteraacuteja toumlbb időziacutetőtszaacutemlaacuteloacutet tartalmaz eacutes tartalmaz egy belső oacuteraacutet is Ebben a fejezetben az oacutera hasznaacutelataacuteval fogunk megismerkedni Ennek neve angolul Time Interval Counter (TIC) ami magyarul időintervallum-szaacutemlaacuteloacutet jelent Az oacuteraacutehoz seregnyi SFR tartozik iacutegy előszoumlr is meg kell ismerkednuumlnk ezekkel Az időegyseacutegekhez tartozoacute SFR-eket a [Az időegyseacutegek SFR-jeinek parameacuteterei] foglalja oumlssze [1 p 56]

101 taacuteblaacutezat - Az időegyseacutegek SFR-jeinek parameacuteterei

SFR Angol neacutev Eacuterveacutenyes eacuterteacutekek Funkcioacute Default eacuterteacutek bekapcsolaacuteskor

HTHSEC Hundredths Seconds Time Register

0-127 A regiszter eacuterteacuteke 1-egyel nő minden 1128-maacutesodperces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a SEC regiszter noumlvekszik

00h

SEC Seconds Time Register

0-59 A regiszter eacuterteacuteke 1-egyel nő minden 1-maacutesodperces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a MIN regiszter noumlvekszik

00h

MIN Minutes Time Register 0-59 A regiszter eacuterteacuteke 1-egyel nő minden 1-perces időintervallum letelte utaacuten Tuacutelcsordulaacutesakor a HOUR regiszter noumlvekszik

00h

HOUR Hours Time Register 0-23 A regiszter eacuterteacuteke 1-egyel nő minden 60-perces időintervallum letelte utaacuten

00h

Az időegyseacutegek regiszterei gyakorlatilag belső uumltemezeacutes szerint kezelt vaacuteltozoacuteknak tekinthetők Az oacuteraacutet azonban be is kell kapcsolni azt meg lehet aacutelliacutetani eacutes meacuteg sok eacuterdekes dologra lehet raacutebiacuterni A legfontosabb az hogy el tudjuk indiacutetani eacutes meg tudjuk aacutelliacutetani Ehhez (eacutes a toumlbbi eacuterdekes dologhoz) a TIMECON SFR ismerete szuumlkseacuteges A [A TIMECON SFR parameacuteterei] a TIMECON SFR aacuteltalaacutenos parameacutetereit foglalja oumlssze Keacutesőbb a megszakiacutetaacutesok taacutergyalaacutesaacutenaacutel reacuteszletesebb ismerteteacutest koumlzluumlnk ([A TIMECON SFR parameacuteterei reacuteszletesebben]) A leacutenyeg most csupaacuten az hogy az oacuteraacutet a [Az időegyseacutegek SFR-jeinek parameacuteterei]ban ismertetett vaacuteltozoacutek kezdeti eacuterteacutekeacutenek beaacutelliacutetaacutesa utaacuten a TIMECON SFR 0 bitjeacutenek magasra aacutelliacutetaacutesaacuteval indiacutethatjuk el Ennek a bitnek a toumlrleacuteseacutevel az oacutera megaacutell Nagyon leacutenyeges hogy az oacutera az uacutejboacuteli indiacutetaacuteskor nem a megaacutelliacutetaacutesnaacutel megfigyelhető időeacuterteacutekről ketyeg tovaacutebb hanem a [Az időegyseacutegek SFR-jeinek parameacuteterei]ban ismertetett vaacuteltozoacutek legutoacutebbi beaacutelliacutetaacutesai szerint indul uacutejra [1 p 55 Table 24] Iacutegy ha folytatni akarjuk az időmeacutereacutest akkor az oacutera megaacutelliacutetaacutesakor el kell mentenuumlnk az időegyseacutegek vaacuteltozoacuteinak tartalmaacutet majd uacutejraindiacutetaacutes előtt uacutejra be kell toumlltenuumlnk azokat Az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban az oacutera regisztereinek ismerteteacuteseacuteneacutel foumllhiacutevjaacutek a figyelmet arra hogy bdquoelegendő időt kell hagyni az oacutera regisztereire vonatkozoacute utasiacutetaacutesok koumlzoumlttrdquo [1 p 54] Ez a megfogalmazaacutes eleacuteg koumldoumls de proacutebaacuteljuk meg eacutertelmezni Arroacutel van szoacute hogy

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

az intervallumszaacutemlaacuteloacutet egy 32 kHz-es kuumllső kristaacutely hajtja eacutes ez az oacuterajel vonatkozik az oacutera regisztereinek hozzaacutefeacutereacuteseacutehez is Iacutegy ha joacuteval nagyobb frekvenciaacuteval fut a processzorunk akkor egyszerűen nem lesz eleacuteg idő a regisztereket foumlluumlliacuterni eacutes anomaacutelis viselkedeacutesbe torkollik a program futaacutesa Erre megfelelő gyoacutegyiacuter lehet ha beszuacuterunk a programba egy roumlvid vaacuterakozaacutest Peacuteldaacuteul a NOP utasiacutetaacutest hajtjuk veacutegre neacutehaacutenyszor egy ciklussal A leacutenyeg az hogy ha a belső oacuteraacutet hasznaacuteljuk akkor mindig kuumlloumlnoumls figyelemmel teszteljuumlk a programunk műkoumldeacuteseacutet eacutes legyuumlnk felkeacuteszuumllve a fent emliacutetett hataacutes jelentkezeacuteseacutere eacutes annak kikuumlszoumlboumlleacuteseacutere

102 taacuteblaacutezat - A TIMECON SFR parameacuteterei

TIMECON TIC Control Register

Az időintervallum-szaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Az oacutera a 0 bit magasra aacutelliacutetaacutesaacuteval indul toumlrleacuteseacutevel megaacutell

Az oacutera indiacutetaacutesa logikai maszkolaacutessal a koumlvetkező moacutedon kivitelezhető

ORL TIMECON00000001b

Hasonloacute technikaacuteval az oacutera leaacutelliacutetaacutesa iacutegy toumlrteacutenhet

ANL TIMECON11111110b

Mindezek utaacuten fogalmazzunk meg egy nagyon egyszerű feladatot az oacuteraacuteval (TIC) kapcsolatban

11 feladat

Nullaacutezzuk majd Indiacutetsuk el a belső oacuteraacutet eacutes jelezzuumlk ki a maacutesodperceket a panel LED-soraacuten [Code17]

A feladat annyira egyszerű hogy ehhez joacuteformaacuten meacuteg magyaraacutezat is foumlloumlsleges Mivel a maacutesodperceket kell kijeleznuumlnk elegendő a SEC eacutes HTHSEC regisztreket nullaacuteznunk hiszen a maacutesik kettő időregiszter konkreacutet eacuterteacuteke esetuumlnkben teljesen melleacutekes

Code17asmMAINMOV TIMECON0 Mindenfeacutele oacuteraparameacutetert lenullaacutezunkMOV HTHSEC0 A 1128 maacutesodpercek nullaacutezaacutesaMOV SEC0 A maacutesodpercek nullaacutezaacutesaORL TIMECON00000001b Elindiacutetjuk az oacuteraacutet Logikai maszkolaacutessal magasra aacutelliacutetjuk a 0 bitetdisplayMOV ASEC A-ba toumlltjuumlk a maacutesodperceketCPL A Invertaacuteljuk az eacuterteacuteket a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-eken a maacutesodperceketJMP display Folytatjuk a kijelzeacutest Uacutejra eacutes uacutejra

Moacutedosiacutetsuk uacutegy a [11 feladat]ot hogy az 1 gomb megnyomaacutesaacutera megaacutelljon az oacutera a 2 gomb megnyomaacutesaacutera pedig folytatoacutedjeacutek az idő meacutereacutese

12 feladat

Indiacutetsuk el a belső oacuteraacutet 000000-roacutel Jelezzuumlk ki a maacutesodperceket a panel LED-soraacuten Az 1 gomb megnyomaacutesaacutera aacutelljon meg az oacutera a 2 gomb megnyomaacutesaacutera pedig induljon tovaacutebb onneacutet ahol megaacutellt [Code18]

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

Ahogyan emliacutetettuumlk az oacutera uacutejraindiacutetaacutesakor be kell toumlltenuumlnk a megfelelő SFR-ekbe azokat az eacuterteacutekeket amelyeket az oacutera megaacutelliacutetaacutesakor remeacutelhetőleg elmentettuumlnk Ehhez nevet adunk egy-egy memoacuteriarekesznek az alsoacute RAM-ban uacutegy ahogyan azt a [A teljes alsoacute RAM] alfejezetben bemutattuk A koacuted maga nem sokkal lesz bonyolultabb csupaacuten kicsit bővuumll Ennek elleneacutere ehhez a vaacuteltozathoz folyamataacutebraacutet is keacutesziacutetuumlnk (laacutesd [A (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebra)

101 aacutebra - A [12 feladat] (belső oacutera hasznaacutelata) megoldaacutesi elveacutenek folyamataacutebraacuteja

Code18asmMHOUR DATA 030h A HOUR eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMMIN DATA 031h A MIN eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMSEC DATA 032h A SEC eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezMHTHSEC DATA 033h A HTHSEC eacuterteacutekeacutenek vaacuteltozoacuteja a menteacuteshezbut1 BIT P32 Az 1 gomb szimboacutelumabut2 BIT P33 A 2 gomb szimboacutelumaMAINMOV TIMECON0 Mindenfeacutele oacuteraparameacutetert lenullaacutezunkMOV HTHSEC0 A 1128 maacutesodpercek nullaacutezaacutesaMOV SEC0 A maacutesodpercek nullaacutezaacutesaMOV MIN0 A percek nullaacutezaacutesaMOV HOUR0 Az oacuteraacutek nullaacutezaacutesaORL TIMECON00000001b Elindiacutetjuk az oacuteraacutet Logikai maszkolaacutessal magasra aacutelliacutetjuk a 0 bitetdisplay

Created by XMLmind XSL-FO Converter

A belső oacutera hasznaacutelata

MOV ASEC A-ba toumlltjuumlk a maacutesodperceketCPL A Invertaacuteljuk az eacuterteacuteket a kijelzeacuteshezMOV P2A Kijelezzuumlk a LED-eken a maacutesodperceketJNB but1stop Leaacutellunk ha megnyomtuk az 1 gombotJMP display Folytatjuk a kijelzeacutest Uacutejra eacutes uacutejrastopMOV MHTHSECHTHSEC Az 1128 maacutesodpercek elmenteacuteseMOV MSECSEC A maacutesodpercek elmenteacuteseMOV MMINMIN A percek elmenteacuteseMOV MHOURHOUR Az oacuteraacutek elmenteacuteseANL TIMECON11111110b A TIMECON regiszter 0 bitjeacutenek toumlrleacutese azaz megaacutelliacutetjuk az oacuteraacutetJB but2$ Vaacuterjuk a 2 gomb lenyomaacutesaacutetMOV HTHSECMHTHSEC Az 1128 maacutesodpercek visszatoumllteacuteseMOV SECMSEC A maacutesodpercek visszatoumllteacuteseMOV MINMMIN A percek visszatoumllteacuteseMOV HOURMHOUR Az oacuteraacutek visszatoumllteacuteseORL TIMECON00000001b A TIMECON regiszter 0 bitjeacutenek 1-re aacutelliacutetaacutesa azaz (uacutejra) elindiacutetjuk az oacuteraacutetJMP display Ugrunk vissza a kijelzeacuteshez

Veacutegezetuumll neacutezzuumlk meg kiacutevaacutencsisaacutegboacutel hogy igaz-e az hogy ha nem toumlltjuumlk vissza az oacutera uacutejraindiacutetaacutesa előtt az elmentett regiszterek eacuterteacutekeacutet akkor az teacutenyleg az utoljaacutera beaacutelliacutetott eacuterteacutekről indul Ehhez a fenti Code18-boacutel szedjuumlk ki azokat a sorokat amelyek a regiszterek elmenteacuteseacuteeacutert ill visszatoumllteacuteseacuteeacutert felelősek beleeacutertve persze a helyfoglalaacutest is a vaacuteltozoacuteknak Ehhez nem melleacutekeluumlnk kuumlloumln koacutedot a tankoumlnyvben de a moacutedosiacutetott programot Code19 neacuteven megtalaacutelhatjuk a koacutedkoumlnyvtaacuterban A hataacutes joacutel laacutethatoacute

Created by XMLmind XSL-FO Converter

11 fejezet - MegszakiacutetaacutesokA programozaacutest eacuteppen tanuloacute lelkes emberek a megszakiacutetaacutes szoacute hallataacuten aacuteltalaacuteban valami feacutelelmetes eacutes varaacutezslatos dologra gondolnak Attoacutel a perctől kezdve azonban hogy megeacutertik mi az mindez a vilaacuteg legtermeacuteszetesebb dolgaacutevaacute vaacutelik ami neacutelkuumll maacuter nem is lenne joacute az eacutelet (Ez egyeacutebkeacutent teacutenyleg iacutegy van)

Miről is van szoacute Keacutepzeljuumlk el azt az esetet amikor levelet vaacuterunk Valami nagyon fontos levelet Eacutes ilyen vagy olyan okok miatt a vilaacutegeacutert sem akarjuk elmulasztani annak szemeacutelyes aacutetveacuteteleacutet Mit tehetuumlnk ilyenkor

Tegyuumlk fel hogy nincsen csengőnk vagy van de nem műkoumldik Ilyenkor megtehetjuumlk azt hogy kiaacutellunk az ajtoacutenkba eacutes addig el nem megyuumlnk onneacutet amiacuteg meg nem joumln a postaacutes Kedvezőtlen esetben persze eacutehen halunk mert nem joumln a postaacutes Az elv tovaacutebbfejleszteacutese az hogy mondjuk 10 percenkeacutent 1 percig lessuumlk a postaacutest az ajtoacuteban aztaacuten visszamegyuumlnk a dolgunkra Ez maacuter sokszor műkoumldőkeacutepes oumltletnek fog bizonyulni Az ilyen elven toumlrteacutenő esemeacutenykezeleacutest jelfogaacutest pollozaacutesnak (poll angol ndash elnyer kap) hiacutevjaacutek a szaacutemiacutetaacutestechnikaacuteban Ennek finomiacutetott moacutedszere teacutenylegesen gyakran hasznaacutelatos

Tegyuumlk fel hogy van csengőnk A postaacutest lesni nincs időnk mert mondjuk a deacutel-afrikai beacutelyegeinket rendezgetjuumlk a baraacutetunkkal froumlccsoumlzuumlnk vagy eacuteppen puskaport keacutesziacutetuumlnk stb Nos ha megjoumln a postaacutes megnyomja a csengőt Ekkor megszakiacutetjuk addigi cselekveacutesuumlnket kimegyuumlnk alaacuteiacuterjuk a cetlit aztaacuten visszamegyuumlnk eacutes ott folytatjuk a teveacutekenyseacuteguumlnket ahol abbahagytuk Az ilyesfeacutele esemeacutenykezeleacutest hiacutevjuk a szaacutemiacutetaacutestechnikaacuteban megszakiacutetaacutesnak Ez az esemeacutenykezelő moacutedszer a valoacutesaacutegban aacuteltalaacuteban hateacutekonyabb mint a pollozaacutes

1 Az ADuC 842 megszakiacutetaacutesaiAz elektronikus tankoumlnyvben nem fogjuk az oumlsszes megszakiacutetaacutest peacuteldaacutekkal illusztraacutelva taacutergyalni De joacute neacutehaacutenyat felhasznaacutelunk koumlzuumlluumlk eacutes azokat termeacuteszetesen igen A megszakiacutetaacutes (interrupt angol latin eredetű ndash megszakiacutetaacutes) fogalom a szaacutemiacutetaacutestechnikaacuteban azt jelenti hogy az addig zajloacute programfutaacutes valamilyen esemeacuteny bekoumlvetkezte miatt felfuumlggesztődik eacutes a vezeacuterleacutes maacuteshovaacute keruumll ahonnan az esemeacuteny lekezeleacutese utaacuten aacuteltalaacuteban visszateacuter a vezeacuterleacutes az eredeti helyeacutere A megszakiacutetaacutesok kezeleacutese azt az eacuterzetet kelti sokszor hogy multitasking-roacutel van szoacute vagyis toumlbb folyamat paacuterhuzamos kezeleacuteseacuteről Ez azonban csak illuacutezioacute a 80518052-es mag egyszerre csak egy dolgot tud veacutegezni Ezt azonban sokszor annyira gyorsan teszi hogy toumlbb szakaszosan kezelt esemeacuteny eacutes veacutegrehajtaacutes csakugyan azt az illuacutezioacutet kelti mintha multitasking-roacutel lenne szoacute

Mi toumlrteacutenik egy megszakiacutetaacutesnaacutel A processzor elmenti a programszaacutemlaacuteloacute tartalmaacutet a verembe majd a megszakiacutetaacutes tiacutepusaacutenak fuumlggveacutenyeacuteben az adott megszakiacutetaacutes vektoraacutenak ciacutemeacutere ugrik a vezeacuterleacutes Neacutezzuumlk reacuteszletesen hogy mit jelentenek ezek a fogalmak

A verem sajaacutetos szerkezetű taacuteroloacute a szaacutemiacutetaacutestechnikaacuteban LIFO-taacuteroloacutenak is hiacutevjaacutek mert az utolsoacutenak belerakott elemet lehet kivenni elsőkeacutent Az angol betűszoacute is erre utal az eredeti kifejezeacutes last in ndash first out azaz utolsoacutenak be elsőnek ki Eacutertelmeacuteben ugyanezt jelenti a FILO betűszoacute is first in ndash last out azaz elsőnek be utolsoacutenak ki A verem szoacute szeacutepen kifejezi a taacuteroloacute jellegeacutet baacuter az eredeti angol szoacute a stack valoacutejaacuteban rakaacutest halmot jelent Kicsit vidaacutemabb szemleacutelettel eacutelve a veremtaacuteroloacute uacutegy műkoumldik mint amikor egy teacuterdzokniba gyoumlmoumlszoumlluumlnk biliaacuterdgolyoacutekat Nyilvaacuten azt tudjuk előszoumlr kivenni amelyiket utolsoacutekeacutent dugtuk bele a zokniba

A verem a szokvaacutenyos memoacuteriaacutek eseteacuteben meghataacuterozott memoacuteriateruumlletet jelent Azt hogy hovaacute keruumll be a koumlvetkező teacutetel a veremmutatoacute hataacuterozza meg A 80518052-es processzormag eseteacuten indulaacuteskor a verem a [A teljes alsoacute RAM] alfejezetben bemutatott alsoacute RAM 08h ciacutemeacuten kezdődik vagyis az 1 regiszterbanknaacutel Iacutegy tehaacutet nagyon vigyaacutezzunk arra hogy mikeacutent baacutenunk a regiszterbankokkal ha ezeket mind hasznaacutelni akarjuk akkor a verem helyeacutet aacutet kell definiaacutelnunk Ennek moacutedjaacuteroacutel azonban ebben a tankoumlnyvben nem eacutertekezuumlnk mert a default verem meacuterete is bőven eleacuteg lesz szaacutemunkra A veremmutatoacutet keacutet SFR tartalmazza most csak megemliacutetjuumlk hogy ezek SP eacutes SPH

A megszakiacutetaacutesvektorok ciacutemei a koacutedmemoacuteria legelejeacuten helyezkednek el Ezt a teacutenyt maacuter megemliacutetettuumlk a Code01 kommentjei koumlzoumltt A 0000h ciacutemre indulaacutesnaacutel eacutes reset-kor ugrik a program vezeacuterleacutese Kuumllső esemeacuteny bekoumlvetkezeacutesekor a 0003h vagy a 0013h ciacutemre Időziacutetőkszaacutemlaacuteloacutek tuacutelcsordulaacutesakor a 000Bh vagy 001Bh ciacutemre A soros porti kommunikaacutecioacute aacuteltal generaacutelt megszakiacutetaacuteskor a 0023h ciacutemre Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacuteskor a 0053h ciacutemre Az ADuC 842-es meacuteg toumlbb kuumlloumlnleges megszakiacutetaacutest keacutepes kezelni

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

itt csak azokat soroltuk foumll hamarjaacuteban melyekkel reacuteszletesen foglalkozunk a tankoumlnyvben A megszakiacutetaacutesvektorokat azeacutert hiacutevjaacutek vektornak mert ezekről a ciacutemekről jellemzően tovaacutebb kell ugratnunk a programot hiszen a megszakiacutetaacutesvektorokhoz tartozoacute ciacutemek igencsak koumlzel vannak egymaacuteshoz a koacutedmemoacuteriaacuteban paacuter utasiacutetaacutesnaacutel hosszabb koacutedot nem lehet koumlzeacutejuumlk iacuterni Iacutegy ezek a vektorok teacutenylegesen mutatnak valahovaacute

A megszakiacutetaacutesok taacutergyalaacutesaacutenaacutel oacutehatatlanul előjoumln a regiszterveacutedelem fogalma A tankoumlnyvben eddig leiacutertak alapjaacuten tudjuk hogy csaknem minden assembly nyelvű utasiacutetaacutes valamelyik kituumlntetett regiszterre vonatkozik Maacuterpedig ha a megszakiacutetaacutes lekezeleacuteseacutere szolgaacuteloacute koacutedreacuteszletben baacutermelyik regisztert foumllhasznaacuteljuk akkor aacuteltalaacuteban azok eacuterteacuteke megvaacuteltozik Ez pedig katasztrofaacutelis koumlvetkezmeacutenyekkel jaacuterna a főprogram uumlgyeire vonatkozoacutean Ilyenkor egyszerűen azt kell tennuumlnk hogy a megszakiacutetaacutest lekezelő programreacuteszben elmentjuumlk azoknak a regisztereknek az eacuterteacutekeacutet melyeket felhasznaacutelunk ebben a programreacuteszben A regiszterek tartalmaacutenak elmenteacutese a verembe toumlrteacutenik Visszateacutereacutes előtt pedig a sorrendre figyelve visszatoumlltoumlgetjuumlk az elmentett regiszterek eacuterteacutekeacutet a veremből majd visszateacuteruumlnk a megszakiacutetaacutest lekezelő programreacuteszből Ez utoacutebbi fogalmat gyakran szintuacutegy csak megszakiacutetaacutesnak nevezik iacutegy ez a szoacute ettől kezdve keacutet fogalmat is jeloumllhet aacutem ez eacutertelemzavart szinte sohasem okoz

Regiszterveacutedelemre sokszor szubrutinoknaacutel is szuumlkseacuteg van hiszen ugyanaz lehet igaz a regiszterek hasznaacutelataacutera mint amit az előbb taglaltunk Eacutes persze az is lehet hogy a hasznaacutelandoacute szubrutint nem is mi iacutertuk hanem valaki maacutes eacutes mi csak be akarjuk eacutepiacuteteni a sajaacutet koacutedunkba Remeacuteljuumlk hogy a mostanra magaacutetoacutel vilaacutegossaacute vaacutelt hogy mi a kuumlloumlnbseacuteg szubrutin eacutes megszakiacutetaacutes koumlzoumltt Ha netaacuten meacutegsem akkor a keacutet fogalom koumlzoumltti kuumlloumlnbseacuteg leacutenyege abban rejlik hogy a szubrutinokat előre tervezett moacutedon mindig ugyanarroacutel a helyről hiacutevogatja a főprogram a megszakiacutetaacutesok viszont bizonyos esemeacutenyek hataacutesaacutera vaacuteltoacutednak ki fuumlggetlenuumll attoacutel hogy hol tart a főprogram

A verembe valoacute adatmenteacutest a koumlvetkező utasiacutetaacutessal valoacutesiacutethatjuk meg

PUSH iram addr

Az utasiacutetaacuteslistaacutek ezt a fenti moacutedon adjaacutek meg Az iram addr az internal RAM address angol kifejezeacutesből szaacutermazik azaz belső RAM-ciacutemet jelent A Push szoacute azt jelenti hogy nyom raacutenyom Az toumlrteacutenik hogy a megadott memoacuteriaciacutemen talaacutelhatoacute eacuterteacuteket raacutenyomjuk a kupacra rakaacutesra azaz beletesszuumlk a verembe Ilyesformaacuten adhatunk meg konkreacutet regisztereket

PUSH ACCPUSH R0PUSH R7

A veremből valoacute adatkiveacutetel a

POP iram addr

utasiacutetaacutessal toumlrteacutenik A Pop angol szoacute igen-igen sok mindent jelent de a Pop Value from Stack kifejezeacutest legszerencseacutesebben talaacuten a kupacroacutel lekap jelenteacutessel fordiacutethatjuk ami itt annyit tesz hogy eacuterteacuteket veszuumlnk ki a veremből Konkreacutet peacuteldaacutekkal

POP R7POP R0POP ACC

Jegyezzuumlk meg hogy az akkumulaacutetorra enneacutel a keacutet utasiacutetaacutesnaacutel az ACC roumlvidiacuteteacutessel hivatkozunk Ez azeacutert van iacutegy mert ilyenkor az akkumulaacutetor nem az utasiacutetaacuteshoz tartozik hanem annak csupaacuten az argumentuma Lehetne baacutermi maacutes is viszont ezt a konkreacutet memoacuteriaciacutemet (az E0h ciacutemű SFR-ről van szoacute kuumlloumlnben) az assemblerhez tartozoacute szimboacutelumlistaacuteban eacuteppen az ACC neacutevvel illetteacutek Akaacuter azt is iacuterhatnaacutenk hogy

PUSH 0E0hPOP 0E0h

Megszakiacutetaacutesboacutel a RETI utasiacutetaacutessal teacuter vissza a program vezeacuterleacutese az eredeti helyeacutere A mnemonik a Return from Interrupt (visszateacutereacutes a megszakiacutetaacutesboacutel) kifejezeacutesből szaacutermazik

A megszakiacutetaacutesoknak prioritaacutesi parameacuteteruumlk lehet ami az ADuC 842-esneacutel a koumlvetkezőkeacuteppen neacutez ki vannak magas eacutes alacsony prioritaacutesuacute megszakiacutetaacutesok Ezek az IP eacutes IEIP2 SFR-ek tartalmaacuteval konfiguraacutelhatoacutek A default beaacutelliacutetaacutes szerint az oumlsszes eddig emliacutetett megszakiacutetaacutestiacutepus alacsony prioritaacutesuacute A tankoumlnyvben ezen nem is

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

vaacuteltoztatunk Annyit azonban el kell mondanunk hogy magas prioritaacutesuacute megszakiacutetaacutes megszakiacutetja az alacsony prioritaacutesuacutet de fordiacutetva ilyen nem toumlrteacutenhet eacutes nem is toumlrteacutenik Ha azonos prioritaacutesuacute megszakiacutetaacutesok egyidejűleg koumlvetkezneacutenek be akkor az eddig emliacutetettek koumlzuumll a koumlvetkező sorrendben hajtoacutednak veacutegre (a legnagyobb prioritaacutesuacuteval kezdve) 0 kuumllső esemeacuteny 0 időziacutetőszaacutemlaacuteloacute 1 kuumllső esemeacuteny 1 időziacutetőszaacutemlaacuteloacute soros porti esemeacuteny időintervallum-szaacutemlaacuteloacute A megszakiacutetaacutesok hasznaacutelataacutet egy aacuteltalaacutenos jelzőbittel (EA) engedeacutelyezni kell majd egyeseacutevel a hasznaacutelni kiacutevaacutent tiacutepusokat is Ha pedig bizonyos esemeacutenyre valoacute reagaacutelaacutes nemkiacutevaacutenatossaacute vaacutelik a megszakiacutetaacutesokat le is lehet tiltani Sőt azok egymaacutest is letilthatjaacutek De meacuteg sajaacutet magukat is Minderről reacuteszletesen a koumlvetkező alfejezetekben nyerhetuumlnk keacutepet

2 Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutesAz ADuC-panel keacutet nyomoacutegombjaacutenak megnyomaacutesa egy-egy olyan esemeacuteny amely megszakiacutetaacutes kivaacuteltaacutesaacutera alkalmas amennyiben engedeacutelyezzuumlk azt Ezeket a megszakiacutetaacutesokat kuumllső megszakiacutetaacutesoknak nevezzuumlk A [A kuumllső megszakiacutetaacutesok jellemzői] a kuumllső megszakiacutetaacutesokkal kapcsolatos tudnivaloacutekat foglalja oumlssze a [Az IE SFR parameacuteterei] pedig azt az SFR-t amelyben a megszakiacutetaacutesok engedeacutelyezőbitjei talaacutelhatoacutek [1 p 70 Table 35]

111 taacuteblaacutezat - A kuumllső megszakiacutetaacutesok jellemzői

A Kuumllső megszakiacutetaacutesok jellemzői

ADuC 842 laacuteba portbit P32 P33

Megnevezeacutes angolul external interrupt 0 external interrupt 1

Megnevezeacutes magyarul 0 kuumllső megszakiacutetaacutes 1 kuumllsőmegszakiacutetaacutes

Engedeacutelyezőbit EX0 EX1

Nyomoacutegomb 1 gomb 2 gomb

Vektor ciacuteme 0003h 0013h

112 taacuteblaacutezat - Az IE SFR parameacuteterei

IE Interrupt Enable Register

Megszakiacutetaacutesengedeacutelyező regiszter

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Jelenteacutes

7 EA Valamennyi megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

6 EADC Nem taacutergyaljuk

5 ET2 Nem taacutergyaljuk

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

4 ES Az UART soros port megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

3 ET1 A Timer 1 megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

2 EX1 Az 1 kuumllső megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

1 ET0 A Timer 0 megszakiacutetaacutesainak engedeacutelyezeacutese vagy tiltaacutesa

0 EX0 A 0 kuumllső megszakiacutetaacutes engedeacutelyezeacutese vagy tiltaacutesa

A fentiek utaacuten megfogalmazhatjuk a koumlvetkező feladatunkat amelyben szuumlkseacuteguumlnk lesz a gombnyomaacutesok megszakiacutetaacutesokkal toumlrteacutenő kezeleacuteseacutere

13 feladat

Az ADuC-panel LED-soraacuten fusson koumlrbe egy LED Az 1 gomb megnyomaacutesaacutera aacutelljon meg a futaacutes ezt pedig a 2 gomb megnyomaacutesaacuteval lehessen feloldani [Code20]

A feladat megoldaacutesa nem lesz neheacutez meacutegis rajzolunk folyamataacutebraacutet hiszen előszoumlr hasznaacutelunk megszakiacutetaacutesokat A főprogram semmi egyebet nem csinaacutel mint leacutepteti koumlrbe-koumlrbe az egy szem kigyuacutejtott LED-et Egy-egy leacutepeacutes (eacutes utaacutena a megszokott vaacuterakozaacutes) akkor toumlrteacutenik ha egy fut nevű jelzőbit eacuterteacuteke magas kuumlloumlnben a főprogram helyben jaacuter A fut nevű jelzőbit eacuterteacutekeacutet eacuteppen a megszakiacutetaacutesok aacutelliacutetjaacutek be a megfelelő moacutedon A keacutet megszakiacutetaacutes mindig letiltja sajaacutet magaacutet eacutes engedeacutelyezi a maacutesikat Ez amolyan koumllcsoumlnoumls kizaacuteraacutest jelent A folyamataacutebra a [A (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute Ezen maacuter hasznaacuteljuk a fut EX0 eacutes EX1 biteket A [13 feladat] megoldaacutesaacutet jelentő koacuted meacuteg mindig nem tekintendő bdquohosszuacutenakrdquo

111 aacutebra - A [13 feladat] (Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes) megoldaacutesi elveacutenek folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

Code20asmORG 0000h RESET-kor itt kezd a PROGRAM COUNTERJMP MAIN Ugraacutes a teacutenyleges programkezdethezORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutes vektoraJMP GOMB1 Ugrunk az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacuteszhezORG 0013h A 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutes vektoraJMP GOMB2 Ugrunk a 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacuteszhezORG 0060h A teacutenyleges programkoacuted kezdetefut BIT 00h A futaacutes engedeacutelyezőbitje Bitvaacuteltozoacute Ezt majd a megszakiacutetaacutesok aacutelliacutetgatjaacutek a főprogram leginkaacutebb csak figyeliGOMB1 Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutes lekezeleacuteseCLR EX0 Az 1 gomb megszakiacutetaacutesaacutenak letiltaacutesaCLR fut Toumlroumlljuumlk a fut jelzőbitetSETB EX1 Engedeacutelyezzuumlk a 2 gomb (1 kuumllső esemeacuteny) megszakiacutetaacutesaacutetRETI Visszateacuteruumlnk a megszakiacutetaacutesboacutelGOMB2 A 2 gomb aacuteltal kivaacuteltott megszakiacutetaacutes lekezeleacuteseCLR EX1 A 2 gomb megszakiacutetaacutesaacutenak letiltaacutesaSETB fut Foumllaacutelliacutetjuk a fut jelzőbitet SETB EX0 Engedeacutelyezzuumlk az 1 gomb (0 kuumllső esemeacuteny) megszakiacutetaacutesaacutetRETI Visszateacuteruumlnk a megszakiacutetaacutesboacutelMAIN A főprogram kezdeteSETB fut Foumllaacutelliacutetjuk a futaacutest jelző bitetMOV P211111110b Az első LED bekapcsolaacutesaCLR EX1 Az 1 kuumllső esemeacuteny (2 gomb) megszakiacutetaacutesaacutenak letiltaacutesa (A sor maga foumlloumlsleges mert amuacutegy is iacutegy indul az ADuC csak az eacuterthetőseacuteg kedveacuteeacutert tesszuumlk ideSETB EX0 A 0 kuumllső esemeacuteny (1 gomb) megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesfigyelJNB fut$ Ha fut=0 akkor helyben jaacuterunk Egyeacutebkeacutent csorog tovaacutebb a programMOV AP2RL A A LED-ek baacutejtjaacutenak balra forgataacutesaMOV P2AMOV A10 01 s vaacuterakozaacutes koumlvetkezikCALL DELAY Időhuacutezoacute rutin meghiacutevaacutesaJMP figyel Ugraacutes vissza a rsquofutrsquo bit figyeleacuteseacutehez

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

3 Az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutesAz előző alfejezetben megismerkedtuumlnk a belső oacutera hasznaacutelataacuteval amit időintervallum-szaacutemlaacuteloacutenak is hiacutevnak (TIC) Most fog kideruumllni hogy mieacutert talaacuteloacute ez az elnevezeacutes Ennek eacuterdekeacuteben ismerkedjuumlnk meg az INTVAL SFR-el (laacutesd [Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei])

113 taacuteblaacutezat - Az időintervallum-szaacutemlaacutelaacutes INTVAL SFR-jeacutenek parameacuteterei

SFR Angol neacutev Eacuterveacutenyes eacuterteacutekek Funkcioacute Default eacuterteacutek bekapcsolaacuteskor

INTVAL User Time Interval Select Register

0-255 A kiacutevaacutent időintervallum darabszaacutema felhasznaacuteloacutei programmal iacuterhatoacute a regiszterbe Amikor a 8-bites intervallum-szaacutemlaacuteloacute egyenlő lesz az INTVAL regiszterbe iacutert eacuterteacutekkel megszakiacutetaacutes leacutep fel amennyiben engedeacutelyezett

00h

Mire lesz joacute nekuumlnk az INTVAL regiszter Arra hogy a belső oacuteraacutera raacuteakasztunk meacuteg egy funkcioacutet amely keacutepes arra hogy meghataacuterozott darabszaacutemuacute előre roumlgziacutetett időintervallum eltelte utaacuten megszakiacutetaacutest vaacuteltson ki Ezzel leszuumlnk keacutepesek olyan koacutedokat iacuterni amelyek meghataacuterozott időnkeacutent periodikusan veacutegeznek valamilyen feladatot Ehhez azonban ki kell egeacutesziacutetenuumlnk a [A TIMECON SFR parameacuteterei]ot A TIMECON SFR műkoumldeacuteseacutenek szaacutemunkra szuumlkseacuteges reacuteszleteit a [A TIMECON SFR parameacuteterei reacuteszletesebben] tartalmazza Tovaacutebbi reacuteszletek talaacutelhatoacutek az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban [1 p 55 Table 24]

114 taacuteblaacutezat - A TIMECON SFR parameacuteterei reacuteszletesebben

TIMECON TIC Control Register

Az időintervallum-szaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Bit neve Jelenteacutes

7 - Foglalt

6 TFH 24-oacuteraacutes uumlzemmoacutedot beaacutelliacutetoacute bit Ha 1 akkor az oacutera szaacutemlaacuteloacuteja 0-toacutel 23-ig fut Ha 0 akkor 0-toacutel 255-ig

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

5 ITS1 Az intervallum időalapjaacutet beaacutelliacutetoacute bitek A koumlvetkező kombinaacutecioacutek aacutelliacutethatoacutek be az intervallum-szaacutemlaacuteloacute frissiacuteteacuteseacutehez

ITS1 ITS0 Időegyseacuteg

0 0 1128 maacutesodperc

0 1 1 maacutesodperc

1 0 1 perc

1 1 1 oacutera

4 ITS0

3 STI Egyszeri intervallumtuacutelleacutepeacutest engedeacutelyező bit (Nem taacutergyaljuk)

2 TII Az intervallum-szaacutemlaacuteloacute megszakiacutetaacutesi bitje (Nem taacutergyaljuk)

1 TIEN Az időintervallumokat engedeacutelyező bit Ha 1 engedeacutelyezzuumlk a 8-bites időintervallum-szaacutemlaacuteloacutet

0 TCEN Az oacutera engedeacutelyezőbitje Ha 1 indul az oacutera ha 0 leaacutell az oacutera A TIC regiszterei TCEN=0 eseteacuten iacuterhatoacutek

Amennyiben peacuteldaacuteul perc egyseacutegben adott megszakiacutetaacutesokat szeretneacutenk az ITS1 ill ITS0 biteket 1-re ill 0-ra kell aacutelliacutetanunk Ha maacutesodperc egyseacutegben adott megszakiacutetaacutesokat akkor 0-ra ill 1-re Ilyenkor az INTVAL regiszter tartalmazza a kivaacutelasztott időegyseacuteg darabszaacutemaacutet eacutes a megszakiacutetaacutes a darabszaacutem letelte utaacuten koumlvetkezik be Iacutegy lehet periodikusan megszakiacutetaacutest kivaacuteltani mondjuk 5 percenkeacutent 10 maacutesodpercenkeacutent stb

A [Az IE SFR parameacuteterei]ban felsoroltuk hogy melyik megszakiacutetaacutesok engedeacutelyezhetők az IE SFR-rel Csakhogy ebben a felsorlaacutesban nincsen benne az intervallumszaacutemlaacuteloacute De semmi baj a megszakiacutetaacutesokhoz egy maacutesodlagos SFR is tartozik amelyikben viszont maacuter benne lesz Ezt mutatja a [Az IEIP2 SFR parameacuteterei (reacuteszlet)] (a teljesseacuteg igeacutenye neacutelkuumll) Tovaacutebbi reacuteszletek a gyaacuteri leiacuteraacutesban olvashatoacutek [1 p 71 Table 37]

115 taacuteblaacutezat - Az IEIP2 SFR parameacuteterei (reacuteszlet)

IEIP2 Secondary Interrupt Enable Register

Maacutesodlagos megszakiacutetaacutesengedeacutelyező regiszter

Bekapcsolaacutes utaacuteni default eacuterteacutek A0h = 10100000b

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Jelenteacutes

7 - Foglalt

5 PPSM A taacutepellaacutetaacutest figyelő megszakiacutetaacutes prioritaacutesa (Nem taacutergyaljuk)

2 ET2 Az időintervallum-szaacutemlaacuteloacutehoz tartozoacute megszakiacutetaacutes engedeacutelyezeacutese (1) vagy letiltaacutesa (0)

A fentiek ismereteacuteben nekifuthatunk a koumlvetkező feladatnak

14 feladat

Az ADuC-panel LED-soraacutenak oumlsszes LED-je villanjon foumll roumlvid ideig minden egyes maacutesodpercben [Code21]

A feladat megoldaacutesa egeacuteszen egyszerű lesz folyamataacutebraacutet nem is igeacutenyel Azt fogjuk megvaloacutesiacutetani hogy az intervallum-szaacutemlaacuteloacute megfelelő beaacutelliacutetaacutesaival minden egyes maacutesodpercben kivaacuteltunk egy megszakiacutetaacutest A megszakiacutetaacutes felkapcsolja a LED-eket vaacuterakozik egy kicsit majd lekapcsolja a LED-eket eacutes visszateacuter a főprogramba Hogy meacuteg szebb legyen a megvaloacutesiacutetaacutes ugyanazt az időhuacutezoacute rutint fogjuk hasznaacutelni mint eddig de azt most nem a főprogram hanem a megszakiacutetaacutes hiacutevja meg Csak arra kell vigyaacuteznunk nehogy a megszakiacutetaacutesban toumlltoumltt idő toumlbb legyen mint a koumlvetkező kivaacuteltaacutesig eltelt idő mert akkor anomaacutelis programműkoumldeacutesre kell szaacutemiacutetanunk Jelen esetben a regiszterveacutedelemmel nem fogunk toumlrődni mert sem a megaszakiacutetaacutes sem a szubrutin nem baacutentjaacutek sem egymaacutes sem a főprogram vaacuteltozoacuteit Tovaacutebbaacute ne felejtsuumlk hogy az időintervallum-szaacutemlaacuteloacute aacuteltal generaacutelt megszakiacutetaacutes vektora a 0053h ciacutemen helyezkedik el Az oacuteraacutenak nem is adunk most kezdeti eacuterteacuteket hiszen teljesen mindegy hogy honnan indul nekuumlnk csak a maacutesodpercek muacutelaacutesa szaacutemiacutet A koacuted meacuteg mindig egyszerűnek titulaacutelhatoacute A roumlvidseacuteg kedveacuteeacutert a megszokott eacutes vaacuteltozatlan formaacuteban aacutetvett DELAY szubrutinunkat most sem tuumlntetjuumlk foumll A bitenkeacutent nem ciacutemezhető SFR-eknek valoacute eacuterteacutekadaacuteskor sziacutenes kiemeleacutessel jeloumlljuumlk azokat a biteket amelyek kuumlloumlnoumls fontossaacuteggal biacuternak a koacuted szempontjaacuteboacutel

Code21asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdeteMAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL1 1 maacutesodpercenkeacutent kell kivaacuteltani a megszakiacutetaacutestORL TIMECON00010011b Folytonos intervallumszaacutemlaacutelaacutes Maacutesodperc alapuacute Ezt az 5 eacutes 4 bittel aacutelliacutetjuk be Az 1 bitaz intervallumszaacutemlaacuteloacutet indiacutetja a 0 bit magaacutet az oacuteraacutetORL IEIP200000100b Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes engedeacutelyezeacutese Ez a bit a maacutesodlagos engedeacutelyezőregiszterben van Ez a regiszter bitenkeacutent nem ciacutemezhető iacutegy logikai maszkolaacutest hasznaacutelhatunkSETB EA A megszakiacutetaacutesok globaacutelis engedeacutelyezeacuteseJMP $ Itt veacutegtelen ciklusba keruumll a program hiszen a főprogramnak nincs toumlbb dolgaTIKTAK Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutesMOV P20 LED-ek bekapcsolaacutesaMOV A10 01 s-ig fogunk vaacuterakozni

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

CALL DELAY A vaacuterakozoacute szubrutin meghiacutevaacutesaMOV P2255 LED-ek kikapcsolaacutesaRETI Visszateacutereacutes a megszakiacutetaacutesboacutel

4 A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesokEbben az alfejezetben olyan alkalmazaacutest mutatunk be amely kombinaacutelja a kuumllső esemeacutenyek (azaz a gombnyomaacutesok) eacutes az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesait A feladat ugyanis olyan lesz hogy a programot e keacutet megszakiacutetaacutestiacutepus neacutelkuumll csak kiacutenkeservesen lehetne megiacuterni Iacutegy viszont viszonylag egyszerűen

15 feladat

A LED-soron leacuteptessuumlnk a Knight Rider-eacutehez hasonloacute mintaacutezatot jobbra-balra Tegyuumlk ezt uacutegy hogy haacuterom egymaacutes melletti LED leacutepkedjen ide-oda de a LED-sor szeacuteleacutehez eacuterve a szeacutelső LED mindig leacutepjen is ki A nyomoacutegombokkal lehessen gyorsiacutetani eacutes lassiacutetani a mintaacutezat leacutepkedeacuteseacutet A prellegeacutest adott ideig toumlrteacutenő vaacuterakozaacutessal kuumlszoumlboumlljuumlk ki [Code22]

Előszoumlr is tisztaacutezzuk hogyan mikeacutent menjen a mintaacutezat Ezt mutatja az alaacutebi aacutebra amely az utolsoacute sor utaacuten uacutejrakezdhető

112 aacutebra - A [15 feladat]ban megkoumlvetelt LED-leacutepteteacutes

Ezt a Knight Rider-es leacutepteteacutest az olvasoacute bizonyaacutera maacuter oumlnaacutelloacutean is meg tudnaacute csinaacutelni A Code22-ben egy megoldaacutest fogunk mutatni melyben felhasznaacuteljuk az RRC A eacutes RLC A utasiacutetaacutesokat Leacutenyeges hogy kell egy kezdeti eacuterteacutek a mintaacutezathoz utaacutena viszont maacuter keacutet szabaacutelyos cikluson keresztuumll (7 leacutepeacutes jobbra majd 7 leacutepeacutes balra) a veacutegtelenseacutegig mehet a leacutepteteacutes

Enneacutel sokkal eacuterdekesebb lesz ahogy most a megszakiacutetaacutesokkal baacutenni fogunk A főprogram nem csinaacutel semmi egyebet mint a veacutegtelenseacutegig leacutepteti a mintaacutezatot jobbra-balra Minden egyes leacutepeacutes utaacuten betoumllti egy vaacuteltozoacuteboacutel (wait) az aktuaacutelis vaacuterakozaacutes idő egyseacutegeacutet majd meghiacutevja a joacute oumlreg DELAY szubrutinunkat Nyilvaacutenvaloacute hogy a keacutet nyomoacutegomb megszakiacutetaacutesainak a vaacuterakozaacutesi idő vaacuteltozoacutejaacutet (wait) kell manipulaacutelnia Az 1 nyomoacutegomb megszakiacutetaacutesa noumlveli wait eacuterteacutekeacutet a 2 nyomoacutegomb megszakiacutetaacutesa csoumlkkenti wait eacuterteacutekeacutet (Ezek az eacuterteacutekek Code22-ben 1 eacutes 30 koumlzoumlttiek lehetnek)

Most joumln a csel A nyomoacutegombok megszakiacutetaacutesa azonnal letiltja oumlnmagaacutet eacutes elindiacutetja az időintervallum-szaacutemlaacuteloacutet ami egy bizonyos előiacutert időeacuterteacutek (16128 s = 0125 s) lejaacuterta utaacuten kivaacuteltja a sajaacutet megszakiacutetaacutesaacutet Az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesa leaacutelliacutetja magaacutet az intervallumszaacutemlaacutelaacutest majd uacutejra engedeacutelyezi a nyomoacutegombok megszakiacutetaacutesaacutet eacutes ezzel veacuteget is eacuter Ezzel az elvvel egyreacuteszt kikuumlszoumlboumlljuumlk a prellegeacutest maacutesreacuteszt a gombok megszakiacutetaacutesa a főprogram futaacutesa koumlzben keacutepes olyan vaacuteltozoacutet manipulaacutelni amit a főprogram amuacutegy rendszeresen hasznaacutel Ezzel vaacutelik lehetőveacute a LED-ek leacutepteteacutese alatti azaz menet koumlzbeni sebesseacutegaacutelliacutetaacutes

A megoldaacutes koacutedja maacuter nem nevezhető pofonegyszerűnek ezeacutert csereacutebe viszont egeacuteszen laacutetvaacutenyos megjeleneacutest kiacutenaacutel eacutes kombinaacutelja az eddig megtanult keacutet megszakiacutetaacutestiacutepust Az olvasoacutet arra biztatjuk hogy elemezze a programot eacutes addig ne haladjon tovaacutebb amiacuteg teljes egeacuteszeacuteben meg nem eacutertette annak műkoumldeacuteseacutet A megeacuterteacutest elősegiacutető folyamataacutebra a [A (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute

Enneacutel a programnaacutel nagyon fontos lesz a regiszterveacutedelem hiszen a kuumllső esemeacutenyek (gombnyomaacutesok) megszakiacutetaacutesai nem csak az akkumulaacutetort hasznaacuteljaacutek hanem a C bitet is iacutegy ez utoacutebbit is el kell mentenuumlnk Ezt most uacutegy fogjuk megtenni hogy egy kuumlloumln bitvaacuteltozoacutet definiaacutelunk (savec) erre a ceacutelra

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

113 aacutebra - A [15 feladat] (A nyomoacutegombokhoz koumlthető tovaacutebbi alkalmazaacutesok) megoldaacutesi elveacutenek folyamataacutebraacuteja

A koacutedot a tankoumlnyvben nem a legbővebb kommentezeacutessel ismertetjuumlk hosszabb vaacuteltozat aacutell rendelkezeacutesre a koacutedkoumlnyvtaacuterban Figyeljuumlk meg hogy az oacuteraacutet elindiacutetaacutes utaacuten soha toumlbbeacute nem aacutelliacutetjuk le csak az intervallumszaacutemlaacuteloacutet engedeacutelyezzuumlk vagy tiltjuk le

Code22asmCSEG A koacutedszegmens kezdetewait DATA 030h Baacutejtvaacuteltozoacute a moacutedosiacutethatoacute időhuacutezaacuteshozsavec BIT 00h Bitvaacuteltozoacute a Carry elmenteacuteseacutereORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB1 vektoraORG 0013h A 2 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB2 vektoraORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdete Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1PUSH ACC Regiszterveacutedelem

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

MOV savecC A Carry bit elmenteacuteseCLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaMOV Await Megvizsgaacuteljuk az időhuacutezaacutes vaacuteltozoacutejaacutetCJNE A30novel Ha (meacuteg) nem 30 akkor noumlvelhetjuumlkJMP tova1 Kuumlloumlnben maacuter nem noumlvelhetjuumlknovelINC wait Noumlveljuumlk wait eacuterteacutekeacutettova1 MOV Csavec A Carry bit visszatoumllteacutesePOP ACC Az elmentett eacuterteacutek kiszedeacutese a verembőlRETI A 2 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB2PUSH ACC RegiszterveacutedelemMOV savecC A Carry bit elmenteacuteseCLR EX1 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaMOV Await Megvizsgaacuteljuk az időhuacutezaacutes vaacuteltozoacutejaacutetCJNE A1csokkent Ha (meacuteg) nem 1 akkor csoumlkkenthetjuumlkJMP tova2 Kuumlloumlnben maacuter nem csoumlkkenthetjuumlkcsokkentDEC wait Csoumlkkentjuumlk wait eacuterteacutekeacutettova2 MOV Csavec A Carry bit visszatoumllteacutesePOP ACC Az elmentett eacuterteacutek kiszedeacutese a verembőlRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111101b Az intervallumszaacutemlaacuteloacute leaacutelliacutetaacutesaSETB EX0 Az 1 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EX1 A 2 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseRETI FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 0125 maacutesodpercenkeacutent kell kivaacuteltani a megszakiacutetaacutest Ennyi teljen el gombnyomaacutes utaacuten hogy ismeacutet eacuterzeacutekeny legyen a gombra a programMOV TIMECON00000001b Az oacutera elindiacutetaacutesa eacutes 1128 s az egyseacuteg az intervallumszaacutemlaacutelaacuteshozMOV IEIP200000100b Az intervallumszaacutemlaacuteloacute engedeacutelyezeacutese Ez a bit a maacutesodlagos engedeacutelyezőregiszterben vanSETB EX0 Az 1 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EX1 A 2 gomb megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesMOV wait15 Kezdeti eacuterteacutek az időhuacutezaacutes vaacuteltozoacutejaacutenakMOV P200111111b Kezdeti elrendezeacutes Kigyuacutejtunk keacutet LED-et a bal oldalon MOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAY Az időhuacutezoacute szubrutin meghiacutevaacutesaCLR C Toumlroumlljuumlk a Carry bitet hogy amikor jobbra beforgatjuk a LED-ek portjaacuteba akkor ott maacuter haacuterom LED vilaacutegiacutetsonujraMOV R47 Heacutetszer fogunk leacuteptetni jobbra a Carry-n keresztuumll

Created by XMLmind XSL-FO Converter

Megszakiacutetaacutesok

jobbraMOV AP2 A LED-ek portjaacutenakRRC A leacutepteteacutese jobbraMOV P2AMOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAYDJNZ R4jobbra A ciklusvaacuteltozoacute vizsgaacutelataMOV R47 Heacutetszer fogunk leacuteptetni balra a Carry-n keresztuumllbalraMOV AP2 LED-ek portjaacutenakRLC A leacutepteteacutese jobbraMOV P2AMOV Await Az időhuacutezaacutes eacuterteacutekeacutenek betoumllteacuteseCALL DELAYDJNZ R4balra A ciklusvaacuteltozoacute vizsgaacutelataJMP ujra Folytatjuk a leacutepteteacutestEND

Mielőtt elbuacutecsuacuteznaacutenk ettől a programtoacutel meg kell jegyeznuumlnk hogy a C bit veacutedelmeacutet maacuteskeacutepp is megoldhatjuk Ehhez kuumlloumln bit definiaacutelaacutesa helyett az akkumulaacutetor utaacuten mentsuumlk el a verembe a PSW SFR tartalmaacutet hiszen a C bit ebben talaacutelhatoacute (vouml [A PSW SFR parameacuteterei])

PUSH ACCPUSH PSW

A visszaszedeacutes pedig figyelve a sorrendre iacutegy toumlrteacutenhet

POP PSW POP ACC

Created by XMLmind XSL-FO Converter

12 fejezet - Kuumllső aacuteramkoumlroumlk LED-ekkelAz előző fejezetek utaacuten eleacuterkezett az idő arra hogy veacutegre kuumllső aacuteramkoumlroumlket kapcsoljunk a mikrovezeacuterlőnkhoumlz A kuumllső aacuteramkoumlroumlk hasznaacutelata termeacuteszetesen meacuteg nagyon sok tudnivaloacutet fog megkoumlvetelni az ADuC 842-essel kapcsolatban de ezeket szeacutepen sorban amennyire csak lehet egymaacutesra eacutepiacutetve taacutergyaljuk

Melyek azok a jelzőberendezeacutesek amelyekkel az aacutetlagember a legtoumlbbszoumlr talaacutelkozik Valoacutesziacutenűleg a koumlzlekedeacutesi jelzőlaacutempaacutek Ebben a fejezetben ezeket fogjuk modellezni A fejezetben a koumlzlekedeacutesi jelzőlaacutempaacutek feacutenyeit LED-ek reprezentaacuteljaacutek a helyzetmeghataacuterozaacuteshoz pedig fotokapukat fogunk hasznaacutelni Innentől kezdve az egyes feladatok megoldaacutesaacutehoz mindig aacuteramkoumlri rajz is tartozik Az alkatreacuteszek oumlsszevaacutelogataacutesa termeacuteszetesen nem kizaacuteroacutelagos a tananyag elkeacutesziacuteteacuteseacutehez igyekeztuumlnk koumlnnyen eleacuterhető ill olcsoacute aacuteramkoumlri elemeket vaacutelasztani A LED-ek kiveacuteteleacutevel az alkalmazott alkatreacuteszek mindegyikeacutehez tartozik elektronikus leiacuteraacutes ezeket kuumlloumln koumlnyvtaacuter tartalmazza Megfelelő villamosmeacuternoumlki ismeretekkel baacutetran vaacutelaszthatunk maacutes tiacutepusuacute alkatreacuteszeket is legfeljebb kicsit aacutet kell alakiacutetanunk az aacuteramkoumlrt esetleg a koacutedot

1 Jelzőlaacutempa vezeacuterleacutese16 feladat

Modellezzuumlnk a haacuteromlencseacutes koumlzlekedeacutesi jelzőlaacutempa alapfunkcioacutejaacutet uacutegy hogy az egyes sziacutenek vaacuteltaacutesaacutet előre roumlgziacutetett időziacuteteacuteshez koumltjuumlk [Code23 Code24]

A feladat megoldaacutesa nagyon-nagyon egyszerű Bekapcsoljuk az adott LED-et vaacuterakozunk az ehhez a faacutezishoz tartozoacute ideig aztaacuten tovaacutebbleacutepuumlnk A vaacuterakozaacutes toumlrteacutenhetne a joacute oumlreg DELAY szubrutininkkal is de alkalmazzuk most inkaacutebb az időintervallum-szaacutemlaacuteloacute megszakiacutetaacutesaacutet Oldjuk meg a feladatot uacutegy hogy a LED-ek bekapcsolaacutesaacuteeacutert felelős bitmintaacutezatokat eacutes a vaacuterakozaacutesi időket előre megadjuk a koacutedmemoacuteriaacuteban adatkeacutent

A haacuteromlencseacutes jelzőlaacutempaacutet LED-ekkel modellező aacuteramkoumlr rajza a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute A LED-ek előteacutet-ellenaacutellaacutesait egeacuteszen szabadon megvaacutelaszthatjuk csak arra figyeljuumlnk hogy ne aacutelliacutetsunk elő tuacutel nagy aacuteramerősseacuteget az egyes aacutegakban Ennek eacuterteacuteke persze a LED-tiacutepusoktoacutel fuumlgg de 10-15 mA aacuteltalaacuteban bőven eleacuteg Az ADuC 842-es mikrovezeacuterlő portjai koumlzuumll most akaacuter a 0-at akaacuter a 2-at hasznaacutelhatnaacutenk Mivel eddig a 2 portot hasznaacuteltuk ndash hiszen arra vannak koumltve a panelra uumlltetett aproacute LED-ek ndash vaacutelasszuk most a nulladik portot Nagyon figyeljuumlnk azonban arra hogy a portok aktiacutev kimenetkeacutent nem hasznaacutelhatoacutek (kiemelve a [Fontos tudnivaloacute a portokkal kapcsolatban] aacutebraacuten) A portok laacutebaival viszont minden tovaacutebbi neacutelkuumll foumlldre huacutezhatjuk a raacutejuk koumltoumltt aacuteramkoumlri elemeket hiszen ez a foumlld a taacutepellaacutetaacutes foumlldje

121 aacutebra - Fontos tudnivaloacute a portokkal kapcsolatban

A 0-s port bitjeinek sajaacutetos kiosztaacutesa a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten azzal fuumlgg oumlssze hogy iacutegy toumlbb helyuumlnk marad a dugdosoacutes proacutebapanelon iacutezleacutesesen egymaacutes melleacute tenni az 5 mm-es tokozaacutesuacute LED-eket amennyiben ilyeneket hasznaacutelunk (Eacutes ebben a tankoumlnyvben ilyeneket hasznaacutelunk)

122 aacutebra - A [16 feladat] (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

A program műkoumldeacuteseacutenek leacutenyege az hogy az egyes laacutempafaacutezisokhoz tartozoacute bitmintaacutezatokat eacutes a faacutezisok időtartamaacutenak eacuterteacutekeit a koacutedmemoacuteriaacuteban helyezzuumlk el ahonnan azokat a [Adatok elhelyezeacutese a koacutedban] alfejezetben ismertetett moacutedon olvassuk ki Kuumlloumln toumlmbben aacutellnak a bitmintaacutezatok eacutes kuumlloumln toumlmbben a vaacuterakozaacutesi időeacuterteacutekek maacutesodperc egyseacutegben megadva Iacutegy menet koumlzben mindig a megfelelő toumlmbkezdetet kell majd az adatmutatoacuteba toumlltenuumlnk A vaacuterakozaacutest az időintervallum-szaacutemlaacuteloacute (TIC) megszakiacutetaacutesa valoacutesiacutetja meg melynek beaacutelliacutetaacutesa szinteacuten maacutesodperces kell hogy legyen A megszakiacutetaacutes az adott idő letelte utaacuten vaacuteltoacutedik ki eacutes a megszakiacutetaacutes programreacuteszeacuteben magasra aacutelliacutetoacutedik egy jelzőbit (tovabb) A főprogram az egyes laacutempafaacutezisok koumlzoumltt erre a bitre vaacuter eacutes ha azt a megszakiacutetaacutes magasra aacutelliacutetja akkor joumlhet a koumlvetkező laacutempafaacutezis Addig viszont a főprogram helyben jaacuter eacutes csak lesi hogy beaacutell-e a keacuterdeacuteses bit A megszakiacutetaacutes leaacutelliacutetja az intervallumszaacutemlaacuteloacutet eacutes az oacuteraacutet is hiszen a koumlvetkező laacutempafaacutezishoz elteacuterő vaacuterakozaacutesi idő tartozhat iacutegy moacutedosiacutetani kell az INTVAL regisztert Ez pedig csak leaacutelliacutetott oacuteraacuteval lehetseacuteges Az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet a főprogram indiacutetja ismeacutet az uacutej laacutempafaacutezis kezdeteacuten Most kell visszaemleacutekeznuumlnk a [A belső oacutera hasznaacutelata] fejezetben leiacutertakra Arra hogy az intervallumszaacutemlaacuteloacute regisztereinek foumlluumlliacuteraacutesakor elegendő időt kell biztosiacutetanunk a műveletre kuumlloumlnben a foumlluumlliacuteraacutes nem toumlrteacutenik meg Erre az INTVAL regiszter kuumlloumlnoumlsen eacuterzeacutekeny iacutegy a roumlvid kis vaacuterakozaacutes nem hiaacutenyozhat (Ha nem hiszi nyugodtan proacutebaacutelja ki a kedves olvasoacute hogy mi toumlrteacutenik akkor ha kiszedi a koacutedboacutel ezt a vaacuterakozoacute ciklust A laacutempafaacutezisok időziacuteteacutese nem fog az előiacutert moacutedon műkoumldni vagy egyaacuteltalaacuten nem fog műkoumldnihellip)

A megoldaacuteshoz most nem klasszikus folyamataacutebraacutet melleacutekeluumlnk hiszen a koacuted maga nem tuacutel bonyolult A műkoumldeacutest most olyan aacutellapot-aacutetmenetgraacuteffal szemleacuteltetjuumlk (laacutesd [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef] aacutebra) amelyben az aacutellapotokat a graacutef csuacutecsai jeloumllik Ezeket az egyes faacutezisokhoz tartozoacute sziacutenek angol kezdőbetűivel jeloumlljuumlk R ndash red piros RA ndash red-amber piros-saacuterga A ndash amber borostyaacutensaacuterga G ndash green zoumlld A csuacutecsokhoz folyamataacutebra-szerűen kapcsolunk blokkokat melyek az ott veacutegrehajtott leacutepeacuteseket mutatjaacutek termeacuteszetesen csak a műkoumldeacutes szempontjaacuteboacutel legfontosabbakat Az aacutellapotok koumlzoumltti aacutetmeneteket a graacutef eacutelei reprezentaacuteljaacutek melyekre az aacutetmenet felteacuteteleacutet iacuterjuk Ne felejtsuumlk hogy a felteacutetelekben szereplő tovabb bitvaacuteltozoacutet az intervallumszaacutemlaacuteloacutehoz koumltoumltt megszakiacutetaacutes aacutelliacutetja mindig 1-re Az egyes aacutellapotoknaacutel a TIC(Tn) jeloumlleacutes eacutertelme az hogy az intervallumszaacutemlaacuteloacutehoz (TIC-hez) tartozoacute megszakiacutetaacutest az n-edik faacutezishoz tartozoacute ideig tartoacute vaacuterakozaacutessal engedjuumlk uacutetjaacutera A megszakiacutetaacutest a graacuteftoacutel elkuumlloumlniacutetve aacutebraacutezoljuk (Enneacutel a blokknaacutel csak a jelzőbitre koncentraacutelunk)

123 aacutebra - A [16 feladat] megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef

Code23asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdete

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

tovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehoz Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111100b Az oacutera eacutes az intervallumszaacutemlaacuteloacute leaacutellSETB tovabb A tovaacutebbot jelző bit foumllaacutelliacutetaacutesaRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON00010000b Maacutesodperces uumlzemmoacuted beaacutelliacutetaacutesaORL IEIP200000100b Az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesujraMOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell a koacuted-indirektMOVC AA+DPTR ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-aacutes portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV INTVALA A soron koumlvetkező vaacuterakozaacutesi eacuterteacutek betoumllteacutese az INTVAL regiszterbeMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetORL TIMECON00000011b Indiacutetjuk az intervallumszaacutemlaacuteloacutetJNB tovabb$ Vaacuterunk hogy 1 legyen a tovabb bit Ezt az intervallumszaacutemlaacuteloacute megszakiacutetaacutesa inteacuteziCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP ujra Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozlampaDB 11111101b A piros LED bitmintaacutezataDB 11110101b A piros eacutes a saacuterga LED bitmintaacutezataDB 11011111b A zoumlld LED bitmintaacutezataDB 11110111b A saacuterga LED bitmintaacutezatavarDB 3121 Az egyes laacutempafaacutezisok vaacuterakozaacutesi ideje maacutesodpercben

Figyeljuumlk meg hogy az adatbaacutejtokat vesszővel elvaacutelasztva is iacuterhatjuk nem kell mindegyiket okvetlenuumll kuumlloumln sorba tennuumlnk

A koumlvetkező alfejezet koumlnnyebb eacuterthetőseacutege eacuterdekeacuteben előredolgozunk egy kicsit eacutes meacuteg egy megoldaacutest mutatunk a [16 feladat]hoz A megoldaacutesi elv gyakorlatilag ugyanaz lesz mint előbb csak nem maacutesodperces intervallumszaacutemlaacutelaacutest alkalmazunk hanem mondjuk 18 maacutesodpercet vaacutelasztunk egyseacutegnek Ezt a program elejeacuten mindjaacutert be is aacutelliacutetjuk eacutes toumlbbet nem nyuacutelunk hozzaacute Tesszuumlk ezt uacutegy hogy 1128 s alapuacute szaacutemlaacutelaacutest aacutelliacutetunk be a TIMECON SFR-rel az INTVAL regiszterbe pedig 16-ot toumlltuumlnk Iacutegy kapjuk meg a 16128 s = 18 s időszeletet Meacuteg egyszer hangsuacutelyozzuk hogy az intervallumszaacutemlaacutelaacutest nem vaacuteltoztatjuk a program futaacutesa koumlzben annak egyseacutege maacutes szoacuteval időszelete ez az 18 s lesz a teljes futaacutes soraacuten

Kell egy olyan vaacuteltozoacute amellyel a TIC megszakiacutetaacutes az eltelt időszeleteket szaacutemlaacutelja (szaml) Kell aztaacuten meacuteg egy vaacuteltozoacute is amelybe az egyes laacutempafaacutezisokhoz szuumlkseacuteges vaacuterakozaacutes eacuterteacutekeacutet adjuk meg termeacuteszetesen 18 s

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

egyseacutegben (tvar) Ezek utaacuten leacutenyegeacuteben minden ugyanuacutegy toumlrteacutenik mint az előző programban kiveacuteve a megszakiacutetaacutest lekezelő programreacuteszt Ez mindig 1-gyel noumlveli szaml eacuterteacutekeacutet eacutes megneacutezi hogy ennek eacuterteacuteke eleacuterte-e tvar eacuterteacutekeacutet Ha nem akkor szaml eacuterteacutekeacutet noumlveli 1-gyel Ha igen akkor rendben is vagyunk letelt a szuumlkseacuteges vaacuterakozaacutes oumlsszes kicsi időszelete eacutes magasra lehet aacutelliacutetani a tovabb bitet Figyeljuumlnk oda arra hogy a szaml vaacuteltozoacutet 1-ről indiacutetsuk hiszen amikor előszoumlr vaacuteltoacutedik ki a TIC megszakiacutetaacutesa akkor maacuter eltelt a beaacutelliacutetott időintervallum azaz jelen esetben 18 s A moacutedosiacutetott aacutellapot-aacutetmenetgraacutefot az alaacutebbi aacutebra mutatja

124 aacutebra - A [16 feladat] moacutedosiacutetott megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef

A fentebbi aacutebraacuten szemleacuteltetett megoldaacutesi elv koacutedja Code24 csak neacutehaacuteny sorban kuumlloumlnboumlzik Code23-toacutel iacutegy a tankoumlnyvben csak a leacutenyegi elteacutereacutesek sorait tuumlntetjuumlk foumll Fontos hogy Code24-ben csak a főprogram legelejeacuten kell az intervallumszaacutemlaacuteloacutet eacutes az oacuteraacutet inicializaacutelnunk Utaacutena toumlbbeacute nem kapcsoljuk le őket iacutegy uacutejraindiacutetaacutesukra sincs szuumlkseacuteg Emiatt az INTVAL-nak toumlrteacutenő eacuterteacutekadaacutes utaacuten most nem is kell vaacuterakoznunk A teljes koacuted megtalaacutelhatoacute a koacutedtaacuterban

Code24asmORG 0060h A teacutenyleges programkoacuted kezdetetovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehozszaml DATA 030h Az 18-ad maacutesodperces intervallumok szaacutemolaacutesaacutenak vaacuteltozoacutejatvar DATA 031h Az aktuaacutelisan szuumlkseacuteges vaacuterakozaacutes vaacuteltozoacuteja Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKMOV Aszaml Ha szaml eacuterteacuteke nem egyenlő tvar CJNE Atvarnovel eacuterteacutekeacutevel akkor noumlveljuumlk szaml eacuterteacutekeacutetSETB tovabb Kuumlloumlnben tovabb=1RETInovelINC szaml Noumlveljuumlk szaml eacuterteacutekeacutetRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 16-ot toumlltuumlnk INTVAL-ba mert 16128 s = 18 s lesz az alap-időosztaacutesunkMOV TIMECON00000011b 1128 maacutesodperces intervallumhossz beaacutelliacutetaacutesa eacutes az oacutera eacutes az intervallum- szaacutemlaacuteloacute elindiacutetaacutesaORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacutet

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV tvarA Betoumlltjuumlk tvar-ba a szuumlkseacuteges vaacuterakozaacutes időtartamaacutet Ennyiszer 18 s-et kell vaacuterakozniCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetMOV szaml1 Az 18 s-es időszeletek szaacutemlaacutelaacutesaacutenak vaacuteltozoacutejaacutet alapeacuterteacutekre aacutelliacutetjuk

2 Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedjaA bemutatott ciklusszervezeacutesi moacutedszerekneacutel ([Hat variaacutecioacute egy feladatra] alfejezet) minden esetben szuumlkseacuteg volt a ciklusvaacuteltozoacute vizsgaacutelataacutera Amennyiben az akkumulaacutetor nulla vagy eacuteppen nem nulla mivoltaacutera voltunk kiacutevaacutencsiak hasznaacutelhattuk a JZ vagy JNZ utasiacutetaacutesokat Enneacutel oumlsszetettebb volt de ugyanide lyukadt ki a DJNZ utasiacutetaacutes is csak az a vizsgaacutelat előtt meacuteg eggyel csoumlkkenti is az adott regiszter tartalmaacutet Szabadabb oumlsszehasonliacutetaacutest a CJNE utasiacutetaacutessal tudtunk megvaloacutesiacutetani amely akkor ugrat ha nem aacutell fenn egyenlőseacuteg Mindez rendben is van de egyvalami meacuteg faacutejdalmasan hiaacutenyzik Ez pedig annak kieacuterteacutekeleacutese hogy egy regiszter tartalma kisebb vagy nagyobb-e egy maacutesik regiszter tartalmaacutenaacutel Nos tovaacutebbi oumlsszehasonliacutetoacute utasiacutetaacutesaink nincsenek de az egyiket felhasznaacutelhatjuk ilyesfeacutele kieacuterteacutekeleacutesre

A CJNE utasiacutetaacutes mellett sok oumlsszefoglaloacuteban ezt laacutethatjuk

CJNE xyrel C = x lt y

Mit jelent ez A CJNE xyrel utasiacutetaacutes maacuter eacuterthető szaacutemunkra hiszen erről volt szoacute a [Oumlsszehasonliacutetoacute eacutes elaacutegazaacutesi utasiacutetaacutesok] alfejezetben A processzor oumlsszehasonliacutetja az x eacuterteacuteket y eacuterteacutekeacutevel eacutes relatiacutev ugraacutest valoacutesiacutet meg ha azok nem egyenlők De mit jelent a jobb oldali kifejezeacutes Ennek megeacuterteacutese most igen-igen fontos lesz mert ismeacutet csak hasznos eszkoumlz hullik az oumlluumlnkbe A C=xlty kifejezeacutes azt jelenti hogy a CJNE utasiacutetaacutes veacutegrehajtaacutesa utaacuten a Carry bit eacuterteacuteke 1 lesz ha igaz hogy xlty eacutes 0 lesz ha xy Ezek utaacuten pedig maacuter gond neacutelkuumll elaacutegaztathatjuk a programot a JC eacutes JNC utasiacutetaacutesokkal Iacutegy tudjuk koumlnnyen megfogalmazni azt hogy pl az akkumulaacutetor eacuterteacuteke keacutet adott eacuterteacutek koumlzeacute esik-e Csak arra kell figyelnuumlnk hogy a keacuterdeacuteses rendezett halmazunk keacutet szeacutelső eacuterteacuteke beleesik-e a kiacutevaacutent tartomaacutenyba vagy sem Ha az xy kifejezeacutesben az egyenlőseacuteg meacuteg mindig nem kiacutevaacutenatos akkor azt elinteacutezhetjuumlk egy erre iraacutenyuloacute vizsgaacutelattal

A koumlvetkező peacuteldaacuten az igen ciacutemkeacutehez keruumll a program vezeacuterleacutese ha az akkumulaacutetor tartalma 10 eacutes 20 koumlzoumltt van a hataacuterokat is beleeacutertve Ellenkező esetben a nem ciacutemkeacutere Figyeljuumlk meg hogy a C bit megfelelő beaacutellaacutesaacutenak kiaknaacutezaacutesa eacuterdekeacuteben a CJNE utasiacutetaacutes maga moumlgeacute ugrat mert itt nem az elaacutegazaacutes a ceacutel hanem az hogy a C bit adja meg a vaacutelaszt a most rendkiacutevuumlli fontossaacuteguacute talaacutenyra

CJNE A10relac1relac1JC nemCJNE A21relac2relac2

JNC nem

igen

nem

Előszoumlr oumlsszehasonliacutetjuk A eacuterteacutekeacutet 10-zel Ha ez utaacuten C=1 akkor maacuteris ugorhatunk a nemleges ciacutemkeacutere mert Alt10 Ha ez nem igaz azaz C=0 akkor a program fut tovaacutebb a maacutesodik oumlsszehasonliacutetaacuteshoz de legalaacutebb annyit maacuter tudunk hogy A10 Itt oumlsszehasonliacutetjuk A eacuterteacutekeacutet 21-gyel Azeacutert 21-gyel mert az maacuter nem joacute Azeacutert 21-gyel mert a fent bemutatott oumlsszehasonliacutetaacutes a bdquokisebb mintrdquo relaacutecioacutera van kihegyezve Ott tartottunk tehaacutet hogy oumlsszehasonliacutetjuk A eacuterteacutekeacutet 21-gyel Ha ez utaacuten C=0 akkor maacuteris ugorhatunk a nemleges ciacutemkeacutere mert A21 eacutes nekuumlnk 20-ig joacute Ha e keacutet oumlsszehasonliacutetaacuteson tuacuteljut a program akkor viszont A eacuterteacuteke garantaacuteltan 10 eacutes 20 koumlzeacute esik a hataacuterokat is beleeacutertve Ezeket a relaacutecioacutes truumlkkoumlket nagyon sokszor hasznaacutelhatjuk uumlgyesen a koacutedjainkban

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

3 Jelzőlaacutempa toumlbb uumlzemmoacuteddal17 feladat

Modellezzuumlnk egy haacuteromlencseacutes koumlzlekedeacutesi jelzőlaacutempaacutet uacutegy hogy az egyes sziacutenek vaacuteltaacutesaacutet előre roumlgziacutetett időziacuteteacuteshez koumltjuumlk A jelzőlaacutempaacutenak haacuterom uumlzemmoacutedja legyen normaacutel (R-RA-G-A) villogoacute saacuterga eacutes kikapcsolt Az egyes uumlzemmoacutedok koumlzoumltt nyomoacutegombbal leacutepkedhessuumlnk A prellegeacutest kuumlszoumlboumlljuumlk ki [Code25 Code26]

A feladat most is a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute aacuteramkoumlrhoumlz tartozik A megoldaacutesaacutehoz nagyon sok elemet aacutetveszuumlnk a [16 feladat] megoldaacutesaacuteboacutel időszelet nagysaacutega (16128 s = 18 s) időszeletek szaacutemlaacutelaacutesa (szaml) eacutes a vaacuterakozaacutesi idő kezeleacutese (tvar) A feladat megoldaacutesaacuteban ismeacutet kombinaacuteljuk az 1 gombhoz tartozoacute megszakiacutetaacutest eacutes az intervallumszaacutemlaacuteloacutehoz tartozoacute megszakiacutetaacutest mint a [15 feladat] megoldaacutesaacuteban (Code22) Az 1 gombhoz tartozoacute megszakiacutetaacutes semmi maacutest nem tesz mint letiltja oumlnmagaacutet eacutes beaacutelliacutet egy jelzőbitet (nyom) A TIC megszakiacutetaacutesa pontosan akkor aacutelliacutetja magasra a laacutempafaacutezisok vaacuteltaacutesaacutehoz szuumlkseacuteges jelzőbitet (tovabb) ha letelt az aktuaacutelisan megadott vaacuterakozaacutesi idő (tvar) Ez a megszakiacutetaacutes meacuteg arra is figyel hogy az 1 gomb megszakiacutetaacutesaacutet csak akkor engedeacutelyezi uacutejra ha eltelt 2times18 s azaz 14 s A koacutedban talaacutelhatoacute egy szubrutin (RESET128) amely lekapcsolja az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet lenullaacutezza a 128-ad maacutesodperceket vaacuter egy kicsit majd uacutejra bekapcsolja az oacuteraacutet eacutes az intervallumszaacutemlaacuteloacutet Erre koumlzvetlenuumll az uumlzemmoacutedok koumlzoumltti ugraacutes utaacuten van szuumlkseacuteg hogy bdquotiszta lappalrdquo induljon uacutejra az idő meacutereacutese Eacutes azeacutert keruumllt mindez szubrutinba mert toumlbb helyen is szuumlkseacuteg van erre a reacuteszletre Maga a szubrutin iacutegy neacutez ki

A RESET128 szubrutin Code25asm-benRESET128 ANL TIMECON11111100b Az oacutera eacutes az intervallumszaacutemlaacuteloacute leaacutellMOV HTHSEC0 A 128-ad maacutesodpercek nullaacutezaacutesaMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelORL TIMECON00000011b Az oacutera eacutes az intervallumszaacutemlaacuteloacute indulRET

A megoldaacuteshoz aacutellapot-aacutetmenetgraacutefot melleacutekeluumlnk (laacutesd [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek] aacutebra) mert ez most maacuter sokkal informatiacutevabb mint amilyen egy tuacutelmeacuteretes folyamataacutebra lenne A laacutempafaacutezisokhoz tartozoacute aacutetmeneteket mint esemeacutenyeket ill az uumlzemmoacutedok vaacuteltaacutesaacutet kivaacuteltoacute gombnyomaacutesokat mint esemeacutenyeket elteacuterő sziacutennel jeloumlljuumlk előbbieket feketeacutevel utoacutebbiakat pirossal

125 aacutebra - A [17 feladat] megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek

A koacuted a fent bemutatott RESET128 szubrutin neacutelkuumll az alaacutebbiakban talaacutelhatoacute Ez a koacuted most maacuter egeacuteszen

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

oumlsszetett de az aacutellapot-aacutetmenet graacutef nagy segiacutetseacuteget nyuacutejthat ahhoz hogy ne teacutevedjuumlnk el benne Egyuacutettal megnyugtatjuk az olvasoacutet enneacutel hosszabb koacuted maacuter nem keruumll elő ebben a tankoumlnyvben A program elejeacuten az INTVAL regiszternek valoacute eacuterteacutekadaacutes utaacuten azeacutert nem szerepel roumlgtoumln a sokat emlegetett roumlvid vaacuterakozaacutes mert nem sokkal utaacutena amuacutegy is meghiacutevjuk a RESET128 szubrutint amely tartalmazza azt mindjaacutert a normaacutel uumlzemmoacuted első laacutempafaacutezisaacutenaacutel A koacuted veacutegeacuten nem reacuteszletezzuumlk az adatokat mert toumlkeacuteletesen megegyeznek a Code23-ban megadottakkal A koacutedban sziacutenes jeloumlleacuteseket hasznaacutelunk hogy joacutel elkuumlloumlniacutethetők legyenek az egyes uumlzemmoacutedokhoz tartozoacute reacuteszek

Code25asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0003h Az 1 nyomoacutegomb aacuteltal kivaacuteltott megszakiacutetaacutesJMP GOMB1 vektoraORG 0053h Az oacuteraacutehoz koumltoumltt intervallumszaacutemlaacuteloacuteJMP TIKTAK aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetetovabb BIT 00h Bitvaacuteltozoacute a faacutezisok vaacuteltaacutesaacutehoznyom BIT 01h A gomb lenyomaacutesaacutet jelző bitszaml DATA 030h Az 18-ad maacutesodperces intervallumok szaacutemolaacutesaacutenak vaacuteltozoacutejatvar DATA 031h Az aktuaacutelisan szuumlkseacuteges vaacuterakozaacutes vaacuteltozoacuteja Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1CLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetSETB nyom A nyom jelzőbit 1-re aacutelliacutetaacutesaRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKMOV Aszaml Megneacutezzuumlk hogy szamllt2 Iacutegy 216 s-igCJNE A2relac nem lesz hataacutesa a gombnyomaacutesnakrelacJC sima Ha igen ugrunk a koumlvetkező vizsgaacutelathozSETB EX0 Uacutejra engedeacutelyezzuumlk a gomb megszakiacutetaacutesaacutetsimaCJNE Atvarnovel Ha szaml nem eacuterte meacuteg el tvar-t akkor noumlveljuumlk szaml eacuterteacutekeacutetSETB tovabb Kuumlloumlnben tovabb=1 eacutesRETI visszateacuteruumlnknovelINC szaml Noumlveljuumlk szaml eacuterteacutekeacutetRETI Visszateacutereacutes a megszakiacutetaacutesboacutel FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL16 16-ot toumlltuumlnk INTVAL-ba mert 16128 s = 18 s lesz az alap-időosztaacutesunkORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutetSETB EX0 Engedeacutelyezzuumlk az 1 gomb megszakiacutetaacutesaacutetSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesnormal | | | CLR nyom A nyom jelzőbit toumlrleacuteseCALL RESET128 Reset-eljuumlk a 128-ad maacutesodpercek eacuterteacutekeacutetMOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-s portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumll

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV tvarA Betoumlltjuumlk tvar-ba a szuumlkseacuteges vaacuterakozaacutes időtartamaacutet Ennyiszer 18 s-et kell vaacuterakozniCLR tovabb Toumlroumlljuumlk a tovaacutebbhaladaacutes bitjeacutetMOV szaml1 Az 18 s-es időszeletek szaacutemlaacutelaacutesaacutenak vaacuteltozoacutejaacutet alaphelyzetbe aacutelliacutetjukbitek1 Figyeljuumlk a jelzőbiteketJB tovabbvalt Ha tovabb=1 vaacutelthat a laacutempaJB nyomsarga Ha nyom=1 gombot nyomtunk Joumln a koumlvetkező uumlzemmoacutedJMP bitek1 Figyeljuumlk tovaacutebb a jelzőbiteketvaltCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP normal Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozsarga | CLR nyom A nyom jelzőbit toumlrleacuteseCALL RESET128 Reset-eljuumlk a 128-ad maacutesodpercek eacuterteacutekeacutetMOV tvar4 A villogaacutes feacutel-perioacutedusideje 05 s leszMOV P011111111b Kikapcsoljuk az oumlsszes LED-etvillogXRL P000001000b Invertaacuteljuk a saacuterga LED aacutellapotaacutetCLR tovabb Jelzőbit toumlrleacuteseMOV szaml1 Szaacutemlaacuteloacute alapaacutellaacutesabitek2 Figyeljuumlk a jelzőbiteketJB tovabbvillog Ha tovabb=1 mehet a villogaacutes tovaacutebbJB nyomkikapcs Koumlvetkező uumlzemmoacutedJMP bitek2 Figyeljuumlk tovaacutebb a jelzőbiteketkikapcs CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etCLR tovabb Jelzőbit toumlrleacuteseMOV szaml1 Szaacutemlaacuteloacute alapaacutellaacutesaJNB nyom$ Helyben aacutellunk amiacuteg 0 a gomb jelzőbitjeJMP normal Kezdjuumlk előroumll a normaacutel uumlzemmoacuteddal Adatok lampa var

A Code25 programban a megszakiacutetaacutesokkal valoacute baacutenaacutesmoacuted maacuter egeacuteszen kifinomult megoldaacutest jelent Előfordulhat azonban hogy ezt a bdquokicentizettrdquo stiacutelust az olvasoacute kisseacute nyomasztoacutenak talaacutelja Semmi baj mutatunk egy elteacuterő megoldaacutest a [17 feladat]ra A [A megoldaacutesaacutehoz tartozoacute aacutellapot-aacutetmenetgraacutef A fekete nyilak az adott uumlzemmoacuted koumlvetkező faacutezisaacutehoz tartozoacute felteacutetelt reprezentaacuteljaacutek Ezt a felteacutetelt a TIC megszakiacutetaacutesa adja meg ha letelt az előiacutert vaacuterakozaacutesi idő A piros nyilak a gomb megnyomaacutesaacutet mint felteacutetelt reprezentaacuteljaacutek] aacutebraacuten laacutethatoacute aacutellapot-aacutetmenetgraacutef vaacuteltozatlanul eacuterveacutenyben marad A megoldaacutes kulcsa most abban rejlik hogy ismeacutet előhuacutezzuk a joacute oumlreg DELAY szubrutint de azt moacutedosiacutetjuk egy kicsit Most ugyanis ez fogja inteacutezni az adott laacutempafaacutezisok aacuteltal megkiacutevaacutent vaacuterakozaacutest de beleeacutepiacutetjuumlk a gombnyomaacutes jelzőbitjeacutenek figyeleacuteseacutet Joacute meacutelyre a legbelső ciklusba hogy mineacutel gyakrabban megtoumlrteacutenjen a bit vizsgaacutelata Az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutenak feladatkoumlre most leszűkuumll a prellegeacutes kikuumlszoumlboumlleacuteseacutere Eacuteppen uacutegy mint a [15 feladat] megoldaacutesaacuteban (laacutesd Code22) A gombnyomaacutes megszakiacutetaacutesa Code25-houmlz keacutepest egyetlen sorral bővuumll az intervallumszaacutemlaacuteloacute elindiacutetaacutesaacuteval

Az időhuacutezoacute szubrutint uacutegy terveztuumlk meg hogy pontosan azokkal a vaacuterakozaacutesi időkkel lehessen meghiacutevni mint amelyeket Code24 eacutes Code25 is tartalmaz Ez azt jelenti hogy ha a meghiacutevaacuteskor az akkumulaacutetor tartalma 8 akkor fogunk 1 maacutesodpercet vaacuterakozni Neacutezzuumlk a moacutedosiacutetott szubrutint

GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R5150cik5

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV R4249cik4JB nyomvisszaDJNZ R4cik4DJNZ R5cik5DJNZ R6cik6visszaRET Visszateacutereacutes a szubrutinboacutel

Eacutes most ismeacutet kiszaacutemiacutetjuk hogy mennyi időt vesz igeacutenybe a szubrutin futaacutesa Az akkumulaacutetor eacuterteacutekeacutet vegyuumlk 8-nak A sima DELAY szubrutinba eacutepiacutetett NOP utasiacutetaacutes 1 oacuterajelciklust vesz igeacutenybe a GDELAY szubrutinba aacutegyazott JB bitrel utasiacutetaacutes viszont 4-et Iacutegy a teljes rutin most oumlsszesen

oacuterajelciklust igeacutenyel A default 2 097 152 Hz oacuterajellel szaacutemolva ez 10002 s-et jelent

A mostani megoldaacutes lelke az hogy az időhuacutezoacute szubrutin ha maacuter maacutest uacutegysem csinaacutel mint időt huacutez kivaacuteloacutean alkalmas arra hogy amilyen sokszor csak lehet megvizsgaacutelja hogy 1-re billent-e a gombnyomaacutest jelző bit (nyom) Ha igen azonnal veacuteget is eacuter futaacutesa megszakad A főprogramban a szubrutin meghiacutevaacutesa utaacuten azonnal megvizsgaacuteljuk immaacuteron maacutesodszor hogy mi a jelzőbit eacuterteacuteke Ha 1 akkor idő előtt teacutert vissza a vezeacuterleacutes a szubrutinboacutel Eacutes ez azt jelenti hogy ugorhatunk a koumlvetkező uumlzemmoacutedhoz Az alaacutebbiakban koumlzoumllt programban az időhuacutezoacute szubrutint maacuter nem tuumlntetjuumlk foumll ismeacutetelten A megszakiacutetaacutesok vektorait sem mert azok vaacuteltozatlanul maradnak

Code26asmORG 0060h A teacutenyleges programkoacuted kezdetenyom BIT 01h A gomb lenyomaacutesaacutet jelző bit Az 1 gomb aacuteltal kivaacuteltott megszakiacutetaacutest lekezelő programreacutesz GOMB1CLR EX0 A megszakiacutetaacutes letiltja oumlnmagaacutetORL TIMECON00000010b Az intervallumszaacutemlaacuteloacute elindiacutetaacutesaSETB nyom A nyom jelzőbit 1-re aacutelliacutetaacutesaRETI Az intervallumszaacutemlaacuteloacute aacuteltal kivaacuteltott megszakiacutetaacutes TIKTAKANL TIMECON11111101b Az intervallumszaacutemlaacuteloacute leaacutelliacutetaacutesa Az oacuteraacutet nem aacutelliacutetjuk leSETB EX0 Uacutejra engedeacutelyezzuumlk a gomb megszakiacutetaacutesaacutetRETI visszateacuteruumlnk FŐPROGRAM MAINMOV TIMECON0 Az oacutera reset-eleacutese MOV INTVAL32 32-t toumlltuumlnk INTVAL-ba mert 32128 s = 14 s lesz a gombnyomaacutesok eacuterzeacutekeleacutesei koumlzoumltt eltelt időMOV R65 Neacutemi kis időhuacutezaacutes hogy a TIC regisztereiregdel foumlluumll tudjanak iacuteroacutedniNOPDJNZ R6regdelMOV TIMECON00000001b Az oacutera elindiacutetaacutesaORL IEIP200000100b Engedeacutelyezzuumlk az intervallumszaacutemlaacuteloacute megszakiacutetaacutesaacutetSETB EX0 Engedeacutelyezzuumlk az 1 gomb megszakiacutetaacutesaacutetSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesnormal | | | CLR nyom A nyom jelzőbit toumlrleacutese

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlroumlk LED-ekkel

MOV R70 Ciklusvaacuteltozoacute (0-toacutel 3-ig fog menni)fazisMOV DPTRlampa A lampa ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 A ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezMOV P0A A betoumlltoumltt bitmintaacutezatot kitesszuumlk a 0-s portraMOV DPTRvar A var ciacutemke ciacuteme az adatmutatoacuteba keruumllMOV AR7 Ismeacutet a ciklusvaacuteltozoacute eacuterteacuteke kell aMOVC AA+DPTR koacuted-indirekt ciacutemzeacuteshezCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesaJB nyomsarga Ha nyom=1 gombot nyomtunk Joumln a koumlvetkező uumlzemmoacutedCJNE R73kov A ciklusvaacuteltozoacute lekezeleacuteseJMP normal Ha R7=3 akkor kezdjuumlk uacutejra az egeacuteszetkovINC R7 Noumlveljuumlk a ciklusvaacuteltozoacutetJMP fazis Ugrunk vissza a koumlvetkező faacutezishozsarga | CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etvillogXRL P000001000b Invertaacuteljuk a saacuterga LED aacutellapotaacutetMOV A4 A 48 s vaacuterakozaacutes beaacutelliacutetaacutesaCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesaJB nyomkikapcs Ha gombot nyomtunk joumln a koumlvetkező uumlzemmoacutedJMP villog A villogaacutes folytataacutesakikapcs CLR nyom A nyom jelzőbit toumlrleacuteseMOV P011111111b Kikapcsoljuk az oumlsszes LED-etCALL GDELAY Az időhuacutezoacute rutin meghiacutevaacutesa (Az akkumulaacutetor nem vaacuteltozott)JNB nyomkikapcs Ha a rsquonyomrsquo jelzőbit 0 akkor ugrunk vissza a kikapcsolt uumlzemmoacuted elejeacutereJMP normal Kuumlloumlnben vissza a bdquonormaacutelrdquo uumlzemmoacutedhoz Adatok lampa var

Code25-oumlt eacutes Code26-ot oumlsszehasonliacutetva laacutethatjuk hogy az utoacutebbi kicsivel roumlvidebb eacutes kevesebb vaacuteltozoacutet igeacutenyel Mindkettő tanulsaacutegos megoldaacutest kiacutenaacutel de egeacuteszen elteacuterő stiacutelusban Az olvasoacutet arra biztatjuk hogy mindkettőt elemezze ki eacutes eacutertse meg maradeacutektalanul minden reacuteszleteacuteben Koumlnnyen előfordulhat hogy sokkal erősebb szimpaacutetiaacutet fog eacuterezni az egyik iraacutent mint a maacutesik iraacutent Azonban feladata vaacutelogatja hogy mikor melyik stiacutelussal eacuteruumlnk ceacutelt koumlnnyebben vagy eacuteppen elegaacutensabban Eacutes termeacuteszetesen az is előfordulhat hogy az olvasoacute harmadik a fenti kettőtől gyoumlkeresen elteacuterő oumltletet valoacutesiacutet majd meg eacutes tartja azt a legjobbnakhellip

Created by XMLmind XSL-FO Converter

13 fejezet - Kuumllső aacuteramkoumlr fotokapuvalAz előző fejezetben kuumllső aacuteramkoumlrbe koumltoumltt LED-eket kapcsolgattunk a mikrovezeacuterlővel Leacutepjuumlnk most tovaacutebb most vezeacuterlőjeleket ne csak kiadjunk hanem fogadjunk is

18 feladat

Keacutesziacutetsuumlnk behatolaacutesjelzőt fotokapuval Nyugalmi aacutellapotban egy zoumlld LED vilaacutegiacutet Behatolaacuteskor piros-keacutek villogoacute jelez Gombnyomaacutesra visszateacuteruumlnk a nyugalmi aacutellapothoz [Code27]

A feladat megoldaacutesaacutehoz fotokaput kell keacutesziacutetenuumlnk Ezt sokszor infradioacutedaacuteval eacutes infraacuteban eacuterzeacutekeny fototranzisztorral valoacutesiacutetjaacutek meg Tegyuumlk ezt mi is A kapcsolaacutesi rajzot a [A (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatjuk Fototranzisztorokről bővebben olvashatunk a [2] [3] [4] [5] eacutes [6] szakkoumlnyvekben

131 aacutebra - A [18 feladat] (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

A LED-ek műkoumldeacutese nem igeacutenyel bővebb magyaraacutezatot Az aacuteramkoumlri rajz alsoacute reacuteszeacuten laacutethatoacute dioacuteda az infravoumlroumls tartomaacutenyban sugaacuteroz a vele szemben elhelyezett fototranzisztor pedig ugyanebben a sziacutenkeacuteptartomaacutenyban eacuterzeacutekeny a laacutethatoacute tartomaacutenyban nem Ha az infradioacuteda sugaacuterzaacutest bocsaacutet ki akkor a fototranzisztor kinyit minek hataacutesaacutera a P21-es laacuteb foumlldpotenciaacutelra keruumll (Uacutegy is fogalmazhatunk hogy a fototranzisztor a P21-es laacutebat foumlldre huacutezza) Amennyiben a keacutet aacuteramkoumlri elem koumlzeacute olyan objektum keruumll amely elzaacuterja a dioacuteda aacuteltal kibocsaacutetott infravoumlroumls sugaacuterzaacutes uacutetjaacutet a tranzisztor lezaacuter eacutes iacutegy a P21-es laacuteb +5 V potenciaacutelon uumll Ez a keacutet aacutellapot pontosan megfelel a P21-es laacutebhoz tartozoacute bit alacsony ill magas aacutellapotaacutenak Iacutegy ha a programban ezt figyeljuumlk folyamatosan akkor detektaacutelhatjuk a bdquobehatolaacutestrdquo Ez azt jelenti hogy most nem adatot iacuterunk a P2-es portra hanem annak tartalmaacutet olvassuk peacuteldaacuteul

MOV AP2

Az infradioacuteda hasznaacutelataacutehoz egy kis truumlkkoumlt szeretneacutenk ismertetni Az infravoumlroumls sugaacuterzaacutes az emberi szem szaacutemaacutera laacutethatatlan Meacutegis koumlnnyen meg tudunk arroacutel győződni hogy műkoumldik-e az infradioacuteda bdquoNeacutezzuumlnk raacuterdquo digitaacutelis feacutenykeacutepezőgeacuteppel vagy mobiltelefon kameraacutejaacuteval eacutes maacuteris kideruumll be van-e kapcsolva ([Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel] aacutebra) Ez azeacutert van iacutegy mert a legtoumlbb digitaacutelis

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlr fotokapuval

keacuteproumlgziacutető eszkoumlz sziacutenkeacutepi eacuterzeacutekenyseacutege a koumlzeli infravoumlroumls tartomaacutenyban sem nulla iacutegy a tisztaacuten ilyen sugaacuterzaacutes hataacutesaacutera is kellően nagy jel keletkezik ahhoz hogy azt a kamera ndash igaz teljesen hamisan ndash laacutethatoacute informaacutecioacutenak tekintse

132 aacutebra - Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel

Az aacuteramkoumlrben alkalmazott BPV11F tiacutepusuacute fototranzisztornak a legtoumlbb fototranzisztorral ellenteacutetben nem kettő hanem haacuterom laacuteba van Ez termeacuteszetesen semmi egyebet nem jelent mint azt hogy a baacutezis is ki van vezetve iacutegy alkalmasint a munkapont-beaacutelliacutetaacutesroacutel is gondoskodhatunk Erre nekuumlnk most nem lesz szuumlkseacuteguumlnk eacutes tulajdonkeacuteppen be kell vallanunk hogy azeacutert esett a vaacutelasztaacutes erre a tiacutepusra mert ezt a hallgatoacutek nem keverik oumlssze keacutetlaacutebuacute dioacutedaacutekkalhellip A tranzisztor műkoumldeacuteseacuteről szinteacuten koumlnnyen meggyőződhetuumlnk a [A (Kuumllső aacuteramkoumlr fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute aacuteramkoumlrnek az ADuC-panelre toumlrteacutenő raacutecsatlakoztataacutesa utaacuten Ha a tranzisztor kinyit akkor a leiacutertak szerint a P21 laacuteb foumlldpotenciaacutelra keruumll iacutegy az ennek megfelelő LED-nek vilaacutegiacutetania kell a LED-soron ([Digitaacutelis feacutenykeacutepezőgeacuteppel keacutesziacutetett felveacutetel a bekapcsolt infradioacutedaacuteroacutel] aacutebra)

133 aacutebra - A fototranzisztor foumlldre huacutezza a P21-es laacutebat iacutegy az arra koumltoumltt LED vilaacutegiacutet

Az olvasoacuteban mindezek utaacuten jogosan meruumll foumll a keacuterdeacutes hogy mi toumlrteacutenik akkor ha kiacutevuumllről raacutekeacutenyszeriacutetuumlnk valamilyen jelszintet a 2-es portra (input portkeacutent hasznaacuteljuk) de szoftveresen maacutes jelszintet iacuterunk ki raacute (outputkeacutent hasznaacuteljuk) A megnyugtatoacute vaacutelasz az hogy a mikrovezeacuterlőt nem fogjuk toumlnkretenni a 2-es port hardveres kialakiacutetaacutesa olyan hogy ilyenkor a kuumllső jel az erősebb eacutes annak eredmeacutenye olvashatoacute le szoftveresen baacutermit is iacutertunk ki raacute előzőleg A 2-es port keacutetiraacutenyuacute port belső felhuacutezoacute-ellenaacutellaacutesokkal [1 p 57-58] Keacutetiraacutenyuacute mivoltaacutet nagyon joacutel peacuteldaacutezza a mostani feladat hiszen 3 laacutebaacutet kimeneti laacutebkeacutent (a 3 LED-hez) egyik laacutebaacutet bemeneti laacutebkeacutent (a fototranzisztorhoz) hasznaacuteljuk

A [18 feladat] megoldaacutesaacutet jelentő program műkoumldeacutese egyszerűbb lesz mint azt elsőre hinneacutenk Előszoumlr bekapcsoljuk a zoumlld LED-et majd folyamatosan figyeljuumlk hogy mi a P21 laacutebhoz tartozoacute bit eacuterteacuteke Ha ez 1 lesz valamikor akkor riasztaacutes toumlrteacutenik azaz felvaacuteltva villogtatni kezdjuumlk a piros eacutes keacutek LED-et A LED-ek bekapcsolt eacutes kikapcsolt aacutellapotaacutet a villogtataacuteskor egyszerű időhuacutezoacute szubrutinnal oldjuk meg Ez ugyanolyan szerkezetű lesz mint a GDELAY az előző fejezetben de most aacutetrendezzuumlk az egymaacutesba aacutegyazott ciklusok veacutegrehajtaacutesi szaacutemaacutet hogy ismeacutet akkor vaacuterjon pontosan 1 maacutesodpercet a szubrutin ha azt A=100 eacuterteacutekkel hiacutevjuk meg mint ahogy a joacute oumlreg DELAY rutinunkat szoktuk A rutin veacutegrehajtaacutesaacutehoz szuumlkseacuteges oacuterajelek darabszaacutemaacutenak kiszaacutemiacutetaacutesaacutet (a vaacuterakozaacutesi idő ellenőrzeacuteseacutet) most maacuter az olvasoacutera biacutezzuk A moacutedosiacutetott GDELAY szubrutin koumlzvetlenuumll figyeli az 1 gomb bitjeacutet mert most nem alkalmazunk megszakiacutetaacutesokat Amennyiben vaacuterakozaacutes koumlzben baacutermikor gombnyomaacutest eacuteszlel a program azonnal visszateacuter a szubrutinboacutel amit a program legelejeacutere toumlrteacutenő visszaugraacutes koumlvet Eacutes kezdődik előroumll minden Jelen esetben a prellegeacutessel sem kell foglalkoznunk hiszen a gombnyomaacutesnak nem leacutepteteacutes a szerepe hanem pusztaacuten a vezeacuterleacutes visszaugrataacutesa a program legelejeacutere amineacutel eacuteszrevehetetlen marad ha ez egymaacutes utaacuten toumlbbszoumlr koumlvetkezik be

Created by XMLmind XSL-FO Converter

Kuumllső aacuteramkoumlr fotokapuval

Code27asmORG 0060h A teacutenyleges programkoacuted kezdetebut1 BIT P32 Az 1 gomb bitjeacutenek elnevezeacuteseled1 BIT P23 A voumlroumls LED bitjeacutenek elnevezeacuteseled2 BIT P25 A keacutek LED bitjeacutenek elnevezeacuteseled3 BIT P27 A zoumlld LED bitjeacutenek elnevezeacutesetranzi BIT P21 A fototranzisztor bitjeacutenek elnevezeacutesenyom BIT 00h A gombnyomaacutes jelzőbitjeMAINCLR nyom A nyom jelzőbit toumlrleacuteseSETB led1 A voumlroumls LED kikapcsolaacutesaSETB led2 A keacutek LED kikapcsolaacutesaCLR led3 A zoumlld LED bekapcsolaacutesaMOV A6 A villogoacute frekvenciaacuteja (006 s)figyelMOV Ctranzi Pollozzuk a fototranzisztor jeleacutet Előszoumlr is a C-be toumlltjuumlkJNC figyel Ha nem szakiacutetja meg semmi a fotokapu infra sugaacuterzaacutesaacutet akkor a fototranzisztor a 21-es portbitet lehuacutezza foumlldre azaz 0 az eacuterteacuteke Ilyenkor pedig folytatjuk a figyeleacutest (pollozaacutest)SETB led3 Kikapcsoljuk a zoumlld LED-et mert bement valami a fotokapuba azaz joumln a riasztaacutesvillogMOV R74 Neacutegyszer villantjuk foumll a voumlroumls LED-etegyikCLR led1 Bekapcsoljuk a LED-etCALL GDELAY Vaacuterunk kicsit (006 s)JB nyomMAIN Ha volt gombnyomaacutes akkor kezdjuumlk előroumll a programotSETB led1 Kikapcsoljuk a LED-etCALL GDELAY Vaacuterunk kicsit (006 s)JB nyomMAIN Ha volt gombnyomaacutes akkor kezdjuumlk előroumll a programotDJNZ R7egyik Lekezeljuumlk az R7-es ciklusvaacuteltozoacutetMOV R74 Neacutegyszer villantjuk foumll a keacutek LED-etmasik A leiacuteraacutes toumlkeacuteletesen ugyanaz mint az előbb CLR led2 a voumlroumls LED-neacutel Csak most a keacuteketCALL GDELAY villogtatjukJB nyomMAINSETB led2CALL GDELAYJB nyomMAINDJNZ R7masikJMP villog Folytatoacutedik a villogtataacutes Időhuacutezoacute szubrutin amely az 1 gomb lenyomaacutesaacutet is figyeli GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R543cik5MOV R469cik4JNB but1armed Itt vizsgaacuteljuk meg a gomb bitjeacutet Elugrunk ha le van nyomva azaz 0DJNZ R4cik4DJNZ R5cik5DJNZ R6cik6RETarmed Ide ugrunk ha gombnyomaacutes voltSETB nyom Magasra aacutelliacutetjuk a jelzőbitetRET

Created by XMLmind XSL-FO Converter

14 fejezet - Heacutetszegmenses kijelző meghajtaacutesaAz előző keacutet fejezetben megtanultuk hogy hogyan adhatunk ill fogadhatunk egyszerű jeleket aacuteramkoumlroumlknek ill aacuteramkoumlroumlkről Ebben a fejezetben munkaacutera fogjuk az egyik legegyszerűbb de mind a mai napig igen sokszor neacutelkuumlloumlzhetetlen megjeleniacutetőeszkoumlzt a heacutetszegmenses kijelzőt Heacutetszegmenses kijelzőből toumlbb szaacutez gyaacutertoacute toumlbb ezer feacuteleacutet keacutesziacutet A kijelzők elteacuternek meacuteretben aacuteramfelveacutetelben laacutebelrendezeacutesben sziacutenben stb A heacutetszegmenses kijelzőkneacutel azonban van valami ami mindegyikuumlkneacutel megegyezik a szegmensek jeloumlleacutese (laacutesd [A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese] aacutebra) A DP szimboacutelum a Decimal Point angol kifejezeacutesből szaacutermazik eacutes tizedespontot jelent (Maacutes szoumlvegkoumlrnyezetben a DP egeacuteszen maacutest jelenthet de ennek taacutergyalaacutesa nem a mi feladatunkhellip)

A tankoumlnyvben eddig ha LED-eket kellett bekapcsolnunk mindig foumlldre huacuteztuk azokat iacutegy olyan heacutetszegmenses kijelzőt ceacutelszerű vaacutelasztanunk amely koumlzoumls anoacutedos Ettől eltekintve gyakorlatilag nincs megkoumlteacutes a tiacutepusra A tankoumlnyvben konkreacutetan az SA52-11 tiacutepusuacute heacutetszegmenses kijelzőt hasznaacuteljuk melynek laacutebkiosztaacutesa a [Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa] aacutebraacuten laacutethatoacute

141 aacutebra - A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese

142 aacutebra - Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa

A heacutetszegmenses kijelző meghajtaacutesa toumlrteacutenhet uacutegy hogy egy teljes portot foumllaacuteldozva koumlzvetlenuumll kapcsolgatjuk az egyes szegmenseket mint LED-eket Ez azt jelenti hogy uacutegy jaacuterunk el mintha a [Az SA52-11-es heacutetszegmenses kijelző laacutebkiosztaacutesa] aacutebraacuten laacutethatoacute laacutebkiosztaacutest egy-egy ellenaacutellaacutessal kibőviacuteteneacutenk eacutes azokat szeacutepen sorban raacutekapcsolnaacutenk a 0 vagy a 2 port laacutebaira Neacutemileg keacutenyelmesebb megoldaacutest jelent az ha alkalmazunk egy BCD-heacutetszegmenses dekoacutedert A koumlvetkezőkben bemutatott joacute neacutehaacuteny feladat megoldaacutesaacutenaacutel konkreacutetan az SN74LS47N tiacutepusuacute dekoacutedert hasznaacuteljuk A dekoacuteder-IC feleacutepiacuteteacuteseacutenek eacutes műkoumldeacuteseacutenek bemutataacutesa nem a tankoumlnyv feladata az adatlapot az olvasoacute kuumlloumln koumlnyvtaacuterban talaacutelja Annyit azeacutert elmondhatunk hogy a 7447-es dekoacuteder felhasznaacutelaacutesaacuteval csak 4 portbitet koumlt le a kijelző ciacutemzeacutese A szaacutemjegyeknek megfelelő binaacuteris eacuterteacutek előaacutelliacutetaacutesa eacutes kirakaacutesa a portra azutaacuten maacuter a mi feladatunk Illik meacuteg azt is megjegyeznuumlnk hogy a decimaacutelis ponttal a dekoacuteder-IC nem tud mit kezdeni Ha ezt hasznaacutelni szeretneacutenk akkor annak műkoumldteteacuteseacutehez kuumlloumln ellenaacutellaacutes eacutes szabad portbit szuumlkseacuteges A [Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel] aacutebraacuten laacutethatoacute aacuteramkoumlr a mikrovezeacuterlős kalandjaink soraacuten egy darabig elkiacuteseacuter bennuumlnket A megeacutepiacutetett aacuteramkoumlrben az egyes szegmensekhez tartozoacute ellenaacutellaacutesok eacuterteacutekeacutenek 390 Ω-ot vaacutelasztottunk heacutetszegmenses kijelzőnek pedig egy SA52-11GWA tiacutepusuacutet azaz zoumlldet

143 aacutebra - Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

Az olvasoacutenak felteacutetelezhetően maacuter viszketnek az ujjbegyei hogy megiacuterja első programjaacutet amellyel a heacutetszegmenses kijelzőt uumlzemeltetheti Fogalmazzuk meg haacutet koumlvetkező feladatunkat a [Heacutetszegmenses kijelző meghajtaacutesa 7447-es dekoacutederrel] aacutebraacuten laacutethatoacute aacuteramkoumlrhoumlz

19 feladat

Leacuteptessuumlk a szaacutemokat a heacutetszegmenses kijelzőn 0-toacutel 9-ig 9 utaacuten ismeacutet 0-roacutel induljon a szaacutemlaacutelaacutes [Code28]

Enneacutel az egyszerű kis feladatnaacutel az aacuteramkoumlr oumlsszerakaacutesa tovaacutebb tart mint megiacuterni a programot annyira egyszerű lesz Folyamataacutebra vagy egyeacuteb szemleacutelteteacutes teljesen felesleges hozzaacute De meacuteg joacuteformaacuten bővebb magyaraacutezat is Egyszerűen leacutetrehozunk egy ciklust amely 0-toacutel 9-ig szaacutemol majd visszaugrunk a program elejeacutere A ciklus minden veacutegrehajtaacutesa soraacuten kitesszuumlk a P2-es portra a ciklusvaacuteltozoacute eacuterteacutekeacutet A programban a joacute oumlreg DELAY szubrutinunkat hasznaacuteljuk időhuacutezaacutesra Iacuteme az bdquoijesztően hosszuacuterdquo koacuted

Code28asmMAINMOV R40 R4 a ciklusvaacuteltozoacute 0 a kezdeti eacuterteacutekcountMOV P2R4 Kitesszuumlk a P2-es portra a ciklusvaacuteltozoacutetMOV A40 04 s időhuacutezaacutes leszCALL DELAY IdőhuacutezaacutesINC R4 A ciklusvaacuteltozoacute noumlveleacuteseCJNE R410count A ciklusvaacuteltozoacute felteacuteteleacutenek kieacuterteacutekeleacuteseJMP MAIN Kezdjuumlk előről az egeacuteszet

Oldjunk most meg veacutegre egy olyan feladatot is amely nem oumlnmagaacuteeacutert valoacute hanem akaacuter eacutertelmes alkalmazaacutesi koumlre is lehet Vonjuk be a nyomoacutegombokat is Meg meacuteg egy kuumllső LED-et is

20 feladat

Az egyik gombbal leacuteptessuumlk a szaacutemokat a heacutetszegmenses kijelzőn 1-toacutel 9-ig (9 utaacuten 1-ről induljon ismeacutet a szaacutemlaacutelaacutes) A maacutesik gomb megnyomaacutesaacutera egy kuumllső LED annyiszor villanjon foumll amennyit a kijelző mutat [Code29]

A kuumllső LED-hez maacuter nem rajzolunk kuumlloumln aacuteramkoumlrt Koumlssuumlk azt megfelelő ellenaacutellaacuteson keresztuumll a P27-es laacutebra Ez az olvasoacutenak a tankoumlnyvből megtanultak alapjaacuten veacutelhetően maacuter nem jelenthet probleacutemaacutethellip

Taacuteroljuk a kijelezendő eacuterteacuteket R3-ban a kuumllső LED villogtataacutesaacutenak ciklusvaacuteltozoacuteja pedig legyen R2 Az időhuacutezaacutesokhoz hasznaacuteljuk ismeacutet a joacute oumlreg DELAY szubrutint Mivel a programban roumlvidseacutege elleneacutere talaacuten meacutegis szokatlan megoldaacutesokat alkalmazunk folyamataacutebraacutet keacutesziacutetuumlnk amely a [A (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja] aacutebraacuten laacutethatoacute A szokatlan megoldaacutes a kezdeti eacuterteacutek olyan megadaacutesa ami elő sem fordulhat hiszen R3 első legaacutelis eacuterteacuteke 1 A program kezdeteacuten R3-t meacutegis 0-nak vesszuumlk viszont utaacutena azonnal noumlveljuumlk is 1-gyel Ugyanez a megoldaacutes szerepel akkor is amikor megvizsgaacuteljuk hogy eleacuterte-e a 9-et A megoldaacutes eleganciaacuteja az hogy a kezdeti eacuterteacutek eacutes az alaphelyzet elrendezeacutese mindoumlsszesen egy sort igeacutenyel utaacutena mindjaacutert beugratjuk a vezeacuterleacutest az algoritmus bdquosziacuteveacuteberdquo hiszen onnantoacutel kezdve toumlkeacuteletesen rendben tud eacutes fog műkoumldni minden

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

144 aacutebra - A [20 feladat] (Heacutetszegmenses kijelző meghajtaacutesa) megoldaacutesi elveacutenek folyamataacutebraacuteja

A koacuted az elmondottak elleneacutere meglehetősen roumlvid A DELAY szubrutint most sem tuumlntetjuumlk foumll

Code29asmbut1 BIT P32 Az 1 gomb bitvaacuteltozoacutejabut2 BIT P33 A 2 gomb bitvaacuteltozoacutejaled BIT P27 A kuumllső LED bitvaacuteltozoacutejaMAINMOV R30 0-t teszuumlnk R3-ba mert utaacutena azonnal noumlveljuumlk majd 1-gyelJMP sima Ugrunk a noumlveleacuteshezgombokJNB but1lep Az 1 gombra leacuteptetjuumlk a kijelzett szaacutemeacuterteacuteketJNB but2villog A 2 gombra villogtatunkJMP gombok Tovaacutebb figyeljuumlk a gombokatlepCJNE R39sima Ha meacuteg nem eacutertuumlk el a 9-et nincs bajMOV R30 Ha eleacutertuumlk nullaacutezzuk R3-t hiszen azonnal noumlveljuumlk azt Iacutegy lesz 1 az aacutetfordulaacutes utaacuteni eacuterteacuteksimaINC R3 A kijelezendő eacuterteacutek noumlveleacuteseMOV AR3 R3-t A-ba tesszuumlk

Created by XMLmind XSL-FO Converter

Heacutetszegmenses kijelző meghajtaacutesa

ORL A11110000b A felső 4 bitet 1-re aacutelliacutetjuk hogy ne vilaacutegiacutetson minden LEDMOV P2A Kitesszuumlk a kapott eacuterteacuteket P2-reMOV A20 02 s vaacuterakozaacutes leszCALL DELAY Időhuacutezoacute szubrutinJMP gombok Ugrunk vissza a gombok figyeleacuteseacutehezvillogMOV AR3 R3 eacuterteacutekeacutet A-ne keresztuumll R2-be tesszuumlkMOV R2A Ez lesz a villogtataacutes ciklusvaacuteltozoacutejaMOV A30 03 s vaacuterakozaacutes lesz a villogtataacutesnaacutelvillCLR led Kuumllső LED bekapcsolaacutesaCALL DELAY Időhuacutezoacute szubrutinSETB led Kuumllső LED kikapcsolaacutesaCALL DELAY Időhuacutezoacute szubrutin DJNZ R2vill Az R2 ciklusvaacuteltozoacute lekezeleacuteseJMP gombok Ugraacutes vissza a gombok figyeleacuteseacutehez

Created by XMLmind XSL-FO Converter

15 fejezet - Kommunikaacutecioacute az UART-talA mai ember ha szaacutemiacutetoacutegeacutepes csatlakozaacutesi lehetőseacutegekre gondol eacutes az nem az Internet akkor az USB jut eszeacutebe Reacutegebben a PC-k csatlakozaacutesi lehetőseacutegeineacutel a soros portot eacutes a paacuterhuzamos portot szoktaacutek bemutatni Eacuterdekes moacutedon a paacuterhuzamos port mint csatlakozaacutesi feluumllet szerepe elsikkadt a soros port viszont tovaacutebbfejlődoumltt eacutes ebből lett az amit ma USB-nek hiacutevunk A betűszoacute az angol Universal Serial Bus kifejezeacutesből szaacutermazik eacutes univerzaacutelis soros buszt jelent Ma maacuter kisseacute lesajnaacuteljuk azokat a szaacutemiacutetoacutegeacutepeket amelyeken nincs legalaacutebb neacutegy USB-csatlakozoacute A mai kor (2013-at iacuterunk eacuteppen) perifeacuteriaacuteit eacutes egyeacuteb kuumltyuumlit a legtoumlbbszoumlr USB-porton keresztuumll csatlakoztathatjuk a szaacutemiacutetoacutegeacutepuumlnkhoumlz Kuumllső lemezegyseacutegeket kaacutertyaolvasoacutekat nyomtatoacutekat pen-drive-okat stb

Az USB fogalom valoacutejaacuteban egy ipari szabvaacutenyt jelent amely a buszhoz hasznaacutelt vezeteacutekeket csatlakozoacutekat protokollokat definiaacutelja szaacutemiacutetoacutegeacutepek eacutes elektronikus eszkoumlzoumlk kommunikaacutecioacutejaacutehoz csatlakoztataacutesaacutehoz eacutes taacutepellaacutetaacutesaacutehoz Ha szeacutetvaacutegunk egy USB-kaacutebelt akkor a [USB-kaacutebel belső vezeteacutekei] aacutebraacuten laacutethatoacute keacutep taacuterul szemuumlnk eleacute Az USB-kaacutebel tehaacutet neacutegy belső szigetelt vezeteacuteket eacutes aacuteltalaacuteban egy finom sodrott eacuterkoumlteget tartalmaz Ez utoacutebbinak kizaacuteroacutelag aacuternyeacutekolaacutesi ill mechanikai szerepe van A sziacutenes szigeteleacutesű vezeteacutekek funkcioacutejaacutet a [Az USB-kaacutebel vezeteacutekeinek funkcioacuteja] foglalja oumlssze

151 aacutebra - USB-kaacutebel belső vezeteacutekei

151 taacuteblaacutezat - Az USB-kaacutebel vezeteacutekeinek funkcioacuteja

piros VCC +5 V taacutep

feheacuter data ndash adat

ndash

zoumlld data + adat

+

fekete GND foumlld

Az UART betűszoacute aacuteltal takart fogalom szorosan kapcsoloacutedik az USB fogalmaacutehoz de vigyaacutezzunk mert nem ugyanazt jelenti Az UART betűszoacute az angol Universal Asynchonous ReceiverTransmitter kifejezeacutesből szaacutermazik ami univerzaacutelis aszinkron adoacutevevőt jelent Ez egyfajta hardverelem amely aacutetalakiacutetaacutest veacutegez soros eacutes paacuterhuzamos adatformaacutetumok koumlzoumltt Tehaacutet paacuterhuzamosan kezelt adatokat (mondjuk egy baacutejt bitjeit) elkuumlldhetuumlnk valamely eszkoumlzről egy UART hardverelem koumlzbeiktataacutesaacuteval az USB-n amit egy maacutesik eszkoumlz fog a sajaacutet UART-jaacuteval visszaalakiacutetani Iacutegy korrekt a fogalmazaacutes Vagyis egy baacutejtot az UART szeacutetszerel bitekre azokat elkuumlldoumlzgeti a soros buszon a kuumlldoumltt bitekből pedig a maacutesik eszkoumlz UART-ja szereli uacutejra oumlssze az elkuumlldoumltt baacutejtot Szerencseacutere az ADuC 842-es architektuacuteraacutejaacuteban a baacutejtok szeacutetszereleacuteseacutevel eacutes oumlsszerakaacutesaacuteval nekuumlnk egyaacuteltalaacuten nem kell foglalkoznunk ezt megteszi helyettuumlnk a mikrovezeacuterlő UART-ja Mi csak a baacutejtszintű kommunikaacutecioacutet fogjuk eacuterzeacutekelni csak azzal kell toumlrődnuumlnk Ha nekuumlnk kellene bitenkeacutent kuumlldoumlzgetnuumlnk az adatokat akkor igen csak megizzadnaacutenk mire oumlsszehoznaacutenk egy valamirevaloacute kommunikaacutecioacutethellip

1 Az UART soros interfeacuteszAz ADuC soros portja full duplex elven műkoumldik azaz egyidejűleg keacutepes adatokat kuumlldeni eacutes fogadni A fogadaacutesi csatorna pufferelt ami azt jelenti hogy egy baacutejt megeacuterkezeacutese utaacuten elkezdődhet a maacutesodik baacutejt fogadaacutesa meacuteg akkor is ha az elsőt meacuteg nem olvastuk ki a fogadaacutes regisztereacuteből Viszont ha ilyenkor a maacutesodik baacutejt teljes egeacuteszeacuteben megeacuterkezik akkor az elsőt elvesziacutetjuumlk Fizikailag a fogadaacuteseacutert a P30 (RxD) laacuteb a

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

kuumlldeacuteseacutert a P31 (TxD) laacuteb felelős A szoftveres alkalmazaacutesoknaacutel az SBUF eacutes SCON nevű SFR jaacutetszik rendkiacutevuumll fontos szerepet

A fogadaacutes eacutes a kuumlldeacutes regisztereit az SBUF SFR-en keresztuumll eacuterjuumlk el Az SBUF iacuteraacutesakor a kuumlldeacutes regisztereacutebe keruumll az adat az SBUF olvasaacutesakor a fogadaacutes regisztereacuteben leacutevő adatot eacuterjuumlk el Tudnunk kell hogy itt fizikailag keacutet kuumlloumlnaacutelloacute regiszterről van szoacute meacutegis mindkettőhoumlz az SBUF regisztert kell hasznaacutelnunk

Az SCON nevű SFR a soros porti kommunikaacutecioacute konfiguraacutelaacutesaacuteeacutert felel Ismerteteacuteseacutet a [Az SCON SFR parameacuteterei] tartalmazza Meg kell azonban jegyeznuumlnk hogy toumlbb bitet eacuteppen csak megnevezuumlnk vagy igen roumlviden jellemzuumlnk mert a tankoumlnyv alkalmazaacutesainaacutel messze nem hasznaacuteljuk mindegyiket A leiacuteraacutes a gyaacuteri ismertetőben teljes reacuteszletesseacuteggel megtalaacutelhatoacute [1]

152 taacuteblaacutezat - Az SCON SFR parameacuteterei

SCON Serial Port Control Register

A soros port vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek

00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg

igen

Bit Szimboacute-lum Angol neacutev Magyar neacutev Jelenteacutes

7 SM0 Serial Mode Select Bits Kommunikaacutecioacutes moacutedot kivaacutelasztoacute bitek

Laacutesd [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese]

6 SM1

5 SM2 Multiprocessor Communication Enable Bit

Toumlbbprocesszoros kommunikaacutecioacutet engedeacutelyező bit

Nem taacutergyaljuk

4 REN Receive Enable Bit Fogadaacutest engedeacutelyező bit

A soros port fogadaacutest engedeacutelyező (1) eacutes letiltoacute (0) bitje

3 TB8 Transmit Bit 8 (9 bit) Adaacutesi bit 8 (9 bit)

2 eacutes 3 moacutedban a 9 elkuumlldoumltt bit (Darabra Ha 0-toacutel sorszaacutemozzuk akkor a nyolcadik)

2 RB8 Receive Bit 8 (9 bit) Fogadaacutesi bit 8 (9 bit)

2 eacutes 3 moacutedban a 9 fogadott bit (Darabra Ha 0-

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

toacutel sorszaacutemozzuk akkor a nyolcadik) 1 moacutedban a stopbit keruumll ide

1 TI Transmit Interrupt Flag Adaacutesi megszakiacutetaacutest jelző bit

Kuumlldeacuteskor a 0 moacutedban a 8 bit (1-től kezdett sorszaacutemozaacutessal) veacutegeacuteneacutel hardveresen 1-re aacutell A toumlbbi moacutedban a stopbit elejeacuten aacutell 1-re Szoftveresen kell toumlroumllni

0 RI Receive Interrupt Flag Fogadaacutesi megszakiacutetaacutest jelző bit

Fogadaacuteskor a 0 moacutedban a 8 bit (1-től kezdett sorszaacutemozaacutessal) veacutegeacuteneacutel hardveresen 1-re aacutell A toumlbbi moacutedban a stopbit feleacuteneacutel aacutell 1-re Szoftveresen kell toumlroumllni

153 taacuteblaacutezat - Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese

SM0 SM1 Kivaacutelasztott moacuted

0 0 0 moacuted Leacuteptetőregiszter roumlgziacutetett baud-raacuteta (Core_Clk2)

0 1 1 moacuted 8-bites UART vaacuteltoztathatoacute baud-raacuteta

1 0 2 moacuted 9-bites UART roumlgziacutetett baud-raacuteta (Core_Clk32) vagy (Core_Clk16)

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

1 1 3 moacuted 9-bites UART vaacuteltoztathatoacute baud-raacuteta

A [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese] foglalja oumlssze a soros porti kommunikaacutecioacute moacutedjait Laacutethatoacute hogy az ADuC 842-es mikrovezeacuterlőt nagyjaacuteboacutel mindenre felkeacutesziacutetetteacutek ez uumlgyben A tankoumlnyvben kizaacuteroacutelag az 1 moacutedot fogjuk hasznaacutelni mert ez a legegyszerűbb eacutes legrugalmasabb hiszen nem kell jaacuteruleacutekos ellenőrzőbittel vacakolnunk viszont vaacuteltoztathatoacute a kommunikaacutecioacute sebesseacutege A szaacutemiacutetaacutestechnikaacuteban a kommunikaacutecioacute sebesseacutegeacutet bits-ban meacuterjuumlk Eacutemile Baudot feltalaacuteloacute tiszteleteacutere a bits meacuterteacutekegyseacuteget baudnak is nevezik jele Bd Magaacutet a kommunikaacutecioacutes sebesseacuteget szokaacutes baud-raacutetaacutenak is hiacutevni

Az ADuC 842-es mikrovezeacuterlő tulajdonsaacutegainak felsorlaacutesakor maacuter emliacutetettuumlk hogy az architektuacutera toumlbb időziacutetőtszaacutemlaacuteloacutet is tartalmaz Az a helyzet hogy egeacuteszen pontosan neacutegyet A sorszaacutemozaacutesuk persze a szaacutemiacutetaacutestechnikaacuteban megszokottak szerint 0 1 2 eacutes 3 A soros porti kommunikaacutecioacute jeleinek uumltemezeacuteseacutehez az 1 eacutes a 2 időziacutetőtszaacutemlaacuteloacutet is hasznaacutelhatjuk de a harmadikat kifejezetten erre a ceacutelra hoztaacutek leacutetre iacutegy a tankoumlnyvben mi mindig ezt fogjuk hasznaacutelni (A maacutesik haacuterom időziacutetőszaacutemlaacuteloacute joacute lesz meacuteg nekuumlnk maacutes ceacutelokrahellip) A 3 időziacutetőszaacutemlaacuteloacute konfiguraacutecioacuteja keacutet SFR-rel toumlrteacutenik T3CON eacutes T3FD Előszoumlr neacutezzuumlk meg mire valoacute a T3CON regiszter ([Az T3CON SFR parameacuteterei])

154 taacuteblaacutezat - Az T3CON SFR parameacuteterei

T3CON Timer 3 Control Register

A 3 időziacutetőszaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 T3BAUDEN Ha 1 akkor a baud-raacutetaacutet a 3 szaacutemlaacuteloacute generaacutelja A 0 eseteacutet nem taacutergyaljuk

6 - Foglalt

5 - Foglalt

4 - Foglalt

3 - Foglalt

2 DIV2 A binaacuteris osztoacute bitjei

DIV2 DIV1

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

DIV0

0 0 0

0 0 1

1 1 1

1 DIV1

0 DIV0

Az ADuC 842-es gyaacuteri leiacuteraacutesaacuteban talaacutelhatoacute egy aacutebra amely azt mutatja hogy hogyan aacutell elő az oacuterajelből a soros porti kommunikaacutecioacute baud-raacutetaacuteja [1 p 68 Figure 74] Ezt az aacutebraacutet vaacuteltozatlan formaacuteban vesszuumlk aacutet (laacutesd [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebra)

152 aacutebra - A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten

A baud-raacuteta előaacutelliacutetaacutesaacutehoz tehaacutet az aktuaacutelis oacuterajel leosztaacutesa toumlbb leacutepcsőben toumlrteacutenik A gyaacuteri leiacuteraacutesban az eredeti aacutebra [1 p 68 Figure 74] utaacuten szereplő keacutepletek viszont azt sugalljaacutek hogy a legelső kettővel valoacute osztaacutest jelelő blokk veacutelhetően foumlloumlsleges Ennek igazolaacutesaacutera mi is levezetjuumlk a regiszterek eacuterteacutekeacutenek beaacutelliacutetaacutesaacutehoz szuumlkseacuteges keacutepleteket amelyek viszont egytől egyig meg fognak egyezni a gyaacuteri leiacuteraacutesban szereplőkkel A matematikaacuteban ugyan nem bdquoszabaacutelyosrdquo szimboacutelumvaacutelasztaacutesnak leszuumlnk tanuacutei de a mi levezeteacuteseinkben is oumlnaacutelloacute vaacuteltozoacutenak tekintjuumlk most a T3FD eacutes a DIV szimboacutelumokat Jeloumlljuumlk tovaacutebbaacute B-vel a kiacutevaacutent baud-raacutetaacutet

A [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebraacuten laacutethatoacute osztaacutesi leacutepcsők alapjaacuten (a legelsőt mellőzve) a koumlvetkező oumlsszefuumlggeacutest iacuterhatjuk fel

Ez a kifejezeacutes a koumlvetkező moacutedon alakiacutethatoacute tovaacutebb

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Ez a keacuteplet pedig pontosan ugyanaz mint a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 3 keacuteplete eltekintve az angolszaacutesz jeloumlleacutesmoacutedtoacutel A keacuteplet aacutetrendezeacuteseacutevel a koumlvetkezőket kapjuk

Ez az oumlsszefuumlggeacutes pedig azzal egyezik meg amelyik a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 2 keacuteplete

Most megmagyaraacutezzuk hogy egyaacuteltalaacuten mieacutert van szuumlkseacuteg a [A baud-raacuteta előaacutelliacutetaacutesa a 3 időziacutetőszaacutemlaacuteloacute eseteacuten] aacutebraacuten laacutethatoacute (1+T3FD64) osztaacutesi fokozatra Tegyuumlk fel hogy e neacutelkuumll szeretneacutenk megkapni a baud-raacutetaacutet azaz

Ezt aacutetalakiacutetva kapjuk hogy

azaz

Eacutes ez az oumlsszefuumlggeacutes azzal egyezik meg amelyik a gyaacuteri leiacuteraacutes 68 oldala 2 hasaacutebjaacutenak 1 keacuteplete Maacutermost ha mindent ilyen szeacutepen le tudunk vezetni akkor ismeacutetelten mieacutert van szuumlkseacuteg az (1+T3FD64) osztaacutesi fokozatra A vaacutelasz erre az hogy azeacutert mert DIV eacuterteacuteke csakis termeacuteszetes szaacutem lehet Sőt kideruumll hogy ez az eacuterteacutek haacuterom biten aacutebraacutezolhatoacute DIV2 DIV1 DIV0 (laacutesd [Az T3CON SFR parameacuteterei]) Maacuterpedig ha ilyen fontos uumlgyben kerekiacuteteacutesi hibaacutek miatt elvesznek eacuterteacutekek az bizony nagyon kritikus koumlvetkezmeacutenyekkel jaacuterhat egy igazi meacuternoumlki alkalmazaacutesra neacutezve Iacutegy tehaacutet most maacuter eacuterthető mieacutert lesz szuumlkseacuteg a szoacute szerint brutaacutelis binaacuteris osztoacuten kiacutevuumll egy finomiacutetoacute fokozatra ami szintuacutegy egy osztoacuteleacutepcsőfokot jelent

A gyaacuteri leiacuteraacutesban a fenti levezeteacutesek nem talaacutelhatoacutek meg Az ott leiacutertak tuumlkreacuteben a koumlvetkező kiegeacutesziacuteteacuteseket fűzzuumlk a levezeteacutesekhez A DIV eacuterteacuteket a T3CON regiszter alsoacute haacuterom bitjeacuten kell beaacutelliacutetanunk Nagyon leacutenyeges hogy ehhez a kapott DIV eacuterteacuteket mindig lefeleacute kell egeacuteszre kerekiacutetenuumlnk A T3FD SFR eacuterteacutekeacutenek meghataacuterozaacutesaacutenaacutel a DIV maacuter szinteacuten a lefeleacute kerekiacutetett eacuterteacutek T3FD eacuterteacutekeacutere viszont a kerekiacuteteacutes szokvaacutenyos moacutedjaacutet kell alkalmaznunk Ezek utaacuten az aktuaacutelis baud-raacuteta a koumlvetkező formulaacuteval szaacutemiacutethatoacute

Peacutelda gyanaacutent hataacuterozzuk meg DIV eacutes T3FD eacuterteacutekeacutet amikor is a kiacutevaacutent kommunikaacutecioacutes sebesseacuteg 9 600 baud az oacuterajel pedig a default 2 097 152 Hz

A lefeleacute kerekiacuteteacutes előiacuteraacutesaacutenak megfelelően a veacutegső eacuterteacutek DIV = 3 lesz Ennek alapjaacuten a T3CON regiszter alsoacute

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

haacuterom bitjeacutet 011-re kell aacutelliacutetanunk A T3FD regiszterbe pedig a koumlvetkező eacuterteacuteket kell iacuternunk

Iacutegy a veacutegső eacuterteacutek T3DF = 45 = 2Dh lesz Ellenőrizzuumlk az aktuaacutelis baud-raacutetaacutet

ami az eleacuterni kiacutevaacutent 9 600-as eacuterteacutekhez keacutepest csupaacuten 02 -os elteacutereacutest jelent Ilyen csekeacutely elteacutereacutest pedig gond neacutelkuumll elvisel az UART egyseacuteg A [A soros porti kommunikaacutecioacute tipikus eacuterteacutekei] a default 2 097 152 Hz-es oacuterajel eseteacutere tartalmaz beaacutelliacutetaacutesi eacuterteacutekeket neacutehaacuteny tipikus kommunikaacutecioacutes sebesseacutegeacuterteacutekhez Maacutes oacuterajel-beaacutelliacutetaacuteshoz tartozoacute eacuterteacutekeket megtalaacutelunk a gyaacuteri leiacuteraacutesban [1 p 69 Table 34] A [A soros porti kommunikaacutecioacute tipikus eacuterteacutekei] T3CON fejleacutecű oszlopaacuteban maacuter konkreacutetan azok az eacuterteacutekek szerepelnek amelyeket teacutenylegesen ebbe a regiszterbe kell iacuternunk A bal oldali feacutelbaacutejt a 3 időziacutetőszaacutemlaacuteloacute engedeacutelyezeacuteseacutet jelenti (vouml [Az T3CON SFR parameacuteterei]) a jobb oldali feacutelbaacutejt pedig nyilvaacutenvaloacutean megegyezik DIV eacuterteacutekeacutevel

155 taacuteblaacutezat - A soros porti kommunikaacutecioacute tipikus eacuterteacutekei

Kommunikaacutecioacutes sebesseacuteg Bd

DIV T3CON T3FD Hiba

57 600 1 81h 9 = 09h 025

38 400 1 81h 45 = 2Dh 02

19 200 2 82h 45 = 2Dh 02

9 600 3 83h 45 = 2Dh 02

4 800 4 84h 45 = 2Dh 02

2 Baacutejtok fogadaacutesa eacutes kuumlldeacutese assemblybenAz előző alfejezetben leiacutert tudnivaloacutek utaacuten neacutezzuumlk meg hogy milyen utasiacutetaacutessorozattal kommunikaacutelhatunk a soros porton assembly nyelven iacutert programocskaacutekkal Itt valoacutejaacuteban baacutejtok fogadaacutesaacuteroacutel eacutes kuumlldeacuteseacuteről lesz szoacute hiszen minden maacutes ezen alapul A kicsinyiacutető keacutepző azeacutert lesz indokolt mert most csak paacuter soros koacutedreacuteszleteket ismertetuumlnk eacutes elemzuumlnk

Ha az elhataacuterozaacutesunknak megfelelően a 3 időziacutetőtszaacutemlaacuteloacutet szeretneacutenk hasznaacutelni akkor a soros porti kommunikaacutecioacute beaacutelliacutetaacutesait az SCON regiszterrel kezdjuumlk Mivel ez a leacutepeacutes eacutes ennek reacuteszletei rendkiacutevuumlli fontossaacuteguacuteak a tankoumlnyv tovaacutebbi alkalmazaacutesainaacutel hasznaacutelt beaacutelliacutetaacutesokat a [Az SCON SFR parameacuteterei] mintaacutejaacutera kellő reacuteszletesseacuteggel megmagyaraacutezzuk laacutesd [Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai] Ez utoacutebbi taacuteblaacutezatban sziacutenes jeloumlleacutest alkalmazunk a bitek szerepeacutenek elkuumlloumlniacuteteacuteseacutere amit a koacutedokban is hasznaacutelni fogunk a koumlnnyebb koumlvethetőseacuteg kedveacuteeacutert

156 taacuteblaacutezat - Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai

SCON Serial Port Control Register

A soros port vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek

00h

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacute-lum Magyar neacutev Jelenteacutes

7 SM0 Kommunikaacutecioacutes moacutedot kivaacutelasztoacute bitek

Mivel az 1 kommunikaacutecioacutes moacutedot fogjuk hasznaacutelni (laacutesd [Az SCON SFR kommunikaacutecioacutes moacutedot meghataacuterotoacute bitjeinek jelenteacutese]) ezeacutert SM0=0 eacutes SM1=1

6 SM1

5 SM2 Toumlbbprocesszoros kommunikaacutecioacutet engedeacutelyező bit

Nem hasznaacutelunk toumlbbprocesszoros uumlzemmoacutedot ezeacutert SM2=0

4 REN Fogadaacutest engedeacutelyező bit A mikrovezeacuterlőnek adatokat kell fogadnia a PC-ről ezeacutert termeacuteszetesen REN=1

3 TB8 Adaacutesi bit 8 (9 bit) Nem hasznaacutelunk jaacuteruleacutekos bitet iacutegy TB8=0

2 RB8 Fogadaacutesi bit 8 (9 bit) Nem hasznaacutelunk jaacuteruleacutekos bitet iacutegy RB8=0

1 TI Adaacutesi megszakiacutetaacutest jelző bit Ez a jelzőbit akkor aacutell 1-re hardveresen ha az ADuC elkuumlldoumltt egy karaktert a soros porton keresztuumll Kezdetben eacuterdemes 1-re aacutelliacutetanunk (Mintha elkuumlldtuumlnk volna maacuter egyet)

0 RI Fogadaacutesi megszakiacutetaacutest jelző bit

Fel kell keacutesziacutetenuumlnk az

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

ADuC-ot karakterek fogadaacutesaacutera Ez a bit akkor aacutell 1-re hardveresen ha eacuterkezett egy karakter Kezdetben eacuterdemes 0-ra aacutelliacutetanunk hogy joumlhessen valami

A [Az SCON SFR-nek a tankoumlnyvben alkalmazott beaacutelliacutetaacutesai]ban oumlsszefoglaltak szerint a soros port beaacutelliacutetaacutesa ceacutelszerűen a

MOV SCON01010010b

utasiacutetaacutessal kezdődik Ez utaacuten aacutelliacutethatjuk be a 3 időziacutetőszaacutemlaacuteloacute keacutet regisztereacutet Az előző alfejezetben leiacutertak alapjaacuten ha 9 600 baudos kommunikaacutecioacutet szeretneacutenk akkor iacutegy folytatjuk a koacutedot

MOV T3CON083hMOV T3FD02Dh

Ha karakter eacuterkezik valahonnan az ADuC-nak pontosabban fogalmazva az teljes egeacuteszeacuteben beeacuterkezik az SBUF nevű regiszterbe akkor az addig 0 eacuterteacutekű RI jelzőbit 1-re vaacutelt Ezt vagy folyamatosa lessuumlk a főprogramboacutel vagy megszakiacutetaacutesra biacutezzuk Akaacuter iacutegy akaacuter uacutegy a karakter fogadaacutesa utaacuten az RI bitet szoftveresen kell toumlroumllnuumlnk Magaacutet az eacuterkezett karaktert az SBUF regiszterből olvassuk ki Az RI jelzőbitnek ez utaacuteni toumlrleacutese mintegy bdquoelőkeacutesziacutetirdquo a terepet a koumlvetkező karakter eacuterkezeacuteseacutehez Iacutegy a most leiacutertak keacutet sort jelentenek assemblyben

MOV ASBUFCLR RI

Ha az ADuC karaktert kuumlld el pontosabban fogalmazva az teljes egeacuteszeacuteben kiuumlruumll az SBUF nevű regiszterből akkor az addig 0 eacuterteacutekű TI jelzőbit 1-re vaacutelt Ezt szintuacutegy vagy folyamatosa lessuumlk a főprogramboacutel vagy ezt is megszakiacutetaacutesra biacutezzuk Az utasiacutetaacutesokkal azonban fordiacutetott a helyzet Előszoumlr nullaacutezzuk a kuumlldeacutes jelzőbitjeacutet azaz TI-t a karaktert pedig csak ez utaacuten pakoljuk be az SBUF regiszterbe Aztaacuten ha az teacutenyleg elment akkor vaacutelt TI ismeacutet 1-re Ezeacutert kell TI-t a karakternek az SBUF regiszterbe valoacute beraacutemolaacutesa előtt nullaacuteznunk

CLR TIMOV ASBUF

3 Soros porti kommunikaacutecioacute pollozaacutessal21 feladat

Jelezzuumlk ki a heacutetszegmenses kijelzőn a PC-ről a soros porton eacuterkező szaacutemjegyeket Teacuteves karakterre valamilyen egyeacuteb jelet jelezzuumlnk ki A soros porti kommunikaacutecioacutet pollozaacutessal veacutegezzuumlk [Code30]

A feladat megoldaacutesa a soros porti kommunikaacutecioacuteroacutel eddig megtanultak alapjaacuten meglepően egyszerű lesz Ennek elleneacutere egy egyszerű folyamataacutebraacutet a biztonsaacuteg kedveacuteeacutert meacutegis melleacutekeluumlnk laacutesd [A (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja] aacutebra A folyamataacutebra utolsoacute blokkjaacuteba iacutert bdquofarkincardquo szoacute azt akarja jelenteni hogy teacuteves (tehaacutet nem szaacutemjegy) karakter eacuterkezeacutese eseteacuten valami erre utaloacute jelet szeretneacutenk kijelezni Mivel a heacutetszegmenses kijelzőt a 7447-es dekoacuteder hajtja meg tuacutel sok vaacutelasztaacutesi lehetőseacuteguumlnk nincs (laacutesd az IC adatlapja) Iacutegy jelzőkarakternek a 12-es eacuterteacutekhez tartozoacute a b f eacutes g szegmensekből alkotott jelet vaacutelasztottuk vouml [A heacutetszegmenses kijelzők szegmenseinek jeloumlleacutese] aacutebra Ezt a folyamataacutebraacuten bdquofarkincaacutenakrdquo nevezzuumlk

153 aacutebra - A [21 feladat] (Soros porti kommunikaacutecioacute pollozaacutessal) megoldaacutesaacutenak folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

A feladat uacutegy szoacutel hogy a soros porti kommunikaacutecioacutet pollozaacutessal valoacutesiacutetsuk meg Ez csakuacutegy mint a gombok figyeleacutese a [Nyomoacutegombok a panelon] fejezetben a főprogramban toumlrteacutenik eacutes azt jelenti hogy folyamatosan figyeljuumlk az esemeacutenyeket Itt az esemeacuteny karakter eacuterkezeacutese a soros porton keresztuumll Az előző alfejezetben leiacutertak szerint figyelnuumlnk kell hogy mikor aacutell 1-re az RI bit eacutes ennek megtoumlrteacutente utaacuten kuumlldhetuumlnk karaktert (kuumlldhetjuumlk a koumlvetkező karaktert) Mindez termeacuteszetesen az ADuC szemszoumlgeacuteből eacutertendő Az RI bit figyeleacutese a karakter beraacutemolaacutesa a pufferba eacutes a bit toumlrleacutese iacutegy neacutez ki assembly nyelven

JNB RI$MOV ASBUFCLR RI

Az uacutejdonsaacuteg ebben a haacuteromsoros kis reacuteszletben az első utasiacutetaacutes Az olvasoacute maacuter valoacutesziacutenűleg eacuterti hogy ez mit jelent Azt jelenti hogy addig jaacuter helyben a program amiacuteg RI 1 nem lesz Ez a helyben jaacuteraacutes persze bizonyos alkalmazaacutesoknaacutel nem engedhető meg de a [21 feladat] megoldaacutesaacutenaacutel nem jelent semmifeacutele probleacutemaacutet Karakter elkuumlldeacutese a TI bit figyeleacuteseacutevel hasonloacutean toumlrteacutenik csak az előző alfejezetben leiacutert sorrendi elteacutereacutesre kell figyelnuumlnk Előszoumlr megvaacuterjuk amiacuteg TI 1 nem lesz utaacutena mindjaacutert toumlroumlljuumlk is eacutes ez utaacuten helyezzuumlk a kuumlldendő karaktert a pufferba Aztaacuten majd ha elment a karakter akkor lesz TI ismeacutet 1 eacutes akkor kuumlldhetjuumlk a koumlvetkezőt A kuumlldeacutesre hasznaacutelhatoacute haacuterom sor iacutegy fest

JNB TI$CLR TIMOV ASBUF

Ez a keacutet haacuteromsoros ki programreacuteszlet joacutel foumllismerhető lesz a [21 feladat] megoldaacutesaacuteban

A soros porti kommunikaacutecioacutenaacutel oacutehatatlanul előkeruumll az ASCII karakterkeacuteszlet Amikor ugyanis karaktert kuumllduumlnk a soros porton az hallgatoacutelagosan ASCII karakterre vonatkozik Az ASCII koacutedtaacuteblaacutezat toumlrteacuteneteacutenek bemutataacutesa nem e tankoumlnyv feladata de annyit elmondhatunk hogy a betűszoacute az American Standard Code for Information Interchange kifejezeacutesből szaacutermazik ami szoacute szerint azt jelenti hogy Amerikai Szabvaacutenyos Koacuted Informaacutecioacutecsereacutehez de a veacutegeacuten az uumlzenetvaacuteltaacutes szoacute talaacuten szerencseacutesebb lenne Az ASCII koacutedtaacuteblaacutezatoknak toumlbb vaacuteltozatuk leacutetezik van 7-bites eacutes 8-bites verzioacute eacutes meacuteg speciaacutelis vaacuteltozatok is leacuteteznek Ennek elleneacutere a [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebraacuten szereplő a 7-bites vaacuteltozatnak megfelelő taacuteblaacutezat nagyjaacuteboacutel minden szaacutemiacutetoacutegeacutepen ugyanazt jelenti Amennyiben tehaacutet egy rsquo0rsquo karakter eacuterkezik valahonneacutet az ADuC mikrovezeacuterlőre

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

akkor az ASCII koacutedban eacuterkezik ezeacutert hexadecimaacutelisan 30h-t decimaacutelisan 48-at jelent Iacutegy tehaacutet ha a fogadaacutes utaacuten teacutenylegesen azzaacute a szaacutemeacuterteacutekkeacute szeretneacutenk alakiacutetani mint amit a szaacutemjegy (rsquo0rsquo) mutat akkor egyszerűen ki kell vonnunk belőle 48-at (vagy 30h-t) Eacutes keacutesz

154 aacutebra - Az ASCII karakterkeacuteszlet 32-től 126-ig

Az eacuterkezett karakterek intervallumba zaacuteraacutesaacutehoz joacute tudni hogy a rsquo9rsquo-es szaacutemjegy utaacuten az ASCII taacuteblaacutezatban a rsquorsquo karakter koumlvetkezik Iacutegy koumlnnyen tudjuk alkalmazni a [Relaacutecioacutek kieacuterteacutekeleacuteseacutenek tovaacutebbi moacutedja] fejezetben bemutatott oumltletet Erre a most koumlvetkező programban szuumlkseacuteguumlnk is lesz Annyit meacuteg illik megjegyeznuumlnk hogy a heacutetszegmenses kijelző a P2-es port bitjeiből oumlsszesen neacutegyet fog le Ha a maacutesik neacutegy bitet maacutes ceacutelokra akarjuk foumllhasznaacutelni akkor azokat nem szabad oumlssze-vissza aacutelliacutetgatnunk az esetleges soros porti műveletek soraacuten meg kell őket kiacutemeacutelnuumlnk Az alaacutebbi koacutedban erre uacutegy emleacutekeztetuumlnk hogy logikai művelettel mindig 1-re aacutelliacutetjuk ezeket a biteket Most egyeacutebkeacutent semmi szerepuumlk nem lesz de ha majd igen akkor tudni fogjuk hogy el kell kuumlloumlniacutetenuumlnk őket a heacutetszegmenses kijelzőnek szaacutent informaacutecioacutetoacutel Erre fog utalni a bdquofoumllaacutelliacutetjuk a felső 4 bitetrdquo megjegyzeacutes Az eacuterkező karaktert a program azonnal visszakuumlldi hogy megfelelő kommunikaacutecioacutes feluumllet eseteacuteben azonnal laacutethassuk hogy milyen karakter eacuterkezett az ADuC-nak Az ilyen jellegű visszakuumlldeacutest szoktaacutek ekhoacutezaacutesnak (angolul echo) nevezni

Code30asmbyte DATA 030h A P2-es portra kirakandoacute eacuterteacutek vaacuteltozoacutejaMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV P211111100b A 7447-es IC-neacutel a 12-es koacuted egy kis furcsa jelet produkaacutel Ez jelzi a keacuteszenleacutetetfogadJNB RI$ Karakter eacuterkezeacuteseacutere vaacuterunk Az RI flag ezt

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

jelziMOV ASBUF Kiolvassuk a pufferboacutel az eacuterkezett karaktertCLR RI Toumlroumlljuumlk az RI flag-etJNB TI$ Arra vaacuterunk hogy TI 1 legyen mert ez jelzi ha egy előző karakter teacutenylegesen elmentCLR TI Utaacutena toumlroumlljuumlk TI-tMOV SBUFA Betesszuumlk a pufferba A tartalmaacutetCJNE A0relac1 Ha az eacuterkezett karakter 0 előttrelac1 vagy 9 moumlgoumltt van akkor azJC nemjo eacuterveacutenytelen esetCJNE Arelac2 A 0lt=Alt=9 felteacutetel ekvivalens arelac2 0lt=Alt felteacutetellel 9 utaacuten ASCII-benJNC nemjo joumlnCLR C Toumlroumlljuumlk a C bitet egy kivonaacutes előttSUBB A0 A kivonaacutessal csinaacutelunk az ASCII eacuterteacutekből normaacutelis szaacutemeacuterteacuteketMOV byteA A byte vaacuteltozoacuteba beletesszuumlk a kijelezendő szaacutemeacuterteacuteketORL byte11110000b Foumllaacutelliacutetjuk a felső 4 bitetportMOV P2byte Kitesszuumlk az eacuterteacuteket a P2-es portraJMP fogad Kezdjuumlk előroumll a beolvasaacutestnemjoMOV byte11111100b A 12-es koacuteduacute szaacutemjegyet fogjuk kijelezniJMP port Ugraacutes a kirakaacuteshoz

4 Soros porti kommunikaacutecioacute megszakiacutetaacutessal22 feladat

Jelezzuumlk ki a heacutetszegmenses kijelzőn a PC-ről a soros porton eacuterkező szaacutemjegyeket Teacuteves karakterre valamilyen egyeacuteb jelet jelezzuumlnk ki A soros porti kommunikaacutecioacutet megszakiacutetaacutes veacutegezze [Code31]

Ez a feladat egyetlen reacuteszlettől eltekintve toumlkeacuteletesen megegyezik a [21 feladat]tal Ez a reacuteszlet azonban nagyon is fontos a soros porti kommunikaacutecioacute kezeleacuteseacutenek moacutedjaacuteroacutel van szoacute Az előző alfejezetben ez pollozaacutessal toumlrteacutent azaz a főprogram figyelte hogy eacuterkezett-e ill elment-e karakter Ehhez az RI ill TI bitek eacuterteacuteke nyuacutejtotta a fogoacutedzkodoacutet A helyzet az hogy az az esemeacuteny amikor ezek a bitek hardveresen 1-re billennek megszakiacutetaacutest is ki tud vaacuteltani Fontos hogy mindkeacutet bit eseteacuten Itt most tehaacutet nincs maacutes dolgunk mint engedeacutelyezni a soros portra vonatkozoacute megszakiacutetaacutest majd megfelelően lekezelni a keacutet kritikus bitet RI-t ill TI-t A megszakiacutetaacutesban kisseacute jobban elkuumlloumlnuumll egymaacutestoacutel karakter eacuterkezeacutese eacutes kuumlldeacutese Karakter eacuterkezeacuteseacutet gyakorlatilag ugyanuacutegy kezeljuumlk mint az előző alfejezetben A kuumlldeacutes is hasonloacutean toumlrteacutenik de amikor a TI bit 1-re aacutell akkor is kivaacuteltoacutedik a megszakiacutetaacutes Nos ebben az esetben nem csinaacutelunk semmit visszateacuteruumlnk a megszakiacutetaacutesboacutel eacutes keacutesz A soros porti megszakiacutetaacutes vektora a 0023h ciacutemen talaacutelhatoacute a megszakiacutetaacutes engedeacutelyezeacutese pedig az ES bittel toumlrteacutenik laacutesd [Az IE SFR parameacuteterei] Figyeljuumlk meg hogy milyen roumlvidre zsugorodik a főprogram A 3 időziacutetőszaacutemlaacuteloacute inicializaacutelaacutesaacuten eacutes a megszakiacutetaacutes engedeacutelyezeacuteseacuten kiacutevuumll leacutenyegeacuteben semmi egyebet nem csinaacutel Helyben jaacuter Az olvasoacutet arra biztatjuk hogy figyelmesen hasonliacutetsa oumlssze Code30-at Code31-gyel eacutes figyelje meg hogy hogyan oldja meg a megszakiacutetaacutes mindazt amit előző esetben a főprogram veacutegzett

Code31asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 0023h A soros porti megszakiacutetaacutes vektoraJMP UARTORG 0060h A teacutenyleges programkoacuted kezdetebyte DATA 030h A P2-es portra kirakandoacute eacuterteacutek vaacuteltozoacuteja Karakter eacuterkezeacutese vagy elkuumlldeacutese aacuteltal kivaacuteltott megszakiacutetaacutes UARTJB RIfogad Ha karakter eacuterkezeacutese vaacuteltotta ki a megszakiacutetaacutest akkor azt fogadjuk eacutes lekezeljuumlkRETI Ha a maacutesik eset azaz karakter elkuumlldeacutese

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

akkor simaacuten visszateacuteruumlnk a megszakiacutetaacutesboacutelfogadMOV ASBUF Kiolvassuk a pufferboacutel az eacuterkezett karaktertCLR RI Toumlroumlljuumlk az RI flag-etCLR TI Kuumlldeacutes előtt toumlroumlljuumlk TI-tMOV SBUFA Betesszuumlk a pufferba A tartalmaacutetCJNE A0relac1 Ha az eacuterkezett karakter 0 előttrelac1JC nemjo vagy 9 moumlgoumltt van akkor az eacuterveacutenytelenCJNE Arelac2 esetrelac2 A 0lt=Alt=9 felteacutetel ekvivalens aJNC nemjo 0lt=Alt felteacutetellel 9 utaacuten ASCII-ben joumlnCLR C Toumlroumlljuumlk a C bitet egy kivonaacutes előttSUBB A0 A kivonaacutessal csinaacutelunk az ASCII eacuterteacutekből normaacutelis szaacutemeacuterteacuteketMOV byteA A byte vaacuteltozoacuteba beletesszuumlk a kijelezendő szaacutemeacuterteacuteketORL byte11110000b Foumllaacutelliacutetjuk a felső 4 bitetportMOV P2byte Kitesszuumlk az eacuterteacuteket a P2-es portraRETInemjoMOV byte11111100b A 12-es koacuteduacute szaacutemjegyet fogjuk kijelezniJMP port Ugraacutes a kirakaacuteshoz FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV P211111100b A 7447-es IC-neacutel a 12-es koacuted egy kis furcsa jelet produkaacutel Ez jelzi a keacuteszenleacutetetSETB ES A soros porti megszakiacutetaacutes engedeacutelyezeacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesJMP $ Helyben jaacuter a program

5 Koacutedreacuteszletek beeacutepiacuteteacutese sajaacutet programunkbaAz előző keacutet alfejezetben megtaacutergyaltuk a soros port kezeleacuteseacutenek keacutet nagyon fontos moacutedjaacutet Keacutesziacutetsuumlnk most olyan alkalmazaacutest amely a szerencsejaacuteteacutekos teacuteveacuteműsorokban előforduloacutekra hasonliacutet

23 feladat

A heacutetszegmenses kijelzőn fussanak koumlrbe a szaacutemok nagyon gyorsan Az 1 gomb megnyomaacutesaacutera aacutelljon meg a futaacutes a mikrovezeacuterlő pedig kuumlldje el a PC-nek a kijelzőn laacutethatoacute szaacutemot A 2 gomb lenyomaacutesaacutera folytatoacutedjon a szaacutemok futaacutesa a mikrovezeacuterlő pedig kuumlldje a PC-nek a bdquoRunningrdquo szoacutet [Code32]

Mivel a program egeacuteszen egyszerű lesz nem keacutesziacutetuumlnk folyamataacutebraacutet Valoacute igaz csaknem minden eleme előkeruumllt maacuter valamikor a tankoumlnyvben Ami most tanulsaacutegos lesz az az ahogy karakterlaacutencot kuumllduumlnk a soros porton Ehhez fel fogunk hasznaacutelni egy előre megiacutert szubrutinkoumlnyvtaacuterat Ennek neve UARTIOASM A koumlnyvtaacuterban szaacutemos olyan szubrutin talaacutelhatoacute amelyekre sokszor van igeacuteny a soros porti kommunikaacutecioacute soraacuten A szubrutinkoumlnyvtaacuter az ADuC 842-es gyaacuteri CD-jeacuten talaacutelhatoacute Az olvasoacutet ara biztatjuk hogy baacutetran kukkantson bele eacutes neacutezze meg hogy milyen stiacutelusban programoznak profik Mi a szubrutinok koumlzuumll mindoumlsszesen haacutermat fogunk felhasznaacutelni a tankoumlnyvben az ezekkel kapcsolatos tudnivaloacutekat a [A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz] foglalja oumlssze A konkreacutet hasznaacutelatra Code32 mutat peacuteldaacutekat A szubrutinokat tartalmazoacute faacutejlt az

$INCLUDE(UARTIOASM)

fordiacutetoacutei direktiacutevaacuteval csatolhatjuk a sajaacutet koacutedunkhoz

157 taacuteblaacutezat - A haacuterom leggyakrabban haszbnaacutelt rutin a soros porti kommunikaacutecioacutehoz

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

Rutin neve Parameacuteteraacutetadaacutes Megjegyzeacutes

SENDCHAR Akkumulaacutetor Karakter kuumlldeacutese A kuumlldeacutesre szaacutent karaktert a rutin meghiacutevaacutesa előtt helyezzuumlk az akkumulaacutetorba A szubrutin tartalma megegyezik a [Soros porti kommunikaacutecioacute pollozaacutessal] alfejezetben a kuumlldeacutesre alkotott haacuteromsoros reacuteszlettel

GETCHAR Akkumulaacutetor Karakter fogadaacutesa Az eacuterkezett karaktert a rutin meghiacutevaacutesa utaacuten az akkumulaacutetorba keruumll A szubrutin tartalma megegyezik a [Soros porti kommunikaacutecioacute pollozaacutessal] alfejezetben a karakter fogadaacutesaacutera alkotott haacuteromsoros reacuteszlettel

SENDSTRING Adatmutatoacute Karakterlaacutenc kuumlldeacutese A rutin meghiacutevaacutesa előtt toumlltsuumlk az adatmutatoacuteba az elkuumlldeni kiacutevaacutent karakterlaacutenc kezdőciacutemeacutet A karakterlaacutenc veacutegeacutet egy 00h baacutejtnak kell jeleznie

Most neacutezzuumlk meg a koacutedot utaacutena pedig meacuteg majd megmagyaraacutezunk egy-keacutet aproacutesaacutegot

Code32asmORG 0060h A teacutenyleges programkoacuted kezdete

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

but1 BIT P32 Az 1 gomb bitjebut2 BIT P33 A 2 gomb bitjenyom BIT 00h Bitvaacuteltozoacute a gombnyomaacuteshoz Időhuacutezoacute szubrutin amely az 1 gombot is figyeli GDELAYMOV R6A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik6MOV R543cik5MOV R469cik4JNB but1pushed Itt vizsgaacuteljuk meg a gomb bitjeacutet Elugrunk ha le van nyomva a gomb azaz a bit 0DJNZ R4cik4DJNZ R5cik5DJNZ R6cik6RETpushed Ide ugrunk gombnyomaacuteskorSETB nyom Magasra aacutelliacutetjuk a jelzőbitetRET Visszateacutereacutes a szubrutinboacutel FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV DPTRtext A kuumlldeni valoacute karakterlaacutenc ciacuteme azCALL SENDSTRING adatmutatoacuteba keruumll Aztaacuten meghiacutevjuk a kuumlldő szubrutintujraMOV R30 Ciklusvaacuteltozoacute nullaacutezaacutesafutMOV P2R3 Ciklusvaacuteltozoacute eacuterteacuteke a P2-es portra keruumllCLR nyom A rsquonyomrsquo jelzőbit toumlrleacuteseMOV A5 005 s lesz a vaacuterakozaacutesCALL GDELAY Időhuacutezoacute rutin meghiacutevaacutesaJB nyomstop Ha volt gombnyomaacutes megaacutellunkfolytatINC R3 Ciklusvaacuteltozoacute noumlveleacuteseCJNE R310fut 9-ig mehenek a szaacutemjegyek iacutegy 10-zel hasonliacutetjuk oumlssze R3-t az utolsoacute noumlveleacutes utaacutenJMP ujra Kezdjuumlk előroumll a szaacutemlaacutelaacuteststopMOV AR3 R3 eacuterteacuteke az akkumulaacutetorba keruumllADD A0 Hozzaacuteadjuk az ASCII 0 eacuterteacutekeacutetCALL SENDCHAR Elkuumlldjuumlk a PC-nekMOV A13 Kocsi vissza kuumlldeacuteseCALL SENDCHARMOV A10 Soremeleacutes kuumlldeacuteseCALL SENDCHARJB but2$ Vaacuterunk a 2 gombraCALL SENDSTRING Uacutejra elkuumlldjuumlk a karakterlaacutencotJMP folytat Folytatoacutedik a futaacutestext DB Running10130$INCLUDE(UARTIOASM)

Amikor a kijelzett szaacutemjegyet akarjuk ASCII karakter formaacutejaacuteban elkuumlldeni a PC-nek a konkreacutet szaacutemeacuterteacutekhez hozzaacute kell adnunk 32-t hiszen a koacutedtaacuteblaacutezatban a szaacutemjegyek 32-vel kezdődnek (vouml [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebra) Most a fordiacutetottjaacutet veacutegezzuumlk annak mint amikor eacuterkezett szaacutemjegyeket dolgoztunk foumll

A [Az ASCII karakterkeacuteszlet 32-től 126-ig] aacutebra 32-től 126-ig mutatja az ASCII koacutedokat Tudnunk kell azonban hogy a 32-es eacuterteacutek alatti koacutedok kuumlloumlnfeacutele vezeacuterlőjeleket reprezentaacutelnak Ezeket elsősorban sornyomtatoacutekhoz hasznaacuteltaacutek Nekuumlnk igazaacuteboacutel kettő lesz ezek koumlzuumll kulcsfontossaacuteguacute A 10-es koacuted a New line

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

vagy Line Feed parancs Magyarul uacutej sor vagy soremeleacutes Hataacutesaacutera a kurzor egy sorral lejjebb ugrik amennyiben megfelelő feluumlleten toumlrteacutenik a kommunikaacutecioacute A 13-as koacuted a Carriage Return parancsot jelenti Ez magyarul annyit tesz hogy kocsi vissza Hataacutesa az hogy a kurzor visszaugrik a sor elejeacutere Karakterek fogadaacutesakor a 13-as koacuted jelenti az ENTER billentyűt

Ami meacuteg szokatlan az az adatbaacutejt direktiacuteva (DB) utaacuten beiacutert karakterlaacutenc Laacutethatoacute hogy aposztroacutefok koumlzeacute iacuterhatjuk a szoumlveget amit minden tovaacutebbi neacutelkuumll folytathatunk baacutejtonkeacutent is vesszővel elvaacutelasztva az eacuterteacutekeket A rsquoRunningrsquo szoacutet tehaacutet koumlveti egy soremeleacutes eacutes egy kocsi vissza parancs a 0 pedig a karakterlaacutenc veacutegeacutet jelenti Ebből a 0-boacutel fogja tudni a SENDSTRING rutin hogy veacutege a karakterlaacutencnak

6 Az ADuC vezeacuterleacutese PC-velA tankoumlnyvben maacuter laacutettunk arra egyszerű peacuteldaacutekat hogy hogyan hajthat meg a mikrovezeacuterlő kuumllső aacuteramkoumlroumlket Most olyan alkalmazaacutest keacutesziacutetuumlnk amelyben az asztali szaacutemiacutetoacutegeacutepuumlnkkel vagy laptopunkkal vezeacutereljuumlk az ADuC-ot Az ADuC pedig termeacuteszetesen vezeacuterelheti a kuumllső aacuteramkoumlrt

24 feladat

A heacutetszegmenses kijelzőn leacuteptessuumlk előre ill haacutetra a szaacutemjegyeket Tegyuumlk ezt uacutegy hogy a szaacutemiacutetoacutegeacutep billentyűzeteacuten a + ill ndash gombokat nyomogatjuk Az ENTER billentyű leuumlteacuteseacutere villanjon annyit a kijelzett szaacutem amennyi a sajaacutet eacuterteacuteke [Code33]

A megoldaacutes ismeacutet egeacuteszen egyszerű Beolvasunk egy karaktert a soros portroacutel majd megneacutezzuumlk hogy az a rsquo+rsquo jel vagy rsquondashrsquo jel ASCII koacutedja-e vagy esetleg az ENTER gomb lenyomaacutesaacutenak hataacutesaacutera a 13-as koacuted Ennek alapjaacuten aacutegaztatjuk el a programot a megfelelő helyre A koacutedok eacuterteacutekeacutenek elemzeacuteseacutehez a SUBB utasiacutetaacutest hasznaacuteljuk majd egyezeacutes eseteacuten a JZ hataacutesaacutera toumlrteacutenik az ugraacutes A program ismeacutet a joacute oumlreg DELAY szubrutinunkat igeacutenyli iacutegy azt most sem csatoljuk a koacutedhoz

Code33asmORG 0060h A teacutenyleges programkoacuted kezdetechar DATA 030h Az eacuterkezett karakter vaacuteltozoacuteja FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV R41 R4 a kijelezendő szaacutemjegy vaacuteltozoacutejakijelezMOV P2R4 A szaacutemjegy kijelzeacutesefogadCALL GETCHAR Karakterre vaacuterunkMOV charA Ha + eacuterkezettCLR CSUBB A+JZ plusz ugrunk a noumlveleacuteshezMOV Achar Ha - eacuterkezettCLR CSUBB A-JZ minusz ugrunk a csoumlkkenteacuteshezMOV Achar Ha ENTERT nyomtunk akkorCLR CSUBB A13 13 eacuterkezikJZ enter Ugrunk a villogtataacuteshozJMP fogad Baacutermely maacutes esetben visszaugrunk uacutej karakter fogadaacutesaacutehozpluszCJNE R49novel R4 maacuter 9 Ha nem noumlvelhetjuumlkMOV R41 R4 uacutejra 1 leszJMP kijelez KijelezzuumlknovelINC R4 Noumlveljuumlk R4-etJMP kijelez KijelezzuumlkminuszCJNE R41csokkent R4 maacuter 1 Ha nem csoumlkkentjuumlkMOV R49 R4 uacutejra 9 lesz

Created by XMLmind XSL-FO Converter

Kommunikaacutecioacute az UART-tal

JMP kijelez KijelezzuumlkcsokkentDEC R4 Csoumlkkentjuumlk R4-etJMP kijelez KijelezzuumlkenterMOV AR4 R4-et aacutetmaacutesoljuk R3-ba A villogaacuteshozMOV R3A R3 lesz a ciklusvaacuteltozoacuteMOV A10 01 s vaacuterakozaacutes lesz a villogaacuteshozvillogMOV P215 Kikapcsoljuk a kijelzőtCALL DELAY VaacuterunkMOV P2R4 Bekapcsoljuk a kijelzőtCALL DELAY VaacuterunkDJNZ R3villog Ciklusvaacuteltozoacute lekezeleacuteseJMP kijelez Ugraacutes vissza a kijelzeacuteshez$INCLUDE(UARTIOASM)

Created by XMLmind XSL-FO Converter

16 fejezet - Iacuteraacutes a memoacuteriaacutebaA [Bitvaacuteltozoacutek hasznaacutelata] eacutes [A teljes alsoacute RAM] alfejezetben maacuter elemeztuumlk az alsoacute RAM beosztaacutesaacutet eacutes műkoumldeacuteseacutet No rendben annak neacutehaacuteny reacuteszleteacutet eacutes sajaacutetossaacutegaacutet Eljoumltt az idő arra hogy megtanuljuk hogy hogyan iacuterhatunk a mikrovezeacuterlő memoacuteriaacutejaacuteba Ez a memoacuteria nyilvaacutenvaloacutean RAM lesz (a flash memoacuteriaacutet ezen a szinten meacuteg nem taacutergyaljuk) iacutegy az is biztos hogy nem a koacutedmemoacuteria Vessuumlnk egy pillantaacutest a memoacuteriateruumlleteket taglaloacute adatlapra ([Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebra)

161 aacutebra - Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese

Az alsoacute RAM-ot (lower RAM) maacuter vizsgaacuteltuk az emliacutetett alfejezetekben Az aacutebraacuten azt laacutetjuk hogy az alsoacute RAM-nak megfelelő kis dobozba odaiacutertaacutek hogy direct or indirect addressing Ez azt jelenti hogy direkt vagy indirekt ciacutemzeacutes Ez nagyon fontos lesz A direkt ciacutemzeacutest maacuter ismerjuumlk hasznaacuteltuk is sokszor Indirekt ciacutemzeacutest is hasznaacuteltunk de az a koacuted-indirekt ciacutemzeacutes volt Amire itt gondolni kell az viszont nem az Sima indirekt ciacutemzeacutesről van szoacute Most fogadjuk el hogy ezt iacutegy hiacutevjaacutek a koumlvetkező alfejezetben megtanuljuk hasznaacutelni Most az a leacutenyeg hogy az alsoacute RAM mind direkt mind indirekt ciacutemzeacutessel eleacuterhető Eacutes emleacutekeztessuumlk magunkat arra is hogy az alsoacute RAM 00h-toacutel 7Fh-ig tart A 80h-toacutel FFh-ig terjedő teruumlletet felső RAM-nak (upper RAM) hiacutevjaacutek Ez teljesen uumlres nyugodtan hasznaacutelhatjuk a sajaacutet baacutejtvaacuteltozoacuteink szaacutemaacutera csak arra figyeljuumlnk hogy a felső RAM kizaacuteroacutelag indirekt ciacutemzeacutessel eacuterhető el A [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten a felső RAM doboza mellett van egy zoumlldes doboz is Ez jelenti a speciaacutelis funkcioacutejuacute regiszterek (SFR-ek) teruumlleteacutet Oda meg azt iacutertaacutek hogy kizaacuteroacutelag direkt ciacutemzeacutes Neacutezzuumlk miről is van itt szoacute A felső RAM eacutes az SFR-ek teruumllete ugyanazt a ciacutemteruumlletet foglalja el Ez a teruumllet 80h-toacutel FFh-ig terjed Az eacuterdekesseacuteg az hogy e keacutet teruumllet bdquoegymaacutes alattrdquo helyezkedik el a memoacuteriaacuteban azonos ciacutemekkel eacutes a processzor eacuteppen azzal tudja megkuumlloumlnboumlztetni a kettőt egymaacutestoacutel hogy egyiket direkt a maacutesikat indirekt ciacutemzeacutessel eacuteri el Ha tehaacutet egy 80h eacutes FFh koumlzoumltti ciacutem szerepel valamely ciacutemzeacutesben akkor az akkor ceacutelozza a felső RAM-ot ha indirekt a ciacutemzeacutes eacutes akkor ceacutelozza valamely SFR-t ha direkt a ciacutemzeacutes Talaacuten most maacuter eacuterthető az uumlgy meacuteg ha elsőre szokatlannak is tűnthellip

A [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten a baracksziacutenű doboz 4 kilobaacutejtos flash-memoacuteriaacutet mutat Ez a memoacuteria az SFR-eken keresztuumll eacuterhető el Ebben a tankoumlnyvben nem taacutergyaljuk A jobb oldali nagyobb saacuterga doboz a belső adatmemoacuteriaacutet szemleacutelteti Ennek meacuterete 2 kilobaacutejt eacutes bdquoveacuteletlenuumllrdquo ehhez is tudnunk kell egy truumlkkoumlt Megfelelő beaacutelliacutetaacutes utaacuten ezt a teruumlletet a processzor bdquouacutegy laacutetjardquo mintha kuumllső adatmemoacuteria lenne eacutes iacutegy eacuteri el Kuumlloumln ciacutemzeacutes tartozik ehhez is ez lesz a kuumllső indirekt Ez akkor is iacutegy van ha

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

kuumllső memoacuteriaacutet egyaacuteltalaacuten nem kapcsoltunk a mikrovezeacuterlőhoumlz Ezt egyeacutebkeacutent megtehetneacutenk eacutes akaacuter 16 megabaacutejtot is meg tudnaacutenk ciacutemezni

A koumlvetkező alfejezetekben adatokat fogunk iacuterni mind az alsoacute RAM-ba mind a felső RAM-ba mind a belső adatmemoacuteriaacuteba Az olvasoacutet mindhaacuteromra megtaniacutetjuk eacutes arra baacutetoriacutetjuk hogy sajaacutet belaacutetaacutesa szerint vaacutelasszon a moacutedszerek koumlzuumll amikor majd oumlnaacutelloacutean keacutesziacutet alkalmazaacutesokat

1 Iacuteraacutes az alsoacute eacutes a felső RAM-baA [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten laacutethatoacute hogy az alsoacute RAM direkt eacutes indirekt moacutedon is ciacutemezhető Most az indirekt ciacutemzeacutest fogjuk vaacutelasztani Az indirekt ciacutemzeacuteshez szuumlkseacuteg lesz egy indexregiszterre ez akaacuter az R0 akaacuter az R1 regiszter lehet Leacutenyeges hogy a toumlbbi R regiszter viszont nem Az alaacutebbiakban előszoumlr is oumlsszeszedjuumlk azokat az utasiacutetaacutesokat melyeket maacutes ciacutemzeacutessel egyeacutebkeacutent maacuter joacutel ismeruumlnk Most viszont indirekt ciacutemzeacutest hasznaacutelunk

ADD ARiADDC ARiSUBB ARiINC RiDEC RiCJNE RidatarelMOV ARiMOV RiAMOV RidataANL ARiORL ARiXRL ARi

Az Ri szimboacutelum pontosan azt jelenti hogy az indirekt ciacutemzeacutesre csak az R0 vagy R1 regisztert hasznaacutelhatjuk (Akkor aacutellna Ri helyett Rn ha az oumlsszes R regiszterrel hasznaacutelhatnaacutenk a ciacutemzeacutest) Ennek a keacutet regiszternek egyetlen baacutejt a meacuterete Ez a baacutejt most egy memoacuteriaciacutemet fog jelenti eacuterteacutekeacutenek megfelelően a 00h-FFh memoacuteriateruumlleten azaz a nullaacutes lapon A fenti utasiacutetaacutesok iacutegy azt a ciacutemet eacuterik el amelyiket a hasznaacutelt regiszter (R0 vagy R1 ) eacuterteacuteke mutat

25 feladat

A mikrovezeacuterlő fogadjon a soros porton keresztuumll legfeljebb 10 szaacutemjegyet eacutes ezeket taacuterolja el A 10 karakter eleacutereacutesekor automatikusan jeleniacutetse meg sorban a 10 karaktert Illegaacutelis karakter (nem szaacutemjegy) eseteacuten speciaacutelis karaktert (farkincaacutet) jeleniacutetsen meg Ha meacuteg nem eacutertuumlk el geacutepeleacuteskor a 10 karaktert de ENTER-t uumltuumlnk akkor is kezdődjoumln meg az addig eltaacuterolt szaacutemjegyek megjeleniacuteteacutese [Code34 Code35 Code36]

A megoldaacutes maacuter nem teljesen elemi iacutegy folyamataacutebraacutet keacutesziacutetuumlnk a vezeacuterelvek alapjaacuten laacutesd [A (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja] aacutebra A folyamataacutebra az aproacute reacuteszleteket most nem tartalmazza Azt szemleacutelteti hogy mi toumlrteacutenik a 10 karakter eleacutereacutesekor ill az ENTER megnyomaacutesakor eacutes akkor ha egyaacuteltalaacuten nem eacuterkezett karakter addig amikor megnyomtaacutek az ENTER-t

162 aacutebra - A [25 feladat] (Iacuteraacutes az alsoacute eacutes a felső RAM-ba) megoldaacutesaacutenak folyamataacutebraacuteja

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

Az ENTER billentyűvel kapcsolatban tartozunk meacuteg egy reacuteszlettel ha a PC-n ENTER-t uumltuumlnk akkor az keacutet koacutedot generaacutel Eacuterkezik egy 13-as koacuted (kocsi vissza) aztaacuten egy 10-es (soremeleacutes) Iacutegy a 13-as eacuteszleleacutese utaacuten el kell nyeletnuumlnk a 10-est azaz ilyenkor meacuteg egy karakter beolvasunk Eacutes termeacuteszetesen semmit nem csinaacutelunk vele Csak nem maradhat ott a pufferban

A koacutedban a char vaacuteltozoacuteban fogjuk az aktuaacutelisan beeacuterkezett karaktert eltaacuterolni A number vaacuteltozoacute azt szaacutemolja hogy haacutenyadik karakterneacutel tartunk Az alsoacute RAM 032h-s memoacuteriaciacutemeacutehez pedig az array szimboacutelumot rendeljuumlk Ehhez uacutej fordiacutetoacutei direktiacutevaacutet tanulunk meg EQU Ez a direktiacuteva az adott ciacutemhez vagy eacuteppen konstanshoz rendeli a megadott szimboacutelumot

array EQU 032h

Az indirekt ciacutemzeacutesekkel ettől a memoacuteriaciacutemtől kezdve fogjuk elmenteni az eacuterkezett legfeljebb 10 karaktert Eacutes lejaacutetszaacuteskor ezzel a ciacutemmel kezdve olvassuk ki őket a memoacuteriaacuteboacutel A koacutedban most sem tuumlntetjuumlk foumll hűseacuteges DELAY szubrutinunkat

Code34asmORG 0060h A teacutenyleges programkoacuted helyechar DATA 030h A beeacuterkező karakter eltaacuterolaacutesaacutera szolgaacuteloacute baacutejtnumber DATA 031h Ennyi darab karakter eacuterkezettarray EQU 032h A menteacutesre hasznaacutelt toumlmb memoacuteriaciacutemeMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud lesznewMOV DPTRmesstart Az indiacutetaacutesi uumlzenet kiiacuteraacutesaCALL SENDSTRINGMOV P215 Erre a koacutedra a kijelzőn semmi sincsMOV R0array R0-ba toumlltjuumlk a memoacuteriatoumlmb kezdeteacutetMOV number0 A karakterek darabszaacutemaacutenak kezdeti eacuterteacuteke

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

fogadCALL GETCHAR Karaktert olvasunk beMOV charA Elmentjuumlk a char vaacuteltozoacutebaCALL SENDCHAR Visszakuumlldjuumlk a PC-nekCLR CSUBB A13 Megneacutezzuumlk hogy ENTER eacuterkezett-e azaz 13JZ enter Ha igen elungrunk lekezelniMOV Achar A-ba tesszuumlk a char-ba ideiglenesen betett a PC-ről eacuterkezett karaktertMOV R0A Indirekt ciacutemzeacutessel a memoacuteriaacuteba mentjuumlkINC number Noumlveljuumlk az elmentett karakterek darabszaacutemaacutetINC R0 Noumlveljuumlk az indirekt ciacutemzeacuteshez hasznaacutelt regiszter eacuterteacutekeacutetMOV Anumber Megneacutezzuumlk eleacutertuumlk-e aCLR CSUBB A10 10 karaktert Ha igenJZ kijelez ugrunk kijelezniJMP fogad Visszaugrunk a koumlvetkező karakter fogadaacutesaacutehozenterCALL GETCHAR ENTER eseteacuten a 13 utaacuten 10 is joumln Ezt kiolvassuk de a tovaacutebbiakban nem csinaacutelunk vele semmitMOV Anumber Amennyiben number eacuterteacuteke 0 azaz egyJZ new karakter sem eacuterkezett visszaugrunk uacutej karaktersort fogadnikijelezMOV DPTRmesrepeat A szaacutemok kijelzeacutese előtti uumlzenetCALL SENDSTRINGMOV R30 Ez a ciklus fogja egyeseacutevel kiolvasni a memoacuteriaacuteboacutel az elmentett karaktereket amiket aztaacuten kirak a kijelzőreMOV R0array R0-ba tesszuumlk a memoacuteriatoumlmb kezdeti ciacutemeacutetdisplayMOV A10 Roumlvid időt vaacuterakozunkCALL DELAYMOV AR0 A-ba tesszuumlk az indirekt ciacutemzeacutessel kiolvasott karaktertCJNE A0relac1 Ha az eltaacuterolt karakter nem 0 eacutes 9 koumlzeacuterelac1 esik akkor farkincaacutet fogunk kijelezniJC illegal megjeleniacuteteacuteskor Eacutes odaugrunkCJNE Arelac2 Az előbbi az Altrsquo0rsquo eset ez meg azrelac2JNC illegal Agtrsquo9rsquo (Agt=rsquorsquo) esetportMOV P2A Kirakjuk a P2-es portra MOV A50 Vaacuterunk kicsit a kijelzeacutes utaacuten 05 s-etCALL DELAYMOV P215 Kikapcsoljuk a kijelzőtMOV A5 Nagyon roumlvid ideig vaacuterunk 005 sCALL DELAYINC R3 Noumlveljuumlk a ciklusvaacuteltozoacutetMOV AR3 Megvizsgaacuteljuk a ciklusvaacuteltozoacutetCJNE Anumbereval R3 lt numberevalJNC new Ha R3 = number akkor visszaugrunk uacutej karaktersorozat beolvasaacutesaacutehozINC R0 Noumlveljuumlk R0-tJMP display Folytatjuk az elmentett szaacutemjegyek kijelzeacuteseacutetillegalMOV A12 A farkincaacutenak nevezett karakter koacutedjaJMP port Ugrunk a teacutenyleges kijelzeacuteshez Adatok (karakterfuumlzeacuterek) messtart DB 101013Enter some characters10130mesrepeat DB 10Watch the display10130$INCLUDE(UARTIOASM)

A fenti koacutedban az alsoacute RAM-ba iacutertunk adatokat Egyetlen sor moacutedosiacutetaacutesaacuteval a felső RAM-ba is iacuterhatunk Ehhez

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

raacuteadaacutesul teacutenylegesen kizaacuteroacutelag indirekt ciacutemzeacutessel feacuterhetuumlnk hozzaacute hiszen ha direkt ciacutemzeacutest hasznaacutelnaacutenk akkor az SFR-eket iacuternaacutenk foumlluumll ami toumlbbnyire azonnal eleacuteg massziacutev programhalaacutelhoz vezetne A megvaacuteltoztatni kiacutevaacutent sor a memoacuteriateruumllet kezdőciacuteme Legyen ez most a felső RAM kezdete azaz 80h

array EQU 080h

Ennyi Semmi toumlbb Ezzel a ciacutemmegadaacutessal az adatok a felső RAM-ba keruumllnek Ezt a vaacuteltozatot a koacutedkoumlnyvtaacuterban a teljesseacuteg kedveacuteeacutert Code35 testesiacuteti meg

2 Iacuteraacutes a belső adatmemoacuteriaacutebaA [Az ADuC 842-es adatmemoacuteriaacuteinak elrendezeacutese] aacutebraacuten laacutethatoacute belső adatmemoacuteria hasznaacutelata nem igeacutenyel tuacutel nagy erőfesziacuteteacutest de neacutehaacuteny dolgot meg kell eacutertenuumlnk hozzaacute Ahhoz hogy hasznaacutelni tudjuk 1-re kell aacutelliacutetanunk egy bizonyos bitet egy olyan SFR-ben ami az ADuC 842-es speciaacutelis lehetőseacutegeiről rendelkezik Ez a regiszter a CFG842 Reacuteszletes leiacuteraacutesa megtalaacutelhatoacute a gyaacuteri dokumentumban [1 p 36 Table 13] Ezzel a regiszterrel fontos beaacutelliacutetaacutesokat tehetuumlnk meg a kiterjesztett veremmutatoacuteval a PWM-jelek laacutebaival a DA-aacutetalakiacutetoacute puffereacutevel kuumllső oacuterajel-generaacutetorral az SPI-busszal kapcsolatban eacutes a belső adatmemoacuteria eleacutereacuteseacutevel kapcsolatban Nekuumlnk ebben a tankoumlnyvben kizaacuteroacutelag ez utoacutebbi a fontos Jegyezzuumlk meg hogy az ADuC 842-es belső adatmemoacuteriaacuteja akkor keacutepeződik le a kuumllső memoacuteria alsoacute 2 kilobaacutejtjaacutera ha CFG842 0 bitjeacutet 1-re aacutelliacutetjuk Ellenkező esetben a belső adatmemoacuteriaacutet nem tudjuk eleacuterni Ezt a bitet a maacuter megismert logikai maszkolaacutessal aacutelliacutethatjuk 1-re

ORL CFG84200000001b

A kuumllső adatmemoacuteria eleacutereacuteseacutehez uacutej ciacutemzeacutesmoacutedot kell megtanulnunk Ez a kuumllső indirekt ciacutemzeacutes Az utasiacutetaacutes mnemonikjaacuteban szereplő X betű az External angol szoacutera utal ami kuumllsőt jelent A ciacutemzeacuteshez eacuteppen uacutegy szuumlkseacuteg lesz az adatmutatoacutera mint a koacuted-indirekt ciacutemzeacutesneacutel

MOVX ADPTRMOVX DPTRA

A ciacutemzeacutesnek van egy maacutesik vaacuteltozata is ehhez az utasiacutetaacuteshoz

MOVX ARiMOVX RiA

Ez utoacutebbit viszont csak nagyon ritkaacuten hasznaacuteljaacutek a programozoacutek csak akkor amikor elegendő a ciacutemzeacuteshez az R0 vagy R1 regiszter Egyeacuteb esetekben az adatmutatoacutet hasznaacuteljuk az indirekt moacutedon megadott ciacutem megfogalmazaacutesaacutehoz

A Code34 eacutes Code35 programokban csak neacutehaacuteny vaacuteltoztataacutest kell megtennuumlnk eacutes maacuter műkoumldni is fog a kuumllső indirekt ciacutemzeacutes Ez lesz a Code36 program Az első vaacuteltoztataacutes a CFG842 regiszter 0 bitjeacutenek 1-re aacutelliacutetaacutesa ahogy azt fentebb bemutattuk A maacutesodik hogy a sima R0-val megfogalmazott indirekt ciacutemzeacutes helyett mindig a kuumllső indirekt ciacutemzeacutest hasznaacuteljuk Ehhez persze az adatmutatoacuteba mindig időben be kell toumlltenuumlnk a kuumllső memoacuteriakeacutent eacutertelmezet belső adatmemoacuteria megfelelő ciacutemeacutet ami legyen most naacutelunk mindjaacutert a teruumllet legeleje

MOV DPTR0000h

Ha az adatmutatoacutenak toumlrteacutenő eacuterteacutekadaacutest megtesszuumlk akkor maacuter csak az oumlsszes

MOV AR0

eacutes

MOV R0A

utasiacutetaacutest kell lecsereacutelnuumlnk a koumlvetkezőkre

MOVX ADPTR

eacutes

MOV DPTRA

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

A nagyon keveacutes vaacuteltoztataacutes elleneacutere Code36-ot meacutegis reacuteszletezzuumlk hiszen igen nagy fontossaacuteggal biacuter Az elteacutereacuteseket Code34-hez (eacutes Code35-houmlz) keacutepest saacuterga kiemeleacutessel jeloumlljuumlk

Code36asmORG 0060h A teacutenyleges programkoacuted helyechar DATA 030h A beeacuterkező karakter eltaacuterolaacutesaacutera szolgaacuteloacute baacutejtnumber DATA 031h Ennyi darab karakter eacuterkezettMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszORL CFG84200000001b A belső adatmemoacuteria lekeacutepezeacutese a kuumllső adatmemoacuteria alsoacute reacuteszeacuterenewMOV DPTRmesstart Az indiacutetaacutesi uumlzenet kiiacuteraacutesaCALL SENDSTRINGMOV P215 Erre a koacutedra a kijelzőn semmi sincsMOV DPTR0000h A ciacutem elhelyezeacutese az adatmutatoacutebaMOV R0array R0-ba toumlltjuumlk a memoacuteriatoumlmb kezdeteacutetMOV number0 A karakterek darabszaacutemaacutenak kezdeti eacuterteacutekefogadCALL GETCHAR Karaktert olvasunk beMOV charA Elmentjuumlk a char vaacuteltozoacutebaCALL SENDCHAR Visszakuumlldjuumlk a PC-nekCLR CSUBB A13 Megneacutezzuumlk hogy ENTER eacuterkezett-e azaz 13JZ enter Ha igen elungrunk lekezelniMOV Achar A-ba tesszuumlk a char-ba ideiglenesen betett a PC-ről eacuterkezett karaktertMOVX DPTRA Kuumllső indirekt ciacutemzeacutessel a memoacuteriaacuteba mentjuumlkINC number Noumlveljuumlk az elmentett karakterek darabszaacutemaacutetINC DPTR Noumlveljuumlk a kuumllső indirekt ciacutemzeacuteshez hasznaacutelt adatmutatoacute eacuterteacutekeacutetMOV Anumber Megneacutezzuumlk eleacutertuumlk-e aCLR CSUBB A10 10 karaktert Ha igenJZ kijelez ugrunk kijelezniJMP fogad Visszaugrunk a koumlvetkező karakter fogadaacutesaacutehozenterCALL GETCHAR ENTER eseteacuten a 13 utaacuten 10 is joumln Ezt kiolvassuk de a tovaacutebbiakban nem csinaacutelunk vele semmitMOV Anumber Amennyiben number eacuterteacuteke 0 azaz egyJZ new karakter sem eacuterkezett visszaugrunk uacutej karaktersort fogadnikijelezMOV DPTRmesrepeat A szaacutemok kijelzeacutese előtti uumlzenetCALL SENDSTRINGMOV R30 Ez a ciklus fogja egyeseacutevel kiolvasni a memoacuteriaacuteboacutel az elmentett karaktereket amiket aztaacuten kirak a kijelzőreMOV DPTR0000h DPTR-be tesszuumlk a memoacuteriatoumlmb kezdeti ciacutemeacutetdisplayMOV A10 Roumlvid időt vaacuterakozunkCALL DELAYMOVX ADPTR A-ba tesszuumlk a kuumllső indirekt ciacutemzeacutessel kiolvasott karaktertCJNE A0relac1 Ha az eltaacuterolt karakter nem 0 eacutes 9 koumlzeacuterelac1 esik akkor farkincaacutet fogunk kijelezniJC illegal megjeleniacuteteacuteskor Eacutes odaugrunkCJNE Arelac2 Az előbbi az Altrsquo0rsquo eset ez meg azrelac2JNC illegal Agtrsquo9rsquo (Agt=rsquorsquo) esetportMOV P2A Kirakjuk a P2-es portra MOV A50 Vaacuterunk kicsit a kijelzeacutes utaacuten 05 s-et

Created by XMLmind XSL-FO Converter

Iacuteraacutes a memoacuteriaacuteba

CALL DELAYMOV P215 Kikapcsoljuk a kijelzőtMOV A5 Nagyon roumlvid ideig vaacuterunk 005 sCALL DELAYINC R3 Noumlveljuumlk a ciklusvaacuteltozoacutetMOV AR3 Megvizsgaacuteljuk a ciklusvaacuteltozoacutetCJNE Anumbereval R3 lt numberevalJNC new Ha R3 = number akkor visszaugrunk uacutej karaktersorozat beolvasaacutesaacutehozINC DPTR Noumlveljuumlk DPTR-tJMP display Folytatjuk az elmentett szaacutemjegyek kijelzeacuteseacutetillegalMOV A12 A farkincaacutenak nevezett karakter koacutedjaJMP port Ugrunk a teacutenyleges kijelzeacuteshez Adatok (karakterfuumlzeacuterek) messtart DB 101013Enter some characters10130mesrepeat DB 10Watch the display10130$INCLUDE(UARTIOASM)

Felhiacutevjuk a figyelmet arra hogy mivel csak 10 karaktert kell elmentenuumlnk most pont lehetne hasznaacutelni a

MOVX ARiMOVX RiA

utasiacutetaacutespaacutert is Ekkor termeacuteszetesen az adatmutatoacute helyett a hasznaacutelt R regiszternek (R0 agy R1) kellene a megfelelő helyen eacuterteacuteket adnunk eacutes azt szintuacutegy a megfelelő helyen noumlvelnuumlnk laacutesd a saacuterga kiemeleacuteseket Code36-ban

Created by XMLmind XSL-FO Converter

17 fejezet - IdőziacutetőkszaacutemlaacuteloacutekA soros porti kommunikaacutecioacuteroacutel szoacuteloacute egyik alfejezetben ([Az UART soros interfeacutesz]) maacuter emliacutetettuumlk hogy az ADuC 842-esben neacutegy időziacutetőszaacutemlaacuteloacute talaacutelhatoacute A 3 sorszaacutemuacutet kifejezetten a soros porti kommunikaacutecioacutehoz tervezteacutek eacutes ennek műkoumldeacuteseacutet ott ismertettuumlk A maacutesik haacuterom időziacutetőszaacutemlaacuteloacute azaz a 0 1 eacutes 2 baacutermilyen olyan feladatra hasznaacutelhatoacute amit a nevuumlk is takar Ha időziacutetőkeacutent uumlzemeltetjuumlk őket akkor egy oacuterajel egy kettyeneacutest jelent (Ennek eacutertelmeacutet keacutesőbb tisztaacutezzuk) Ez az uumlzemmoacuted kivaacuteloacutean alkalmas arra hogy időziacuteteacutest hajtsunk veacutegre ezekkel az eszkoumlzoumlkkel A szaacutemlaacuteloacute uumlzemmoacuted kicsit maacutest jelent Ilyenkor a chip megfelelő laacutebaacuten mutatkozoacute 1-0-aacutetmenet ugratja eggyel a szaacutemlaacuteloacute eacuterteacutekeacutet Ezzel a lehetőseacuteggel azonban e tankoumlnyvben nem foglalkozunk

A tankoumlnyvben a 0 időziacutetőt fogjuk toumlbb peacuteldaacuteban felhasznaacutelni Innentől kezdve tehaacutet nem időziacutetőnekszaacutemlaacuteloacutenak nevezzuumlk hanem csak időziacutetőnek (Az olvasoacutet arra keacuterjuumlk hogy azt se vegye zokon ha neacuteha TIMER 0-t iacuterunk) Az 1 időziacutető egyeacutebkeacutent pontosan uacutegy műkoumldik mint a 0 időziacutető eacutes a 2 sorszaacutemuacute is toumlbb hasonloacutesaacutegot mutat az előzőekkel Annyiban mindhaacuterom megegyezik hogy 16 bit felbontaacutesuacuteak Ez az eacuterteacutek nyilvaacuten keacutet baacutejtot jelent melyek egy-egy SFR-ben talaacutelhatoacutek A 0 időziacutető eseteacuteben ezek a TH0 eacutes TL0 regiszterek A T betű a Timer (időziacutető) szoacuteboacutel szaacutermazik a 0 szaacutemjegy a 0 időziacutetőt jeloumlli A H betű a High azaz felső jelzőt takarja Ez lesz tehaacutet a 16-bites eacuterteacutek felső baacutejtja Az L betű maacuter sejthető moacutedon a Low azaz alsoacute jelzőből szaacutermazik Ez pedig a 16-bites eacuterteacutek alsoacute baacutejtja lesz Mindez akkor igaz ha teacutenylegesen 16-bites uumlzemmoacutedot hasznaacutelunk

A 0 eacutes 1 időziacutetőhoumlz minthogy feleacutepiacuteteacutesuumlkben pontosan megegyeznek toumlbb olyan regiszter tartozik melyek egyik fele az egyik maacutesik fele a maacutesik időziacutetőt konfiguraacutelja Ez a TMOD eacutes TCON regiszter A most koumlvetkező taacuteblaacutezatokban ([A TMOD SFR parameacuteterei] eacutes [A TCON SFR parameacuteterei]) csak a 0 időziacutetőre vonatkozoacute biteket taacutergyaljuk az 1 időziacutetőre vonatkozoacutek leiacuteraacutesa megegyezik ezekkel csak a hivatkozaacutesokat kell kicsereacutelnuumlnk 0-roacutel 1-re

171 taacuteblaacutezat - A TMOD SFR parameacuteterei

TMOD Control and configuration for Timers 0 and 1

A 0 eacutes 1 időziacutető vezeacuterlő- eacutes konfiguraacutecioacutes regisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 Gate Az 1 időziacutető vezeacuterlő- eacutes konfiguraacutecioacutes bitjei Hataacutesuk megegyezik a 0 időziacutetőre az alaacutebbiakban leiacutertakkal

6 CT

5 M1

4 M0

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

3 Gate Ha 0 akkor a 0 időziacutetőt minden esetben engedeacutelyezzuumlk amikor a TR0 vezeacuterlőbitet magasra aacutelliacutetjuk (laacutesd TCON regiszter) Az 1 esetet nem taacutergyaljuk

2 CT Ha 0 akkor időziacutető uumlzemmoacutedot aacutelliacutetunk be A szuumlkseacuteges jelet a belső oacuterajel jelenti Az 1 esetet nem taacutergyaljuk

1 M1 A 0 időziacutető uumlzemmoacutedjaacutenak bitje

0 M0 A 0 időziacutető uumlzemmoacutedjaacutenak bitje

M1 M0 Uumlzemmoacuted

0 0 TH0 8-bites időziacutetőkeacutent uumlzemel TL0 5-bites

előskaacutelaacutezoacutekeacutent tekintendő

0 1 16-bites időziacutető TH0 eacutes TL0 egyuumltt kezelendő

1 0 8-bites uacutejratoumlltős uumlzemmoacuted TH0 eacuterteacuteke mindig

betoumlltődik TL0-ba valahaacutenyszor az tuacutelcsordul

1 1 Nem taacutergyaljuk

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

A TMOD regiszterneacutel a gyaacuteri leiacuteraacutes szerint [1 p 60 Table 28] valoacutejaacuteban van egy aproacute kuumlloumlnbseacuteg a keacutet időziacutető 11-es uumlzemmoacutedjai koumlzoumltt de ezzel az uumlzemmoacuteddal ebben a tankoumlnyvben nem foglalkozunk A toumlbbi reacuteszlet a keacutet időziacutetőre viszont teacutenylegesen toumlkeacuteletesen megegyezik A TCON regiszternek csak 4 bitje vonatkozik az időziacutetőkreszaacutemlaacuteloacutekra A toumlbbi bit eacuterdekes moacutedon a megszakiacutetaacutest kivaacuteltani keacutepes kuumllső esemeacutenyekre vonatkozik Minthogy ezeket taacutergyaltuk a tankoumlnyvben (laacutesd [Kuumllső esemeacutenyek aacuteltal generaacutelt megszakiacutetaacutes] alfejezet) a taacuteblaacutezatboacutel sem hagyhatjuk ki a raacutejuk vonatkozoacute tovaacutebbi informaacutecioacutekat Ezeknek birtokaacuteban az olvasoacute tovaacutebb finomiacutethatja a gombnyomaacutesroacutel mint kuumllső esemeacutenyről szerzett tudaacutesaacutet

172 taacuteblaacutezat - A TCON SFR parameacuteterei

TCON TimerCounter 0 and 1 Control Register

A 0 eacutes 1 időziacutetőszaacutemlaacuteloacute vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Leiacuteraacutes

7 TF1 Az 1 időziacutető vezeacuterlő bitjei Hataacutesuk megegyezik a 0 időziacutetőre az alaacutebbiakban leiacutertakkal

6 TR1

5 TF0 A 0 időziacutető tuacutelcsordulaacutesi jelzőbitje Hardveresen aacutell 1-re tuacutelcsordulaacuteskor Hardveresen toumlrlődik ha a programszaacutemlaacuteloacute a megszakiacutetaacutesi rutinra aacutell

4 TR0 A 0 időziacutető futaacutesi vezeacuterlőbitje Ha 1-re aacutelliacutetjuk elindul az időziacutető Ha 0-ra aacutelliacutetjuk megaacutell az időziacutető

3 IE1 Az 1 kuumllső esemeacuteny kezeleacuteseacutenek bitjei Hataacutesuk megegyezik a 0 kuumllső esemeacutenyre

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

az alaacutebbiakban leiacutertakkal

2 IT1

1 IE0 A 0 kuumllső esemeacuteny megszakiacutetaacutesi jelzőbitje Az IT0 bittől fuumlggően hardveresen aacutell 1-re lefutoacute eacutelneacutel vagy nulla jelszintneacutel

0 IT0 A 0 kuumllső esemeacuteny megszakiacutetaacutesaacutenak aktivaacutelaacutesi tiacutepusa Ha 1-et aacutelliacutetunk be 1-0 aacutetmenetre vaacuteltoacutedik ki a megszakiacutetaacutes Ha 0-t aacutelliacutetunk be alacsony jelszintre vaacuteltoacutedik ki megszakiacutetaacutes

Az időziacutetők uacutegy műkoumldnek hogy az oacuterajeleket szaacutemlaacuteloacute regiszterbe vagy regiszterekbe (ez a kivaacutelasztott uumlzemmoacutedtoacutel fuumlgg) betoumlltjuumlk a kezdeti eacuterteacuteket 16-bites uumlzemmoacutednaacutel a keacutet regiszter TH0 eacutes TL0 egyuumltt eacutertelmezendő a kettő egyuumltt egy 16-bites eacuterteacuteket takar Minden egyes oacuterajelre a szaacutemlaacuteloacuteregiszter vagy regiszterek egyuumlttes eacuterteacuteke eggyel nő Amennyiben ez az eacuterteacutek eleacuteri a maximaacutelisan aacutebraacutezolhatoacute eacuterteacuteket majd a koumlvetkező oacuterajelneacutel bdquoaacutetfordulrdquo azaz ismeacutet nulla lesz bekoumlvetkezik a megszakiacutetaacutes Ennek vektora TIMER 0 eseteacuten a 000Bh ciacutem TIMER 1 eseteacuten pedig a 001Bh ciacutem

Megismeacuteteljuumlk az időziacutetők regisztere vagy regiszterei nem lefeleacute hanem eacuteppen hogy foumllfeleacute szaacutemolnak A megszakiacutetaacutes pedig ezek tuacutelcsordulaacutesakor koumlvetkezik be

A [Az IE SFR parameacuteterei]ban megtalaacuteljuk a megszakiacutetaacutesok egy reacuteszeacutenek engedeacutelyezőbitjeacutet Timer 0 eseteacuteben ez az ET0 Timer 1 eseteacuteben pedig az ET1 A 8-bites uumlzemmoacuted nagyon nagy frekvenciaacutejuacute műkoumldeacutest eredmeacutenyezne ezeacutert elsőkeacutent a 16-bites uumlzemmoacuteddal mutatunk be tanulsaacutegos alkalmazaacutesokat

1 Egyszerű időmeacutereacutes az időziacutetővelIdeacutezzuumlk foumll a [14 feladat]ot de tegyuumlnk hozzaacute egy koumlvetelmeacutenyt eacutes adjunk neki uacutej sorszaacutemot is

26 feladat

Az ADuC-panel LED-soraacutenak oumlsszes LED-je villanjon foumll roumlvid ideig minden egyes maacutesodpercben Hasznaacuteljuk ehhez a 0 időziacutetőt [Code37]

A kiacutevaacutenalmakat azeacutert taacutergyaljuk kuumlloumln feladatkeacutent mert teljesen maacutes struktuacuteraacutejuacute megoldaacutest kiacutevaacuten eacutes előremutat egy egeacuteszen kerek alkalmazaacutes iraacutenyaacuteba Ezt a feladatot most a 0 időziacutetővel fogjuk megoldani

Neacutezzuumlk most meg hogy hogyan kell kiszaacutemiacutetanunk a TH0 eacutes TL0 regiszterekbe toumlltendő kezdeti eacuterteacutekeket Azt maacuter tudjuk hogy a keacutet regiszter egyuumlttes 16-bites eacuterteacuteke minden egyes oacuterajel-ciklussal eggyel nő Fontos hogy az eacuterteacutek nő tehaacutet felfeleacute mozdul Keacuterdeacutes tehaacutet hogy mit toumlltsuumlnk a regiszterekbe kezdeti eacuterteacutek gyanaacutent ahhoz

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

hogy mondjuk 001 s teljen el keacutet tuacutelcsordulaacutes koumlzoumltt Ezt kiszaacutemiacutetanunk nem lesz neheacutez

A default beaacutelliacutetaacutes szerint az oacuterajel 2 097 152 Hz Ahhoz hogy 001 s teljen el 20 97152 darab oacuterajel-ciklusnak kell lefutnia Elmeacuteletileg Ez az eacuterteacutek csakis egeacutesz szaacutem lehet iacutegy kerekiacutetsuumlk azt 20 972 darabra Ez hexadecimaacutelisan 51ECh Na most ennyi ciklusnak kell tehaacutet lefutnia a tuacutelcsordulaacutesig Ezek szerint a kezdeti eacuterteacuteknek FFFFh ndash 51ECh = AE13h-nak kell lennie De biztos hogy ennyinek kell lennie Vigyaacutezzunk mert ha FFFFh-roacutel indul a szaacutemlaacuteloacute akkor a tuacutelcsordulaacutesig 1 ciklus meacuteg lefut Eacuteppen ezeacutert a kapott AE13h eacuterteacutekhez 1-et meacuteg hozzaacute kell adnunk (eacutes ha iacutegy szaacutemolunk akkor mindig) iacutegy a veacutegeredmeacuteny AE14h Alsoacute baacutejtkeacutent eacutes felső baacutejtkeacutent ezt iacutegy toumlltjuumlk TIMER 0 regisztereibe

MOV TH00AEhMOV TL0014h

Eacutes indiacutethatjuk a szaacutemlaacuteloacutet Ehhez magasra kell aacutelliacutetanunk a TR0 bitet vouml [A TCON SFR parameacuteterei]

A programban kuumlloumln vaacuteltozoacutet dedikaacutelunk a szaacutezadmaacutesodperceknek (s100) Ennek eacuterteacutekeacutet mindig eggyel noumlveljuumlk amennyiben bekoumlvetkezik egy megszakiacutetaacutes Eacutes minthogy a TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes 001 maacutesodpercenkeacutent koumlvetkezik be ezeacutert helyesen cselekszuumlnk A megszakiacutetaacutesban maacuter csak azt kell figyelnuumlnk hogy a szaacutezadmaacutesodpercek vaacuteltozoacuteja eleacuterte-e maacuter a 99-es eacuterteacuteket Ha igen akkor a koumlvetkező beavatkozaacutes nem a noumlveleacutese lesz hanem lenullaacutezzuk viszont magasra aacutelliacutetunk egy jelzőbitet (mp) amely tehaacutet az egeacutesz maacutesodpercek ugraacutesaacutet jelzi Ezt a jelzőbitet pedig a főprogram fogja figyelni eacutes ha 1-re billen foumllvillantja a LED-sort egy tized maacutesodperc erejeacuteig A megszakiacutetaacutest jelentő programreacuteszneacutel csak arra az egyre kell vigyaacuteznunk nehogy a veacutegrehajtaacutesa 001 s-naacutel hosszabb időt oumlleljen foumll Szerencseacutere ezt meg sem koumlzeliacutetjuumlk Ettől fuumlggetlenuumll a regiszterveacutedelem utaacuten roumlgtoumln azzal folytatjuk a megszakiacutetaacutest lekezelő programreacuteszt hogy megaacutelliacutetjuk az időziacutetőt uacutejra betoumlltjuumlk az időziacuteteacuteshez szuumlkseacuteges eacuterteacutekeket aztaacuten elindiacutetjuk az időziacutetőt Minden maacutessal csakis ez utaacuten toumlrőduumlnk

A most koumlvetkező koacutedban ismeacutet felhasznaacuteljuk eacutes hagyomaacutenyainkhoz hiacuteven most sem tuumlntetjuumlk foumll foumlloumlslegesen a DELAY szubrutinunkat Figyeljuumlk meg hogy a megszakiacutetaacutest lekezelő programreacuteszben most maacuter okvetlenuumll alkalmaznunk kell a koraacutebban megtanult regiszterveacutedelmet hiszen a programreacutesz hasznaacutelja az akkumulaacutetort A veacutedelem most elegendő erre az egy regiszterre hiszen maacutes nincs veszeacutelyben Arra is figyelnuumlnk kell hogy a verembe mentett eacuterteacuteket mindig kivegyuumlk mielőtt visszateacuteruumlnk a megszakiacutetaacutesboacutel

Code37asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 000Bh TIMER0 tuacutelcsordulaacutesaJMP TIMER0 aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetes100 DATA 030h A szaacutezadmaacutesodpercek vaacuteltozoacutejamp BIT 00h A maacutesodpercek ugraacutesaacutenak jelzőbitje A TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes TIMER0PUSH ACC RegiszterveacutedelemCLR TR0 TIMER0 leaacutelliacutetaacutesaMOV TH00AEh Az időziacutető kezdeti eacuterteacutekeinekMOV TL0014h uacutejboacuteli betoumllteacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV As100 Megvizsgaacuteljuk s100 tartalmaacutetCJNE A99novel100 Ha meacuteg nem 99 noumlvelhetjuumlkMOV s1000 Kuumlloumlnben nullaacutezzukSETB mp Eacutes 1-re aacutelliacutetjuk az mp jelzőbitet hiszen eltelt 1 maacutesodpercPOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETInovel100INC s100 Szaacutezadmaacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETI FŐPROGRAM MAINMOV TMOD00000001b TIMER0 16-bites uumlzemmoacutedban műkoumldik

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

MOV TH00AEh Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV TL0014h Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaCLR mp Az mp jelzőbit toumlrleacuteseSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesSETB ET0 Timer0 megszakiacutetaacutesaacutenak engedeacutelyezeacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV A10 Az időhuacutezaacutes parameacutetere (01 s)lesJNB mp$ Vaacuterunk az mp jelzőbit bebillenteacuteseacutereCLR mp Azonnal toumltoumlljuumlk ha előzőleg bebillentMOV P20 LED-sor bekapcsolaacutesaCALL DELAY VaacuterakozaacutesMOV P20FFh LED-sor kikapcsolaacutesaJMP les Ugraacutes vissza figyelni az mp jelzőbitet

2 Stopperoacutera keacutet fotokapuvalAz előző alfejezetben elemi alkalmazaacutest laacutettunk arra hogy hogyan lehet időmeacuterő szerkezetet csinaacutelni az ADuC 842-esből az egyik időziacutető felhasznaacutelaacutesaacuteval A most koumlvetkező feladat maacuter olyan alkalmazaacutest fogalmaz meg amit bizonyaacutera sok helyen megtalaacutelhatunk a gyakorlatban is Iacutegy lassan-lassan kezdjuumlk elhagyni a tankoumlnyvbe illő de bdquotankoumlnyvszaguacuterdquo feladatokat eacutes veacutegre eleacuterkeztuumlnk egy olyanhoz amelynek maacuter szereacutenyen de meacuternoumlki moacutedon tudunk megfelelni

27 feladat

Keacutesziacutetsuumlnk időmeacuterő eszkoumlzt keacutet fotokapuval Amikor egy objektum aacutethalad az elsőn induljon el a stopper amikor aacutethalad a maacutesodikon aacutelljon meg a stopper A meacutert időt a mikrovezeacuterlő szaacutezadmaacutesodpercre pontosan kuumlldje el a PC-nek A stopper indulaacutesa előtt zoumlld LED vilaacutegiacutetson az aacuteramkoumlri panelon a stopper futaacutesa koumlzben piros Megaacutellaacuteskor ismeacutet zoumlld [Code38]

A [27 feladat] megoldaacutesaacutehoz egyszerű kis aacuteramkoumlr tartozik melynek elemeivel maacuter talaacutelkoztunk Az aacuteramkoumlr a [A (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacute A keacutet fotokapu feleacutepiacuteteacutese azonos egyeacutebiraacutent megegyezik a [A (Jelzőlaacutempa vezeacuterleacutese) megoldaacutesaacutehoz tartozoacute kapcsolaacutes] aacutebraacuten laacutethatoacuteeacuteval A keacutet LED-et azeacutert koumltjuumlk keacutet sorszaacutemaacuteban erősen elteacuterő laacutebra hogy keacutenyelmesebben elfeacuterjenek a proacutebapanelon A keacutet fototranzisztor vaacuteltozatlanul uacutegy műkoumldik hogy ha nincs semmilyen objektum a feacutenyuacutetban akkor a P20 ill P21 portbiteknek megfelelő laacutebakat foumlldre huacutezzaacutek Mindegyik termeacuteszetesen a neki megfelelőt Amennyiben elzaacuterja valami a feacutenyutat az ott leacutevő fototanzisztor lezaacuter ami azt vonja maga utaacuten hogy a P20 ill P21 portbiteknek megfelelő laacuteb kiuumll a taacutepfeszuumlltseacutegre A portbitek eacuterteacutekeacutet azutaacuten koumlnnyen olvashatjuk szoftveresen

171 aacutebra - A [27 feladat] (Stopperoacutera keacutet fotokapuval) megoldaacutesaacutehoz tartozoacute kapcsolaacutes

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

A koacuted most maacuter hosszuacutenak tűnik de ha jobban megneacutezzuumlk ez főkeacutent a soros porton elkuumlldoumltt jelek eacutes uumlzenetek adatai miatt van iacutegy Vaacuteltozoacutet is joacutecskaacuten toumlbbet hasznaacutelunk mint a koraacutebbi programokban Egy-egy bitvaacuteltozoacutet rendeluumlnk a keacutet LED-hez (green eacutes red) ill a fototranzisztorokra kapcsolt laacutebakhoz (gate1 eacutes gate2) Ezekre toumlbb szoacutet nem is eacuterdemes vesztegetni Sokkal eacuterdekesebb lesz a baacutejtvaacuteltozoacutek szerepe Az időziacutetőnek koumlszoumlnhetően a megszakiacutetaacutes 001 maacutesodpercenkeacutent koumlvetkezik be A szaacutezadmaacutesodperceket az s100 vaacuteltozoacute szaacutemolja Amennyiben ez maacuter eleacuterte a 9-et a koumlvetkező megszakiacutetaacuteskor uacutejra 0-t iacuterunk bele viszont tovaacutebb ugrunk a tizedmaacutesodpercek noumlveleacuteseacutehez Ezeknek s10-ben kumulaacuteloacutedik az eacuterteacuteke Ha az előzőekhez hasonloacutean ez is eleacuteri a 9-es eacuterteacuteket akkor ezt is nullaacutezzuk de tovaacutebb ugrunk a maacutesodpercek noumlveleacuteseacutehez A maacutesodperceket s1 gyűjti Ennek eacuterteacuteke azonban maacuter 59-ig mehet Ha eltelt egy perc akkor bdquonullaacutezoacutedikrdquo a stopperoacuteraacutenk időeacuterteacuteke eacutes uacutegy folytatoacutedik az időmeacutereacutes mintha akkor indult volna el Ennek a kis fogyateacutekossaacutegnak tehaacutet tudataacuteban kell lennuumlnk

A főprogram a soros port eacutes Timer 0 inicializaacutelaacutesa utaacuten bekapcsolja a zoumlld LED-et majd arra vaacuter hogy az első fotokapu bitje (gate1) magasra billenjen Meacuteg egyszer ez akkor koumlvetkezik be ha valamilyen objektum behatol a feacutenyuacutetba Ekkor elindiacutetjuk az időziacutetőt kikapcsoljuk a zoumlld LED-et eacutes bekapcsoljuk helyette a pirosat Ez utaacuten arra fogunk vaacuterni hogy az 1 fotokapun aacutethaladoacute objektum a 2 fotokapun is aacutethaladjon Ekkor megaacutelliacutetjuk az időziacutetőt azaz veacuteget eacuter az idő meacutereacutese Az eltelt idő eacuterteacutekeacutet a programnak maacuter csak aacutet kell alakiacutetania karakterekkeacute eacutes el kell kuumlldenie a PC-nek a koumlvetkező kiacuteseacuterőszoumlveggel eacutes formaacutetumban

Time elapsed 0123 s

A kiacuteseacuterőszoumlveg elkuumlldeacutese nem jelent probleacutemaacutet ilyesmit maacuter csinaacuteltunk a koraacutebbi koacutedokban A szaacutezadmaacutesodpercek ill tizedmaacutesodpercek eacuterteacuteke csak egy-egy baacutejt raacuteadaacutesul ezek szaacutemjegyek iacutegy csak ASCII karakterreacute kell őket alakiacutetunk (hozzaacuteadjuk a rsquo0rsquo karakter ASCII koacutedjaacutet azaz 30h-t) aztaacuten kuumlldhetjuumlk is a PC-nek Ez előtt azonban el kell kuumlldenuumlnk a maacutesodpercek eacuterteacutekeacutet Itt meg kell aacutellnunk egy pillanatra hiszen a maacutesodpercek eacuterteacuteke keacutetjegyű szaacutem is lehet (0-59) A keacutetjegyű szaacutemot keacutet egyjegyű szaacutemra kell bontanunk azaz kuumlloumln kell vaacutelasztanunk a tiacutezeseket eacutes az egyeseket Ehhez megtanulunk egy uacutej utasiacutetaacutest eacutes megtanuljuk annak paacuterjaacutet is

A 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben van keacutet komolyabb aritmetikai utasiacutetaacutes lehetőseacuteg van szorzaacutesra eacutes osztaacutesra is E keacutet utasiacutetaacutes az akkumulaacutetoron kiacutevuumll egy aritmetikai segeacutedregisztert is igeacutenyel ennek neve eacutes jele B A

MUL AB

utasiacutetaacutes megszorozza az akkumulaacutetor eacuterteacutekeacutet a B regiszterbe toumlltoumltt eacuterteacutekkel A mnemonik az angol Multiply Accumulator by B kifejezeacutesből szaacutermazik ami azt jelenti hogy akkumulaacutetor szorzaacutesa B-vel Az eredmeacuteny keacutetbaacutejtos eacuterteacutek lesz Az alsoacute baacutejt az akkumulaacutetorba keruumll a felső baacutejt a B regiszterbe A művelet hataacutessal van

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

toumlbb flag-re is melyek fontos informaacutecioacutet hordozhatnak A tuacutelcsordulaacutest jelző flag (OV laacutesd [A PSW SFR parameacuteterei]) eacuterteacuteke 1 lesz ha a szorzaacutes eredmeacutenye nagyobb mint 255 Kuumlloumlnben OV = 0 A C bit pedig eredmeacutenytől fuumlggetlenuumll mindig toumlrlődik

A szorzaacutes utasiacutetaacutesaacutet a programban most nem hasznaacuteljuk de ceacutelszerű egyuumltt taacutergyalni az osztaacutes műveleteacutevel ezeacutert keruumllt raacute most sor Amit viszont hasznaacutelni fogunk az az osztaacutes művelete

DIV AB

A mnemonik az angol Divide Accumulator by B kifejezeacutesből szaacutermazik ami azt jelenti hogy akkumulaacutetor osztaacutesa B-vel Tehaacutet A az osztandoacute B az osztoacute A művelet elveacutegzeacutese utaacuten a haacutenyados az akkumulaacutetorba a maradeacutek pedig a B regiszterbe keruumll Ha nullaacuteval akarnaacutenk osztani akkor a tuacutelcsordulaacutest jelző bit (OV laacutesd [A PSW SFR parameacuteterei]) 1-re billen kuumlloumlnben 0 marad A C bit eredmeacutenytől fuumlggetlenuumll enneacutel az utasiacutetaacutesaacutenaacutel is mindig toumlrlődik

Teacuterjuumlnk vissza a kiindulaacutesi probleacutemaacutenkhoz azaz bontsuk szaacutemjegyekre a maacutesodpercek eacuterteacutekeacutet (s1 vaacuteltozoacute) Mivel s1 eacuterteacuteke 0 eacutes 59 koumlzoumltt lehet pontosan azt fogjuk kapni amire most vaacutegyunk ha s1-et elosztjuk 10-zel Ekkor a tiacutezesek eacuterteacuteke lesz a haacutenyados eacutes ezt az akkumulaacutetorban talaacuteljuk Az egyesek eacuterteacuteke lesz a maradeacutek ezt pedig a B regiszterben talaacuteljuk Legyen peacuteldaacuteul s1=28 eacutes hajtsuk veacutegre a koumlvetkező utasiacutetaacutessort

MOV As1MOV B10DIV AB

Ennek eredmeacutenyekeacuteppen azt kapjuk hogy A=2 eacutes B=8 Eacutes ezeket az eacuterteacutekeket maacuter eacuteppen uacutegy kuumlldhetjuumlk a PC-nek mint baacutermilyen maacutes szaacutemjegyet A programban a tiacutezesek eacuterteacutekeacutet a tim10 vaacuteltozoacuteba miacuteg az egyesek eacuterteacutekeacutet a tim1 vaacuteltozoacuteba fogjuk elmenteni a keacutesőbbi feldolgozaacutes eacuterdekeacuteben Ezzel az oumlsszes felhasznaacutelt vaacuteltozoacutet ismertettuumlk eacutes a program műkoumldeacuteseacutenek leacutenyegi elemeit is oumlsszefoglaltuk

Code38asmORG 0000hJMP MAIN Az indulaacutes utaacuteni ugraacutesORG 000Bh TIMER0 tuacutelcsordulaacutesaJMP TIMER0 aacuteltal kivaacuteltott megszakiacutetaacutes vektoraORG 0060h A teacutenyleges programkoacuted kezdetes100 DATA 030h A szaacutezadmaacutesodpercek vaacuteltozoacutejas10 DATA 031h A tizedmaacutesodpercek vaacuteltozoacutejas1 DATA 032h A maacutesodpercek vaacuteltozoacutejatim10 DATA 033h A kuumlldendő időeacuterteacutek maacutesodperceinek tiacutezeseitim1 DATA 034h A kuumlldendő időeacuterteacutek maacutesodperceinek egyeseigate1 BIT P20 Az első fotokapu bitjegate2 BIT P21 A maacutesodik fotokapu bitjegreen BIT P23 A zoumlld LED bitjered BIT P27 A piros LED bitje A TIMER 0 tuacutelcsordulaacutesa aacuteltal kivaacuteltott megszakiacutetaacutes TIMER0PUSH ACC RegiszterveacutedelemCLR TR0 TIMER0 leaacutelliacutetaacutesaMOV TH00AEh Az időziacutető kezdeti eacuterteacutekeinekMOV TL0014h uacutejboacuteli betoumllteacuteseSETB TR0 TIMER0 indiacutetaacutesaMOV As100 Megvizsgaacuteljuk s100 tartalmaacutetCJNE A9novel100 Ha meacuteg nem 9 noumlvelhetjuumlkMOV s1000 Kuumlloumlnben nullaacutezzukJMP tized s100 aacutetfordult Noumlveljuumlk s10-et isnovel100INC s100 Szaacutezadmaacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETItizedMOV As10 Megvizsgaacuteljuk s10 tartalmaacutetCJNE A9novel10 Ha meacuteg nem 9 noumlvelhetjuumlkMOV s100 Kuumlloumlnben nullaacutezzukJMP egesz s10 aacutetfordult Noumlveljuumlk s1-et isnovel10INC s10 Tizedmaacutesodpercek noumlveleacutese

Created by XMLmind XSL-FO Converter

Időziacutetőkszaacutemlaacuteloacutek

POP ACC Akkumulaacutetor visszaveacutetele a verembőlRETIegeszMOV As1 Megvizsgaacuteljuk s1 tartalmaacutetCJNE A59novel1 Ha meacuteg nem 59 noumlvelhetjuumlkMOV s10 Kuumlloumlnben nullaacutezzukPOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETInovel1INC s1 Egeacutesz maacutesodpercek noumlveleacutesePOP ACC Akkumulaacutetor visszaveacutetele a verembőlRETI FŐPROGRAM MAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV TMOD00000001b TIMER0 16-bites uumlzemmoacutedban műkoumldikMOV TH00AEh Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV TL0014h Kezdeti eacuterteacutekek beaacutelliacutetaacutesaMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s100 A tizedmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s10 Az egeacutesz maacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaSETB EA Globaacutelis megszakiacutetaacutesengedeacutelyezeacutesSETB ET0 Timer0 megszakiacutetaacutesaacutenak engedeacutelyezeacuteseCLR green Zoumlld LED bekapuJNB gate1$ Vaacuterunk az 1 fotokapu jeleacutereSETB TR0 Indiacutetjuk az időziacutetőt (stoppert)SETB green Zoumlld LED kiCLR red Piros LED beJNB gate2$ Vaacuterunk a 2 fotokapu jeleacutereCLR TR0 Megaacutelliacutetjuk az időziacutetőt (stoppert)SETB red Piros LED kiCLR green Zoumlld LED ismeacutet beMOV As1 Betoumlltjuumlk A-ba a maacutesodpercek eacuterteacutekeacutetMOV B10 El fogjuk osztani 10-zelDIV AB Az osztaacutes műveleteMOV tim10A Az egeacuteszek (eredmeacuteny) mennek tim10-beMOV tim1B A maradeacutek tim1-beMOV DPTRmes1 A Time elapsed sor elkuumlldeacuteseCALL SENDSTRINGMOV Atim10 Az eltelt maacutesodpercek tiacutezeseinekADD A0 elkuumlldeacutese Ehhez a szaacutemhoz hozzaacuteadjuk aCALL SENDCHAR 0 ASCII karaktert Eacutes keacutesőbb ugyaniacutegyMOV Atim1 Az eltelt maacutesodpercek egyeseinekADD A0 elkuumlldeacuteseCALL SENDCHARMOV A A tizedespont elkuumlldeacuteseCALL SENDCHARMOV As10 A tizedmaacutesodpercek elkuumlldeacuteseADD A0CALL SENDCHARMOV As100 A szaacutezadmaacutesodpercek elkuumlldeacuteseADD A0CALL SENDCHARMOV DPTRmes2 A jelenteacutest lezaacuteroacute karaktersor elkuumlldeacuteseCALL SENDSTRINGMOV s1000 A szaacutezadmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s100 A tizedmaacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaMOV s10 Az egeacutesz maacutesodpercek vaacuteltozoacutejaacutenak nullaacutezaacutesaJMP kapu Joumlhet az uacutej meacutereacutes ADATOK - karakterfuumlzeacuterek ndash stringek mes1 DB Time elapsed 0 mes2 DB s101010130 $INCLUDE(UARTIOASM)

Created by XMLmind XSL-FO Converter

18 fejezet - PWM-jelekAki elektronikaacuteval foglalkozik előbb-utoacutebb talaacutelkozik azzal a betűszoacuteval hogy PWM Ismeacutet angol kifejezeacutes lapul a haacutetteacuterben Pulse Width Modulation jelenteacutese impulzusszeacutelesseacuteg-modulaacutecioacute A fogalom megeacuterteacutese nem igeacutenyel nagy erőfesziacuteteacutest tekintsuumlk a [Neacutegyszoumlgjel] aacutebraacutet Az aacutebraacuten neacutegyszoumlgjel laacutethatoacute A viacutezszintes tengely az időtengely a fuumlggőleges tengely pedig baacutermifeacutele mennyiseacuteget jeloumllhet az elektronikaacuteban azonban a legtoumlbb esetben feszuumlltseacuteg szokott A jeltiacutepust azeacutert hiacutevjuk neacutegyszoumlgjelnek mert ideaacutelis esetben konstans fuumlggveacutenyek darabjaiboacutel eacutepuumll foumll A kapott alakzatokra azt is mondhatnaacutenk hogy teacuteglalapok A magyar terminoloacutegiaacuteban meacutegis a neacutegyszoumlgjel elnevezeacutes honosodott meg A T parameacuteter jeloumlli a neacutegyszoumlgjel perioacutedusidejeacutet Nyilvaacuten ennek reciproka lesz a jel frekvenciaacuteja A τ parameacuteter azt mutatja hogy egy perioacuteduson beluumll mennyi ideig magas a jelszint Termeacuteszetesen 0 le τ le T A haacutenyadost kitoumllteacutesi teacutenyezőnek hiacutevjuk A fentiek alapjaacuten 0 le k le 1

181 aacutebra - Neacutegyszoumlgjel

A neacutegyszoumlgjelnek azt a reacuteszeacutet ami τ ideig van jelen impulzusnak is szoktaacutek hiacutevni Mondhatjuk tehaacutet hogy a τ parameacuteter fuumlggveacutenyeacuteben vaacuteltozik az impulzus hossza vagy szeacutelesseacutege Termeacuteszetesen a jel perioacutedusidejeacutehez keacutepest Ezzel viszont el is eacuterkeztuumlnk az impulzusszeacutelesseacuteg-modulaacutecioacute fogalomhoz Adott neacutegyszoumlgjel előaacutelliacutetaacutesa kibocsaacutetaacutesa tovaacutebbiacutetaacutesa stb soraacuten ugyanis az impulzusok hossza informaacutecioacutet hordozhat Ha tehaacutet a szoacuteban forgoacute neacutegyszoumlgjel kitoumllteacutesi teacutenyezője a tovaacutebbiacutetandoacute informaacutecioacutetoacutel fuumlgg akkor impulzusszeacutelesseacuteg-modulaacutecioacuteroacutel beszeacuteluumlnk

Azt is vilaacutegosan kell laacutetnunk hogy impulzusszeacutelesseacuteg-modulaacutecioacuteval (a tovaacutebbiakban PWM-mel) nem csak informaacutecioacuteaacutetvitelt valoacutesiacutethatunk meg hanem keacutenyelmes moacutedon aacutelliacutethatjuk peacuteldaacuteul egy feszuumlltseacutegforraacutes jeleacutenek effektiacutev eacuterteacutekeacutet amennyiben lehetőseacuteguumlnk van a kimeneteacuten PWM-jel előaacutelliacutetaacutesaacutera Ez azeacutert lesz rendkiacutevuumll iacutegeacuteretes lehetőseacuteg mert nagyon sok rendszerben pusztaacuten a kitoumllteacutesi teacutenyező variaacutelaacutesaacuteval valoacutesiacutethatunk meg jelszintvezeacuterleacutest vagy erre eacutepuumllően tovaacutebbi szabaacutelyozaacutesi leacutepeacuteseket

1 PWM-jel előaacutelliacutetaacutesa a mikrovezeacuterlő jelgeneraacutetoraacutevalAz ADuC 842-es architektuacuteraacuteja alkalmas PWM-jel hardveres előaacutelliacutetaacutesaacutera A PWM-jelgeneraacutetor rendkiacutevuumll rugalmasan illeszkedik a gyakorlati igeacutenyekhez hat uumlzemmoacuted koumlzuumll vaacutelaszthatunk Ezek koumlzuumll raacuteadaacutesul kettő digitaacutelndashanaloacuteg-jelaacutetalakiacutetaacuteshoz hasznaacutelhatoacute foumll A PWM-jelek előaacutelliacutetaacutesaacutehoz oumlt SFR-re lesz szuumlkseacuteguumlnk PWMCON PWM0H PWM0L PWM1H PWM1L A legelsőt kiveacuteve a regiszterek a PWM-jelek digitaacutelis felbontaacutesaacutet frekvenciaacutejaacutet fel- eacutes lefutaacutesi időpillanataacutet hataacuterozzaacutek meg Az uumlzemmoacuted beaacutelliacutetaacutesa a PWMCON regiszterrel toumlrteacutenik laacutesd [A PWMCON SFR parameacuteterei] A PWM-jeleket a mikrovezeacuterlő a P27 eacutes P26 laacutebakon aacutelliacutetja elő ami esetuumlnkben annyit jelent hogy PWM-jelek előaacutelliacutetaacutesaacutenaacutel a panelunk LED-soraacutenak akaacuter keacutet LED-je is eacuterintett Ezt azonban ne baacutenjuk mert legalaacutebb kuumllső aacuteramkoumlr neacutelkuumll is sokszor laacutethatoacute lesz hogy sikeruumllt-e a jel előaacutelliacutetaacutesa (A PWM-jeleket aacutettehetjuumlk a P34 eacutes P33 laacutebakra is a CFG842 SFR 6 bitjeacutenek magasra aacutelliacutetaacutesaacuteval de ebben a tankoumlnyvben nem teszuumlnk ilyet)

181 taacuteblaacutezat - A PWMCON SFR parameacuteterei

PWMCON PWM Control Register

Created by XMLmind XSL-FO Converter

PWM-jelek

A PWM vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 SNGL Kikapcsolja a PWM-generaacutelaacutest a P26 (vagy P34) laacutebon szabadon hagyva a laacutebat egyeacuteb IO-műveletekhez

6 MD2 A PWM-uumlzemmoacuted bitjei

MD2 MD1 MD0 Uumlzemmoacuted

0 0 0 0 moacuted PWM letiltva

0 0 1 1 moacuted Egyetlen vaacuteltoztathatoacute

felbontaacutesuacute PWM-jel P27-en (vagy

P33-on)

0 1 0 2 moacuted 8-bites iker-PWM-jel

0 1 1 3 moacuted 16-bites iker-PWM-jel

1 0 0 4 moacuted Duaacutelis NRZ 16-bites - DAC

1 0 1 5 moacuted Duaacutelis 8-bites PWM-jel

1 1 0 6 moacuted Duaacutelis RZ 16-bites - DAC

1 1 1 Foglalt

5 MD1

4 MD0

Created by XMLmind XSL-FO Converter

PWM-jelek

3 CDIV1 A PWM-generaacutetor oacuterajelosztoacutejaacutenak bitjei

CDIV1 CDIV0 Leiacuteraacutes

0 0 Kivaacutelasztott oacuterajel 1

0 1 Kivaacutelasztott oacuterajel 4

1 0 Kivaacutelasztott oacuterajel 16

1 1 Kivaacutelasztott oacuterajel 64

2 CDIV0

1 CSEL1 A PWM-generaacutetor oacuterajelforraacutesaacutenak bitjei

CSEL1 CSEL0 Leiacuteraacutes

0 0 Kuumllső oacuterajel 15

0 1 Kuumllső oacuterajel

1 0 Kuumllső bemenet P34T0-n

1 1 fvco = 16 777 216 Hz

0 CSEL0

Az 1 uumlzemmoacuted ismerteteacuteseacutehez vaacuteltozatlan formaacuteban vesszuumlk aacutet a szemleacuteltető aacutebraacutet a gyaacuteri leiacuteraacutesboacutel [1 p 43 Figure 48] Tekintsuumlk tehaacutet a [A PWM-generaacutetor 1 uumlzemmoacutedja] aacutebraacutet

182 aacutebra - A PWM-generaacutetor 1 uumlzemmoacutedja

A PWM-generaacutetorhoz tartozik egy szaacutemlaacuteloacute Ezt nevezik az aacutebraacuten PWM Counter-nek Nos amikor ez a

Created by XMLmind XSL-FO Converter

PWM-jelek

szaacutemlaacuteloacute elindul a P27-es laacutebon előaacutelloacute jel magas szintre vaacutelt Amikor a szaacutemlaacuteloacute eleacuteri a PWM0HPWM0L regiszterek aacuteltal meghataacuterozott 16-bitesnek tekintendő eacuterteacuteket akkor a jel alacsony szintre vaacutelt A szaacutemlaacuteloacute viszont ketyeg tovaacutebb Amikor eleacuteri a PWM1HPWM1L regiszterek aacuteltal meghataacuterozott 16-bites eacuterteacuteknek tekintendő eacuterteacuteket akkor fog kezdődni a PWM-jel koumlvetkező perioacutedusa eacutes ekkor a szaacutemlaacuteloacute uacutejraindul nullaacuteroacutel (A regiszterek megnevezeacuteseacuteben szereplő H ill L betűk itt is a felső baacutejt (H) eacutes alsoacute baacutejt (L) elrendezeacutesre utalnak) Az aacutebra alapjaacuten vilaacutegosnak kell lennie hogy a jel frekvenciaacutejaacutet a PWM1HPWM1L regiszterek hataacuterozzaacutek meg miacuteg a PWM0HPWM0L regiszterek eacuterteacuteke a kitoumllteacutesi teacutenyezőeacutert felelős

Az 1 uumlzemmoacuted ismerteteacutese utaacuten fogalmazzunk meg egy a PWM-jelekre vonatkozoacute egyszerű kis feladatot

28 feladat

PWM-jel felhasznaacutelaacutesaacuteval villogtassunk egy LED-et a LED-soron 3 Hz eacutes 6 Hz koumlzoumltti frekvenciaacuteval [Code39]

A frekvenciaacutet azeacutert vaacutelasztottuk ilyen kicsinek a feladatban hogy szabad szemmel is laacutessuk műkoumldeacutes koumlzben a PWM-jelet Az emberi szem tulajdonsaacutegai miatt 50 Hz foumlloumltt maacuter biztosan oumlsszefolyna egyetlen fokozattaacute a LED villoacutedzaacutesa 100 Hz foumlloumltt pedig maacuter akkor se nagyon detektaacutelhatnaacutenk a villoacutedzaacutest ha ide-oda raacuteznaacutenk a panelt

A PWMCON regisztert konfiguraacuteljuk az alaacutebbi moacutedon

MOV PWMCON00011111b

A [A PWMCON SFR parameacuteterei] alapjaacuten ez azt jelenti hogy az 1 uumlzemmoacutedot vaacutelasztjuk (zoumlld jelzeacutes) Mivel igen kis frekvenciaacutet szretneacutenk előaacutelliacutetani alkalmazzuk a lehető legnagyobb oacuterajelosztaacutest azaz 64-et Ezt mutatja a saacuterga jelzeacutes Iacuterjuk elő a sajaacutet belső oacuterajelkristaacutely hasznaacutelataacutet hiszen egyelőre eszuumlnk aacutegaacuteban sem volt kuumllső oacuterajelforraacutesokat csatlakoztatni a panelunkhoz Ez a vaacutelasztaacutes laacutethatoacute a tuumlrkiz mezőben Veacuteguumll meacuteg meg kell jegyeznuumlnk hogy a 7 bit jelen esetben eacuterdektelen hiszen csak egyetlen PWM-jeluumlnk lesz (szuumlrke mező)

A PWM1HPWM1L regiszterpaacuter eacuterteacutekeacutenek vaacutelasszunk valami kellőkeacuteppen nagy eacuterteacuteket legyen mondjuk F000h A PWM0HPWM0L regiszterpaacuter eacuterteacuteke legyen ennek pontosan a fele hogy a kitoumllteacutesi teacutenyezőnk pontosan 05 legyen 7800h

Szaacutemoljuk ki a fenti beaacutelliacutetaacutesaink mellett adoacutedoacute jelfrekvenciaacutet Az oacuterajelkristaacutely frekvenciaacuteja 16 777 216 Hz A szaacutemlaacuteloacute F000h = 61 440-ig kuacuteszik Ezzel az eacuterteacutekkel elosztva az oacuterajelkristaacutely frekvenciaacutejaacutet 27307 Hz-et kapunk Mivel 64-es oacuterajelosztaacutest fogunk beaacutelliacutetani ezt az eacuterteacuteket meacuteg 64-gyel el kell osztanunk A veacutegeredmeacuteny tehaacutet 427 Hz Eacutes ez az eacuterteacutek megfelel a feladat kiacutevaacutenalmainak A koacuted az uacutejdonsaacuteg tehaacutet a PWM hasznaacutelata elleneacutere rendkiacutevuumll roumlvid lesz paacuter sor az egeacutesz Leacutenyeges hogy a PWM-jel elindiacutetaacutesa utaacuten a főprogram olyan feladatot veacutegez amilyent csak akarunk a PWM-jel előaacutelliacutetaacutesa ugyanis teljes egeacuteszeacuteben hardveresen toumlrteacutenik Az alaacutebbi megoldaacutesnaacutel a főprogram feladata tovaacutebbi tennivaloacute hiaacutenyaacuteban a helyben jaacuteraacutes

Code39asmMOV PWM1H0F0h Az 1 uumlzemmoacutedban ez a keacutet baacutejt (alsoacute illMOV PWM1L000h felső) hataacuterozza meg az előaacutelliacutetandoacute PWM- jel frekvenciaacutejaacutet Itt a felső eacutes alsoacute baacutejt egyuumlttes eacuterteacuteke F000h = 61440 Az ADuC magjaacutenak oacuterajele 16 777 216 Hz iacutegy a PWM- jel frekvenciaacuteja 1677721661440 = 27307 Hz lesz (Ezt meacuteg leosztjuk majd hogy szemmel is laacutessunk valamit kuumlloumlnben nem tudunk oumlruumllni)MOV PWM0H078h Ez a keacutet baacutejt (szintuacutegy alsoacute eacutes felső baacutejtMOV PWM0L000h formaacuteban) a PWM-jel kitoumllteacutesi teacutenyezőjeacutet aacutelliacutetja beMOV PWMCON00011111b Ez a PWM-jelek legfontosabb konfiguraacutecioacutes regisztere Magyaraacutezat az eacuterteacutekekhez 7 bit - Az 1 uumlzemmoacutedban eacuterdektelen 6-5-4 bit - Uumlzemmoacuted kivaacutelasztaacutesa Naacutelunk 001 lesz ami az 1 uumlzemmoacutedot definiaacutelja 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa Naacutelunk 11 ami 64-gyel valoacute osztaacutest jelent Iacutegy lesz a PWM-jeluumlnk veacutegső frekvenciaacuteja 427 Hz 1-0 bit - Oacuterajel kivaacutelasztaacutesa Naacutelunk 11

Created by XMLmind XSL-FO Converter

PWM-jelek

ami a mag oacuterajeleacutet jelentiJMP $ Keacutesz Veacutegtelen ciklus

Egy nagyon gyakorlatias kis huacutezaacutes kedveacuteeacutert moacutedosiacutetsuk egy kicsit a [28 feladat]ot

29 feladat

PWM-jel felhasznaacutelaacutesaacuteval villogtassuk az oumlsszes LED-et a LED-soron 3 Hz eacutes 6 Hz koumlzoumltti frekvenciaacuteval [Code40]

E feladat megoldaacutesa a PWM-jel előaacutelliacutetaacutesaacuteig toumlkeacuteletesen megegyezik a [28 feladat]eacuteval A kuumlloumlnbseacuteg az hogy a PWM-jelet az oumlsszes LED-en meg kellene jeleniacutetenuumlnk Ezt uacutegy tesszuumlk hogy egy veacutegtelen ciklusban a P27-es bitet tehaacutet a PWM-jel szintjeit keacutepviselő bitet beraacutemoljuk a Carry bitbe majd ennek eacuterteacuteke alapjaacuten magasra vagy alacsonyra aacutelliacutetjuk az oumlsszes toumlbbi bitet a 2-es porton Tesszuumlk ezt logikai maszkolaacutessal Roumlvidseacutege miatt Code40-et teljes terjedelmeacuteben ismertetjuumlk de a PWM-jel beaacutelliacutetaacutesait most csak nagyon szűkszavuacutean kommentezzuumlk

Code40asmMOV PWM1H0F0h Az 1 uumlzemmoacutedban ez a keacutet baacutejt hataacuterozzaMOV PWM1L000h meg a PWM-jel frekvenciaacutejaacutet F000h = 61440 fvco = 16 777 216 Hz iacutegy a PWM-jel frekvenciaacuteja 1677721661440 = 27307 Hz lesz (Ezt meacuteg leosztjuk majd 64-gyelMOV PWM0H078h Ez a keacutet baacutejt a PWM-jel kitoumllteacutesiMOV PWM0L000h teacutenyezőjeacutet aacutelliacutetja beMOV PWMCON00011111b 6-5-4 bit - 1 uumlzemmoacuted 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa 64-gyel 1-0 bit - A mag oacuterajelebitekMOV CP27 A PWM-jelet keacutepviselő portbit eacuterteacutekeacutenek beraacutemolaacutesa a C bitbeJC magas Ha C=1 ugrunk inteacutezkedniANL P210000000b Ha C=0 toumlroumlljuumlk a P2-es port toumlbbi bitjeacutetJMP bitek Ugraacutes vissza a PWM-jel figyeleacuteseacutehezmagasORL P201111111b A P2-es port toumlbbi bitjeacutenek magasra aacutelliacutetaacutesaJMP bitek Ugraacutes vissza a PWM-jel figyeleacuteseacutehez

2 Pulzaacuteloacute LED-ekLED-ek digitaacutelis meghajtaacutesakor elő lehet olyan hataacutest ideacutezni amit a laikus aki csak azt tudja hogy egy LED vagy be van kapcsolva vagy ki van kapcsolva mindig varaacutezslatnak tart Ez a hataacutes a LED-ek pulzaacutelaacutesa azaz folytonos aacutetmenetűnek tűnő foumllizziacutetaacutesa eacutes elhalvaacutenyiacutetaacutesa Az ilyen eacutes ehhez hasonloacute megoldaacutesokhoz igazaacuten joacutel tudnak joumlnni a PWM-jelek Miről is van szoacute Pillantsunk vissza a [Neacutegyszoumlgjel] aacutebraacutera Ha neacutegyszoumlgjellel hajtunk meg egy LED-et akkor a LED bizonyos ideig be van kapcsolva bizonyos ideig meg ki Kis frekvenciaacutenaacutel a LED nyilvaacuten villogni fog Eacutes a helyzet az hogy nagy frekvenciaacutenaacutel is villogni fog de a szem időbeli felbontaacutesaacutenak korlaacutetai miatt neacutehaacutenyszor 10 Hz-es villogaacutest maacuter nem eacuteszleluumlnk Amit eacuteszleluumlnk az az hogy a LED vilaacutegiacutet de kicsit (vagy sokkal) halvaacutenyabban mintha aacutellandoacute egyenaacuterammal hajtanaacutenk meg 100 Hz koumlruumlli frekvenciaacutet maacuter a perifeacuterikus laacutetaacutesunkkal sem eacuteszleluumlnk bdquoLebukaacutesrdquo ilyenkor meacuteg előfordulhat ha valaki a PWM-jellel meghajtott LED-et tartalmazoacute panelt keacutezbe veszi eacutes joacutel megraacutezza (nem erősen csak gyorsan) akkor a villoacutedzaacutes meacuteg tetten eacuterhető 200 Hz-neacutel maacuter iacutegy sem nagyon Amennyiben tehaacutet adott egy megfelelően nagy frekvenciaacutejuacute neacutegyszoumlgjel akkor a kitoumllteacutesi teacutenyező variaacutelaacutesaacuteval ugyanazokkal a jelszintekkel laacutetszoacutelag kisebb vagy nagyobb feacutenyerősseacuteggel uumlzemeltethetuumlnk LED-eket Ha a kitoumllteacutesi teacutenyező variaacutelaacutesaacutera elegendően nagy felbontaacutest alkalmazunk (30-40 fokozat akaacuter eleacuteg is lehet) akkor a LED feacutenyerősseacutegeacutenek noumlveleacutese eacutes csoumlkkenteacutese folytonosnak fog tűnni Erről az oumltletről szoacutel a koumlvetkező feladatunk

30 feladat

PWM-jel felhasznaacutelaacutesaacuteval folytonosnak tűnő aacutetmenettel izziacutetsuk foumll eacutes halvaacutenyiacutetsuk el az oumlsszes LED-et a LED-soron azaz pulzaacuteljanak a LED-ek [Code41 Code42]

A koraacutebban elmondottak alapjaacuten a feladat megoldaacutesa a PWM-jel kitoumllteacutesi teacutenyezőjeacutenek leacutepeacutesenkeacutenti

Created by XMLmind XSL-FO Converter

PWM-jelek

vaacuteltoztataacutesa Arra azeacutert figyelnuumlnk kell hogy a vaacuteltozaacutes ne ugraacutesszerűnek tűnjoumln Aacutelliacutetsuk be tehaacutet a PWM-jel eacuterteacutekeit uacutegy hogy 32+1 fokozatunk legyen A +1 kuumlloumln feltuumlnteteacutese azeacutert indokolt mert a teljesen kikapcsolt aacutellapot is fokozatnak szaacutemiacutet ahogy azt hamarosan laacutetni fogjuk

Aacutelliacutetsuk be a PWM1HPWM1L regiszterpaacuter eacuterteacutekeacutet 2000h-ra Ez decimaacutelisan 8 192-t jelent iacutegy a jel frekvenciaacuteja 16 777 216 Hz 8 192 = 2 048 Hz lesz mindaddig ameddig tovaacutebbi beaacutelliacutetaacutessal nem osztjuk tovaacutebb Osztoacutenak a vaacuteltozatossaacuteg kedveacuteeacutert vaacutelasszuk most a 16-os eacuterteacuteket iacutegy a teacutenyleges jelfrekvenciaacutenk 2 048 16 = 128 Hz lesz ami egeacuteszen bdquoemberkoumlzelirdquo eacuterteacuteknek mondhatoacute (Tanulni azeacutert lehet belőle mert ezt maacuter a perifeacuterikus laacutetaacutesunkkal sem eacuteszleljuumlk viszont ha megraacutezzuk a panelt akkor a villoacutedzaacutes meacuteg tetten eacuterhető)

A kitoumllteacutesi teacutenyezőt a PWM0HPWM0L regiszterpaacuterral aacutelliacutetjuk be Mi most azt fogjuk tenni hogy a PWM0H regiszter eacuterteacutekeacutet 00h eacutes 20h koumlzoumltt noumlveljuumlk eacutes csoumlkkentjuumlk szisztematikusan Mivel 20h = 32 ezeacutert a kikapcsolt aacutellapottal oumlsszesen 32+1 = 33 fokozatunk lesz Azt azonban ne felejtsuumlk el hogy a panel LED-jei fordiacutetott logikaacuteval műkoumldnek iacutegy a kitoumllteacutesi teacutenyező noumlveleacutese fogja halvaacutenyiacutetani a LED-eket eacutes a csoumlkkenteacutese okoz erősoumldeacutest

Egy dolgot kell meacuteg megoldanunk a P27-es bit eacuterteacutekeacutet szeacutepen aacutet kell maacutesolgatnunk a toumlbbi portbitbe is Ezt megtehetneacutenk uacutegy is mint a [29 feladat]naacutel de kiveacutetelesen vaacutelasszuk a favaacutegoacute megoldaacutest eacutes maacutesolgassuk a P27-es bit eacuterteacutekeacutet egyeseacutevel a toumlbbi portbitbe Ezt uacutegyis egy időhuacutezoacute szubrutinba fogjuk aacutegyazni iacutegy meacuteg joacutel is joumln aacutettekinthető toumllteleacutek gyanaacutent az időhuacutezoacute programreacutesz legbelső ciklusmagjaacutehoz Az időhuacutezoacute szubrutin ciklusainak veacutegrehajtaacutesi szaacutemaacutet most uacutegy hataacuteroztuk meg hogy A=10 meghiacutevaacutessal 001 s a vaacuterakozaacutesi idő Ennek ellenőrzeacuteseacutet az olvasoacutera biacutezzuk A program elejeacuten az EQU fordiacutetoacutei direktiacutevaacutet arra fogjuk hasznaacutelni hogy eacuterteacuteket adjunk egy szimboacutelumnak (wait) Ezt a megoldaacutest azeacutert vaacutelasztottuk hogy amikor vaacuteltoztatni akarunk az időhuacutezaacutes meacuterteacutekeacuten ne kelljen azt toumlbb helyen is aacutetiacuternunk a koacuted uacutejrafordiacutetaacutesa előtt A szubrutint ugyanis a wait szimboacutelum eacuterteacutekeacutevel fogjuk meghiacutevni

MOV AwaitCALL SDELAY

A koacuted meacuteg a most alkalmazott időhuacutezoacute szubrutin feltuumlnteteacuteseacutevel sem lesz hosszuacute

Code41asmMOV PWM1H020h Az 1 uumlzemmoacutedban ez a keacutet baacutejt hataacuterozzaMOV PWM1L000h meg a PWM-jel frekvenciaacutejaacutet 2000h = 8192 fvco = 16 777 216 Hz iacutegy a PWM-jel frekvenciaacuteja 167772168192 = 2048 Hz lesz (Ezt meacuteg leosztjuk majd 16-tal)MOV PWM0H020h Ez a keacutet baacutejt a PWM-jel kitoumllteacutesiMOV PWM0L000h teacutenyezőjeacutet aacutelliacutetja be Mivel a LED-ek fordiacutetott logikaacuteval műkoumldnek ez a kikapcsolt aacutellapotMOV PWMCON00011011b 6-5-4 bit - 1 uumlzemmoacute 3-2 bit - A felhasznaacutelt oacuterajel osztaacutesa 16-tal 1-0 bit - A mag oacuterajelesignal1 MOV Await Konstans betoumllteacutese a vaacuterakozaacuteshozCALL SDELAY Vaacuterakozoacute eacutes bitteriacutető szubrutinMOV APWM0H PWM0H vizsgaacutelata koumlvetkezikCJNE A0down Eleacuterte maacuter a 0-tJMP signal2 Ha igen ugrunk a kitoumllteacutesi teacutenyező csoumlkkenteacuteseacutehezdownMOV PWMCON0 PWM-generaacutelaacutes lekapcsolaacutesaDEC PWM0H A kitoumllteacutesi teacutenyező regisztereacutenek csoumlkkenteacuteseMOV PWMCON00011011b PWM-generaacutelaacutes engedeacutelyezeacuteseJMP signal1 A felizziacutetaacutes folytataacutesasignal2MOV Await Konstans betoumllteacutese a vaacuterakozaacuteshozCALL SDELAY Vaacuterakozoacute eacutes bitteriacutető szubrutinMOV APWM0H PWM0H vizsgaacutelata koumlvetkezikCJNE A020hup Eleacuterte maacuter 20h-tJMP signal1 Ha igen ugrunk a kitoumllteacutesi teacutenyező noumlveleacuteseacutehez

Created by XMLmind XSL-FO Converter

PWM-jelek

upMOV PWMCON0 PWM-generaacutelaacutes lekapcsolaacutesaINC PWM0H A kitoumllteacutesi teacutenyező regisztereacutenek noumlveleacuteseMOV PWMCON00011011b PWM-generaacutelaacutes engedeacutelyezeacuteseJMP signal2 A halvaacutenyiacutetaacutes folytataacutesa Szubrutin SDELAY Parameacuteteraacutetadaacutes A Ha A=10 akkor 001 s a vaacuterakozaacutes SDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezik Ha A=10 akkor 001 s a vaacuterakozaacutescik7MOV R6111cik6MOV CP27 A PWM-jel eacuterteacutekeacutenek C-be toumllteacuteseMOV P26C Favaacutegoacute moacutedon szeacutetteriacutetjuumlk a P2-es portMOV P25C oumlsszes toumlbbi bitjeacutenMOV P24CMOV P23CMOV P22CMOV P21CMOV P20CDJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel

A figyelmes olvasoacutenak foumlltűnhet hogy a PWM0H regiszter eacuterteacutekeacutenek noumlveleacutese eacutes csoumlkkenteacutese előtt kikapcsoljuk a PWM-jelet majd utaacutena azonnal uacutejra elindiacutetjuk Erre valoacutejaacuteban nem lenne szuumlkseacuteg viszont az a tapasztalat hogy ha nem iacutegy jaacuterunk el akkor a LED-ek feacutenye a pulzaacutelaacutes koumlzben időnkeacutent bdquoraacutengatrdquo egy kicsit Ennek oka valoacutesziacutenűleg az lehet hogy a kitoumllteacutesi teacutenyező menet koumlzbeni vaacuteltoztataacutesaacuteval a PWM-hez tartozoacute szaacutemlaacuteloacute aloacutel a veacutegeacuterteacutekneacutel bdquokihuacutezzuk a talajtrdquo Hiszen ha meacuteg menne tovaacutebb a szaacutemlaacuteloacute de menet koumlzben csoumlkkentetjuumlk a veacutegeacuterteacuteket akkor keacutenytelen meacuteg egy koumlrt leszaacutemlaacutelni Ha viszont a koacutedban leiacutertakat alkalmazzuk semmi ilyesmi nem tapasztalhatoacute

Ha maacuter ilyen joacutel belejoumlttuumlnk a LED-ek pulzaacuteltataacutesaacuteba csavarjunk meacuteg egyet a dolgon Eacuterjuumlk most el azt hogy amiacuteg a LED-sor egyik fele foumllizzik a maacutesik fele eacuteppen elhalvaacutenyul Eacutes fordiacutetva Enneacutel a vaacuteltozatnaacutel maga a főprogram toumlkeacuteletesen megegyezik a [30 feladat] koacutedjaacuteban szereplő reacutesszel Az elteacutereacutes az időhuacutezoacute szubrutinban lesz Keacutet aproacute reacuteszlet Az egyik az hogy a LED-ek portbitjeinek feleacutere nem a PWM-jel C-bitbe toumlltoumltt eacuterteacutekeacutet tesszuumlk ki hanem annak az inverzeacutet Ez plusz egy utasiacutetaacutest jelent (CPL C) iacutegy az időhuacutezaacutes ciklusainak is moacutedosiacutetanunk kell az ismeacutetleacutesszaacutemaacutet (Az időhuacutezaacutes pontossaacutegaacutenak ellenőrzeacuteseacutet ismeacutet az olvasoacutera biacutezzuk) Mivel a vaacuteltozaacutesok csak az időhuacutezoacute szubrutint eacuterintik a most koumlvetkező vaacuteltozatnaacutel csak ezt ismertetjuumlk A keacutet elteacutereacutest sziacutenessel jeloumlljuumlk

Code42asmSDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezik Ha A=10 akkor 001 s a vaacuterakozaacutescik7MOV R6105cik6MOV CP27 A PWM-jel eacuterteacutekeacutenek C-be toumllteacuteseMOV P26C Favaacutegoacute moacutedon szeacutetteriacutetjuumlk a P2-es portMOV P25C oumlsszes toumlbbi bitjeacutenMOV P24CCPL C A C bit invertaacutelaacutesaMOV P23CMOV P22CMOV P21CMOV P20CDJNZ R6cik6DJNZ R7cik7

Created by XMLmind XSL-FO Converter

PWM-jelek

RET Visszateacutereacutes a szubrutinboacutel

Created by XMLmind XSL-FO Converter

19 fejezet - AD-aacutetalakiacutetaacutesA tankoumlnyvben eddig elemi feladatocskaacutek soraacuten keresztuumll megtanulhattuk hogy hogyan programozunk assemblyben hogyan adhatunk ki vezeacuterlőjeleket kuumllső aacuteramkoumlroumlk szaacutemaacutera hogyan fogadhatunk keacutetaacutellapotuacute kuumllső jeleket eacutes hogy hogyan generaacutelhatunk PWM-jeleket raacuteadaacutesul szinte tetszőleges felbontaacutesuacute eacutes frekvenciaacutejuacute PWM-jeleket melyekkel maacuter fokozatokat is megvaloacutesiacutethatunk Ez idaacuteig rendben is lenne de hiaacutenyzik meacuteg valami Nagyon hiaacutenyzik meacuteg valami Ez pedig kuumllső jelek keacutetaacutellapotuacutetoacutel elteacuterő eacutertelmezeacutese A valoacutesaacutegban ugyanis nem minden binaacuteris hiaacuteba reacutesze a mikrovezeacuterlő digitaacutelis vilaacutegunknak tehaacutet kuumllső jeleket (pl feszuumlltseacuteget) is megfelelő felbontaacutessal kell detektaacutelnunk rengeteg probleacutemaacutenaacutel Az ilyen elektronikai megoldaacutest hiacutevjaacutek analoacutegndashdigitaacutel-aacutetalakiacutetaacutesnak az eszkoumlzt pedig ami ezt meg tudja valoacutesiacutetani analoacutegndashdigitaacutel aacutetalakiacutetoacutenak

1 Az ADuC 842-es AD-aacutetalakiacutetoacutejaAz ADuC 842-es analoacutegndashdigitaacutel-aacutetalakiacutetoacutejaacutenak blokkja gyors 8-csatornaacutes 12 bit felbontaacutesuacute feacuteloldali taacutepellaacutetaacutesuacute (nem kell negatiacutev taacutep is) aacutetalakiacutetaacutest tesz lehetőveacute A profi felhasznaacuteloacutenak meacuteg kalibraacutelaacutesi lehetőseacutege is van Az AD-aacutetalakiacutetoacute a szukcessziacutev approximaacutecioacute elveacuten műkoumldik melynek haacutettere egy AD-aacutetalakiacutetaacutesra valoacute kondenzaacutetor Az aacutetalakiacutetaacutes lehet egyszeri (ez persze ismeacutetelhető) vagy folytonos uumlzemmoacuteduacute a referenciafeszuumlltseacuteg lehet belső vagy kuumllső jel Az AD-aacutetalakiacutetoacute az esetlegesen csatlakoztatott kuumllső memoacuteria eleacutereacuteseacuteben is szerepet jaacutetszik Az ADuC 842-es AD-aacutetalakiacutetoacuteja gyaacuterilag kalibraacutelt bekapcsolaacuteskor a kalibraacutecioacutes konstansok betoumlltődnek hogy optimaacutelis műkoumldeacutes legyen biztosiacutethatoacute

Az AD-aacutetalakiacutetoacute belső referenciafeszuumlltseacutege 25 V iacutegy a 12-bites felbontaacutessal (212 = 4 096) 061 mV pontossaacuteg eacuterhető el (25 4 095 = 061) Ez nagyon sok alkalmazaacutesnaacutel elegendő A digitalizaacutelt feszuumlltseacutegeacuterteacutekek ismeacutet csak egy kettős regiszterben eacuterhetők el (ADCDATAHADCDATAL) de figyeljuumlnk ara hogy az ADCDATAH regiszter felső 4 bitje csatornaazonosiacutetaacutesra szolgaacutel Ezt szemleacutelteti az alaacutebbi aacutebra

191 aacutebra - Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei

Az AD-aacutetalakiacutetaacuteshoz haacuterom konfiguraacutecioacutes regiszter tartozik ADCCON1 ADCCON2 eacutes ADCCON3 Ez utoacutebbi kizaacuteroacutelag a konverter kalibraacutecioacutejaacutenaacutel kap szerepet iacutegy ennek taacutergyalaacutesaacutetoacutel eltekintuumlnk mert a tankoumlnyvben csak neacutehaacuteny elemei megoldaacutest taacutergyalunk A keacutet maacutesik regiszter leiacuteraacutesaacutet a [Az ADCCON1 SFR parameacuteterei] eacutes a [Az ADCCON2 SFR parameacuteterei] tartalmazza

191 taacuteblaacutezat - Az ADCCON1 SFR parameacuteterei

ADCCON1 AD Conversion Control Register

Az AD-aacutetalakiacutetaacutes vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 40h = 0100 0000 b

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg nincs

Bit Szimboacutelum Leiacuteraacutes

7 MD1 1 ndash bekapcsoljuk

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

az AD-aacutetalakiacutetoacutet 0 ndash kikapcsoljuk az AD-aacutetalakiacutetoacutet

6 EXT_REF 1 ndash kuumllső referencia hasznaacutelata 0 ndash a belső referencia hasznaacutelata Nem taacutergyaljuk

5 CK1 Az oacuterajel osztoacuteeacuterteacutekeacutenek bitjei az AD-aacutetalakiacutetaacutes sajaacutet oacuterajeleacutehez Az AD-aacutetalakiacutetoacute hibamentes műkoumldeacuteseacutehez 838 MHz-es vagy annaacutel kisebb oacuterajel szuumlkseacuteges A tipikus AD-aacutetalakiacutetaacutes 16 AD-aacutetalakiacutetaacutesi oacuterajelet koumlvetel plusz a kivaacutelasztott adateleacutereacutesi idő Az osztaacutesi araacutenyt az alaacutebbiak koumlzuumll vaacutelaszthatjuk

CK1 CK0 Oacuterajelosztoacute

0 0 32

0 1 4 (Ne hasznaacuteljuk akkor ha az oacuterajel CD

osztoacutebitje 0)

1 0 8

1 1 2

4 CK0

3 AQ1 Az adateleacutereacutesi bitekkel

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

kivaacutelaszthatjuk azt az időt amely rendelkezeacutesre fog aacutellni a bemeneti koumlvető- eacutes tartoacuteerősiacutető szaacutemaacutera hogy lekeacuterdezze a bemeneti jelet Az adateleacutereacuteshez 3 vagy toumlbb AD-aacutetalakiacutetaacutesi oacuterajel javasolt

AQ1 AQ0 AD-aacutetalakiacutetaacutesi oacuterajelek szaacutema

0 0 1

0 1 2

1 0 3

1 1 4

2 AQ0

1 T2C Timer 2 hasznaacutelata Nem taacutergyaljuk

0 EXC Kuumllső triggerjel hasznaacutelata Nem taacutergyaljuk

192 taacuteblaacutezat - Az ADCCON2 SFR parameacuteterei

ADCCON2 AD Conversion Control Register 2

Az AD-aacutetalakiacutetaacutes 2 vezeacuterlőregisztere

Bekapcsolaacutes utaacuteni default eacuterteacutek 00h

Bitenkeacutenti ciacutemzeacutesi lehetőseacuteg igen

Bit Szimboacutelum Leiacuteraacutes

7 ADCI Az AD-aacutetalakiacutetaacutes megszakiacutetaacutesaacutenak bitje

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

Aacutetalakiacutetaacutesi ciklus veacutegezteacutevel 1-re aacutell Ha a program megszakiacutetaacutesi rutinra ugrik a sajaacutet megszakiacutetaacutesi vektoraacuten keresztuumll hardveresen toumlrlődik Kuumlloumlnben a felhasznaacuteloacutenak kell toumlroumllnie

6 DMA A DMA-moacuted engedeacutelyezőbitje Nem taacutergyaljuk

5 CCONV A folytonos uumlzemmoacuted bitje 1-re aacutelliacutetva folyamatos AD-aacutetalakiacutetaacutes toumlrteacutenik azaz uacutej aacutetalakiacutetaacutesi ciklus indul az előző veacutegezteacutevel

4 SCONV Az egyszeri aacutetalakiacutetaacutes bitje Egyetlen aacutetalakiacutetaacutesi ciklus toumlrteacutenik eacutes annak veacutegeacuten a bit automatikusan 0-ra vaacutelt

3 CS3 Csatornakivaacutelasztoacute bitek

CS3 CS2 CS1 CS0 Csatorna szaacutemaegyeacuteb megjegyzeacutes

0 0 0 0 0

0 0 0 1 1

0 0 1 0 2

0 0 1 1 3

0 1 0 0 4

0 1 0 1 5

0 1 1 0 6

0 1 1 1 7

1 0 0 0 Hőmeacuterseacutekletmonitorozaacutes Nem

taacutergyaljuk

1 0 0 1 DAC0 Nem taacutergyaljuk

1 0 1 0 DAC1 Nem

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

taacutergyaljuk

1 0 1 1 AGND Nem taacutergyaljuk

1 1 0 0 VREF Nem taacutergyaljuk

1 1 1 1 DMA STOP Nem taacutergyaljuk

A toumlbbi kombinaacutecioacute foglalt

2 CS2

1 CS1

0 CS0

2 Egyszerű AD-aacutetalakiacutetaacutesEbben az alfejezetben AD-aacutetalakiacutetaacutest veacutegzuumlnk tetszőleges feszuumlltseacutegforraacuteson egyszeri aacutetalakiacutetaacutesi ciklusokat hasznaacutelva Nagyon leacutenyeges hogy az aacutetalakiacutetandoacute feszuumlltseacuteg ne legyen nagyobb +25 V-naacutel Erről egyeacutebkeacutent mindig a felhasznaacuteloacutenak kell gondoskodnia iacutegy ha sajaacutet alkalmazaacutest eacutes aacuteramkoumlrt keacutesziacutetuumlnk nagyon-nagyon figyeljuumlnk erre a szabaacutelyra eacutes ennek megfelelően tervezzuumlk aacuteramkoumlreinket Az ADuC 842-es chip egyeacutebkeacutent akkor sem megy toumlnkre ha kicsivel tuacutelleacutepjuumlk a +25 V feszuumlltseacutegkorlaacutetot kezdeni azonban a korlaacutetot meghaladoacute eacuterteacutekkel uacutegysem tudunk semmit mert ekkor az aacutetalakiacutetott eacuterteacutek maacuter reacuteg eleacuterte a maximumot A feszuumlltseacutegforraacutes polaritaacutesa meacuteg keacutenyesebb uumlgy ha azt veacuteletlenuumll foumllcsereacuteljuumlk amikor raacutekapcsoljuk az AD-aacutetalakiacutetoacute bemeneteacutere a feszuumlltseacuteget akkor bizony felszaacutell a meacuterőfuumlsthellip A [Az AD-aacutetalakiacutetaacutes szabaacutelyai] aacutebra az AD-aacutetalakiacutetaacuteshoz tartozoacute szabaacutelyokat ismeacutetli meg nagy betűkkel sziacutenesbenhellip

192 aacutebra - Az AD-aacutetalakiacutetaacutes szabaacutelyai

Mindezek utaacuten maacuter nekiveselkedhetuumlnk első AD-aacutetalakiacutetoacute alkalmazaacutesunknak

31 feladat

Meacuterjuumlnk feszuumlltseacuteget a mikrovezeacuterlővel a 0 V - +25 V tartomaacutenyban eacutes a meacutert eacuterteacuteket kuumlldjuumlk el a soros porton a PC-nek de az AD-aacutetalakiacutetoacutenak csak a legeacuterteacutekesebb 8 bitjeacutet hasznaacuteljuk [Code43]

Előszoumlr is gondoljuk veacutegig mit jelent az hogy az AD-aacutetalakiacutetoacute legeacuterteacutekesebb 8 bitje A [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei] aacutebra mutatja hogy mely regiszterekben eacutes azokon beluumll hol talaacuteljuk a digitalizaacutelt jelszint 12 bitjeacutet Nekuumlnk most a 8 legeacuterteacutekesebb kell azaz az alsoacute neacutegyet kihajiacutetjuk Kezdeti proacutebaacutelkozaacutesnak ez is bőven megfelel hiszen a felbontaacutesunk meacuteg iacutegy is 00098 V lesz A leacutenyeg az hogy a

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

szuumlkseacuteges bitjeink fele az ADCDATAH maacutesik fele az ADCDATAL regiszterben lapul A [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei] aacutebra mutatja hogy mely bitekre van szuumlkseacuteguumlnk

193 aacutebra - Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok koumlzeacutepső bitjei

A keacutet regiszterből a 8 szuumlkseacuteges bit kihalaacuteszaacutesa egyszerűbb lesz mint gondolnaacutenk A 80518052-es processzormagok utasiacutetaacuteskeacuteszleteacuteben van egy erre igen alkalmas utasiacutetaacutes

SWAP A

Az utasiacutetaacutes egyszerűen felcsereacuteli az akkumulaacutetor keacutet feacutelbaacutejtjaacutet Maga a mnemonik iacutegy ahogy van toumlrteacutenetesen eacutertelmes szoacute angolul azt jelenti hogy kicsereacutel megcsereacutel Ha tehaacutet az akkumulaacutetor eacuterteacuteke mondjuk A=10010110 akkor a SWAP A utasiacutetaacutes veacutegrehajtaacutesa utaacuten A=01101001 aacutell elő Ennek ismereteacuteben azt fogjuk tenni hogy betoumlltjuumlk az akkumulaacutetorba az ADCDATAH regiszter tartalmaacutet lenullaacutezzuk annak felső neacutegy bitjeacutet megcsereacuteljuumlk a keacutet feacutelbaacutejtot majd a kapott eacuterteacuteket elmentjuumlk egy vaacuteltozoacuteba (voltage) Iacutegy a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 4 bitje (11-8) a helyeacutere keruumllt Ez utaacuten betoumlltjuumlk az akkumulaacutetorba az ADCDATAL regiszter tartalmaacutet kitoumlroumlljuumlk annak alsoacute neacutegy bitjeacutet megcsereacuteljuumlk a keacutet feacutelbaacutejtot majd a kapott eacuterteacutekhez hozzaacuteadjuk voltage tartalmaacutet eacutes maacuter elő is aacutellt az az eacuterteacutek amely helyieacuterteacutek szerint helyes sorrendben tartalmazza a digitalizaacutelt feszuumlltseacutegeacuterteacutek 11-4 bitjeacutet azaz a 8 legeacuterteacutekesebbet Eacutes ezt az eacuterteacuteket maacuter elmenthetjuumlk akaacuter vissza a voltage vaacuteltozoacuteba Mindez assembly nyelven iacutegy fest

MOV AADCDATAHANL A00001111bSWAP AMOV voltageAMOV AADCDATALANL A11110000bSWAP AADD AvoltageMOV voltageA

Ezek utaacuten tehaacutet megkaparintottuk a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfontosabb 8 bitjeacutet ami termeacuteszetesen vaacuteltozatlanul 0 V eacutes +25 V koumlzoumltti jelszintet reprezentaacutel csak kisebb felbontaacutessal annaacutel mintha 12 bituumlnk lenne Az a helyzet hogy a +25 V maximaacutelis feszuumlltseacutegszinttel egeacuteszen nagy szerencseacutenk van Egy 8 biten aacutebraacutezolt binaacuteris szaacutem legnagyobb eacuterteacuteke ugyanis 255 ami majdnem a szaacutezszorosa 25-nek Iacutegy nem koumlvetuumlnk el tuacutel nagy hibaacutet ha a feszuumlltseacutegszint gyanaacutent kapott 8-bites szaacutemot egyszerűen elosztjuk 100-zal eacutes azt tekintjuumlk a bdquomeacutertrdquo feszuumlltseacutegeacuterteacuteknek termeacuteszetesen voltban kifejezve A hiba amit elkoumlvetuumlnk 1ndash250255 = 00196 lt 2 ami sok alkalmazaacutesnaacutel meacuteg mindig bőven megfelelő (Mindez persze akkor igaz ha a mikrovezeacuterlő gyaacuteri kalibraacutecioacuteja megfelelően pontos)

Az egybaacutejtos eacuterteacutek elosztaacutesa 100-zal eacutes az eacuterteacutek tizedes jegyeinek elkuumlloumlniacuteteacutese nem nagy műveacuteszet Felhasznaacuteljuk a maacuter ismert DIV AB osztoacute utasiacutetaacutest meacuteghozzaacute sorozatban Előszoumlr is elosztjuk a voltage vaacuteltozoacutenk eacuterteacutekeacutet 100-zal Ekkor A-ban maacuteris előaacutell a szaacutezasok eacuterteacuteke A maradeacutek ugyebaacuter B-ben lesz Ezt aacutettesszuumlk A-ba majd elosztjuk 10-zel Ez utaacuten A-ban a tiacutezesek eacuterteacutekeacutet kapjuk meg B-ben pedig az egyesek maradnak Eacutes ennyi az egeacutesz A szaacutezasok tiacutezesek eacutes egyesek eacuterteacutekeacutet el kell mentenuumlnk egy-egy vaacuteltozoacuteba (value100 value10 eacutes value1) hiszen azokat el kell majd kuumlldenuumlnk a PC-nek A szaacutemeacuterteacutekeket termeacuteszetesen ASCII szaacutemjegy-karakterekkeacute kell majd alakiacutetanunk Eacutes azt se felejtsuumlk el hogy a szaacutezasok szaacutemjegye utaacuten kuumlldenuumlnk kell egy pontot is (rsquorsquo) hogy szeacutep legyen a formaacutetumunk Az egyesek utaacuten pedig meacuteg azt kuumlldjuumlk el hogy rsquo Vrsquo Az AD-aacutetalakiacutetaacutest a [31 feladat] megoldaacutesaacutenaacutel egyszeres uumlzemmoacutedban fogjuk hasznaacutelni az oacuterajelosztoacutet eacutes az adateleacutereacutesi időt pedig a lehető legnagyobbra vesszuumlk hiszen jelen esetben semmi sem suumlrgőshellip A kivaacutelasztott AD-csatorna a nullaacutes lesz Arra nagyon figyeljuumlnk hogy a panelon mely tuumlskeacuteket kell hasznaacutelnunk Hogy veacuteletlenuumll se nyuacuteljunk melleacute a [A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is)] aacutebraacutet szaacutenjuk uacutetmutatoacutenak

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

194 aacutebra - A 0 csatorna tuumlskeacutei a hallgatoacutei panelon (nagyiacutetaacutessal is)

Az AD-aacutetalakiacutetaacutesnaacutel az SCONV indiacutetoacutebitet fogjuk hasznaacutelni (laacutesd [Az ADCCON2 SFR parameacuteterei]) Ennek 1-re aacutelliacutetaacutesaacutenaacutel elindul az AD-aacutetalakiacutetaacutes eacutes ez a bit csak akkor vaacutelt vissza 0-ra ha az aacutetalakiacutetaacutesi ciklus veacuteget eacutert Iacutegy koumlnnyedeacuten tudunk erre vaacuterakozni a programban

SETB SCONVJB SCONV$

Ha a program ezen a keacutet soron (a koacutedban sziacutenessel kiemeljuumlk) tuacuteljut vidaacuteman kibaacutenyaacuteszhatjuk a digitalizaacutelt feszuumlltseacutegeacuterteacuteket az ADCDATAH eacutes ADCDATAL regiszterekből

A koacuted a soros porti kommunikaacutecioacute miatt nem nevezhető roumlvidnek de semmi csavar vagy bravuacuteros truumlkk sincsen benne A joacute oumlreg DELAY szubrutinunkat most sem tuumlntetjuumlk foumll A soros porti kommunikaacutecioacute

Code43asmvoltage DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejavalue100 DATA 031h A szaacutezasok eacuterteacutekedarabszaacutemavalue10 DATA 032h A tizesek eacuterteacutekedarabszaacutemavalue1 DATA 033h Az egyesek eacuterteacutekedarabszaacutemaMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutet az ADCCON1 regiszterrel Magyaraacutezat 7 bit 1 bekapcsoljuk az aacutetalakiacutetoacutet 6 bit 0 nem hasznaacutelunk kuumllső referenciaacutet 5-4 bit 00 a legnagyobb oacuterajel-osztoacutet hasznaacuteljuk (32) hogy biztosan legyen eleacuteg idő az aacutetalakiacutetaacutesra 3-2 bit 11 a lehető legtoumlbb időt hagyjuk az adatgyűjteacuteshez is 1-2 bit 00 nem hasznaacuteljuk a tovaacutebbi funkcioacutekatnextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutes Addig tehaacutet vaacuterakozunkMOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageA Elmentjuumlk az eddigi aacutellaacutestMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-etADD Avoltage Ehhez pedig csak hozzaacute kell adni voltage tartalmaacutet eacutes keacuteszen is vagyunkMOV voltageA Itt maacuter a kiacutevaacutent baacutejtot mentjuumlk elMOV Avoltage Elosztjuk a feszuumlltseacutegeacuterteacuteketMOV B100 100-zal Iacutegy előaacutell a szaacutezasokDIV AB szaacutemaMOV value100A Elmentjuumlk a szaacutezasokat

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

MOV AB A-ba tesszuumlk a 100-zal valoacute osztaacutes maradeacutekaacutetMOV B10 Most 10-zel osztunkDIV ABMOV value10A A-ban az eredmeacuteny azaz a tiacutezesek szaacutemaMOV value1B B-ben a maradeacutek azaz az egyesek szaacutemaMOV Avalue100 Elkuumlldjuumlk a PC-nek a szaacutezasokatADD A030h de ASCII karakterkeacutentCALL SENDCHARMOV A Megy utaacutena a tizedespontCALL SENDCHARMOV Avalue10 Aztaacuten a tiacutezesekADD A030hCALL SENDCHARMOV Avalue1 Aztaacuten az egyesekADD A030hCALL SENDCHARMOV DPTRfarok A kuumlldeni kiacutevaacutent szoumlvegreacutesz veacutegeacutenekCALL SENDSTRING elkuumlldeacutese karakterlaacutenckeacutentMOV A100 1 maacutesodpercig vaacuterakozunk hogy neCALL DELAY oumlmoumlljoumln a PC-nek tuacutel gyorsan a meacutert eacuterteacutekek sorozataJMP next Ugrunk vissza a koumlvetkező meacutereacuteshez A karakterlaacutenc veacutege farok DB V10130$INCLUDE(UARTIOASM)

A program műkoumldeacuteseacutet most nem videoacuteval hanem kicsit elteacuterő esettanulmaacutennyal mutatjuk be A [Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel] aacutebraacuten laacutethatoacute moacutedon ceruzaelemek feszuumlltseacutegeacutet meacuteregettuumlk mert az garantaacuteltan nem leacutepi tuacutel a +25 V-ot Keacutet ceruzaelemuumlnk volt digitaacutelis multimeacuteterrel meacuterve egyiknek 135 V maacutesiknak 083 V volt az uumlresjaacuteraacutesi feszuumlltseacutege A mikrovezeacuterlővel veacutegzett meacutereacutesek sorozata a [Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek] aacutebraacuten laacutethatoacute A pirossal bekeretezett adatok a keacutet ceruzaelemre vonatkoznak Laacutethatoacute hogy az elteacutereacutesek csak 2 koumlruumlliek ami pont oumlsszhangban van a tizedes toumlrt előaacutelliacutetaacutesakor kapott szisztematikus elteacutereacutessel

A keacutet bekeretezett adatsor koumlzoumltti eacuterteacutekek kisseacute zagyvaacutenak tűnnek de azonnal megadjuk a magyaraacutezatot Ekkor csereacuteltuumlk le a kezuumlnkben leacutevő ceruzaelemet eacutes a meacuterővezeteacutekek egyszerűen csak bdquoloacutegtak a levegőbenrdquo Ilyenkor neacutemi veacuteletlenszerű eacuterteacuteksorozat utaacuten a meacutert eacuterteacutek beaacutell a maximumra Ez laacutethatoacute a [Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek] aacutebraacuten is

195 aacutebra - Ceruzaelem feszuumlltseacutegeacutenek meacutereacutese a mikrovezeacuterlővel

196 aacutebra - Feszuumlltseacutegmeacutereacutes a mikrovezeacuterlővel A soros porton a PC-nek kuumlldoumltt uumlzenetek

Created by XMLmind XSL-FO Converter

AD-aacutetalakiacutetaacutes

Veacuteguumll azt a megjegyzeacutest kiacutevaacutenjuk meacuteg hozzaacutefűzni az alfejezetben leiacutertakhoz hogy a pontos feszuumlltseacutegeacuterteacutek előaacutelliacutetaacutesaacutehoz vagy megiacuterjuk a bonyolult aritmetikai rutinokat assemblyben vagy a C nyelvhez fordulunk vagy a lebegőpontos szaacutemiacutetaacutest maacuter sokkal inkaacutebb a PC-n veacutegezzuumlk el alkalmas koumlrnyezetben Lebegőpontos műveletekbe vagy egyeacuteb nehezen eacuterthető matematikai truumlkkoumlk alkalmazaacutesaacuteba assemblyben ezen a szinten nem kiacutevaacutentunk belebonyoloacutedni

Created by XMLmind XSL-FO Converter

20 fejezet - AlkonykapcsoloacuteMegfigyeleacutesek alapjaacuten elmondhatoacute hogy az elektronika iraacutent eacuterdeklődni kezdő gyerekek eacutes tineacutedzserek előbb mindenaacuteron villogoacutekat keacutesőbb akusztikus erősiacutetőket akarnak eacutepiacuteteni Az előbbi nyilvaacuten egyszerűbb viszont szoacute szerint laacutetvaacutenyosabb Villogoacutet csinaacuteltunk maacuter eacuteppen eleget a tankoumlnyvben de maradjunk meacuteg egy kicsit az optoelektronika teruumlleteacuten eacutes keacutesziacutetsuumlnk olyan alkalmazaacutest amely sok optoelektronikai kurzusban az aacutellatorvosi loacute szerepeacutet jaacutetssza Ez az alkalmazaacutes az alkonykapcsoloacute Meg lehet valoacutesiacutetani tranzisztoros billenőkoumlroumlkkel műveleti erősiacutetős alapkapcsolaacutesokkal eacuterzeacutekelőkeacutent pedig felhasznaacutelhatunk fotoellenaacutellaacutest fotodioacutedaacutet eacutes fototranzisztort Vaacutelasszuk most ez utoacutebbit eacutes hasznaacuteljuk ki a mikrovezeacuterlőnk nyers erejeacutet azaz meacuterjuumlk az alkalmazaacuteshoz eacutepiacutetett aacuteramkoumlr valamely reacuteszeacuten a feszuumlltseacuteget majd ennek megfelelően kapcsoljuk be vagy ki a feacutenyforraacutest

A tankoumlnyvben az a ceacutelunk hogy mindig a lehető legegyszerűbb elektronikai megoldaacutest vaacutelasszuk Iacutegy műveleti erősiacutető elő sem keruumll Minden a tankoumlnyvben szereplő komolyabb alkalmazaacutest termeacuteszetesen sokkal igeacutenyesebben is meg lehetne tervezni uumlgyelve a linearitaacutesra jelkorlaacutetozaacutesra stb de a ceacutel eacuteppen a lehető legegyszerűbb elkeacutesziacutethetőseacuteg hogy csak egy mareacutek alkatreacuteszt kelljen felhasznaacutelnunk (eacutes legrosszabb esetben sajaacutet zsebből megvaacutesaacuterolnunk)

1 Besugaacuterzaacutesmeacutereacutes fototranzisztorralFototranzisztorokroacutel sok leacutenyeges ismeretet megtudhatunk a megfelelő elektronikai szakkoumlnyvekből [2] [3] [4] [5] [6] Itt most csupaacuten oumlsszefoglaloacute jelleggel emliacutetjuumlk meg főbb tulajdonsaacutegaikat ill az alkalmazaacuteshoz vaacutelasztott tiacutepus parameacutetereit

Fototranzisztoroknaacutel az eszkoumlz a baacutezisndashemitter aacutetmeneten a besugaacuterzaacutes hataacutesaacutera generaacuteloacutedoacute fotoaacuteramot erősiacuteti foumll Uacutegy is tekinthetuumlnk a fototranzisztorra mint egy szokvaacutenyos tranzisztorra csak a baacutezisaacuteramot a fotoaacuteram jelenti Eacuteppen ezeacutert a legtoumlbb fototranzisztor-tiacutepusnak csak az emittere eacutes a kollektora van kivezetve A baacutezist csak olyan tiacutepusoknaacutel vezetik ki amelyeket munkapont-beaacutelliacutetaacutesra szaacutennak A besugaacuterzaacutes aacuteltal generaacutelt fotoaacuteram szinte toumlkeacuteletes lineaacuteris araacutenyban van magaacuteval a besugaacuterzaacutessal A tranzisztorhataacutes pedig ezt a fotoaacuteramot erősiacuteti foumll Ha tehaacutet a kollektorndashemitter-aacutegba ellenaacutellaacutesokat koumltuumlnk akkor az azokon eső feszuumlltseacuteg meacutereacuteseacutevel figyelhetjuumlk a fototranzisztort eacuterő besugaacuterzaacutest Ilyenkor viszont a meacutert feszuumlltseacuteg maacuter nem lesz lineaacuterisan araacutenyos a besugaacuterzaacutessal attoacutel a tranzisztor jelleggoumlrbeacuteinek megfelelően kisebb-nagyobb meacuterteacutekben el fog teacuterni

Meg kell jegyeznuumlnk hogy a kataloacutegusok toumlbbnyire nem a besugaacuterzaacutes (Ee Wm2) fuumlggveacutenyeacuteben ismertetnek eszkoumlzkarakterisztikaacutekat hanem a megvilaacutegiacutetaacutes (Ev lx) fuumlggveacutenyeacuteben Ehhez azonban mindig illik megadni a karakterisztika felveacuteteleacuteneacutel hasznaacutelt feacutenyforraacutes sziacutenkeacutepeacutet vagy a felhasznaacutelt szabvaacutenyos megvilaacutegiacutetoacutet (pl CIE A) Igeacutenyes gyaacutertoacutek ezt megteszik A keacutet mennyiseacuteg nem ekvivalens hiszen a detektorok sziacutenkeacutepi eacuterzeacutekenyseacutege aacuteltalaacuteban nem egyezik meg a fotometriai mennyiseacutegek definiacutecioacutejaacutehoz szuumlkseacuteges laacutethatoacutesaacutegi fuumlggveacutennyel azaz V()-val [2] A koumlvetkező alkalmazaacuteshoz mi a TEPT4400 tiacutepusuacute fototranzisztort vaacutelasztottuk melynek sziacutenkeacutepi eacuterzeacutekenyseacutege a [A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege] aacutebraacuten laacutethatoacute (A diagram az adatlaproacutel szaacutermazik) Az aacutebraacutet tanulmaacutenyozva vilaacutegosnak kell lennie hogy a fototranzisztor a teljes laacutethatoacute sziacutenkeacuteptartomaacutenyban (380 nm - 780 nm) eacuterzeacutekeny de a koumlzeli infraacuteban is

201 aacutebra - A TEPT4400 tiacutepusuacute fototranzisztor sziacutenkeacutepi eacuterzeacutekenyseacutege

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

Tekintsuumlk most a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute rendkiacutevuumll egyszerű kis kapcsolaacutest A kollektor- ill emitteraacutegba koumltoumltt ellenaacutellaacutesok azonos meacuteretezeacuteseacuteből nyilvaacutenvaloacute hogy a meacuterendő UE feszuumlltseacuteg soha nem lehet nagyobb 25 V-naacutel Ha a mikrovezeacuterlővel UE-t figyeljuumlnk akkor a meacutert eacuterteacutek fuumlggveacutenyeacuteben ki-be kapcsolgathatunk egy laacutempaacutet eacutes maacuter keacuteszen is van az alkonykapcsoloacutenk Az az előnyuumlnk is meglesz hogy nagyon taacuteg tartomaacutenyban szoftveresen vaacutelaszthatjuk meg a kapcsolaacutesi jelszint eacuterteacutekeacutet Egyeacuteb esetekben a keacutet ellenaacutellaacuteseacuterteacutek araacutenyaacuteval jaacutetszhatunk de akkor figyelnuumlnk kell UE +25 V-os korlaacutetozaacutesaacutera

202 aacutebra - Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten

Eacutepiacutetsuumlk meg a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute egyszerű aacuteramkoumlrt de hagyjuk ki belőle a kondenzaacutetort Toumlltsuumlk le mikrovezeacuterlőnkre az egyszerű AD-aacutetalakiacutetaacutesra megiacutert Code43-at majd figyeljuumlk a kijelzett feszuumlltseacutegadatokat A vizsgaacutelatot a szerző otthoni aacutelloacutelaacutempaacuteja alatt veacutegezte amelybe egy spiraacutelis kompakt feacutenycső volt becsavarva Laacutethatoacute hogy a [Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt] aacutebraacuten bemutatott jelszint eleacuteg nagy ingadozaacutest mutat Keacuterdeacutes hogy mi ennek az oka Talaacuten nem hasznaacutelhatoacute az egyszerű kis kapcsolaacutesunk A vaacutelasz az hogy semmi baja a kapcsolaacutesnak az eacuterteacutekek azeacutert ugraacutelnak ennyire mert a kompakt feacutenycső toumlbb kilohertzes villoacutedzaacutesaacutet eacuterjuumlk tetten amit az emberi szem maacuter semmi esetre sem tud koumlvetni az AD-aacutetalakiacutetoacute viszont e szerint igenhellip Ennyire gyors az ADuC 842-es AD-aacutetalakiacutetoacuteja Ilyen esetekre gyoacutegyiacuter ha a meacuterőellenaacutellaacutessal paacuterhuzamosan bekoumltuumlnk egy megfelelően nagy kondenzaacutetort uacutegy 3-10 F kapacitaacutessal A tapasztalat szerint ez maacuter elegendő Ilyen nagy kapacitaacutesoknaacutel szinte kizaacuteroacutelag elektrolitkondenzaacutetort hasznaacutelhatunk de uumlgyeljuumlnk annak polaritaacutesaacutera mert fordiacutetott bekoumlteacutesneacutel az alkatreacutesz erősen foumllmelegedhet toumlnkremehet sőt foumll is robbanhat (Annyira azeacutert ez sem veszeacutelyes de szeacutethasad a tokozaacutes eacutes irtoacute buumldoumls lesz a helyiseacutegben) A kondenzaacutetor hataacutesaacutet (C = 10 F) a [Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben] aacutebra szemleacutelteti A feszuumlltseacutegingadozaacutes gyakorlatilag megszűnt

203 aacutebra - Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

204 aacutebra - Az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten meacutert feszuumlltseacuteg kompakt feacutenycső alatt simiacutetoacutekondenzaacutetor jelenleacuteteacuteben

2 Az alkonykapcsoloacute programjaA [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten laacutethatoacute kapcsolaacutes eacutes a kondenzaacutetor szerepeacutenek taacutergyalaacutesa utaacuten megfogalmazhatjuk a feladatot az alkonykapcsoloacutehoz

32 feladat

Keacutesziacutetsuumlnk alkonykapcsoloacutet amelyneacutel a detektor fototranzisztor a laacutempaacutet pedig a mikrovezeacuterlő valamely kimeneti bitje jelenti (A kapcsolaacutesi jelszint meghataacuterozaacutesa toumlrteacutenhet a koumlrnyezetnek megfelelően eacutes tapasztalati uacuteton) [Code44 Code45]

A feladat szoumlvegeacuteben az aacutell hogy a laacutempaacutet egy kimeneti bit fogja szimbolizaacutelni Ez a 2-es porton lesz majd (P20) eacutes az aacuteramkoumlr oumlsszeaacutelliacutetaacutesaacutenaacutel ide ceacutelszerűen egy LED-et fogunk koumltni a hozzaacute tartozoacute ellenaacutellaacutessal egyetemben Ezt a bitet azutaacuten maacuter komolyabb megvaloacutesiacutetaacutesnaacutel is fel tudjuk hasznaacutelni vezeacuterlőjel formaacutejaacuteban Ehhez a [TTL IC-k eacutes tranzisztorok a portokon] fejezetben talaacutelunk hasznos tanaacutecsokat

A koacuted egeacuteszen roumlvid lesz az aacuteramkoumlr műkoumldeacuteseacutehez pedig csak arra van szuumlkseacuteguumlnk hogy leaacuternyeacutekoljuk ill ne aacuternyeacutekoljuk le a fototranzisztort A kapcsolaacutesi szint megvaacutelasztaacutesa (a koacutedban sziacutenessel kiemelve) tapasztalati uacuteton toumlrteacutent előfordulhat hogy maacutes helyiseacutegben maacutes megvilaacutegiacutetaacutesi koumlruumllmeacutenyek koumlzoumltt joacutecskaacuten elteacuterő eacuterteacuteket eacuterdemes (kell) beaacutelliacutetanunk Az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa eacutes a regiszterek kezeleacutese eacuteppen uacutegy toumlrteacutenik mint a [31 feladat]naacutel Ennek reacuteszletes leiacuteraacutesa ott megtalaacutelhatoacute A koacutedban a hiszt ciacutemkeacutenek semmi szerep nincs ez csak viszonyiacutetaacutesi pontot jelent a koumlvetkező alfejezetben ismertetett Code45-houmlz

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

Code44asmMOV ADCCON110001100b Az AD-konverter konfiguraacutelaacutesanextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutes Addig tehaacutet vaacuterakozunkMOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageA Elmentjuumlk az eddigi aacutellaacutestMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-ethisztADD Avoltage Ehhez pedig csak hozzaacute kell adni voltage tartalmaacutet eacutes keacuteszen is vagyunk A-ban most maacuter a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 8 bitjeacutet talaacuteljukCJNE A30eval1 Ha Alt30 akkor bekapcsoljuk aeval1JC ledon vilaacutegiacutetaacutest Kuumlloumlnben kikapcsoljukSETB P20 LED kikapcsolaacutesaJMP nextledonCLR P20 LED bekapcsolaacutesaJMP next

A program ugyan ez egy kapcsolaacutesi szint moacutedszereacutenek megfelelő moacutedon műkoumldik de amikor az ember jaacutetszani kezd a műkoumldő aacuteramkoumlrrel hamar raacutejoumln hogy ez iacutegy nem biztos hogy joacute lesz nekuumlnk ugyanis ha a feszuumlltseacutegszint csak egy kicsit is ingadozik a kapcsolaacutesi eacuterteacutek koumlruumll a laacutempaacutenk aacutellandoacute jelleggel ki-be kapcsol Ez a LED-re neacutezve semmifeacutele koumlvetkezmeacutenyekkel nem jaacuter de a viselkedeacutes meacuteg ebben az esetben sem nevezhető szeacutepnek Ha maacutes tiacutepusuacute feacutenyforraacutest izzoacutelaacutempaacutet feacutenycsoumlvet stb kiacutevaacutenunk az alkonykapcsoloacuteval vezeacuterelni akkor viszont a gyakori ki-be kapcsolgataacutes kifejezetten kaacuteros lehet Ennek kikuumlszoumlboumlleacuteseacutere az alaacutebbi alfejezetben talaacutelunk megoldaacutest

3 HisztereacutezisA műszaki tudomaacutenyokban maacuter alapszinten talaacutelkozunk a hisztereacutezis fogalommal Ez azt jelenti hogy adott rendszer aacutellapotai koumlzoumltti aacutetmenet nem ugyanannaacutel a jelszinteacutel koumlvetkezik be egyik ill a maacutesik iraacutenyban A tovaacutebbi magyaraacutezathoz tekintsuumlk az [Hisztereacutezis keacutetaacutellapotuacute rendszerben] aacutebraacutet Ezen egy keacutetaacutellapotuacute rendszer aacutetmeneteihez tartozoacute hisztereacutezist szemleacuteltetjuumlk

205 aacutebra - Hisztereacutezis keacutetaacutellapotuacute rendszerben

A rendszernek keacutet aacutellapota van S1 eacutes S2 Az S1 aacutellapotboacutel az S2 aacutellapotba valoacute aacutetmenet az L mennyiseacuteg noumlvekedeacutesekor L2 szintneacutel koumlvetkezik be a fordiacutetott iraacutenyuacute aacutellapotvaacuteltaacutes viszont L1 szintneacutel Ezzel kikuumlszoumlboumllődik az a jelenseacuteg hogy a rendszer a keacutet aacutellapot koumlzoumltt vergődjoumln amikor is az aacutellapotok koumlzoumltti vaacuteltaacutes mindkeacutet iraacutenyban ugyanannaacutel a jelszinteacutel koumlvetkezik be Az L2 ndash L1 kuumlloumlnbseacuteget a hisztereacutezis szeacutelesseacutegeacutenek nevezzuumlk

Code44 minimaacutelis moacutedosiacutetaacutesaacuteval hisztereacutezist valoacutesiacutethatunk meg a programmal A betoldaacutest tartalmazoacute reacuteszt

Created by XMLmind XSL-FO Converter

Alkonykapcsoloacute

maradeacutektalanul koumlzzeacutetesszuumlk a koacutedot azonban csak attoacutel a sortoacutel kezdve listaacutezzuk ahovaacute a hiszt ciacutemkeacutet helyeztuumlk A hisztereacutezist jelentő jelszintekre ugyanaz eacuterveacutenyes mint amit az előző alfejezetben is leiacutertunk tapasztalati uacuteton hataacuteroztuk meg őket eacutes maacutes koumlrnyezetben maacutes eacuterteacutekekre lehet (eacutes nagy valoacutesziacutenűseacuteggel lesz is) szuumlkseacuteg

Code45asmhisztADD Avoltage A-ban most maacuter a digitalizaacutelt feszuumlltseacutegeacuterteacutek legfelső 8 bitjeacutet talaacuteljukCJNE A20eval1 Ha A lt 20 akkor bekapcsoljuk aeval1JC ledon vilaacutegiacutetaacutestCJNE A40eval2 Ha A gt= 40 akkor kikapcsoljuk aeval2JNC ledoff vilaacutegiacutetaacutestJMP next Ugraacutes vissza meacuterniledonCLR P20 LED bekapcsolaacutesaJMP next Ugraacutes vissza meacuterniledoffSETB P20 LED kikapcsolaacutesaJMP next Ugraacutes vissza meacuterni

Az aacuteramkoumlruumlnk ezzel a programmal maacuter szebben műkoumldik a hisztereacutezis aacuteldaacutesos hataacutesa joacutel megfigyelhető az aacutellapotok koumlzoumltti vergődeacutes megszűnik (Laacutesd az alkalmazaacuteshoz tartozoacute videoacutet)

Created by XMLmind XSL-FO Converter

21 fejezet - TTL IC-k eacutes tranzisztorok a portokonAmennyiben valaki koumlzeacutepiskolai vagy egyetemi tanulmaacutenyai esetleg elektronikai hobbiteveacutekenyseacutege soraacuten foglalkozott logikai aacuteramkoumlroumlkkel valoacutesziacutenűleg ismeri a Texas TTL receptkoumlnyveacutet [7] Ha nem akkor tiszta sziacutevvel ajaacutenljuk mert nagyszerű munka (Antikvaacuteriumokban eacutes internetes piactereken meacuteg beszerezhető A szerző is ez utoacutebbi moacutedon tett szert raacute) Nos akaacuter iacutegy akaacuter uacutegy aacutell a helyzet a mikrovezeacuterlőhoumlz előbb-utoacutebb nem csak LED-ekből eacutes fototranzisztorokboacutel aacutelloacute aacuteramkoumlroumlket szeretneacutenk csatlakoztatni hanem ezekneacutel sokkal komolyabbakat is termeacuteszetesen akaacuter nagyobb teljesiacutetmeacutennyel Ilyenkor koumlzbuumllső fokozatokra meghajtoacutefokozatokra lesz szuumlkseacuteguumlnk Ezek a fokozatok jelenthetnek erre a ceacutelra tervezett TTL IC-ket eacutes kapcsoloacuteuumlzemben műkoumldtetett tranzisztorokat esetleg Darlington-kapcsolaacutesokat optocsatoloacutekat vagy releacuteket

Ebben a fejezetben elsősorban arra szeretneacutenk raacutemutatni hogy az eddig csupaacuten LED-ek meghajtaacutesaacutera hasznaacutelt P0-s eacutes P2-es portok koumlzoumltt van egy igen leacutenyeges kuumlloumlnbseacuteg Azt is meacuteg egyszer hangsuacutelyozni szeretneacutenk hogy aktiacutev kimenetkeacutent egyiket sem eacuterdemes hasznaacutelnunk A portok laacutebait foumlldre gond neacutelkuumll huacutezhatjuk szoftveresen abboacutel nem lesz baj Ilyenkor joacuteformaacuten csak a taacutepellaacutetaacutes (soros port) terhelhetőseacutege szab korlaacutetot az aacuteramerősseacutegnek 150-200 mA koumlruumlli aacuteramerősseacuteg eseteacuten maacuter eacuterdemes kuumllső taacutepegyseacuteget hasznaacutelnunk A keacutesőbbiekben erre is laacutetunk majd peacuteldaacutet Szeretneacutenk tovaacutebbaacute visszanyuacutelni a tranzisztorokhoz is eacutes megmutatni hogy milyen egyszerűen lehet veluumlk kuumllső egyseacutegeket kapcsolgatni

1 A felhuacutezoacute-ellenaacutellaacutesok szerepeA tankoumlnyvben LED-eket (termeacuteszetesen az előteacutet-ellenaacutellaacutesokat is mindig ide kell eacuterteni) kapcsolgattunk mind a P0-s mind a P2-es port bitjeivel Ilyenkor a LED akkor vilaacutegiacutetott ha a portok megfelelő laacutebaacutet foumlldre huacuteztuk azaz a LED katoacutedja neacutezett a port megfelelő laacuteba feleacute Hasznaacuteljuk most a portokat arra hogy TTL IC-knek adunk veluumlk bemeneti jelszinteket (Ki fog deruumllni hogy meacuteg a TTL IC-k bemenetei koumlzoumltt is akad kuumlloumlnbseacuteg) A peacuteldaacutekban ismeacutet csak LED-ekkel fogjuk jelezni az adott meghajtoacutefokozat műkoumldeacuteseacutet de innentől maacuter baacutetran mereacuteszkedhetuumlnk tovaacutebb is kijjebb ishellip

33 feladat

Kapcsolgassunk egy LED-et az SN74541-es vonalmeghajtoacuten keresztuumll Hasznaacuteljuk ehhez a mikrovezeacuterlő keacutet gombjaacutet [Code46]

A vaacutelasztaacutes azeacutert esett pont erre az IC-re mert ennek nem open collector-os kimenetei vannak hanem a kimenetei aktiacutev kimenetkeacutent hasznaacutelhatoacutek Akaacuter egy heacutetszegmenses kijelzőt is meghajthatunk veluumlk de uacutegy hogy ezek adjaacutek a kijelzőnek az aacuteramot Az ADuC 842-es P0-s eacutes P2-es portjaacuteval eacutes az IC bemeneteivel kapcsolatban irtoacute fontos tanulsaacuteggal fogunk szembesuumllni Előszoumlr is tekintsuumlk az [Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel] aacutebraacuten laacutethatoacute aacuteramkoumlrt

A TI74LS541-es IC tulajdonkeacuteppen 8 puffert vagy maacutes neacuteven vonalmeghajtoacutet tartalmaz Mi most ezek koumlzuumll egyetlen egyet fogunk hasznaacutelni A LED-nek az IC Y1-es kimenete ad aacuteramot amennyiben az A1-es bemenetnek magas logikai jelszintet adunk

211 aacutebra - Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

Mivel most az aacuteramkoumlr a leacutenyeges a koacutedot nagyon roumlvidre iacutertuk Az 1 gombbal bekapcsoljuk a 2 gombbal kikapcsoljuk a LED-et Most nem inverz logikaacuteroacutel van szoacute iacutegy a kimeneti bit magasra aacutelliacutetaacutesa jelenti a LED bekapcsolaacutesaacutet A koacutedban egyszerre kezeljuumlk a P20-s eacutes a P00-s biteket hogy ugyanazt a koacutedot hasznaacutelhassuk a koumlvetkezőkben bemutatandoacute elemzeacutesekhez

Code46asmORG 0060h A program helye a memoacuteriaacutebanbut1 BIT P32 Elnevezzuumlk az 1 gomb bitjeacutetbut2 BIT P33 Elnevezzuumlk a 2 gomb bitjeacutetout2 BIT P20 Az out2 bit definiaacutelaacutesaout0 BIT P00 Az out0 bit definiaacutelaacutesaMAINCLR out2 A kimeneti bitek toumlrleacuteseCLR out0waitJNB but1egy Ugrunk ha az 1 gomb le van nyomvaJNB but2nulla Ugrunk ha a 2 gomb le van nyomvaJMP wait Uacutejra gombnyomaacutesra vaacuterunknullaCLR out2 A kimeneti bitek toumlrleacuteseCLR out0JMP waitegySETB out2 A kimeneti bitek felaacutelliacutetaacutesaSETB out0JMP wait

Amennyiben az [Vonalmeghajtoacute hasznaacutelata a P2-es port bitjeivel] aacutebraacuten laacutethatoacute moacutedon a vonalmeghajtoacute A1-es bemeneteacutet a P20-s laacutebra koumltjuumlk a mikrovezeacuterlő gombjaival egeacuteszseacuteges moacutedon kapcsolgathatoacute a LED Most joumln a meglepeteacutes Koumlssuumlk aacutet az A1-es bemenetet a P00-s laacutebra Azt fogjuk tapasztalni hogy hiaacuteba nyomogatjuk a gombokat a LED bizony meg se nyekken (nem vilaacutegiacutet) Eacutes most eacuterkeztuumlnk el a keacutet port koumlzoumltti igen leacutenyeges kuumlloumlnbseacuteghez Ez a kuumlloumlnbseacuteg az hogy a P2-es port tartalmaz felhuacutezoacute-ellenaacutellaacutesokat a P0-s viszont nem Ez utoacutebbinak a kimenete stabil magas jelszint helyett lebeg ami nem teszi lehetőveacute a 74541-es IC bemeneteacutenek magas jelszintre huacutezaacutesaacutet Erre van gyoacutegyiacuter hasznaacuteljunk kuumllső felhuacutezoacute-ellenaacutellaacutest ha maacuter a portba nincsen gyaacuterilag beeacutepiacutetve laacutesd [Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten] aacutebra A felhuacutezoacute-ellenaacutellaacutesok eacuterteacuteke 10 kΩ koumlruumlli legyen ezzel messze 1 mA alatt maradunk eacutes nem leacutepjuumlk aacutet a port terhelhetőseacutegeacutet Baj termeacuteszetesen akkor sem toumlrteacutenik ha P2-es port laacutebaira is felhuacutezoacute-ellenaacutellaacutesokat koumltuumlnk de erre a belső felhuacutezoacute-ellenaacutellaacutesok miatt nincs szuumlkseacuteg

Ha P00-s laacutebra az [Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten] aacutebraacuten laacutethatoacute moacutedon raacutekoumltjuumlk a felhuacutezoacute-ellenaacutellaacutest (legyen ez most 10 kΩ-os) a LED-uumlnk ismeacutet egeacuteszseacutegesen kapcsolgathatoacute a gombokkal A felhuacutezoacute-ellenaacutellaacutes műkoumldeacutese a koumlvetkező amennyiben a P00-s laacutebat foumlldre huacutezzuk foumlldpotenciaacutelra keruumll a vonalmeghajtoacute A1-es bemenete is a port laacutebaacuten pedig 05 mA folyik keresztuumll Amennyiben a P00-s laacuteb

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

jelszintjeacutet magasra aacutelliacutetjuk nem lebegni fog hanem az ellenaacutellaacuteson keresztuumll kiuumll stabil +5 V potenciaacutelra Eacutes ez a szint jelenik meg a vonalmeghajtoacute A1-es bementeacuten is

212 aacutebra - Vonalmeghajtoacute hasznaacutelata felhuacutezoacute-ellenaacutellaacutessal a port laacutebaacuten

Eacuterdekes moacutedon nem mindegyik 74-es sorozatuacute IC bemeneteacutenek ilyen a kialakiacutetaacutesa mint a fent bemutatotteacute Ha vonalmeghajtoacutenak a 7406-os vagy 7407-es IC-t hasznaacuteltuk volna akkor azok vezeacuterleacutese felhuacutezoacute-ellenaacutellaacutes hasznaacutelata neacutelkuumll is ment volna a P0-s portroacutel Ennek okaacutenak taacutergyalaacutesa azonban maacuter tuacutelmutat e tankoumlnyv keretein A tanulsaacuteg az hogy taacutejeacutekozoacutedjuk a hasznaacutelni kiacutevaacutent vonalmeghajtoacutek bemeneteiről eacutes ha kell baacutetran hasznaacuteljunk felhuacutezoacute-ellenaacutellaacutesokat

2 Tranzisztorok mint kapcsoloacutekKuumllső aacuteramkoumlroumlk egyes reacuteszeinek meghajtaacutesaacutehoz tranzisztorokat is alkalmazhatunk Az előző alfejezetben koumlzreadott Code46-ot felhasznaacutelva egy-egy peacuteldaacutet mutatunk be npn- ill pnp-tranzisztor mint kapcsoloacuteelem hasznaacutelataacutera Mindkeacutet port eseteacuten

Tekintsuumlk az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel] aacutebraacutet Legyen most U = +5 V Ez egyaacuteltalaacuten nem kellene hogy iacutegy legyen hiszen akaacuter maacutes feszuumlltseacutegeacuterteacutekű taacutepellaacutetaacutest is hasznaacutelhatnaacutenk az aacuteramkoumlrhoumlz +12 V-ot +24 V-ot stb de az egyszerűseacuteg kedveacuteeacutert most ez is legyen +5 V Legyen a baacutezisellenaacutellaacutes eacuterteacuteke a tranzisztor erősiacuteteacutesi teacutenyezőjeacutenek megfelelően (A asymp 300) most R = 10 kΩ (RD eacuterteacuteke lehet baacutermi amit egy LED-hez adott U feszuumlltseacuteg eseteacuten hasznaacutelhatunk) Ekkor ha P20 magas jelszinten van (+5 V) akkor a tranzisztor teljesen kivezeacuterlődik iacutegy vilaacutegiacutetani fog a LED Ha P20-t foumlldpotenciaacutelra huacutezzuk akkor a tranzisztor lezaacuter eacutes a LED kialszik

213 aacutebra - Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

Az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P2-es portroacutel] aacutebraacuten laacutethatoacute aacuteramkoumlr a P00 laacuteb hasznaacutelataacuteval ebben az esetben sem műkoumldik Ennek megint csak a port laacuteba jelszintjeacutenek lebegeacutese az oka Felhuacutezoacute-ellenaacutellaacutes uumlgyes alkalmazaacutesaacuteval azonban ezen a helyzeten is segiacutethetuumlnk Figyeljuumlk meg az [Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal] aacutebraacuten laacutethatoacute aacuteramkoumlrt Amennyiben U = +5 V R1 eacutes R2 eacuterteacutekeacutet vaacutelaszthatjuk R2-nek azaz jelen esetben 5 kΩ-nak (56 kΩ eseteacuten sem lesz aacutem semmi kuumlloumlnbseacuteg a veacutegeredmeacutenyben) Ebben az esetben a P00-s laacuteb maacuter uacutegy tudja vezeacuterelni a tranzisztort ahogy azt az elejeacuten elterveztuumlk Ha U eacuterteacuteke nagyobb +5 V-naacutel akkor R1 eacutes R2 eacuterteacutekeacutenek meghataacuterozaacutesa csak nagyon keveacutessel igeacutenyel toumlbb figyelmesseacuteget

214 aacutebra - Npn-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese a P0-s portroacutel felhuacutezoacute-ellenaacutellaacutessal

Ha pnp-tranzisztort akarunk hasznaacutelni akkor vessuumlnk egy pillantaacutest az [Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese] aacutebraacutera Ebben esetben nem lesz szuumlkseacuteguumlnk felhuacutezoacute-ellenaacutellaacutesra meacuteg akkor sem ha a P0-s portot hasznaacuteljuk a vezeacuterleacutesre Viszont most az U feszuumlltseacuteg maacuter nem lehet akaacutermilyen nagy hiszen ha az csak egy kicsivel is nagyobb 5 V-naacutel akkor a tranzisztor mindenkeacuteppen kinyit iacutegy elvesziacuteti kapcsoloacute jellegeacutet Ha azonban U = +5 V ebben az esetben is akkor azeacutert előnyoumls pnp-tranzisztor vaacutelasztaacutesa mert semmikor sem kell felhuacutezoacuteellenaacutellaacutest hasznaacutelnunk Mivel pnp-tranzisztort hasznaacutelunk az akkor nyit ki ha a vezeacuterleacuteseacutere hasznaacutelt portlaacutebat foumlldre huacutezzuk eacutes akkor zaacuter le amikor a vezeacuterlőlaacuteb jelszintje magas (+5 V)

215 aacutebra - Pnp-tranzisztor mint kapcsoloacuteelem vezeacuterleacutese

Created by XMLmind XSL-FO Converter

TTL IC-k eacutes tranzisztorok a portokon

A BC182-es eacutes BC212-es univerzaacutelis jelerősiacutető-tranzisztorok kollektoraacuterama folytonos uumlzemmoacutedban 100 mA lehet Ha enneacutel is nagyobb aacuteramuacute eszkoumlzt kiacutevaacutenunk hasznaacutelni akkor maacuter valoacuteban indokolt a toumlbbfokozatuacute meghajtaacutes melyre tankoumlnyvi peacutelda szokott lenni a Darlington-kapcsolaacutes [4] [5] [6] Eacutes ahogy maacuter iacutertuk 100-200 mA aacuteramfelveacutetel eseteacuten maacuter kuumllső taacutepot hasznaacuteljunk hogy ne terheljuumlk tuacutel az USB-portot

Created by XMLmind XSL-FO Converter

22 fejezet - Hőmeacuterseacuteklet-meacutereacutesHisztereacutezises alkonykapcsoloacutet maacuter keacutesziacutetettuumlnk a [Alkonykapcsoloacute] fejezetben Maacuter az az alkalmazaacutes is olyan volt ami a gyakorlatban is minden tovaacutebbi neacutelkuumll hasznosiacutethatoacute tehaacutet maacuter nem tankoumlnyviacutezű gyermeteg peacuteldaacuteroacutel volt szoacute Most neacutezzuumlnk egy maacutesik olyan alkalmazaacutest amelyre szinteacuten sokszor lehet igeacuteny a gyakorlatban ez pedig a hőmeacuterseacuteklet-meacutereacutes Ezuacutettal nyilvaacuten valamilyen hőmeacuterseacuteklet-szenzorra lesz szuumlkseacuteguumlnk

1 TermisztorokHőmeacuterseacuteklet eacuterzeacutekeleacuteseacutere szaacutemtalan feacutele szenzort vaacutesaacuterolhatunk Az alkatreacutesz aacutera sok prameacutetertől fuumlgg elsődlegesen a pontossaacutegtoacutel eacutes a linearitaacutestoacutel Szeretneacutenk hűek maradni a tankoumlnyvben megfogalmazott elveinkhez iacutegy a legegyszerűbb legolcsoacutebb megoldaacutest vaacutelasztjuk azaz nem preciacutezioacutes eszkoumlzt de meacuteg csak nem is Pt100-ast fogunk hasznaacutelni hanem egy nagyon egyszerű kis termisztort A termisztorok hőmeacuterseacutekletfuumlggő ellenaacutellaacutesnak tekinthetők Vannak koumlzoumlttuumlk pozitiacutev ill negatiacutev hőfokteacutenyezőjű tiacutepusok Az előbbi azt jelenti hogy a hőmeacuterseacuteklet noumlvekedeacuteseacutevel noumlvekszik az eszkoumlz ellenaacutellaacutesa miacuteg az utoacutebbinaacutel ez pont fordiacutetva van

Hőmeacuterseacutekletmeacutereacutesre mi a KTY81-120 termisztort vaacutelasztottuk Az eszkoumlz olcsoacute koumlnnyen beszerezhető pozitiacutev hőfokteacutenyezőjű viszont karakterisztikaacuteja nem toumlkeacuteletesen lineaacuteris laacutesd [A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja] aacutebra No de semmi baj ebből meacuteg talaacuten tőkeacutet is kovaacutecsolhatunk ha uumlgyesek vagyunkhellip

221 aacutebra - A KTY81-120 tiacutepusuacute termisztor hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja

Az eszkoumlz karakterisztikaacutejaacutet az adatlap 10 Celsius-fokonkeacutent tartalmazza hellyel-koumlzzel 5 fokonkeacutent Ez az adatsor iacutegy eleacuteggeacute heacutezagos ezeacutert interpolaacutecioacutet hajtunk veacutegre rajta A harmadfokuacute termeacuteszetes spline-interpolaacutecioacutet vaacutelasztjuk melyneacutel az alappontrendszert a 10-zel oszthatoacute hőmeacuterseacutekleteacuterteacutekek jelentik hogy az interpolaacutecioacutenaacutel a nagyon keacutenyelmesen megoldhatoacute ekvidisztaacutens esetet kapjuk Ekkor ugyan eacuteppen a kuumlloumlnleges jelentőseacutegű 25 degC-hoz tartozoacute eacuterteacuteket hagyjuk ki (elvileg pont itt 1 000 Ω a termisztor ellenaacutellaacutesa) de laacutetni fogjuk hogy ezzel hibaacutet gyakorlatilag nem veacutetuumlnk Az interpolaacutelt karakterisztikaacutet az [A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja] aacutebra mutatja Az interpolaacutecioacutes fuumlggveacuteny a T = 25 degC helyen 1 00011 Ω-ot vesz foumll ami az 1 000 Ω-hoz keacutepest csak 0011 -os elteacutereacutest jelent Mivel maga az adatlap 2 -os toleranciasaacutevot ad meg az ellenaacutellaacuteseacuterteacutekekhez ekkora kis hibaacuteval egyaacuteltalaacuten nem kell foglalkoznunk

222 aacutebra - A KTY81-120 tiacutepusuacute termisztor interpolaacutelt hőmeacuterseacuteklet-ellenaacutellaacutes karakterisztikaacuteja

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Itt aacutelljunk meg egy pillanatra eacutes neacutezzuumlk meg hogy tudjuk-e korrigaacutelni a karakterisztikaacutet ha az esetleg arra szorulna Multimeacuteterrel raacutemeacuterve a szerző asztalaacuten oacuteraacutek oacuteta pihenő termisztorra 990 Ω-os ellenaacutellaacutes-eacuterteacutek volt meacuterhető 22 degC-os hőmeacuterseacutekletet felteacutetelezve az interpolaacutecioacutes fuumlggveacuteny ehhez az eacuterteacutekhez 9765 Ω-ot ad A keacutet eacuterteacutek haacutenyadosa 9909765 asymp 10138 iacutegy ezzel az eacuterteacutekkel szorozhatjuk a teljes interpolaacutecioacutes fuumlggveacutenyt a nagyobb pontossaacuteg eacuterdekeacuteben Az 10138 haacutenyadost kalibraacutecioacutes egyuumltthatoacutenak nevezzuumlk

A termisztoron aacutetfolyoacute aacuteram erősseacutegeacutet a gyakorlati alkalmazaacutesok soraacuten ceacutelszerű 1-2 mA alatt tartani Ha nem akarunk aacuteramgeneraacutetort keacutesziacuteteni ez megoldhatoacute uacutegy hogy a termisztorral sorosan koumltuumlnk egy maacutesik ellenaacutellaacutest a hőmeacuterseacuteklet megaacutellapiacutetaacutesaacutehoz pedig a termisztoron eső feszuumlltseacuteget meacuterjuumlk laacutesd alaacutebbi aacutebra

223 aacutebra - A termisztor soros kapcsolaacutesban

A soros ellenaacutellaacutes-paacuterra foumlliacutert feszuumlltseacutegosztoacute szerint

Vaacutelasszuk az U feszuumlltseacuteget 49 V-nak (A szerző oumlreg asztali szaacutemiacutetoacutegeacutepeacuten ennyit tudott nyuacutejtani az USB port) Tegyuumlk fel tovaacutebbaacute hogy a 0 degC - 60 degC tartomaacutenyban kell hőmeacuterseacutekletet meacuternuumlnk Kiacutevaacutencsisaacutegboacutel vizsgaacuteljuk meg hogy hogyan fog kineacutezni a hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika ha az RS ellenaacutellaacutes eacuterteacutekeacutet egyszer 500 Ω-nak ([A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal] aacutebra) maacutesszor 10 kΩ-nak ([A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal] aacutebra) vesszuumlk Szabad szemmel is laacutethatoacute hogy egyik karakterisztika sem toumlkeacuteletesen lineaacuteris ill hogy az egyik konkaacutev a maacutesik konvex fuumlggveacuteny Az egyeacutebkeacutent is probleacutemaacutet jelentene hogy RS = 500 Ω eseteacuten a termisztor feszuumlltseacutege joacutecskaacuten 25 V foumlloumltt van iacutegy a mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutet nem is hasznaacutelhatnaacutenk tovaacutebbi jelkondicionaacutelaacutes neacutelkuumll

224 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 500 Ω-os soros ellenaacutellaacutessal

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

225 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika 10 kΩ-os soros ellenaacutellaacutessal

Proacutebaacuteljuk most RS eacuterteacutekeacutet megvaacutelasztani uacutegy hogy a fuumlggveacuteny a saacutergaacuteval jeloumllt darabja a lehető legnagyobb meacuterteacutekben megkoumlzeliacutetse a lineaacuteris alakot Tovaacutebbi reacuteszletezeacutes neacutelkuumll ehhez joacute oumltletnek tűnik ha a karakterisztika első derivaacuteltjaacutet numerikusan kiszaacutemoljuk azaz veacuteges differenciaacutekkal koumlzeliacutetjuumlk Ha most ezeknek a differenciaeacuterteacutekeknek vesszuumlk a szoacuteraacutesaacutet akkor az joacutel kifejezi a lineaacuteris alaktoacutel valoacute globaacutelis elteacutereacutest Mindezt persze csak akkor ha ezt a szoacuteraacuteseacuterteacuteket elosztjuk a differenciaeacuterteacutekek aacutetlagaacuteval ugyanis iacutegy tesszuumlk invariaacutenssaacute az ily moacutedon feleacutepiacutetett ceacutelfuumlggveacutenyuumlnket a fuumlggveacuteny amplituacutedoacutejaacuteval szemben Numerikus szeacutelsőeacuterteacutek-kereseacutest alkalmazva RS eacuterteacutekeacutere 2 385 Ω adoacutedik optimumkeacutent Ennek eseteacutet mutatja a [A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel] aacutebra Az optimummal meacuteg a feszuumlltseacutegeacuterteacutekre neacutezve is szerencseacutenk van a termisztor feszuumlltseacutege az előiraacutenyzott hőmeacuterseacuteklet-tartomaacutenyban bőven 25 V alatt marad A saacutergaacuteval jeloumllt fuumlggveacutenydarab gyakorlatilag lineaacuterisnak tekinthető

Amennyiben a saacutergaacuteval rajzolt fuumlggveacutenydarabot lineaacuteris fuumlggveacutennyel akarjuk helyettesiacuteteni meg kell hataacuteroznunk annak meredekseacutegeacutet (m) eacutes fuumlggőleges eltolaacutesaacutet (b) az

oumlsszefuumlggeacuteshez Az m meredekseacuteget keacutepezhetjuumlk uacutegy hogy vesszuumlk a numerikusan szaacutemolt differenciaeacuterteacutekek aacutetlagaacutet b-nek pedig egyszerűen a 0 degC-naacutel foumllvett eacuterteacuteket tekintjuumlk A [A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel] aacutebraacuten laacutethatoacute veacutekony fekete szakasz ezt a lineaacuteris fuumlggveacutenyt mutatja

226 aacutebra - A hőmeacuterseacuteklet-termisztorfeszuumlltseacuteg karakterisztika az optimaacutelis 2 385 Ω-os soros ellenaacutellaacutessal eacutes a lineaacuteris fuumlggveacutennyel

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Az olvasoacutet megnyugtatjuk semmilyen fontos szaacutemiacutetaacutesroacutel nem maradt le az alfejezetben taacutergyalt oumlsszes szaacutemiacutetaacutesi reacuteszlet megtalaacutelhatoacute a KTY81-120xls faacutejlban azzal mindent reprodukaacutelni tud

2 HőmeacuterőAz előző alfejezetben eleacuteg reacuteszletesen foglalkoztunk a termisztor karakterisztikaacuteival iacutegy veacutegre megfogalmazhatunk egy hőmeacuterseacuteklet-meacutereacutesi feladatot

34 feladat

Meacuterjuumlk a mikrovezeacuterlővel 02 degC felbontaacutessal a szobaacutenk hőmeacuterseacutekleteacutet a 20 degC - 30 degC tartomaacutenyban A meacutert hőmeacuterseacuteklet-eacuterteacuteket kuumlldjuumlk el a soros porton a PC-nek A tartomaacutenyon kiacutevuumlli hőmeacuterseacuteklethez kuumlloumln uumlzenetet kuumlldjuumlnk [Code47]

Az előző alfejezetben is hivatkozott KTY81-120xls faacutejlban meghataacuteroztuk hogy az U = 49 V feszuumlltseacuteg eacutes az optimaacutelis RS = 2 385 Ω mellett mekkora termisztorfeszuumlltseacuteg tartozik adott hőmeacuterseacuteklethez A

feszuumlltseacutegeacuterteacutekekhez koumlnnyen meghataacuterozhatjuk a digitaacutelis aacutetalakiacutetaacutes eacuterteacutekeit a formulaacuteval Az előiacutert hőmeacuterseacuteklet-tartomaacuteny elejeacutet eacutes veacutegeacutet mutatja a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] feszuumlltseacutegeacuterteacutekkel AD-eacuterteacutekkel egyetemben Ez utoacutebbit decimaacutelisan eacutes hexadecimaacutelisan is

221 taacuteblaacutezat - A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata

T degC UR(T) V D dec D hex

200 14215 2328 918

202 14231 2331 91B

204 14247 2334 91E

206 14263 2336 920

208 14279 2339 923

hellip hellip hellip hellip

292 14955 2450 992

294 14971 2452 994

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

296 14987 2455 997

298 15003 2457 999

300 15019 2460 99C

Ha szemuumlgyre vesszuumlk a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] utolsoacute oszlopaacuteban leacutevő eacuterteacutekeket akkor foumll kell tűnnie annak a teacutenynek hogy valamennyi hexadecimaacutelis szaacutem első szaacutemjegye 9-es Ez most oacuteriaacutesi ajaacutendeacutek nekuumlnk az AD-aacutetalakiacutetaacutesnaacutel ugyanis a 12 bitből csak az alsoacute 8-ra lesz szuumlkseacuteguumlnk Tizenhatos szaacutemrendszerben ugyanis egy szaacutemjegy 4 bitet igeacutenyel ha aacutetiacuterjuk kettes szaacutemrendszerbe Ha tehaacutet tizenhatos szaacutemrendszerben foumlliacutert haacuteromjegyű szaacutemok helyett csak keacutetjegyűekre lesz szuumlkseacuteguumlnk akkor az mindig csak 8 bitet igeacutenyel kettes szaacutemrendszerben Ez pedig azt jelenti hogy egy az egyben hasznaacutelhatjuk az AD-aacutetalakiacutetoacute ADCDATAL regisztereacutet eacutes hogy az ADCDATAH regiszterre nem is lesz szuumlkseacuteguumlnk hiszen abban az aacutetalakiacutetott eacuterteacutek felső 4 bitje van (vouml [Az AD-aacutetalakiacutetoacute eacuterteacutekeacutenek keacutet regisztere eacutes azok bitjei] aacutebra)

A tapasztalat azt mutatja hogy az AD-aacutetalakiacutetaacutes soraacuten kapott 12-bites eacuterteacutek alsoacute egy-keacutet bitje meacuteg nagyon stabil feszuumlltseacuteg mellett is eleacuteggeacute ingadozhat Ennek koumlvetkezteacuteben a kijelzett hőmeacuterseacuteklet-eacuterteacutek is kisebb-nagyobb ingadozaacutest mutat laacutesd [Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll] aacutebra Ezen oknaacutel fogva nem egy-egy meacutereacutes eredmeacutenye alapjaacuten eacuterdemes kiiacuteratnunk a hőmeacuterseacutekletet hanem toumlbb meacutereacutes eacuterteacuteket lenne joacute aacutetlagolnunk

227 aacutebra - Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll

Az aacutetlagolaacuteshoz toumlbbnyire maacuter lebegőpontos műveletekre lenne szuumlkseacuteguumlnk aminek megiacuteraacutesa assemblyben nem eacuteppen leaacutenyaacutelom Megtehetjuumlk hogy C fordiacutetoacuteeacutert sikoltunk de inkaacutebb gondolkodjunk egy kicsit Ha az ADCDATAL regiszterből kiemelt eacuterteacuteket nem egyedileg elszigetelten kezeljuumlk hanem tovaacutebbi vaacuteltozoacutek bevezeteacuteseacutevel toumlbb ilyet oumlsszeadunk majd a veacutegeacuten az oumlsszeget a meacutereacutesek darabszaacutemaacuteval elosztjuk akkor megvaloacutesiacutethatjuk az aacutetlagolaacutest Ehhez hasznaacuteljunk egy keacutetbaacutejtos vaacuteltozoacutet melynek lesz ugyebaacuter egy felső baacutejtja (datah) eacutes egy alsoacute baacutejtja (datal) E keacutet vaacuteltozoacute aacuteltal reprezentaacutelt 16-bites eacuterteacuteket nullaacutezzuk le majd adjuk hozzaacute a fuumlggetlen meacutereacutesek 8-baacutejtos eacuterteacutekeit de nagyon leacutenyeges hogy a hozzaacuteadaacutesok darabszaacutema kettő hatvaacutenya legyen Ennek a koumlvetelmeacutenyek a magyaraacutezataacutera hamarosan feacuteny deruumll Adjunk oumlssze peacuteldaacuteul 32 meacutereacutesi eacuterteacuteket Amikor a keacutetbaacutejtos regiszteruumlnk alsoacute baacutejtjaacutehoz hozzaacuteadjuk az aktuaacutelisan meacutert 8-bites eacuterteacuteket akkor mindig lehet aacutetvitel A felső baacutejthoz adjunk hozzaacute nullaacutet plusz az aacutetvitelt Menet koumlzben mentsuumlk mindig el a moacutedosult alsoacute ill felső baacutejtot iacutegy az eljaacuteraacutes veacutegeacutere kapunk egy 16-bites eacuterteacuteket amely 32 db 8-bites meacutereacutesi adat oumlsszegeacutet hordozza Assemblyben mindez iacutegy fest

MOV datal0 Nullaacutezzuk a datahdatalMOV datah0 regiszterpaacutertMOV R432 32-szoumlr meacuteruumlnk ebből keacutepezzuumlk az aacutetlagotmeasureSETB SCONV Egyszeri AD-konverzioacutetJB SCONV$ keacuteruumlnkMOV jelADCDATAL Kiolvassuk az ADCDATAL regisztertMOV Adatal Hozzaacuteadjuk datal-hez az aktuaacutelis

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

ADD Ajel kiolvasott eacuterteacuteketMOV datalA Elmentjuumlk a kapott alsoacute baacutejtotMOV Adatah Az aacutetviteli bittel egyuumltt 0-t adunkADDC A0 rsquodatahrsquo-hozMOV datahA Elmentjuumlk a kapott felső baacutejtotDJNZ R4measure Folytatjuk a meacutereacutest

A fenti koacutedreacuteszlet tehaacutet 32 meacutereacutesi adatot ad oumlssze az eredmeacuteny pedig a 16-bitesnek tekintendő datahdatal regiszterpaacuterban van Most joumln a kettő hatvaacutenyaacutera megfogalmazott igeacuteny magyaraacutezata A datahdatal regiszterpaacuter eacuterteacutekeacutet el kellene osztanunk 32-vel Szedjuumlk elő mindazt amit a kettes szaacutemrendszerről tudunk Ha egy akaacuterhaacutenybites eacuterteacuteket egy bittel balra leacuteptetuumlnk az uumlres helyre pedig nullaacutet iacuterunk akkor kettővel szorozzuk a szaacutemeacuterteacuteket Ha egy bittel jobbra leacuteptetuumlnk akkor kettővel osztunk eacutes egyuacutettal keacutepezzuumlk az egeacutesz reacuteszt Ha keacutet bittel leacuteptetuumlnk jobbra akkor 4-gyel osztunk eacutes keacutepezzuumlk az egeacutesz reacuteszt Iacutegy aztaacuten mivel 32 = 25 ezeacutert a keacutet regiszter tartalmaacutet egyuumlttesen 5 bittel kell jobbra leacuteptetnuumlnk

Vegyuumlnk egy peacuteldaacutet a fent leiacutert leacutepteteacutesre de az egyszerűseacuteg kedveacuteeacutert most csak 4 db 8-bites szaacutemot adunk oumlssze (eacutes iacutegy majd keacutet bittel leacuteptetuumlnk jobbra) Ezek decimaacutelis eacuterteacuteke legyen rendre 77 76 79 81 iacutegy az oumlsszeguumlk 313 Az oumlsszegzeacutest kettes szaacutemrendszerben iacutegy szemleacuteltetjuumlk

01001101 01001100 01001111 + 01010001 ---------- 100111001

Az eredmeacuteny maacuter keacutet baacutejtot igeacutenyel Egymaacutes mellett elteacuterő sziacutennel feltuumlntetve az eredmeacuteny felső eacutes alsoacute baacutejtjaacutet ezt kapjuk

datahdatal

00000001 00111001

Ha most keacutet bittel jobbra leacuteptetjuumlk a regiszterpaacuter egyuumlttes eacuterteacutekeacutet akkor ezt kapjuk

datahdatal hulladeacutek

xx000000 01001110 01

A fenti műveletneacutel a keacutet bdquoxrdquo azt akarja szimbolizaacutelni hogy teljesen mindegy milyen bitek joumlnnek be oda balroacutel hiszen a felső baacutejtra nem lesz a tovaacutebbiakban szuumlkseacuteguumlnk A bdquohulladeacutekrdquo szoacute pedig arra utal hogy az alsoacute baacutejtboacutel keacutet bitet elvesziacutetuumlnk de emiatt ne keseregjuumlnk hiszen ez jelenti az egeacutesz reacutesz keacutepzeacuteseacutet Ami most az alsoacute baacutejtban előaacutellt az 01001110 binaacuterisan ami decimaacutelisan 78 Ha pedig elosztjuk a neacutegy eredeti szaacutem oumlsszegeacutet 4-gyel akkor 3134 = 7825-oumlt kapunk aminek egeacutesz reacutesze 78 Imiacutegyen assemblyben tudtunk egyfajta aacutetlagolaacutest veacutegezni eacutes most maacuter eacuterthető hogy mieacutert volt fontos hogy az aacutetlagolni kiacutevaacutent adatok darabszaacutema kettő hatvaacutenya legyen

A leacutepteteacutesi művelethez azokat a bitforgatoacute utasiacutetaacutesokat hasznaacuteljuk amelyek C-n keresztuumll leacuteptetnek Iacutegy tudjuk megoldani azt hogy a felső baacutejtboacutel jobbra kinyomott bit megőrződjeacutek C-ben majd onnan beszippanthassuk balroacutel az alsoacute baacutejtba Ez assemblyben nem is olyan bonyolult

MOV R45 5-szoumlr leacuteptetuumlnk jobbraleptetMOV Adatah A-ba toumlltjuumlk a felső baacutejtot RRC A Jobbra forgatjuk Iacutegy legalsoacute bitje C-be keruumll Hogy mi leacutep be balroacutel az eacuterdektelenMOV datahA A moacutedosult felső baacutejtot elmentjuumlk MOV Adatal A-ba toumlltjuumlk az alsoacute baacutejtotRRC A Jobbra forgatjuk ezt is Balroacutel beleacutep a C-ben aacutelloacute bit Jobbra taacutevozik a foumlloumlslegesseacute vaacutelt legalsoacute bit C-be leacutep de ennek maacuter nincs jelentőseacutegeMOV datalA A moacutedosult alsoacute baacutejtot elmentjuumlkDJNZ R4leptet Folytatoacutedik a leacutepteteacutes ciklusa

A [Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal] aacutebra az aacutetlagolaacutes kellemes hataacutesaacutet a mutatja Az itt laacutetottakat eacuterdemes oumlsszehasonliacutetani a [Egyedi hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutes neacutelkuumll] aacutebraacuteval

228 aacutebra - Hőmeacuterseacuteklet-eacuterteacutekek aacutetlagolaacutessal

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

A [34 feladat] megoldaacutesaacutehoz meacuteg egy nagyon fontos momentumot tisztaacuteznunk kell Az aacutetlagolaacutest ugyan meguacutesztuk lebegőpontos műveletek neacutelkuumll de a hőmeacuterseacuteklet-eacuterteacutekek kiszaacutemiacutetaacutesaacutet a meacutert feszuumlltseacutegből maacuteshogy maacuter nem tudnaacutenk megoldani Ez akkor van iacutegy ha szaacutemolni akarjuk a hőmeacuterseacuteklet-eacuterteacutekeket Ha azonban maacutes megoldaacutest vaacutelasztunk akkor nem lesz szuumlkseacuteguumlnk szaacutemiacutetaacutesokra Ez a bdquomaacutes megoldaacutesrdquo az uacuten look-up table hasznaacutelata A look-up table olyan taacuteblaacutezatot jelent amelyben minden teacutetelesen benne van amire csak szuumlkseacuteguumlnk lehet Look-up table-t hasznaacutelni assemblyben egyeacutebkeacutent nem is akkora bdquoeacutegeacutesrdquo mint amekkoraacutenak elsőre hinneacutenk Sokszor meg lehet veluumlk keruumllni bonyolult szaacutemiacutetaacutesokat melyeket assemblyben gyoumltrelmes lenne megiacuterni Majdnem olyan ez mint a klasszikus eacutertelemben vett fuumlggveacutenytaacuteblaacutezat Ha visszatekintuumlnk a [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata]ra akkor koumlnnyű meggondolni hogy a feladat megoldaacutesaacutera alkalmazott uacutej taacuteblaacutezatban csak a keacutetjegyűre csupasziacutetott hexadecimaacutelis szaacutemokra (hiszen a harmadik jegy mindig 9 lenne) eacutes a hőmeacuterseacuteklet szoumlveges eacuterteacutekeacutere lesz szuumlkseacuteguumlnk Valahogy ilyenformaacuten

DB 018h2000DB 01Bh2020DB 01Eh2040DB 020h2060DB 023h2080DB DB

Az adatbaacutejtokkeacutent megadott adathalmaz alkotja a programhoz szuumlkseacuteges look-up table-t Valamely sor első eleme első baacutejtja a felismerendő lecsupasziacutetott feszuumlltseacutegeacuterteacutek (laacutesd [A hőmeacuterseacuteklet- eacutes feszuumllteacutesgeacuterteacutekek taacuteblaacutezata] 4 oszlop) Ez utaacuten minden sorban tovaacutebbi 5 baacutejt koumlvetkezik 4 baacutejtboacutel aacutell az első elemhez tartozoacute szoumlveges hőmeacuterseacuteklet-eacuterteacutek az oumltoumldik baacutejt pedig a karakterlaacutencot lezaacuteroacute 0 Ezek utaacuten semmi maacutesra nincs szuumlkseacuteguumlnk mint az előaacutelloacute aacutetlagolt meacutereacutesi adatot megkeresni a taacuteblaacutezatban majd kijelezni a hozzaacute tartozoacute hőmeacuterseacuteklet-eacuterteacuteket Hogy meglepeteacutes ne eacuterjen bennuumlnket ceacutelszerű megvizsgaacutelnunk hogy az aacutetlagolt eacuterteacutek egyaacuteltalaacuten szerepel-e a taacuteblaacutezatban Vagyis ha tuacutel alacsony vagy tuacutel magas a hőmeacuterseacuteklet akkor azt kuumlloumln kell jeleznuumlnk Ha ez nem aacutell fenn akkor kereshetuumlnk a taacuteblaacutezatban A kereseacutes koacuted-indirekt ciacutemzeacutessel toumlrteacutenik eacutes az aacutetlagolt meacutereacutesi adat ill a taacuteblaacutezat soraiban szereplő első elemek oumlsszehasonliacutetaacutesaacuteval Ha valamely sorban az első elem eacuterteacuteke nagyobb vagy egyenlő az aacutetlagolt meacutereacutesi adattal akkor az abban a sorban szereplő eacuterteacuteket jelezzuumlk ki Mivel a taacuteblaacutezat sorai rendezettek az első elemre neacutezve mindig egyeacutertelműen megtalaacuteljuk a helyes hőmeacuterseacuteklet-eacuterteacuteket Ehhez persze szuumlkseacuteg van a taacuteblaacutezatba foglaltakon kiacutevuumll eső hőmeacuterseacuteklet felismereacuteseacutere eacutes kuumlloumln kezeleacuteseacutere

Az adatmutatoacute kezeleacutese most kuumlloumlnoumls figyelmet igeacutenyel Tegyuumlk fel hogy ez most a taacuteblaacutezat valamely soraacutenak első elemeacutere mutat Ezt az elemet onneacutet ezek szerint gond neacutelkuumll kiolvashatjuk koacuted-indirekt ciacutemzeacutessel Amennyiben ezt az eacuterteacuteket kerestuumlk 1-gyel megnoumlveljuumlk az adatmutatoacute eacuterteacutekeacutet amely iacutegy a megfelelő hőmeacuterseacuteklet-eacuterteacutekre mint szoumlvegdarabra mutat majd meghiacutevhatjuk a szoumlvegkuumlldő szubrutint A koumlvetkező sor első elemeacutehez azonban nem 1-gyel hanem 6-tal kell megnoumlvelnuumlnk az adatmutatoacute eacuterteacutekeacutet hiszen 5 baacutejtot kell aacutetugranunk (a hőmeacuterseacuteklet-eacuterteacuteket eacutes a szoumlvegzaacuteroacute nullaacutet)

A [34 feladat] megoldaacutesaacutet jelentő koacuted maacuter nem lesz roumlvid de meacuteg mindig nem kell megijednuumlnk tőle A joacute oumlreg DELAY szubrutint most is kihagyjuk a tankoumlnyvbe beemelt reacuteszből A soros porti kommunikaacutecioacute eacutes az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa uacutegy toumlrteacutenik mint a koraacutebbi alkalmazaacutesokban ezeacutert azokat maacuter nem magyaraacutezzuk A

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

look-up table-nek a helytakareacutekossaacuteg veacutegett csak kis reacuteszleteacutet koumlzoumlljuumlk A koacuted teljes egeacuteszeacuteben eacutes reacuteszletes magyaraacutezatokkal egyetemben megtalaacutelhatoacute a koacutedkoumlnyvtaacuterban

A tankoumlnyv ezen pontjaacuten a 80518052-es processzormagoknak maacuter majdnem az oumlsszes geacutepi utasiacutetaacutesaacutet ismerjuumlk Az egyik ami meacuteg hiaacutenyzik a koumlvetkező

CLR A

Ez ekvivalens a

MOV A0

utasiacutetaacutessal csak fele olyan hosszuacute (egybaacutejtos) eacutes fele annyi oacuterajelciklust (egyet) igeacutenyel A mnemonikot maacuter eacutertjuumlk hiszen ilyennel a bitműveletek utasiacutetaacutesainaacutel maacuter talaacutelkoztunk eacutes pontosan ugyanazt jelenti (Clear ndash toumlroumll) Ez az uacutej utasiacutetaacutest a demonstraacutecioacute kedveacuteeacutert felbukkan a koacutedban is

Code47asmjel DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejadatah DATA 031h Az oumlsszeg vaacuteltozoacutejaacutenak felső baacutejtjadatal DATA 032h Az oumlsszeg vaacuteltozoacutejaacutenak alsoacute baacutejtjakorr EQU 12 A korrekcioacutes eacuterteacutek Tapasztalai uacuteton hataacuterozhatoacute megMAINMOV SCON01010010b Az UART-kommunikaacutecioacute beaacutelliacutetaacutesaMOV T3CON083h A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV T3FD02Dh A kommunikaacutecioacute sebesseacutege 9600 Baud leszMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutetnextMOV datah0 Nullaacutezzuk az aacutetlagolaacutes vaacuteltozoacutejaacutenakMOV datal0 mindkeacutet baacutejtjaacutetMOV R432 Ennyiszer meacuteruumlnk ebből keacutepezzuumlk az aacutetlagotmeasureSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnk Az SCONV bitJB SCONV$ mindaddig magas marad amiacuteg be nem fejeződoumltt az AD-aacutetalakiacutetaacutesMOV jelADCDATAL A sajaacutetos hőmeacuterseacuteklettartomaacuteny miatt nekuumlnk most az aacutetalakiacutetott eacuterteacutek alsoacute 8 bitje kell csakMOV Adatal Hozzaacuteadjuk datal-hez az aktuaacutelisADD Ajel AD-eacuterteacuteketMOV datalA Elmentjuumlk a kapott alsoacute baacutejtotMOV Adatah Az aacutetviteli bittel egyuumltt 0-t adunkADDC A0 rsquodatahrsquo-hozMOV datahA Elmentjuumlk a kapott felső baacutejtotDJNZ R4measure Folytatjuk a meacutereacutest az aacutetlaghozMOV R45 Ennyiszer jobbra leacuteptetjuumlk aleptet datahdatal 16-bites eacuterteacuteket azazMOV Adatah tulajdonkeacuteppen 2-az-ennyiediken-nelRRC A osztjuk vagyis aacutetlagot keacutepezuumlnk a meacutereacutesiMOV datahA adatokboacutel A felső baacutejtboacutel a C bit segiacutetseacutegeacutevel aacutetleacuteptetjuumlkMOV Adatal a biteket az alsoacute baacutejtba Annak alsoacute bitjeiRRC A elvesznek de ne sirassuk őket A veacutegeacutenMOV datalA datal-ben az aacutetlageacuterteacutek szerepelDJNZ R4leptet Folytatjuk a bitek leacutepteteacuteseacutetMOV Adatal Korrigaacuteljuk a kapott aacutetlageacuterteacuteket aCLR C tapasztalati uacuteton meghataacuterozott korrekcioacutesSUBB Akorr konstanssalMOV datalA Elmentjuumlk a korrigaacutelt eacuterteacuteketMOV Adatal Ha 20 C-naacutel kisebb a meacutert hőmeacuterseacutekletCJNE A016hrelac1 akkor erről uumlzenetet kuumllduumlnk a PC-nekrelac1JC alacsonyCJNE A09Ehrelac2 Ha 30 C-naacutel nagyobb a meacutert hőmeacuterseacutekletrelac2 akkor erről uumlzenetet kuumllduumlnk a PC-nekJNC magasMOV DPTRlookup A look-up table ketdőciacutemeacutenek betoumllteacutese az adatmutatoacutebakeres

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

CLR A A-t nullaacutezukMOVC AA+DPTR Betoumlltjuumlk A-ba a look-up table adott soraacutenak hőmeacuterseacutekleteacuterteacutekeacutet jelentő szaacutemotCJNE Adatalrelac3 Oumlsszehasonliacutetjuk a meacutert aacutetlageacuterteacutekkelrelac3JNC kijelez Ha a taacuteblaacutezat eacuterteacuteke nagyobb vagy egyenlő az aacutetlageacuterteacutekneacutel akkor eleacutertuumlnk a kiiacuterandoacute hőmeacuterseacuteklethezINC DPTR Kuumlloumlnben a koumlvetkező sor joumln a taacuteblaacutezatbanINC DPTR de a koumlvetkező eacuterteacutekhez 6-szor meg kellINC DPTR noumlvelnuumlnk az adatmutatoacutet hiszen a 200INC DPTR stiacutelusuacute adat 4 baacutejt a szoumlvegzaacuteroacute 0 pedigINC DPTR az oumltoumldik Iacutegy a hatodik lesz a koumlvetkezőINC DPTR sor szaacutemadata a koumlvetkező vizsgaacutelathozJMP keres Folytatjuk a look-up table-ben valoacute kereseacutestkijelezINC DPTR Ha joacute sorban voltunk csak 1-gyel kellCALL SENDSTRING noumlvelni az adatmutatoacuten eacutes mehet is a hőmeacuterseacuteklet-eacuterteacutek a PC-nekMOV DPTRfok A kuumlldeni kiacutevaacutent szoumlvegreacutesz veacutegeacutenekCALL SENDSTRING elkuumlldeacutese karakterlaacutenckeacutentidohuzas MOV A100 1 maacutesodpercig vaacuterakozunk hogy neCALL DELAY oumlmoumlljoumln a PC-nek tuacutel gyorsan a meacutert eacuterteacutekek sorozataJMP next Ugrunk vissza a koumlvetkező meacutereacutesi blokkhozalacsonyMOV DPTRhideg A 20 C alatti hőmeacuterseacutekletre vonatkozoacuteCALL SENDSTRING uumlzenet elkuumlldeacutese a PC-nekJMP idohuzasmagasMOV DPTRmeleg A 30 C foumlloumltti hőmeacuterseacutekletre vonatkozoacuteCALL SENDSTRING uumlzenet elkuumlldeacutese a PC-nekJMP idohuzas Az uumlzenetek eacutes a look-up table fok DB C10130hideg DB Tlt198 C10130meleg DB Tgt30 C10130lookupDB 018h2000DB 01Bh2020DB 01Eh2040DB 020h2060DB 023h2080DB DB 092h2920DB 094h2940DB 097h2960DB 099h2980DB 09Ch3000$INCLUDE(UARTIOASM)

Vegyuumlk eacuteszre hogy a tuacutel alacsony ill tuacutel magas hőmeacuterseacutekletek megaacutellapiacutetaacutesaacutenaacutel hagytunk egy kis reacutest a look-up table első eacutes utolsoacute eacuterteacutekeacutehez keacutepest Ennek abban van szerepe hogy mindig biztosan sikeres legyen a look-up table-ben valoacute kereseacutes ill minden eacuterteacutek szerephez is tudjon jutni Ezek a kis reacutesek egyeacutebkeacutent kb 02 degC-t jelentenek a look-up table-ben szereplő eacuterteacutekek leacutepeacuteskoumlze alapjaacuten A koacutedban a reacuteseket jelentő eacuterteacutekeket saacutergaacuteval kiemeltuumlk

A koacuted tartalmaz egy korr nevű korrekcioacutes konstanst (zoumllddel kiemelve) eacutes neacutegy erre vonatkozoacute sort a bitleacutepteteacutes művelete utaacuten (sziacutenessel jeloumllve) Nos az optimaacutelisnak meghataacuterozott ellenaacutellaacutes 2 385 Ω az aacuteramkoumlri panelra viszont csak 2 374 Ω-ot tudtunk foumlltűzni azt is csak keacutet ellenaacutellaacutes kombinaacutecioacutejaacuteval Ez maacuter neacutemi elteacutereacutest eredmeacutenyez a szaacutemolt eacuterteacutekekhez keacutepest Sokkal nagyobb baj azonban az hogy uacutegy tűnik a szaacutemiacutetaacutesnaacutel felteacutetelezett 22 degC nem volt igaz sokkal inkaacutebb lehetett 23-24 degC a szaacutemiacutetoacutegeacutep asztalaacuten amikor megmeacutertuumlk a termisztor ellenaacutellaacutesaacutet Iacutegy amikor előszoumlr bdquoszoacutelalt megrdquo a hőmeacuterőnk kicsit toumlbbet mutatott mint egy bdquorendesrdquo hőmeacuterő amit ellenőrzeacutesi ceacutellal helyeztuumlnk keacutesőbb az asztalra Keacutenyszermegoldaacuteskeacutent vezettuumlk be a korr nevű korrekcioacutes konstanst viszont ezzel a kijelzett hőmeacuterseacuteklet-eacuterteacutekek szinkronizaacutelhatoacutevaacute vaacuteltak az asztalra

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

helyezett bdquorendesrdquo hőmeacuterő eacuterteacutekeivel Tanulsaacuteg legkoumlzelebb előszoumlr a gyakorlatban hozzaacutefeacuterhető ellenaacutellaacutest hataacuterozzuk meg eacutes annak eacuterteacutekeacutevel szaacutemoljunk illetve meacutereacutesek eacutes ne felteacutetelezeacutesek alapjaacuten kalibraacuteljuk a termisztorunkat eacutes akkor nem a veacutegeacuten kell korrigaacutelnunk A tankoumlnyvben meacutegis szaacutendeacutekosan hagytuk benne ezt a kis malőrt hiszen ilyen baacuterkivel előfordulhat akaacuter ceacuteges munka soraacuten is eacutes ilyenkor bizony azt kell neacuteznuumlnk hogy hogyan lehet korrigaacutelni az amuacutegy joacutel megalkotott bdquorendszertrdquo (Gondoljunk csak arra hogy mi toumlrteacutent akkor amikor a Hubble űrteleszkoacutep optikai elemeit tervezteacutek eacutes hogy hogyan hoztaacutek azt helyre)

3 Hőmeacuterseacuteklet-szabaacutelyozaacutesAz előző alfejezetben peacuteldaacutet laacutethattunk arra hogy hogyan meacuterhetuumlnk hőmeacuterseacutekletet a mikrovezeacuterlővel ha termisztort vaacutelasztunk szenzornak Most tűzzuumlnk ki olyan feladatot amely sokkal egyszerűbben megoldhatoacute eacutes tulajdonkeacuteppen sokkal laacutetvaacutenyosabb is lesz (Ennek fejeacuteben persze itt preciacutezkedeacutesről keveacutesbeacute beszeacutelhetuumlnk)

35 feladat

Keacutesziacutetsuumlnk hűtőventilaacutetoros hőmeacuterseacutekletszabaacutelyozoacutet a koumlvetkező moacutedon ha egy adott teacuterreacutesz hőmeacuterseacuteklete (termisztorral meacuterjuumlk) eleacuteri vagy meghaladja a 33 degC-ot akkor ezt a teacuterreacuteszt kezdje el hűteni a hűtőventilaacutetor Ha a hőmeacuterseacuteklet 28 degC alaacute csoumlkken akkor kapcsoljon ki a ventilaacutetor de ne azonnal hanem paacuter maacutesodperc keacuteslelteteacutessel A hőmeacuterseacuteklet 28 degC alatti mivoltaacutet egy zoumlld LED 33 degC feletti mivoltaacutet piros LED a koumlztes tartomaacutenyt narancssaacuterga LED jelezze [Code48]

A feladat szoumlvegeacuteből azonnal koumlvetkezik hogy a szabaacutelyozaacutes szempontjaacuteboacutel itt is hisztereacutezises keacutetaacutellapotuacute megoldaacutest kell megvaloacutesiacutetanunk Ez maacuter nem jelent kihiacutevaacutest hiszen az alkonykapcsoloacutenaacutel sikeresen kezeltuumlk ezt a probleacutemaacutet (laacutesd [32 feladat] [Hisztereacutezis] alfejezet Code45) Ami most eacuterdekesebb lesz az az a teacuteny hogy egy ventilaacutetort illesztuumlnk az aacuteramkoumlruumlnkbe eacutes azt iraacutenyiacutetjuk a termisztorra Ez fogja jelenteni a feladatban előiacutert bdquoteacuterreacuteszrdquo hőmeacuterseacutekleteacutenek befolyaacutesolaacutesaacutet

Ventilaacutetornak baacutetran vaacutelaszthatunk egy leselejtezett asztali PC taacutepegyseacutegeacuteből kioperaacutelt peacuteldaacutenyt ([Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor] aacutebra) Az ilyen ventilaacutetorok aacuteltalaacuteban 12 V taacutepfeszuumlltseacuteget igeacutenyelnek de a toumlbbseacuteguumlk 5 V taacutepfeszuumlltseacuteggel is szeacutepen muzsikaacutel A szerző kezeacutebe keruumllt ventilaacutetoron a koumlvetkező adatok vannak foumlltuumlntetve bdquoDC12V ndash 012Ardquo Nyilvaacutenvaloacutean 012 A 120 mA-t jelent Tűzzuumlk ki a feladatban előiacutertak melleacute most meacuteg azt a ceacutelt is hogy a ventilaacutetort maacuter kuumlloumln taacutepegyseacuteggel hajtsuk meg hogy lehetőleg ne terheljuumlk agyon a szaacutemiacutetoacutegeacutepuumlnk USB portjaacutet Az internetes forraacutesok zoumlme 500 mA terhelhetőseacuteget ad meg egyetlen USB portra Ebbe meacuteg belefeacuterne a mikrovezeacuterlő a haacuterom LED eacutes a ventilaacutetor aacuteramfelveacutetele is de meacutegis hasznaacuteljunk kuumllső taacutepegyseacuteget Veacuteguumll is eljoumltt az ideje ennek ishellip A tapasztalat amuacutegy is azt mutatja hogy ha a mikrovezeacuterlőt ugyanaz az USB port laacutetja el taacutepfeszuumlltseacuteggel mint amelyik a kuumllső aacuteramkoumlrt akkor a kuumllső aacuteramkoumlrnek maacuter 150-200 mA-es aacuteramfelveacuteteleacuteneacutel a mikrovezeacuterlő egyszerűen elaacutejul vagy egyeacuteb anomaacutelis műkoumldeacutesbe kezd Iacutegy LED-ek villogtataacutesaacuten eacutes egy-keacutet fotokapun tuacutel iraacuteny a kuumllső taacutepellaacutetaacutes

229 aacutebra - Asztali PC taacutepegyseacutegeacuteből kiszerelt ventilaacutetor

Baacuter a ventilaacutetor 12 V-ot igeacutenyelne mi most az emliacutetettek alapjaacuten kuumllső taacutepegyseacutegkeacutent meacutegis +5 V-ot szolgaacuteltatoacute kis egyseacuteget fogunk felhasznaacutelni Hasznaacutelhatnaacutenk teacutenylegesen +12 V-ot adoacute taacutepot is de előkotorhatnaacutenk fioacutekjaink meacutelyeacuteről a reacutegi mobiltelefonjaink mind a mai napig műkoumldő toumlltőtaacutepegyseacutegeit is De megproacutebaacuteljuk a legolcsoacutebban meguacuteszni Olyan megoldaacutessal amit maacutes logikai aacuteramkoumlroumlkhoumlz is minden tovaacutebbi neacutelkuumll

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

hasznaacutelhatunkhellip

Kereskedelmi forgalomban kaphatoacute olyan haacuteloacutezati feszuumlltseacuteggel műkoumldő adapter amely USB csatlakozoacuteval van felszerelve (laacutesd [USB csatlakozoacutes haacuteloacutezati adapter] aacutebra) Hasznaacuteljunk most ilyet Ezt olyan kaacutebellal kapcsolhatjuk a proacutebapanelra amelyet mi magunk fabrikaacutelunk Szerezzuumlnk egy USB-s nyomtatoacutekaacutebelt vagy vaacutegjunk le egyet egy bdquodoumlgloumltt egeacuterrőlrdquo vagy egyeacuteb toumlnkrement eszkoumlzről A kaacutebel szuumlkseacutegtelenneacute vaacutelt veacutegeacutet hasiacutetsuk foumll eacutes a piros (+5 V) eacutes fekete (GND) belső eacuterre (vouml [USB-kaacutebel belső vezeteacutekei] aacutebra) forrasszunk egy-egy tuumlskeacutet eacutes maacuter keacuteszen is vagyunk A pozitiacutev polaritaacutesuacute tuumlske oldalaacutet eacuterdemes megjeloumllnuumlnk nehogy bajt okozzunk a taacutep eacutes a foumlld figyelmetlenseacutegből eredő felcsereacuteleacuteseacutevel (A nyomtatoacutekaacutebel preparaacutelaacutesaacutenaacutel azeacutert legyuumlnk oacutevatosak Taacutevol-keleti gyaacutertmaacutenyoknaacutel ugyanis maacuter laacutettak olyat hogy szegeacuteny agyondolgoztatott meloacutesok felcsereacutelteacutek a vezeteacutekeket eacutes pont a fekete szigeteleacutesű volt a +5 V-os Ezeacutert multimeacuteterrel mindig taacutejeacutekozoacutedjunk)

2210 aacutebra - USB csatlakozoacutes haacuteloacutezati adapter

A kuumllső taacutepellaacutetaacutessal tehaacutet megvolnaacutenk Soha ne felejtsuumlk azonban minden esetben oumlsszefoumlldelni a kuumllső taacutepot eacutes a mikrovezeacuterlőt ([Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera] aacutebra) E neacutelkuumll a leacutepeacutes neacutelkuumll ugyanis aacuteltalaacuteban nem fognak műkoumldni az alkalmazaacutesaink

2211 aacutebra - Figyelmezteteacutes koumlzoumls foumlld kialakiacutetaacutesaacutera

A ventilaacutetort tartalmazoacute aacuteramkoumlr a [A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr] aacutebraacuten laacutethatoacute A taacutepfeszuumlltseacuteg sziacutenes jeloumlleacutese a kuumllső taacutepegyseacutegre utal Az aacuteramkoumlr műkoumldeacutese roppant egyszerű A [Tranzisztorok mint kapcsoloacutek] alfejezetben leiacutertak eacutertelmeacuteben a P0-s port laacutebaival felhuacutezoacute-ellenaacutellaacutes neacutelkuumll is vezeacuterelhetuumlnk pnp-tranzisztorokat Ha meggyőződtuumlnk arroacutel hogy a ventilaacutetor aacuteramfelveacutetele 100 mA-neacutel kevesebb akkor baacutetran hasznaacutelhatjuk a BC212-es univerzaacutelis jelerősiacutető tranzisztort (Esetuumlnkben ez a helyzet aacutell fenn) Nagyobb aacuteramfelveacutetelneacutel teljesiacutetmeacutenytranzisztoros Darlington-kapcsolaacutes vagy egyeacuteb erősiacutetőfokozat ajaacutenlhatoacute

2212 aacutebra - A ventilaacutetor be- eacutes kikapcsolaacutesaacutet lehetőveacute tevő aacuteramkoumlr

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

A P00-s laacuteb foumlldre huacutezaacutesaacuteval nyitjuk a tranzisztort amely ilyenkor aacuteramot ad a ventilaacutetor motorjaacutenak Tanuljuk meg hogy minden esetben amikor tekercset tartalmazoacute eszkoumlzt vezeacuterluumlnk feacutelvezetőkkel veacutedődioacutedaacutet vagy veacutedődioacutedaacutekat kell alkalmaznunk ([Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera] aacutebra) Ennek oka az hogy amikor a tekercs elenged akkor az egy az addigi aacuteramiraacutennyal ellenteacutetes iraacutenyuacute feszuumlltseacutegimpulzust generaacutel az aacuteramkoumlrben (Ezt egyeacutebkeacutent Laplace-transzformaacutecioacuteval nagy eacutelvezet kiszaacutemolni) A veacutedődioacuteda szerepe az hogy ezt az impulzust levezesse Ennek hiaacutenyaacuteban szaacutemiacutetanunk kell a zaacuteroacuteiraacutenyuacute feacutelvezető-alkatreacutesz vagy -alkatreacuteszek aacutetuumlteacuteseacutere Veacutedődioacutedaacutenak gyengeaacuteramuacute haacuteloacutezatokban gyakorlatilag baacutermilyen dioacutedaacutet vaacutelaszthatunk Ha azonban igen gyors műkoumldeacutesre van szuumlkseacuteg mert peacuteldaacuteul nagy frekvenciaacuteval műkoumldtetuumlnk leacuteptetőmotorokat akkor Schottky-dioacutedaacutek hasznaacutelata javasolt

2213 aacutebra - Figyelmezteteacutes veacutedődioacuteda hasznaacutelataacutera

Az asztali PC taacutepegyseacutegeacuteből kiműtoumltt ventilaacutetor egyeacutebkeacutent nem igeacutenyel veacutedődioacutedaacutet mert elektromosan kommutaacutelt megoldaacutest tartalmaz De ha ilyen reacuteszleteket nem tudunk az egyseacutegről akkor a dioacutedaacutet soha ne hagyjuk el Aacutertani semmikeacuteppen sem aacutertunk vele az aacuteramkoumlrnek hiaacutenya viszont nagy kaacutert okozhat

A hőmeacuterseacuteklet meacutereacuteseacutere ismeacutet a KTY81-120-as termisztort hasznaacuteljuk Pont uacutegy ahogy az az [A termisztor soros kapcsolaacutesban] aacutebraacuten laacutethatoacute Az aacuteramkoumlri panelunkon ugyanazt a 2 374 Ω-os ellenaacutellaacutes-kombinaacutecioacutet hasznaacuteljuk mint az előző alfejezetben A mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutet (0 csatorna) ismeacutet a termisztorra kapcsoljuk Digitaacutelis multimeacuteterrel a haacuteloacutezati USB-s adapter kimeneti egyenfeszuumlltseacutegeacutet 505 V-nak meacutertuumlk A jelszintek szaacutemiacutetaacutesaacutera keacutesziacutetett KTY81-120xls faacutejlban is ezt aacutelliacutetottuk be a feszuumlltseacutegosztoacute parameacutetereineacutel Ezekkel az adatokkal a [A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek]ban bemutatott eredmeacutenyeket kapjuk

222 taacuteblaacutezat - A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek

T degC UR(T) V D dec D hex D felső 8 bitje hex

28 1522 2 493 9BD 9B

33 1563 2 560 A00 A0

Az AD-aacutetalakiacutetaacutes most is uacutegy fog toumlrteacutenni mint az alkonykapcsoloacutenaacutel ([Egyszerű AD-aacutetalakiacutetaacutes] alfejezet [31 feladat] Code43) azaz a 12-bites eacuterteacuteknek csak a felső 8 bitjeacutet hasznaacuteljuk foumll mert ezekben is adoacutedik akkora

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

kuumlloumlnbseacuteg ami azonosiacutethatoacutevaacute teszi a hőmeacuterseacuteklet-eacuterteacutekekhez tartozoacute feszuumlltseacutegszinteket A koacutedban a koraacutebban maacuter ismertetett megoldaacutes miatt az AD-aacutetalakiacutetoacute konfiguraacutecioacutejaacutet itt maacuter nem magyaraacutezzuk A koacutedkoumlnyvtaacuterban viszont teljes reacuteszletesseacuteggel szerepelnek a kommentek

A hőmeacuterseacuteklet-tartomaacutenyok jeloumlleacuteseacutere 3 LED-et hasznaacutelunk ezeket a keacutenyelmesebb helykihasznaacutelaacutes eacuterdekeacuteben a P2-es port 1 3 eacutes 5 laacutebaacutera koumltjuumlk termeacuteszetesen a megfelelő előteacutet-ellenaacutellaacutessal Ehhez a leacutepeacuteshez maacuter nem eacutereztuumlk szuumlkseacutegesnek kuumlloumln aacuteramkoumlri rajz keacutesziacuteteacuteseacutet hiszen a tankoumlnyvben eddig leiacutertak alapjaacuten a LED-ek bekoumlteacuteseacutenek maacuter magaacutetoacutel eacutertetődőnek kell lennie

A hardveres uumlgyletek taacutergyalaacutesa utaacuten joumljjenek most a szoftveres finomsaacutegok A LED-es kijelzeacutes kuumlloumln kezelhető ez haacuteromaacutellapotuacute rendszert jelent de fuumlggetlen lesz a ventilaacutetor kapcsolgataacutesaacutetoacutel A ventilaacutetor bekapcsolt aacutellapotaacutehoz kuumlloumln jelzőbitet rendeluumlnk (forog) hogy teljesiacuteteni tudjuk a keacutesleltetett kikapcsolaacutest a visszahűteacutes utaacuten Az alsoacute hőmeacuterseacutekletszinthez a [A hőmeacuterseacuteklet- szabaacutelyozoacutehoz meghataacuterozott parameacuteterek]ban a 9B hexadecimaacutelis eacuterteacutek tartozik A programban majd enneacutel 1-gyel nagyobb eacuterteacuteket adunk meg hataacuternak mert a kisebb relaacutecioacutet hasznaacuteljuk az oumlsszehasonliacutetaacuteskor (Veacuteletlenuumll uacutegy joumltt ki a leacutepeacutes hogy 1 degC kuumlloumlnbseacuteg igen joacute koumlzeliacuteteacutessel egyseacutegnyi elteacutereacutest jelent a 8 biten aacutebraacutezolt eacuterteacutekek koumlzoumltt) A hőmeacuterseacuteklet-szabaacutelyozaacuteshoz melleacutekeluumlnk folyamataacutebraacutet de abban csak a hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacuteseacutet taglaljuk A LED-ek kapcsolgataacutesaacutet sajaacutetos moacutedon de egyeacutertelműen jeloumlljuumlk laacutesd [A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese] aacutebra

2214 aacutebra - A hisztereacutezis eacutes a ventilaacutetor aacutellapotaacutenak kezeleacutese

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

Az alkalmazaacutes laacutetvaacutenyossaacutega elleneacutere a koacuted roumlvidnek nevezhető A joacute oumlreg DELAY szubrutinunkat most sem tuumlntetjuumlk foumll

Code48asmORG 0060hvoltage DATA 030h A feszuumlltseacutegeacuterteacutek vaacuteltozoacutejagreen BIT P25 A zoumlld LED bitjeorange BIT P23 A narancssaacuterga LED bitjered BIT P21 A piros LED bitjefan BIT P00 A ventilaacutetor kapcsoloacutebitje (0=ON 1=OFF)hideg EQU 09Ch Az alsoacute hőmeacuterseacuteklet-hataacuternaacutel (28 C) 1-gyel nagyobb eacuterteacutek (Majd a kisebb (lt) relaacutecioacutera jaacutetszunkmeleg EQU 0A0h A felső hőmeacuterseacuteklet-hataacuter (33 C) eacuterteacutekeforog BIT 00h A ventilaacutetor bekapcsolt aacutellapotaacutet őrző jelzőbit

Created by XMLmind XSL-FO Converter

Hőmeacuterseacuteklet-meacutereacutes

MAINMOV ADCCON110001100b Konfiguraacuteljuk az AD-aacutetalakiacutetoacutetCLR forog A ventilaacutetor nem forognextSETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnkJB SCONV$MOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageAMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felsőSWAP A 4-etADD Avoltage A-ban maacuter a helyes feszuumlltseacutegeacuterteacutek lesz az oumlsszeadaacutes utaacutenCJNE Ahidegeval1 Kisebb a hőmeacuterseacuteklet mint az alsoacute hataacutereval1JC cold Ha igen ugrunk a hideg helyzet kezeleacuteseacutehezCJNE Amelegeval2 Nagyobbegyenlő a hőmeacuterseacuteklet mint a felső hataacutereval2JNC warm Ha igen ugrunk a meleg helyzetet kezelniSETB green Ide a koumlztes esetben csorog a programSETB red Zoumlld eacutes piros LED-ek OFFCLR orange Narancs LED ONMOV A50 05 s vaacuterakozaacutesCALL DELAYJMP next Ugraacutes vissza meacuterniwarm A meleg helyzet kezeleacuteseSETB orange Narancs eacutes zoumlld LED OFFSETB greenCLR red Piros LED ONJNB forogbekapcs Ha meacuteg nem forog a ventilaacutetor akkor bekapcsoljukMOV A50 Kuumlloumlnben 05 sCALL DELAY vaacuterakozaacutes eacutesJMP next iraacuteny vissza meacuternibekapcsCLR fan Bekapcsoljuk a ventilaacutetortSETB forog Beaacutelliacutetjuk a bekapcsolt aacutellapot jelzőbitjeacutetMOV A200 2 s vaacuterakozaacutesCALL DELAYJMP next Iraacuteny vissza meacuternicold A hideg helyzet kezeleacuteseSETB orange Narancs eacutesSETB red piros LED-ek OFFCLR green Zoumlld LED ONJB forogfujmeg Ha be van kapcsolva a ventilaacutetor akkor nem kapcsoljuk ki azonnal Kis vaacuterakozaacutes joumlnMOV A50 Kuumlloumlnben 05 sCALL DELAY vaacuterakozaacutes majdJMP next Iraacuteny vissza meacuternifujmegMOV A200 4 x 2 s vaacuterakozaacutes majdCALL DELAYCALL DELAYCALL DELAYCALL DELAYSETB fan a ventilaacutetor kikapcsolaacutesaCLR forog A kikapcsolt aacutellapot beaacutelliacutetaacutesaJMP next Iraacuteny vissza meacuterni

Az alkalmazaacutes gyakorlati kiproacutebaacutelaacutesa soraacuten azt tapasztaltuk hogy amikor a ventilaacutetor lehűti a termisztort eacutes a hőmeacuterseacuteklet uacutejra eleacuteri az alsoacute hataacutert akkor a ventilaacutetor tovaacutebbi 8 maacutesodperces uumlzeme utaacuten meacuteg előfordul hogy a hőmeacuterseacuteklet uacutejra foumllkuacuteszik az aacutetmeneti tartomaacutenyba de utaacutena maacuter szeacutepen stabilizaacuteloacutedik az alacsony hőmeacuterseacuteklet Ezt a zoumlld eacutes narancssaacuterga LED-ek ki-be kapcsoloacutedaacutesa mutatja Olyan is előfordult hogy a narancssaacuterga LED meacuteg keacutetszer-haacuteromszor is foumllvillant egyre roumlvidebb ideig mire a zoumlld LED feacutenye aacutellandoacutesult

Created by XMLmind XSL-FO Converter

23 fejezet - MegvilaacutegiacutetaacutesszabaacutelyozoacuteA [Alkonykapcsoloacute] fejezetben alkonykapcsoloacutet keacutesziacutetettuumlnk Maacuter az is szabaacutelyozaacutes volt raacuteadaacutesul hisztereacutezissel de meacuteg nem bdquovolt az igazirdquo Ezeket a szavakat azeacutert hasznaacuteljuk mert keacutet jelszintneacutel billent a rendszer ide vagy oda aztaacuten ezzel el is inteacuteztuumlk a szabaacutelyozaacutest Igaz pontosan ez volt a feladat ([32 feladat]) iacutegy szoacute nem eacuterheti a haacutez elejeacutet Amit viszont most fogunk alkotni az maacuter sokkal kifinomultabb lesz Folyamatos feszuumlltseacutegkoumlvető szabaacutelyozaacutest fogunk megvaloacutesiacutetani Elvileg mindent tudunk is hozzaacute hardveres uacutejdonsaacuteg nem lesz Az algoritmus lesz az eddigiektől elteacuterő

36 feladat

Keacutesziacutetsuumlnk folytonos uumlzemmoacuteduacute megvilaacutegiacutetaacutesszabaacutelyozoacutet A feacutenyforraacutes 3 feheacuter LED-ből aacutelljon melyek egy feacutenyeacuterzeacutekelőre iraacutenyulnak A 3 LED-del tartsuk aacutellandoacute szinten a megvilaacutegiacutetaacutest a szenzor poziacutecioacutejaacuteban (a fizikailag lehetseacuteges hataacuterokon beluumll) [Code49]

A szenzor aacuteramkoumlre pontosan ugyanaz lesz mint amit a [Feszuumlltseacutegmeacutereacutes az alkonykapcsoloacute emitter-ellenaacutellaacutesaacuten] aacutebraacuten bemutattunk azzal a kuumlloumlnbseacuteggel hogy most nem lesz szuumlkseacuteguumlnk az emitter-ellenaacutellaacutessal paacuterhuzamosan kapcsolt kondenzaacutetorra Ennek oka eacuteppen a gyors feszuumlltseacutegkoumlveteacutesben keresendő a kondenzaacutetor keacuteslelteteacutest okozna jel stabilizaacuteloacutedaacutesaacuteban ami feacutelrevinneacute a szabaacutelyozaacutesunkat A haacuterom LED-hez kuumlloumln aacuteramkoumlri rajz megadaacutesaacutet most is foumlloumlslegesnek tartjuk ezt az olvasoacute maacuter maga is foumll tudja eacutepiacuteteni az eddigiek utaacuten A feszuumlltseacuteg meacutereacutese az emitter-ellenaacutellaacuteson pontosan ugyanuacutegy toumlrteacutenik mint Code44-ben eacutes Code45-ben Ami most izgalmasabb lesz az az algoritmus Az bdquoizgalmasrdquo szoacute persze relatiacutev annyit mindenesetre elmondhatunk hogy ebben a tankoumlnyvben ilyet meacuteg nem csinaacuteltunk Műkoumldjoumln ugyanis az alkalmazaacutes uacutegy hogy ha a szenzor besugaacuterzaacutesa adott szint alaacute csoumlkken akkor fokozzuk a LED-ek feacutenyerősseacutegeacutet Mindaddig amiacuteg el nem eacuterjuumlk a kiacutevaacutent besugaacuterzaacutesi szintet Ha a koumlrnyezeti feacutenyviszonyok miatt a szenzor besugaacuterzaacutesa emelkedik akkor a LED-ek feacutenyerősseacutegeacutet csoumlkkentjuumlk Mindaddig amiacuteg el nem eacuterjuumlk a kiacutevaacutent szintet Egy nagyon keskeny hisztereacutezisnek helyet hagyunk a szoftverben haacutetha a gyakorlati tesztek soraacuten szuumlkseacutegesseacute vaacutelik A noumlveleacutes eacutes a csoumlkkenteacutes leacutepeacutesről leacutepeacutesre toumlrteacutenik eacutes ez lesz a fő kuumlloumlnbseacuteg a mostani megoldaacutes eacutes az egyszerű alkonykapcsoloacute koumlzoumltt A LED-ek feacutenyerősseacutegeacutenek vaacuteltoztathatoacutesaacutegaacutet PWM-jellel oldjuk meg

A gyakorlati megvaloacutesiacutetaacutes soraacuten a LED-ek a proacutebapanelon kb 6 cm-re helyezkedtek el a fototranzisztortoacutel (tokozaacutes homlokpontjaacutetoacutel tokozaacutes homlokpontjaacuteig laacutesd [A LED-ek elhelyezkedeacutese a fototranzisztorral szemben] aacutebra) Mindhaacuterom LED-et a fototranzisztorra iraacutenyiacutetottuk A LED-ek aacutellandoacute bekapcsolt aacutellapotaacuteban a Code43 programmal meacutertuumlk a fototranzisztor emitter-ellenaacutellaacutesaacuten a feszuumlltseacuteget (Code43-ba eacuteppen csak a LED-ek bekapcsolaacutesaacutenak soraacutet szuacutertuk be) Azt tapasztaltuk hogy ha a LED-ek ellenaacutellaacutesaacutet 1 kΩ-nak vaacutelasztjuk akkor a meacutert feszuumlltseacuteg 24 V Ezzel az eacuterteacutekkel eleacutegedettek lehettuumlnk mert nem eacuteri el a maximaacutelis eacuterteacuteket de koumlzel aacutell ahhoz

231 aacutebra - A LED-ek elhelyezkedeacutese a fototranzisztorral szemben

A PWM-jel beaacutelliacutetaacutesainaacutel nagyobb frekvenciaacutet vaacutelasztunk mint a [PWM-jelek] fejezetben bemutatott megoldaacutesoknaacutel Vessuumlnk uacutejra egy pillantaacutest a [A PWMCON SFR parameacuteterei]ra eacutes a [A PWM-generaacutetor 1 uumlzemmoacutedja] aacutebraacutera A

MOV PWMCON00010011b

beaacutelliacutetaacutes a sziacutenes teacutetelek sorrendjeacuteben azt jelenti hogy (eacuterdektelen bit) 1 PWM-uumlzemmoacuted nincs tovaacutebbi frekvenciaosztaacutes a mag oacuterajeleacutet hasznaacuteljuk Legyen a PWM1HPWM1L regiszterpaacuter eacuterteacuteke 0800h Ez decimaacutelisan 2 048-at jelent A jel frekvenciaacuteja ezek szerint 16 777 216 Hz 2 048 = 8 192 Hz lesz eacutes ez is marad mert nem alkalmazunk tovaacutebbi frekvenciaosztoacutet A LED-ek feacutenyerősseacutegeacutet pedig nem maacutessal mint a PWM-jel kitoumllteacutesi eacuterteacutekeacutevel fogjuk szabaacutelyozni (Ne felejtsuumlk hogy alacsony jelszint eseteacuten vilaacutegiacutetanak a LED-

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

ek) A kitoumllteacutesi teacutenyezőhoumlz 129 fokozatot rendeluumlnk A PWM0HPWM0L regiszterpaacuter eacuterteacutekeacutet oly moacutedon fogjuk aacutelliacutetani hogy az a koumlvetkező eacuterteacutekeket vegye foumll 0000h 0010h 0020h hellip 07F0h 0800h Vegyuumlk eacuteszre hogy ezeknek a neacutegyjegyű hexadecimaacutelis szaacutemoknak csak a keacutet koumlzeacutepső szaacutemjegyeacutet eacuterinti a fokozatok aacutelliacutetaacutesa (zoumllddel kiemelve) iacutegy ez az elkuumlloumlniacutetett eacuterteacutek egy baacutejton taacuterolhatoacute sőt csak 0-toacutel 80h-ig azaz 128-ig terjed A kitoumllteacutesi teacutenyező ilyeteacuten beaacutelliacutetaacutesaacutet hasonloacutean fogjuk megoldani mint az AD-jel feacutelbaacutejtjainak kiemeleacuteseacutet eacutes azokboacutel uacutejabb baacutejt oumlsszeszereleacuteseacutet A [A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese] aacutebra erre mutat peacuteldaacutet konkreacutet eacuterteacutekkel (6Ah) ahol a kitoumllteacutesi teacutenyező vaacuteltozoacutejaacutet a funkcioacutejaacutenak megfelelően lumint-nak neveztuumlk el (Luminous Intensity magyarul feacutenyerősseacuteg)

232 aacutebra - A PWM-jel beaacutelliacutetaacutesaacutenak szemleacutelteteacutese

A kitoumllteacutesi teacutenyező beaacutelliacutetaacutesaacutet roumlgtoumln komplett szubrutinkeacutent (PWMVALUE) mutatjuk be az alaacutebbiakban

A PWM-jel kitoumllteacutesi teacutenyezőjeacutet beaacutelliacutetoacute szubrutin PWMVALUEMOV PWMCON0 A PWM-jel leaacutellMOV Alumint A-ba toumlltjuumlk lumint eacuterteacutekeacutetANL A11110000b Megtartjuk a felső feacutelbaacutejtot toumlroumlljuumlk az alsoacutetSWAP A Megcsereacuteljuumlk a keacutet feacutelbaacutejtotMOV PWM0HA A kapott eacuterteacuteket betesszuumlk a PWM0H regiszterbeMOV Alumint Ismeacutet A-ba toumlltjuumlk lumint eacuterteacutekeacutetANL A00001111b Megtartjuk az alsoacute feacutelbaacutejtot toumlroumlljuumlk a felsőtSWAP A Megcsereacuteljuumlk a keacutet feacutelbaacutejtotMOV PWM0LA A kapott eacuterteacuteket betesszuumlk a PWM0L regiszterbeMOV PWMCON00010011b Bekapcsoljuk a PWM-jeletRET

A PWM-jel kitoumllteacutesi teacutenyezőjeacutenek szubrutinkeacutent valoacute alkalmazaacutesa javiacutetja a főprogram aacutettekinthetőseacutegeacutet A koacuted e neacutelkuumll sem lenne bonyolult vagy zavaros de eacuteppen ideje a bdquostrukturaacutelt assemblyrdquo iraacutenyaacuteba mutatoacute programiacuteraacutes feleacute mozdulnunk

Ha maacuter ilyen nagy kedvet kaptunk a szubrutinokhoz iacuterjuk meg ilyen formaacuteban az AD-aacutetalakiacutetaacutesi reacuteszt is A koacutedreacuteszlet nagyon-nagyon hasonliacutet a [Egyszerű AD-aacutetalakiacutetaacutes] alfejezetben megadott a 12-bites eacuterteacutekből a felső 8 bitet levaacutelasztoacute reacuteszhez de a rend kedveacuteeacutert teljes terjedelmeacuteben koumlzoumlljuumlk magaacutet a szubrutint legfoumlljebb a kommenteket fogjuk roumlvidebbre Az AD-eacuterteacutek felső 8 bitje visszateacutereacuteskor az akkumulaacutetorban talaacutelhatoacute ez lesz a parameacuteteraacutetadaacutes a rutin eacutes főprogram koumlzoumltt

AD-aacutetalakiacutetaacutes eacutes a jeleacuterteacutek felső 8 bitjeacutenek betoumllteacutese az akkumulaacutetorba MEASURESETB SCONV Egyszeri AD-konverzioacutet keacuteruumlnkJB SCONV$ MOV AADCDATAH Kinyerjuumlk az aacutetalakiacutetott feszuumlltseacuteg binaacuterisANL A00001111b eacuterteacutekeacutenek felső baacutejtjaacuteboacutel a szuumlkseacutegesSWAP A biteketMOV voltageAMOV AADCDATAL Kinyerjuumlk az ADCDATAL regiszterből aANL A11110000b jeleacuterteacutek tovaacutebbi 8 bitje koumlzuumll a felső

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

SWAP A 4-etADD Avoltage A-ban most maacuter a kiacutevaacutent jeleacuterteacutek leszRET

A [36 feladat] megoldaacutesaacutet jelentő koacuted a keacutet szubrutinnal maacuter rendkiacutevuumll toumlmoumlrnek fog hatni Az eleacuterni kiacutevaacutent megvilaacutegiacutetaacutesi szint megadaacutesaacutehoz a koacutedban az EQU fordiacutetoacutei direktiacutevaacutet hasznaacuteljuk a keacutet eacuterteacutek pedig a level1 eacutes level2 neacutevre fog hallgatni Egymaacuteshoz keacutepesti elteacutereacutesuumlk jelenti a hisztereacutezist Ha kuumlloumlnbseacuteguumlk pontosan 1 akkor level1 eacuterteacuteke jelenti az eleacuterni kiacutevaacutent szintet A P27-es laacutebon megjelenő PWM-jelet a C bit segiacutetseacutegeacutevel maacutesoljuk aacutet a haacuterom vilaacutegiacutetaacutesra hasznaacutelt feheacuter LED-nek megfelelő portbitre (Ezeknek a biteknek a szaacutemozaacutesa most is a keacutenyelmesebb helykihasznaacutelaacutes eacuterdekeacuteben alakult uacutegy ahogy az az alaacutebbiakban laacutethatoacute)

Code49asmORG 0060h A teacutenyleges programkoacuted kezdetelumint DATA 030h A feacutenyerősseacuteg vaacuteltozoacutejavoltage DATA 031h A meacutert feszuumlltseacuteglevel1 EQU 80 Az eleacuterni kiacutevaacutent feszuumlltseacutegszint Ha enneacutel kisebbet meacuteruumlnk noumlveljuumlk a LED-ek feacutenyerősseacutegeacutetlevel2 EQU 81 Ha ezt a feszuumlltseacutegszintet eleacutertuumlk (vagy enneacutel nagyobbat) csoumlkkentjuumlk a LED-ek feacutenyerősseacutegeacutetMAINMOV ADCCON110001100b Az AD-aacutetalakiacutetoacute konfiguraacutelaacutesa Bekapcsolaacutes eacutes 4 oacuterajelciklus hagyaacutesa az aacutetalakiacutetaacutesra 0 csatornaMOV PWM1H008h A PWM-generaacutetor konfiguraacutelaacutesaMOV PWM1L000h Az alapfrekvencia meghataacuterozaacutesa 0800h = = 2048 azaz f = 167772162048 Hz = = 8192 HzMOV lumint64 Kezdeti PWM-eacuterteacutek (0-toacutel 128-ig mehet)CALL PWMVALUE A PWM-jelhez szuumlkseacuteges eacuterteacutekek beiacuteraacutesa a regiszterekbe SzubrutinsignalMOV CP27 A PWM-jel leemeleacutese a P27 bitrőlMOV P21C Ennek az eacuterteacuteknek a kirakaacutesa a haacuteromMOV P23C LED portbitjeacutereMOV P25CCALL MEASURE Feszuumlltseacutegmeacutereacutes AD-aacutetalakiacutetaacutessalCJNE Alevel1eval3 Ha a jelszint level1 alatt van akkoreval3JC lighten noumlveljuumlk a feacutenyerőtCJNE Alevel2eval4 Ha a jelszint level2 vagy annaacutel nagyobbeval4JNC darken csoumlkkentjuumlk a feacutenyerőtJMP signal Uacutejra meacuteruumlnkdarkenMOV Alumint Soumlteacutetiacutetuumlnk a LED-enCJNE A128eval1 Eleacutert maacuter a maximumot a kitoumllteacutesi teacutenyezőeval1JNC signal Ha igen visszaugrunkINC lumint Ha nem noumlveljuumlk a kitoumllteacutesi teacutenyezőt azaz csoumlkkentjuumlk a LED-ek feacutenyerősseacutegeacutetCALL PWMVALUE A PWM-jel beaacutelliacutetaacutesaacutenak rutinja koumlvetkezikJMP signal Ugraacutes vissza meacuternilightenMOV Alumint Vilaacutegosiacutetunk a LED-enCJNE A1eval2 Eleacuterte maacuter a minimumot a kitoumllteacutesi teacutenyezőeval2JC signal Ha igen (0lt1) akkor visszaugrunkDEC lumint Ha nem akkor csoumlkkentjuumlk a kitoumllteacutesi teacutenyezőt azaz noumlveljuumlk a LED-ek feacutenyerősseacutegeacutetCALL PWMVALUE A PWM-jel beaacutelliacutetaacutesaacutenak rutinja koumlvetkezikJMP signal Ugraacutes vissza meacuterni

Lehet hogy első laacutetaacutesra nem tűnik biztosnak az hogy a PWM-jel frekvenciaacutejaacutet tartani tudja a főprogram a bitek maacutesolgataacutesaacuteval eacutes a szubrutinok hiacutevogataacutesaacuteval de a gyakorlati proacuteba azonnal megadja a vaacutelaszt A program

Created by XMLmind XSL-FO Converter

Megvilaacutegiacutetaacutesszabaacutelyozoacute

meglehetősen gyorsan fut iacutegy semmifeacutele perioacutedusveszteacutes vagy elcsuacuteszaacutes nem fog bekoumlvetkezni A PWM-jel 8 192 Hz-es frekvenciaacuteja eltoumlrpuumll az ADuC 842-es default 2 097 152 Hz-es oacuterajele mellett iacutegy mindenre jut idő Leacutenyegesen hosszabb főprogram termeacuteszetesen maacuter okozhatna probleacutemaacutet a frekvencia tartaacutesaacuteban

Created by XMLmind XSL-FO Converter

24 fejezet - Leacuteptetőmotor vezeacuterleacuteseA leacuteptetőmotorok nagy aacuteltalaacutenossaacutegban olyan egyenaacuteramuacute villamos motorok melyek fő feladata nem a folyamatos forgaacutes hanem meghataacuterozott szoumlgelfordulaacutessal jaacuteroacute leacutepeacutesek veacutegrehajtaacutesa Haacuterom fő tiacutepusukat szokaacutes megkuumlloumlnboumlztetni vaacuteltozoacute reluktanciaacutejuacute (tipikusan 75deg 15deg leacutepeacuteskoumlzzel) aacutellandoacute maacutegnesű (tipikusan 18deg 75deg 15deg 30deg leacutepeacuteskoumlzzel) eacutes hibrid leacuteptetőmotorok (tipikusan 09deg eacutes 18deg leacutepeacuteskoumlzzel) A leacuteptetőmotorok feleacutepiacuteteacuteseacutenek taacutergyalaacutesa nem ennek a tankoumlnyvnek a feladat sokkal inkaacutebb azok vezeacuterleacutese lesz az A leacuteptetőmotorok tiacutepusainak feleacutepiacuteteacuteseacutenek uumlzemmoacutedjaacutenak eacutes vezeacuterleacuteseacutenek hatalmas szakirodalma van Roumlvid oumlsszefoglaloacutet talaacutelunk peacuteldaacuteul a [8] eacutes [9] szakkoumlnyvben eacutes szeacutep illusztraacutecioacutekkal ellaacutetott magyaraacutezatokat a [10] weboldalon

A leacuteptetőmotor forgoacutereacuteszeacutet az aacutelloacutereacuteszre telepiacutetett jellemzően egyenaacuteramuacute tekercsekkel veszik koumlrbe A tekercsek megfelelő sorrendű be- eacutes kikapcsolaacutesaacuteval eleacuterhető hogy a forgoacutereacutesz mindig meghataacuterozott meacuterteacutekű elfordulaacutest veacutegezzen Ezekben a motorokban kefeacutere nincsen szuumlkseacuteg Egy-egy meghataacuterozott poziacutecioacuteba valoacute beaacutellaacuteskor alakul ki a maacuter emliacutetett szakszoacuteval a minimaacutelis maacutegneses reluktancia Ilyenkor a legroumlvidebbek a maacutegneses erővonalak

A leacuteptetőmotorokat előszeretettel hasznaacuteljaacutek mechatronikai alkalmazaacutesokban robotkarokban olvasoacutefejek iacuteroacutefejek mozgataacutesaacutenaacutel nyomtatoacutekban rajzgeacutepekben aacuteramkoumlrmaroacute geacutepekben preciacutezioacutes esztergaacutekban stb Preciacutezioacutes alkalmazaacutesokhoz jellemzően hibrid leacuteptetőmotorokat hasznaacutelnak Ezekre igaz az az aacutelliacutetaacutes hogy ha a motor aacutelloacutereacuteszeacuten n faacutezis (tekercspaacuter vagy ketteacuteosztott tekercs) a forgoacutereacuteszeacuten pedig m fog talaacutelhatoacute akkor a teljes koumlrbefordulaacutes nm leacutepeacutesből aacutell

Ebben a tankoumlnyvben keacutet szaacutemunkra fontos elvi tiacutepus roumlvid leiacuteraacutesaacutet adjuk meg hasznaacutelni pedig bipolaacuteris leacuteptetőmotort fogunk

1 Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorokAz aacuteramiraacuteny szempontjaacuteboacutel a leacuteptetőmotorok keacutet nagy osztaacutelyaacutet keacutepezik az unipolaacuteris eacutes a bipolaacuteris leacuteptetőmotorok Az unipolaacuteris szoacute azt jelenti hogy baacutermely tekercsről legyen is szoacute abban uumlzem koumlzben az aacuteram iraacutenya nem vaacuteltozik meg Ki- eacutes bekapcsolaacutes termeacuteszetesen toumlrteacutenhet eacutes toumlrteacutenik is A [Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra unipolaacuteris leacuteptetőmotor veacutegtelenuumll leegyszerűsiacutetett szemleacuteleteacutet mutatja A forgoacutereacuteszt jelkeacutepező nyilat itt aacutellandoacute maacutegneskeacutent kell eacutertelmeznuumlnk Az egyes vezeacuterlőjelek (1a 1b 2a 2b) alacsony feszuumlltseacutegszintre (foumlldre) toumlrteacutenő aacutelliacutetaacutesaacuteval mindig egyetlen tekercsben indul meg az aacuteram azaz egyetlen tekercs műkoumldik elektromaacutegneskeacutent A toumlbbi vezeacuterlőjel ekoumlzben magas feszuumlltseacutegszinten uumll Az aacutebraacuten a nyiacutellal jelkeacutepezett forgoacutereacutesz egyszeri koumlrbefordiacutetaacutesaacutehoz a koumlvetkező jelsorozatra van szuumlkseacuteg (a nevezett jel mindig foumlldpotenciaacutelt jelent) 1a 2a 1b 2b A jelsorozat ismeacutetleacuteseacutenek kezdeteacuten a koumlrbefordulaacutes megtoumlrteacutent

241 aacutebra - Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

Ha mindig csak egyetlen tekercs műkoumldik elektromaacutegneskeacutent akkor egeacuteszleacutepeacuteses uumlzemmoacutedroacutel beszeacuteluumlnk Ha ellenben keacutet szomszeacutedos tekercs is elektromaacutegneskeacutent uumlzemel akkor a forgoacutereacutesz a kettő koumlzeacute fog beaacutellni eacutes feacutelleacutepeacuteses uumlzemmoacuted valoacutesul meg A szemleacuteltetőaacutebraacuten az ehhez szuumlkseacuteges jelsorozat 1a 1a-2a 2a 2a-1b 1b 1b-2b 2b 2b-1a A jelsorozat ismeacutetleacuteseacutenek első elemeacuteneacutel lesz a koumlrbefordulaacutes teljes

Unipolaacuteris leacuteptetőmotort olcsoacuten beszerezni (esetleg toumlnkrement heacutetkoumlznapi eszkoumlzből kioperaacutelni) meglehetősen neheacutezkes Eacuterdekes moacutedon ritkaacuten fordul elő otthoni eszkoumlzeinkben Bipolaacuteris leacuteptetőmotort azonban igen joacute eseacutellyel talaacutelunk reacutegebbi CD-iacuteroacutekban eacutes tintasugaras nyomtatoacutekban Mindkeacutet eszkoumlzben a fej mozgataacutesaacutehoz hasznaacuteljaacutek (Ezekben esetben preciacutezioacutes alkalmazaacutesroacutel van szoacute iacutegy gyaniacutethatoacutean hibrid leacuteptetőmotorokkal talaacutelkozunk)

A [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra bipolaacuteris leacuteptetőmotor leegyszerűsiacutetett modelljeacutet mutatja A forgoacutereacuteszt jelkeacutepező nyilat itt is aacutellandoacute maacutegneskeacutent kell eacutertelmeznuumlnk Enneacutel az elrendezeacutesneacutel nincsen szuumlkseacuteg kuumlloumln taacutepvezeteacutekre viszont az aacuteramiraacuteny műkoumldeacutes koumlzben vaacuteltozni fog a tekercsekben Iacutegy aacutellandoacute aacuteramerősseacuteget felteacutetelezve haacuterom eset aacutellhat elő egyik iraacutenyba folyik az aacuteram maacutesik iraacutenyba folyik az aacuteram nem folyik aacuteram A [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten bemutatott modell szerint a teljes koumlrbefordulaacuteshoz egeacuteszleacutepeacuteses uumlzemmoacutedban a koumlvetkező jelszintek szuumlkseacutegesek (a toumlbbi nulla szinten uumll) (ndash1a +1b) (ndash2a +2b) (+1a ndash1b) (+2a ndash2b) Feacutelleacutepeacuteses uumlzemmoacuted itt is megvaloacutesiacutethatoacute (ndash1a +1b)

(ndash1a +1b ndash2a +2b) (ndash2a +2b) (ndash2a +2b +1a ndash1b) (+1a ndash1b) (+1a ndash1b +2a ndash2b) (+2a ndash2b) (+2a ndash2b ndash1a +1b) Az előbbi keacutet jelsorozatnaacutel a negatiacutev előjel csak hangsuacutelyozza a polaritaacutest a negatiacutev jelet kiveacutetelesen azonosiacutethatjuk a foumlldpotenciaacutellal (GND) is Figyeljuumlk meg a [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten hogy keacutet-keacutet tekercs nem fuumlggetlen egymaacutestoacutel iacutegy ezekneacutel sokkal inkaacutebb indokolt a tekercspaacuter megnevezeacutes

242 aacutebra - Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve

Leacuteptetőmotorok parameacutetereineacutel talaacutelkozunk meacuteg a keacutetfaacutezisuacute haacuteromfaacutezisuacute stb szakszavakkal is Ez azt jelenti hogy haacuteny fuumlggetlen tekercset (vagy tekercspaacutert) tartalmaz a motor Ennek eacutertelmeacuteben a [Unipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten laacutethatoacute seacutema neacutegyfaacutezisuacute (de unipolaacuteris) leacuteptetőmotort a [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebraacuten laacutethatoacute seacutema viszont csak keacutetfaacutezisuacute (de bipolaacuteris) leacuteptetőmotort szemleacuteltet

2 Bipolaacuteris leacuteptetőmotorok vezeacuterleacuteseA bipolaacuteris leacuteptetőmotorok tekercsein mindkeacutet iraacutenyban folyhat aacuteram Ennek biztosiacutetaacutesa nem magaacutetoacutel eacutertetődő de valakinek egyszer kipattant az agyaacuteboacutel az a megoldaacutes amit ma H-hiacutednak nevezuumlnk A [H-hiacuted] aacutebraacuten a H-hiacuted leacutenyegi vaacutezlata laacutethatoacute baacutermifeacutele ellenaacutellaacutesok neacutelkuumll A H-hiacuteddal egyetlen tekercsen tudjuk vaacuteltoztatni az aacuteram iraacutenyaacutet Ha az A jelszint alacsony eacutes a B magas akkor a bal felső eacutes a jobb alsoacute tranzisztor kinyit a maacutesik kettő lezaacuter Ekkor a tekercsen az aacutebra szerinti elrendezeacutesben jobbra folyik az aacuteram Amennyiben a keacutet jelszintet megcsereacuteljuumlk A-n eacutes B-n akkor az aacuteram a tekercsen balra folyik Azonos jelszintneacutel nem folyik aacuteram a tekercsen Nagyon fontos hogy veacutedődioacutedaacutek alkalmazaacutesaacutera itt is szuumlkseacuteg van Ezek hiaacutenyaacuteban a tekercs aacuteramaacutenak kikapcsolaacutesakor vagy eacuteppen iraacutenyaacutenak megvaacuteltoztataacutesakor a keletkező feszuumlltseacutegimpulzus aacutetuumltheti a tranzisztorokat

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

243 aacutebra - H-hiacuted

Annyi megjegyzeacutest meacuteg szeretneacutenk a H-hiacutedhoz hozzaacutefűzni hogy ha ilyen elvi kapcsolaacutes utaacuten kutakodunk a neten akkor igen gyakran azt a megoldaacutest talaacuteljuk amikor mind a neacutegy tranzisztor npn (vagy eacuteppen fordiacutetva pnp) tiacutepusuacute a tranzisztorok baacutezisai pedig nincsenek oumlsszekoumltve Aki azonban rakott maacuter oumlssze tranzisztorokboacutel H-hidat az garantaacuteltan belefutott abba a probleacutemaacuteba hogy neacutegy azonos tranzisztor eseteacuten elteacuterő baacutezisellenaacutellaacutesokat kell vaacutelasztanunk a bdquofelsőrdquo ill bdquoalsoacuterdquo tranzisztorokhoz eacutes meacuteg iacutegy sem tudjuk teljes aacuterammal hajtani a motort a koumlzbuumllső feszuumlltseacutegeseacutesek miatt Eacuterthetetlen de a keacutet npn eacutes keacutet pnp tranzisztort tartalmazoacute aacuteramkoumlri rajzok sokkal kisebb araacutenyban fordulnak elő Pedig enneacutel megszűnnek a neacutegy azonos tranzisztorboacutel eacutepiacutetett aacuteramkoumlrneacutel foumllmeruumllő probleacutemaacutek A duaacutelis tranzisztorpaacuterok baacutezisainak (termeacuteszetesen az ellenaacutellaacutes a gyakorlati kapcsolaacutesoknaacutel nem hagyhatoacute el) oumlsszekoumlteacutese akkor nyuacutejt keacutenyelmes műkoumldteteacutest ha ugyanakkora a motor taacutepfeszuumlltseacutege mint a vezeacuterlőjelekeacute A [H-hiacuted] aacutebraacuten ez azt jelenti hogy az A eacutes B vezeacuterlőjelek is +U vagy GND szintet vehetnek foumll

H-hidat oumlsszerakni olyasmi mint kaacutertyavaacuterat eacutepiacuteteni Előszoumlr szoacuterakoztatoacute de valoacutesziacutenűleg hamar leszokunk roacutela Ez iacutegy is van joacutel hiszen bipolaacuteris leacuteptetőmotorok vezeacuterleacuteseacutere szaacutemos ceacutel-IC kaphatoacute ilyen peacuteldaacuteul a tankoumlnyvben foumllhasznaacutelt L293D Ebben eleve benne vannak a veacutedődioacutedaacutek iacutegy nagyon keveacutes alkatreacutesszel tudjuk vezeacuterelni a leacuteptetőmotorunkat Keacutet tekercshez raacuteadaacutesul keacutet komplett H-hiacuted szuumlkseacuteges eacutes a

ceacutel-IC-k jellemzően eacuteppen ennyit tartalmaznak Nem veacuteletlenuumll

A fentebb leiacutertak utaacuten eleacuterkeztuumlnk ahhoz a ponthoz hogy szerezzuumlnk magunknak leacuteptetőmotort Ha főkeacutent hobbiceacutelokra eacutes gyakorlaacutesra gyakorlatozaacutesra gondolunk akkor a szerző tapasztalata alapjaacuten a legegyszerűbb eset az ha keriacutetuumlnk magunknak egy reacutegebbi szaacutemiacutetoacutegeacutephez hasznaacutelt CD-olvasoacutet Ezekbe annak idejeacuten joacutel kezelhető leacuteptetőmotort eacutepiacutetettek laacutesd [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebra (A beszerzeacuteshez javasolhatoacute leselejtezett geacutepek megkaparintaacutesa szervizes haverok bdquokoumlnyvjutalombanrdquo valoacute reacuteszesiacuteteacutese vagy lomis piacok intenziacutev laacutetogataacutesahellip) A reacutegebbi tiacutepusok hangsuacutelyozaacutesa azeacutert indokolt mert az uacutejabbakban jellemzően DC-motorokat hasznaacutelnak eacutes csaloacutedni fogunk A motor tiacutepusa sajnos kiacutevuumllről nem laacutetszik az egyseacutegen Tovaacutebbi lehetőseacuteg lehet meacuteg toumlnkrement tintasugaras nyomtatoacutekboacutel kiszerelni a fejmozgatoacute leacuteptetőmotort

244 aacutebra - CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

A [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebraacuten laacutethatoacute CD-olvasoacuteboacutel kiszerelt egyseacuteg leacuteptetőmotorja tehaacutet bipolaacuteris Erre a teacutenyre a neacutegy kivezeteacutes utal vouml [Bipolaacuteris leacuteptetőmotor műkoumldeacutesi elve] aacutebra Az aacutebra felső reacuteszeacuten laacutethatoacute sziacutenes bevonatuacute vezeteacutekneacutegyes maacuter utoacutelagos forrasztaacutes eredmeacutenye A tovaacutebbiakra neacutezve nagyon fontos adat lesz szaacutemunkra hogy a motor tekercseinek ellenaacutellaacutesa 10 Ω ami 5 V-os taacutepfeszuumlltseacuteg eseteacuten tekercsenkeacutent 500 mA-es aacuteramfelveacutetelt jelenthet Az USB-port terhelhetőseacutegeacutet ez maacuter joacutecskaacuten meghaladja

3 A motor leacutepteteacuteseAz előző alfejezetek utaacuten eleacuterkezett az idő a tankoumlnyv utolsoacute feladatainak megfogalmazaacutesaacutera Most maacuter nem csak villogtatunk kijelezuumlnk adatokat fogadunk eacutes kuumlldoumlzgetuumlnk kapcsolgatunk szabaacutelyozunk hanem mozgatunk

37 feladat

Mozgassunk az ADuC-panel keacutet nyomoacutegombjaacuteval egyik ill maacutesik iraacutenyban leacuteptetőmotort egeacuteszleacutepeacuteses uumlzemmoacutedban [Code50]

A feladat megoldaacutesaacutenaacutel maradunk a [CD-olvasoacuteboacutel kiszerelt fejmozgatoacute-egyseacuteg szeacuteleacuten a leacuteptetőmotorral] aacutebraacuten laacutethatoacute eszkoumlzneacutel a reacutegebbi tiacutepusuacute CD-olvasoacute egyseacutegből kiszerelt taacutelcaacutenaacutel amelyen nem csak a leacuteptetőmotor tanyaacutezik hanem az annak tengelyeacutere tapadoacute viacutezszintesen mozgathatoacute olvasoacutefej is Ez utoacutebbi naacutelunk funkcioacutejaacutet veszti csak abban fogunk gyoumlnyoumlrkoumldni hogy ide-oda tovaacutebbiacutetjuk a fejet eacutes raacuteuumlltetuumlnk egy LEGO-figuraacutet

Az L293D IC laacutebkiosztaacutesaacutet eacutes a motor tekercseinek bekoumlteacuteseacutet a [A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese] aacutebra mutatja A C1 eacutes C2 jelű tekercs a leacuteptetőmotor keacutet tekercseacutet (vagy tekercspaacuterjaacutet) szimbolizaacutelja A VS szimboacutelum az adatlappal oumlsszhangban a motor taacutepfeszuumlltseacutegeacutet jelenti Naacutelunk ez is +5 V nem csak a logikai jelek jelszintje

245 aacutebra - A leacuteptetőmotor-vezeacuterlő IC laacutebkiosztaacutesa eacutes a motor (tekercseinek) bekoumlteacutese

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

A motorboacutel kijoumlvő neacutegy vezeteacutek szerepeacutenek meghataacuterozaacutesa sokszor egyedi taacutejeacutekozoacutedaacutest igeacutenyel Multimeacuteterrel azt koumlnnyen megaacutellapiacutethatjuk hogy melyik keacutet vezeteacutek tartozik egy tekercshez (vagy tekercspaacuterhoz) hiszen ezeken meacuterhetuumlnk veacutegesen kicsiny ellenaacutellaacutest Ha nem egymaacuteshoz tartozoacute keacutet vezeteacuteket markolunk foumll akkor azok nyilvaacuten szakadaacuteskeacutent viselkednek A leacutepteteacutesi szekvencia meghataacuterozaacutesaacutera sokszor az a legjobb moacuted ha a motor kivezeteacuteseit vezeacuterlő-IC-neacutelkuumll keacutezzel dugiszaacuteljuk a proacutebapanelon a taacutepra eacutes a foumlldre Hibaacutes szekvenciaacutenaacutel a motor csak előre-haacutetra fog cincogni miacuteg ha eltalaacuteljuk a helyes sorrendet akkor egyeacutertelműen foumllismerhető moacutedon elindul az egyik iraacutenyba A biztonsaacuteg kedveacuteeacutert fordiacutetott sorrendben is jaacutetsszuk le a jeleket hogy minden rendben lesz-e az ellenkező iacuteraacutenyuacute leacutepteteacuteseacuteneacutel is A joacutenak tűnő sorrendet jegyezzuumlk foumll eacutes uumlltessuumlk be a programunkba

Az előző alfejezetben emliacutetettuumlk hogy a leacuteptetőmotor tekercseinek ellenaacutellaacutesa 10 Ω ami +5 V-os taacutepfeszuumlltseacuteg eseteacuten 500 mA-es aacuteramfelveacutetelt jelent Keacutet tekercsneacutel ez 1 A iacutegy egy mezei PC USB portja ezt maacuter nem biacuterja el hiszen az aacuteltalaacuteban csak 500 mA-rel terhelhető De semmi baj a [USB csatlakozoacutes haacuteloacutezati adapter] aacutebraacuten laacutethatoacute adapter terhelhetőseacutege 12 A ami nekuumlnk toumlkeacuteletesen megfelel Maga az elrendezeacutes a [A leacuteptetőmotoros alkalmazaacutes elrendezeacutese] aacutebraacuten laacutethatoacute

246 aacutebra - A leacuteptetőmotoros alkalmazaacutes elrendezeacutese

A program a kivezeteacutesekhez aktuaacutelis sorrendjeacutehez tartozoacute leacutepteteacutesi szekvencia megaacutellapiacutetaacutesa utaacuten maacuter szinte semmiseacuteg Keacutet gombnyomaacutes koumlzoumltt szuumlkseacutegszerűen eltelő időt az EQU direktiacutevaacuteval a var szimboacutelumhoz rendeljuumlk hogy ha moacutedosiacutetani akarunk a leacutepteteacutes frekvenciaacutejaacuten akkor azt csak egyszer kelljen megtennuumlnk az uacutejrafordiacutetaacuteshoz Az SDELAY szubrutint most uacutegy moacutedosiacutetottuk hogy ha azt az A=100 eacuterteacutekkel hiacutevjuk meg akkor toumlrteacutenik 01 s vaacuterakozaacutes Ami itt eacuterdekes az az ahogyan a koacutedmemoacuteriaacuteboacutel toumlrteacutenő ciklikus olvasaacutest megoldjuk Neacutegyfeacutele bemeneti jelkombinaacutecioacutet kell adnunk a vezeacuterlő-IC-nek egy ciklusban (laacutesd [Unipolaacuteris eacutes bipolaacuteris leacuteptetőmotorok] alfejezet) Ezt kihasznaacuteljuk eacutes a koumlvetkező truumlkkoumlt alkalmazzuk ha egy regiszter eacuterteacutekeacutet (a koacutedban ez az R2) folyamatosan noumlveljuumlk de minden noumlveleacutes utaacuten csak az alsoacute keacutet bitjeacutet tartjuk meg a toumlbbit kihajiacutetjuk akkor a regiszter eacuterteacuteke koumlrbe-koumlrbe jaacuter 0 eacutes 3 koumlzoumltt A programban konkreacutetan 1 2 3 0 1 2 3 0 hellip Ez affeacutele moduloacutearitmetika A maacutesik iraacutenyban toumlrteacutenő leacutepteteacuteskor a regisztert folyamatosan csoumlkkentetni kell de az alsoacute keacutet bit kimaszkolaacutesa eacuteppen iacutegy műkoumldik a hataacutes ugyanez A koacutedban a koumlvetkező alkalmazaacutes roumlvid taacutergyalhatoacutesaacutega eacuterdekeacuteben keacutet sort sziacutenessel kiemeluumlnk A koacutedkoumlnyvtaacuterban talaacutelhatoacute videoacutefelveacutetelek koumlzoumltt az alkalmazaacutesok műkoumldeacuteseacutet eleacuteg nagy (var=10 200 Hz) frekvenciaacuteval mutatjuk be Ezt a frekvenciaacutet sokkal nagyobbra maacuter nem lehet venni mert a motor elkezdi teacuteveszteni a leacutepeacuteseket eacutes csak zuumlmmoumlg oumlssze-visszahellip

Code50asmORG 0060hgomb1 BIT P32 Elnevezzuumlk az 1 gomb bitjeacutetgomb2 BIT P33 Elnevezzuumlk a 2 gomb bitjeacutetvar EQU 200 A fordiacutetoacute szaacutemaacutera eacuterteacuteket rendeluumlnk a var szimboacutelumhozMAINMOV DPTRphase Betoumlltjuumlk az adatmutatoacuteba a phase ciacutemke ciacutemeacutetMOV R20 R2-be 0-t toumlltuumlnkwaitJNB gomb1forward Ugrunk ha az 1 gombot nyomtuk megJNB gomb2backward Ugrunk ha a 2 gombot nyomtuk meg

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

JMP waitforward Leacutepteteacutes az egyik iraacutenybaINC R2 Noumlveljuumlk R2-eacuterteacutekeacutetMOV AR2 A-ba tesszuumlkANL A00000011b Kimaszkoljuk az alsoacute keacutet bitetMOV R2A Visszaiacuterjuk a degradaacutelt eacuterteacuteket R2 iacutegy gyakorlatilag moduloacutearitmetikaacuteval megy 1230 1230 MOVC AA+DPTR Koacuted-indirekt ciacutemzeacutessel betoumlltjuumlk a vezeacuterlő-IC-nek szoacuteloacute bitmintaacutezatotMOV P2A Kitesszuumlk a P2 portraMOV AvarCALL SDELAY var eacuterteacutekeacutenek megfelelő vaacuterakozaacutes koumlvetkezikJMP wait Ugraacutes vissza a gombok figyeleacuteseacutehezbackward Leacutepteteacutes az egyik iraacutenybaDEC R2 Csoumlkkentjuumlk R2-eacuterteacutekeacutetMOV AR2 A-ba tesszuumlkANL A00000011b Kimaszkoljuk az alsoacute keacutet bitetMOV R2A Visszaiacuterjuk a degradaacutelt eacuterteacuteket R2 iacutegy gyakorlatilag moduloacutearitmetikaacuteval megy 3210 3210 MOVC AA+DPTR Koacuted-indirekt ciacutemzeacutessel betoumlltjuumlk a vezeacuterlő-IC-nek szoacuteloacute bitmintaacutezatotMOV P2A Kitesszuumlk a P2 portraMOV AvarCALL SDELAY var eacuterteacutekeacutenek megfelelő vaacuterakozaacutes koumlvetkezikJMP wait Ugraacutes vissza a gombok figyeleacuteseacutehez Szubrutin SDELAY Parameacuteteraacutetadaacutes A Ha A=100 akkor 01 s a vaacuterakozaacutesi idő SDELAYMOV R7A Az időkeacuteslelteteacutest meghataacuterozoacute parameacuteter aacutetadaacutesa a szubrutinnak Az adat az akkumulaacutetorban eacuterkezikcik7MOV R620cik6MOV R525cik5NOPDJNZ R5cik5DJNZ R6cik6DJNZ R7cik7RET Visszateacutereacutes a szubrutinboacutel A vezeacuterlő-IC-nek (L293D) szoacuteloacute jelek a koacutedmemoacuteriaacuteban phaseDB 00010000bDB 00000100bDB 00001000bDB 00000010b

Az egeacuteszleacutepeacuteses uumlzemmoacuted utaacuten azonnal adoacutedik a koumlvetkező feladat

38 feladat

Mozgassunk az ADuC-panel keacutet nyomoacutegombjaacuteval egyik ill maacutesik iraacutenyban leacuteptetőmotort feacutelleacutepeacuteses uumlzemmoacutedban [Code51]

A [37 feladat]hoz keacutepest egyetlen elteacutereacutes lesz csupaacuten de ezt kihangsuacutelyozzuk feacutelleacutepeacuteses uumlzemmoacutedban hajtjuk meg a motort A helyzet az hogy itt 4 helyett 8 eleme lesz a leacutepteteacutesi szekvenciaacutenak hiszen a feles leacutepeacutesekben mindkeacutet tekercspaacuter aacuteram alatt van Ez a koacutedmemoacuteriaacuteban roumlgziacutetett bitmintaacutezatok szempontjaacuteboacutel az alaacutebbi listaacutet eredmeacutenyezi (eacutes ez a Code51 nevű programban talaacutelhatoacute meg)

Created by XMLmind XSL-FO Converter

Leacuteptetőmotor vezeacuterleacutese

phaseDB 00010000bDB 00010100bDB 00000100bDB 00001100bDB 00001000bDB 00001010bDB 00000010bDB 00010010b

Figyeljuumlk meg hogy minden maacutesodik sor a keacutet szomszeacutedos elem unioacuteja Sőt inkaacutebb a VAGY művelettel előaacutelloacute eacuterteacutek Mivel most 8 elemuumlnk van a koacuted a fentieken tuacutel mindoumlsszesen keacutet soraacuteban moacutedosul Amit Code50-ben saacutergaacuteval kiemeltuumlnk azt most erre kell aacutetiacuternunk

ANL A00000111b Kimaszkoljuk az alsoacute haacuterom bitet

Eacutes keacutesz hiszen az alsoacute haacuterom biten 0-toacutel 7-ig aacutebraacutezolhatunk szaacutemokat eacutes jelen esetben pont erre van szuumlkseacuteg A motor mozgataacutesa műkoumldik meacuteghozzaacute kifogaacutestalanul műkoumldik Eacutes ezt most maacuter baacutermikor nagyjaacuteboacutel baacutermilyen leacuteptetőmotorral meg tudjuk oldanihellip

Created by XMLmind XSL-FO Converter

25 fejezet - UtoacuteszoacuteA szerző tarsolyaacuteban szaacutemtalan oumltlet szaacutemtalan finomiacutetaacutesi lehetőseacuteg maradt meacuteg Azonban a tankoumlnyv maacuter iacutegy is tuacuteldagadt a szerződeacutesben meghataacuterozott karakterleuumlteacutesi szaacutemon Szaacutemiacutetaacutestechnikai koumlnyvet befejezni nem lehet csak abbahagyni Egy azonban biztos ha azok akiknek a szerző a tankoumlnyvet szaacutenta pozitiacutev visszacsatolaacutest indiacutetanak akkor lehet folytataacutesa Ha ismeacutet lesz TAacuteMOP paacutelyaacutezati lehetőseacuteg eacutes a szerző taacutemogataacutest kap lesz is folytataacutesa Az majd kideruumll hogy milyen tiacutepusuacute mikrovezeacuterlővel milyen programozaacutesi nyelven milyen alkalmazaacutesokkalhellip

Az olvasoacute ha teacutenyleg figyelmesen veacutegigkoumlvetett mindent maacuter uacutegy eacuterezheti hogy egy kicsit eacutert a dolgokhoz Megaacutellni itt persze nem eacuterdemes eacutes nem is szabad Hiszen nagyjaacuteboacutel most kezd laacutetszani az hogy meacuteg egy kis energiabefekteteacutes eacutes mindent bdquomegprogramozunkrdquo magunk koumlruumllhellip A szerző arra biztat mindenkit hogy folytassa az utat ha kell haacutet egyeduumll mert meg fogja eacuterni

A tankoumlnyv nyilvaacuten nem lett toumlkeacuteletes Lehet hogy ha meacuteg egyszer meg kellene iacuterni maacuter kicsit maacuteskeacuteppen alakulna Veacutelemeacutenyeket kunstruktiacutev kritikaacutekat a szerző mindenesetre sziacutevesen fogad hiszen az eacutelet oumlroumlk tanulaacutes Mindenkinek Ha a tankoumlnyv meacutegis a javaacutera vaacutelt a kedves olvasoacutenak akkor a szerzőnek csak annyi koumlzlendője maradt hogy kedves egeacuteszseacutegeacutere eacutes most neacutezzen koumlruumll a koumlrnyezeteacuteben hogy mire lehetne egy joacute kis mikrovezeacuterlős alkalmazaacutest keacutesziacuteteni

VEacuteGE

Created by XMLmind XSL-FO Converter

26 fejezet - Az Analog Devices hozzaacutejaacuterulaacutesaA tankoumlnyv iacuteraacutesaacutenak finiseacuteben a szerző levelet vaacuteltott az Analog Devices ceacuteggel hogy hozzaacutejaacuterulaacutesukat keacuterje neacutehaacuteny a ceacuteg aacuteltal forgalmazott oktatoacutekeacuteszletekhez tartozoacute

CD-n szereplő koacuted felhasznaacutelaacutesaacutehoz eacutes a tankoumlnyvbe valoacute integraacutelaacutesaacutehoz Az Analog Devices az engedeacutelyt megadta Kiacutevaacutensaacutegukra melleacutekeljuumlk a mintakoacutedokhoz tartozoacute aacutellaacutesfoglalaacutesukat

All ADuC842 code provided by ADI including this file is provided AS IS without warranty of any kind either expressed or implied You assume any and all risk from the use of this code It is the responsibility of the person integrating this code into an application to ensure that the resulting application performs as required and is safe

Ennek magyar fordiacutetaacutesa eacutertelmeacutet tekintve koumlvetkező

Az Analog Devices Reacuteszveacutenytaacutersasaacuteg (ADI Analog Devices Incorporated) aacuteltal koumlzzeacutetett valamennyi ADuC842-es koacuted uacutegy tekintendő ahogyan azt koumlzzeacutetetteacutek Ezekre semmifeacutele garancia sem koumlzvetlen sem koumlzvetett nem vonatkozik Ezen koacuted hasznaacutelataacutenak baacuterminemű eacutes valamennyi felelősseacutegeacutet annak felhasznaacuteloacuteja viseli A koacutedot baacutermifeacutele alkalmazaacutesba beeacutepiacutető szemeacutely felelősseacutege annak biztosiacutetaacutesa hogy az eredmeacutenykeacutent előaacutelloacute alkalmazaacutes az azzal szemben taacutemasztott koumlvetelmeacutenyeknek megfelelően eacutes biztonsaacutegosan műkoumldjoumln

Az ilyesfeacutele jogi megfogalmazaacutesok időnkeacutent ijesztők de itt ezt koumltelesseacuteguumlnk volt koumlzoumllni A fentiek mindoumlsszesen egyetlen szubrutinlistaacutera eacutes a 842-es architektuacuteraacutehoz tartozoacute szimboacutelumlistaacutera vonatkoznak UARTIOASM eacutes MOD842 A ceacuteg engedeacutelyeacutevel ezeket csatolhattuk a tankoumlnyvhoumlz

Created by XMLmind XSL-FO Converter

27 fejezet - KoumlszoumlnetnyilvaacuteniacutetaacutesA műszaki tankoumlnyvhoumlz illő jobbaacutera taacutergyilagos stiacutelust feacutelreteacuteve szeretneacutem felsorolni azoknak az embereknek a neveacutet akiknek nagyon sokat koumlszoumlnhettem a programozaacutesi eacutes elektronikai szaacuternyproacutebaacutelgataacutesaim soraacuten

Koumlszoumlnoumlm Bőczeacuten Csabaacutenak eacutes Bőczeacuten Laacuteszloacutenak mindazt amit tőluumlk a szaacutemiacutetaacutestechnikai nyaacuteri TIT-taacuteborban aacuteltalaacutenos iskolaacutes koromban megtanultam Koumlszoumlnoumlm Koltay Peacuteternek (kezdetben annaacutel a ceacutegneacutel a Keriparnaacutel volt programozoacute ahol eacutedesapaacutem is dolgozott) azt az eacuteveken aacutet tartoacute biztataacutest eacutes terelgeteacutest ami igen csak a hasznomra vaacutelt a keacutesőbbiekben Koumlszoumlnoumlm Kispitye Attilaacutenak hogy nagyon sokat aacutetadott nekem a maacuter akkor is kaacutepraacutezatos programozoacutei tudaacutesaacuteboacutel eacutes megtaniacutetott a Commodore 64 assembly nyelvű programozaacutesaacutenak rengeteg forteacutelyaacutera Koumlszoumlnoumlm Matisz Attilaacutenak a koumlzeacutepiskolaacutes fizikatanaacuteromnak hogy az aacuteltala vezetett szakkoumlroumln megismerkedhettem a Pascal nyelvvel eacutes olyasmivel is amire keacutesőbb ismertem csak raacute hogy nahaacutet hiszen az maacuter numerikus matematika volt csak meacuteg nem uacutegy hiacutevtuk

Az egyetemi eacutevek alatti eacutelmeacutenyekeacutert eacutes az akkor megszerzett tudaacuteseacutert a legőszinteacutebb koumlszoumlnetemet szeretneacutem kifejezni Jamniczky Aacuterpaacuted tanaacuter uacuternak Aki tőle tanulta a villanytant annak baacuterhol baacutermikor joumlhetett a meacutely viacutez Horvaacuteth Laacuteszloacute eacutes Szeacutekely Saacutendor analiacutezis tanaacuteraim neacutelkuumll pedig eseacutelyem se lett volna uacutegy megtanulni a matematikaacutet hogy Laplace-trafoacuteval toumlbbnyire meacuteg mindig gond neacutelkuumll tudjam aacuteramkoumlroumlk viselkedeacuteseacutet szaacutemolni De uacutegy hogy eacutertsem is amit csinaacutelok Sok segiacutetseacuteget eacutes oumltletet kaptam Csizmadia Ferenctől eacutes Bognaacuter Endreacutetől a gyakorlati elektronikaacuteba tett kalandjaim soraacuten A mechatronika iraacutenyaacuteba indiacutetoacute bogarat pedig Szalai Istvaacuten tette a fuumllembe Ezen az uacuteton joacutel joumltt Gurin Peacuteter logikai aacuteramkoumlroumlk oacuteraacuteja eacutes bizony sokszor nem boldogultam volna Molnaacuter Gergely tapasztalata eacutes segiacutetseacutege neacutelkuumll

Kedves tanaacuteraim kolleacutegaacuteim Haacutelaacutes vagyok Nektek minden aproacutesaacutegeacutert is

Kuumlloumln koumlszoumlnet illeti Molnaacuter Gergőt eacutes Szalai Istvaacutent neacutehaacuteny speciaacutelis teacutemakoumlr aacutetneacutezeacuteseacuteeacutert Burgundi Daacutevidot az ADuC-panel dokumentaacutelaacutesaacuteeacutert eacutes Koumlrmendy Gaacutebort a tankoumlnyv kritikus aacutetolvasaacutesaacuteeacutert

Veacuteguumll koumlszoumlnetet kell mondanom feleseacutegemnek Eacutevaacutenak eacutes a kis Babadeacuteknak Attila Benceacutenek azeacutert hogy tuumlrelmesen kivaacutertaacutek amiacuteg elkeacutesziacutetem a tankoumlnyvet eacutes deacutelutaacutenonkeacutent esteacutenkeacutent bizony kevesebb időt tudtam raacutejuk szaacutenni mint amennyit megeacuterdemeltek volna

Created by XMLmind XSL-FO Converter

28 fejezet - Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei paneljaEbben a fuumlggeleacutekben aacuteramkoumlri ill beuumllteteacutesi rajzokkal alkatreacuteszlistaacuteval kiacutevaacutenunk segiacuteteni annak aki konkreacutetan a tankoumlnyvhoumlz hasznaacutelt mikrovezeacuterlős panelt oacutehajtja megeacutepiacuteteni vagy legyaacutertatni ilyen megrendeleacuteseket vaacutellaloacute ceacuteggel A tankoumlnyvhoumlz melleacutekeljuumlk a gyaacutertaacuteshoz szuumlkseacuteges uacuten Gerber-faacutejlokat eacutes a Drill-faacutejlokat Ettől a kezdő olvasoacute nem lesz sokkal boldogabb iacutegy az alaacutebbiakban tovaacutebbi segiacutetseacuteget adunk a panel elkeacutesziacuteteacuteseacutehez

Letoumllthető melleacutekletek toumlmoumlriacutetett formaacutetumban(telepiacutetők forraacuteskoacutedok rajzok stb) Mellekletzip

A [A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből] eacutes [A hallgatoacutei panel NYAacuteK-terve alulneacutezetből] aacutebra a tankoumlnyvben hasznaacutelt panel nyomtatott aacuteramkoumlri (NYAacuteK-) terveacutet mutatja mind feluumll- mind alulneacutezetből A [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] eacutes [A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza] aacutebraacuten a panel beuumllteteacutesi rajza laacutethatoacute a keacutet neacutezetből Ezek a rajzok akkor nyuacutejtanak oacuteriaacutesi segiacutetseacuteget amikor megrendeljuumlk az alkatreacuteszeket eacutes magunk akarjuk őket raacuteforrasztani a panelra Meg kell jegyeznuumlnk hogy neacutehaacuteny poziacutecioacute a tankoumlnyvben hasznaacutelt panelon uumlresen maradt Ilyen a [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] aacutebra jobb felső traktusaacuteban laacutethatoacute U8 jelű eacutes a kuumllső taacutepellaacutetaacutes biztosiacutetaacutesaacutera szolgaacuteloacute alkatreacuteszek C2 C5 IC2 eacutes X1 jelű poziacutecioacuteja A panel a tankoumlnyvben bemutatott alkalmazaacutesokban ezek uumlresen hagyaacutesaacuteval is toumlkeacuteletesen műkoumldoumltt

Joacutetanaacutecskeacutent azt javasoljuk az olvasoacutenak hogy ha nincs kellő gyakorlata az aproacute alkatreacuteszek forrasztaacutesaacuteban akkor ezt a műveletet ne az ADuC 842-es chip laacutebaival kezdje Ugyanez igaz az FT232-es USB-soros aacutetalakiacutetoacute-IC-re is A toumlbbi alkatreacutesz maacuter koumlnnyebben kezelhető

Az alkatreacuteszlistaacutet a [A hallgatoacutei panel alkatreacuteszlistaacuteja] tartalmazza A keacutet kritikus teacutetel maga az ADuC 842-es chip ill a MAX4478ASD tiacutepusjelű műveleti erősiacutető Ez utoacutebbi veacutedelmi feladatot laacutet el befeleacute neacutezve vedi a mikrovezeacuterlő AD-aacutetalakiacutetoacutejaacutenak első keacutet csatornaacutejaacutet (a toumlbbit nem) kifeleacute neacutezve puffert testesiacutet meg a DA-aacutetalakiacutetaacuteshoz (szintuacutegy annak első keacutet csatornaacutejaacutehoz) E keacutet teacutetel neacutelkuumll az alkatreacuteszlista oumlsszes eleme a legkedvezőbb aacuterakkal dolgozoacute hazai mikroelektronikai csomagkuumlldő szolgaacutelatok tarifaacuteit figyelembe veacuteve 2013 tavaszaacuten 5 000 - 6 000 Ft-eacutert beszerezhető volt A MAX4478ASD műveleti erősiacutető keveacutes hazai ceacutegneacutel kaphatoacute viszont nem tuacutelsaacutegosan draacutega kb 1 000 Ft Az ADuC 842-es chip maacuter borsosabb aacuteron kaphatoacute ha uacutegy akarjuk megvenni aacutera kb 6 500 Ft Viszont e keacutet kritikus alkatreacutesz beszerzeacuteseacutet megoldhatjuk oly moacutedon is hogy ingyenes mintaacutet rendeluumlnk a ceacutegtől Ennek az eljaacuteraacutesnak a bemutataacutesa azonban maacuter nem ennek a tankoumlnyvnek a feladata Akaacuterhogyan is szerezzuumlk be a 842-es mikrovezeacuterlőt figyeljuumlnk oda a tiacutepusmegjeloumlleacutesre A tankoumlnyvben hasznaacutelt panelon az ADUC842BSZ62-5 tiacutepusuacute mikrovezeacuterlő foglalt helyet A BSZ jeloumlleacutes a tokozaacutest azonosiacutetja ennek 52 laacuteba van Magaacutera a tokozaacutesra az MQFP betűszoacutet hasznaacuteljaacutek Ez a Metric Quad Flat Package (metrikus neacutegyszoumlgletű lapos tokozaacutes) kifejezeacutesből szaacutermazik A 62-es szaacutem a 62 kbyte koacutedmemoacuteriaacutera utal az 5-oumls szaacutemjegy pedig a taacutepfeszuumlltseacutegre (+5 V) Az MQFP tokozaacutes rajzaacutet a [Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők] aacutebraacuten laacutethatjuk az adatok millimeacuteterben eacutertendők Maga a rajz az Analog Devices aacuteltal koumlzzeacutetett faacutejlboacutel szaacutermazik

A [A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel] eacutes [A keacutesz panel alulneacutezetben] aacutebraacuten a keacutesz panel laacutethatoacute feluumll- eacutes alulneacutezetből immaacuteron nem tervrajzkeacutent hanem lefeacutenykeacutepezve Az eacuterintkezőtuumlskeacutek funkcionaacutelis leiacuteraacutesaacutehoz a [A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel] aacutebraacuten a [A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza] aacutebra szaacutemozaacutesaacuteval oumlsszhangban megszaacutemoztuk a tuumlskeacuteket Ezek leiacuteraacutesaacutet a [A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja]ban talaacuteljuk

A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesaacutet a [A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra] aacutebra eacutes a [A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa] mutatja Ezen a csatlakozoacuten keresztuumll kapcsolhatjuk a mikrovezeacuterlő paneljaacutet proacutebapanelokhoz vagy baacutermihez amihez csak akarjuk Konkreacutet szalagkaacutebel elkeacutesziacuteteacuteseacutet azonban maacuter az olvasoacutera biacutezzuk A Fuumlggeleacutekben leiacutertak alapjaacuten ez maacuter nem fog neheacutezseacuteget okozni

281 aacutebra - A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa uacutegy ahogy raacuteneacutezuumlnk a keacutesz panelra

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

281 taacuteblaacutezat - A szalagkaacutebel-csatlakozoacute laacutebkiosztaacutesa

Szalagkaacutebel-csatlakozoacute laacuteba Hozzaacuterendeleacutes az ADuC 842-esen (laacutebsorszaacutem)

1 +5 V

2 GND

3 P07 (52 laacuteb)

4 P06 (51 laacuteb)

5 P05 (50 laacuteb)

6 P04 (49 laacuteb)

7 P03 (46 laacuteb)

8 P02 (45 laacuteb)

9 P01 (44 laacuteb)

10 P00 (43 laacuteb)

11 P27 (39 laacuteb)

12 P26 (38 laacuteb)

13 P25 (37 laacuteb)

14 P24 (36 laacuteb)

15 P23 (31 laacuteb)

16 P22 (30 laacuteb)

17 P21 (29 laacuteb)

18 P20 (28 laacuteb)

19 P37 (25 laacuteb)

20 P36 (24 laacuteb)

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

282 aacutebra - A hallgatoacutei panel NYAacuteK-terve feluumllneacutezetből

283 aacutebra - A hallgatoacutei panel NYAacuteK-terve alulneacutezetből

284 aacutebra - Az ADuC 842-es 52-laacutebuacute MQFP tokozaacutesa A szaacutemadatok millimeacuteterben eacutertendők

285 aacutebra - A hallgatoacutei panel feluumllneacutezeti beuumllteteacutesi rajza

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

286 aacutebra - A hallgatoacutei panel alulneacutezeti beuumllteteacutesi rajza

287 aacutebra - A keacutesz panel feluumllneacutezetben megszaacutemozott tuumlskeacutekkel

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

288 aacutebra - A keacutesz panel alulneacutezetben

282 taacuteblaacutezat - A hallgatoacutei panel alkatreacuteszlistaacuteja

Mennyiseacuteg EacuterteacutekTiacutepus Tokozaacutes Poziacutecioacuteszaacutemok

2 47u E35-10 C2 C5

2 22p C0603 C11 C12

1 10n C0805 C32

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

7 100n C0805 C1 C6 C10 C13 C16 C30 C31

2 100n C1206 C7 C8

6 100R R0805 R5 R6 R9 R10 R13 R16

3 1k R0805 R1 R2 R3

2 1R R0805 R15 L2

2 47k R0805 R14 R17

1 1R R1206 R4

1 47K ellenaacutellaacutes-haacuteloacute SIL9 RN2

1 32768 kHz-es oacuterakvarc

TC26V Q1

4 nyomoacutegombok B3F-10XX 6x6 tact S5 S6 S7 S8

1 20-poacutelusuacute 90deg-os aljzat

ML20L SV1

1 taacutepcsatlakozoacute 733989-5 X1

1 USB-B aljzat USB-B-SMT X2

1 LM7805 stabilizaacutetor-IC

TO220 IC2

1 ADuC 842 PQFP52 IC1

1 MAX4478ASD SO14 IC3

1 FT232RL SSOP28 IC4

9 LED18MM 18 mm LED1 ndash LED9

4 JUMPER 254 mm 6 mm JP1-9

1 Tuumlskesor 254 mm 63 JP

283 taacuteblaacutezat - A hallgatoacutei panel tuumlskeacuteinek funkcioacuteja

Tuumlske Leiacuteraacutes

1B +5 V

1J RESET (15 laacuteb)

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

2B (41 laacuteb)

2J 1 kΩ-os ellenaacutellaacuteson keresztuumll foumlldre koumltve ha esetleg kuumllső aacuteramkoumlrrel szaacutendeacutekozunk letoumllteacutesi funkcioacutekat megvaloacutesiacutetani

3B GND

3J P32 (18 laacuteb) 47 kΩ-os felhuacutezoacute-ellenaacutellaacutessal taacutepra koumltve

4 A USB-soros konverter-IC oumlsszekoumlteacutese az ADuC 842-es mikrovezeacuterlővel Amennyiben kuumllső taacutepot akarunk hasznaacutelni akkor a 6-os blokkra keruumll keacutet jumper de akkor a 4-es blokk valamennyi jumpereacutet le kell vennuumlnk

5B GND

5J P33 (19 laacuteb) 47 kΩ-os felhuacutezoacute-ellenaacutellaacutessal taacutepra koumltve

61B Kuumllső taacutep eseteacuten e keacutet tuumlskeacutere kell jumpert tenni Ekkor a 4-es blokk valamennyi jumpereacutet el kell taacutevoliacutetani

61J

62B Kuumllső taacutep eseteacuten e keacutet tuumlskeacutere kell jumpert tenni Ekkor a 4-es blokk valamennyi jumpereacutet el kell taacutevoliacutetani

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

62J

71B GND

71J +5 V

72B ADC 7 (14 laacuteb)

72J ADC 6 (13 laacuteb)

73B ADC 5 (12 laacuteb)

73J ADC 4 (11 laacuteb)

74B ADC 3 (4 laacuteb)

74J ADC 2 (3 laacuteb)

75B ADC 1 erősiacutetővel pufferelt AD-csatorna Nem koumlzvetlenuumll kapcsoloacutedik a 2 laacutebhoz

75J ADC 0 erősiacutetővel pufferelt AD-csatorna Nem koumlzvetlenuumll kapcsoloacutedik az 1 laacutebhoz

81B GND

81J +5 V

82B Ezek a tuumlskeacutek semmihez sincsenek koumltve Nincs funkcioacutejuk

82J

83B

83J

84B

84J

85B DAC 1 pufferelve az erősiacutetővel Nem koumlzvetlenuumll kapcsoloacutedik az 10 laacutebhoz

Created by XMLmind XSL-FO Converter

Fuumlggeleacutek ndash Az ADuC 842-es hallgatoacutei panelja

85J DAC 0 pufferelve az erősiacutetővel Nem koumlzvetlenuumll kapcsoloacutedik a 9 laacutebhoz

9B P35 (23 laacuteb)

9J P34 (22 laacuteb)

Created by XMLmind XSL-FO Converter

Irodalomjegyzeacutek[1] Analog Devices MicroConverterreg 12-Bit ADCs and DACs with Embedded High Speed 62-kB Flash MCU

ADuC841ADuC842ADuC843 p 65 Table 32

[2] Szentiday Klaacutera Feacutelvezető fotodetektorok Műszaki Koumlnyvkiadoacute Budapest 1977 ISBN 963 10 1742 7

[3] Texas Optoelektronikai receptek Műszaki Koumlnyvkiadoacute Budapest 1979 ISBN 963 10 2683 2

[4] Tietze U Schenk Ch Analoacuteg eacutes digitaacutelis aacuteramkoumlroumlk Műszaki koumlnyvkiadoacute Budapest 5 javiacutetott kiadaacutes 1993 ISBN 963 16 0010 6

[5] Beuth K Beuth O Az elektronika alapjai ndash II Feacutelvezetők Műszaki koumlnyvkiadoacute Budapest 1994 ISBN 963 16 0427 6

[6] Kovaacutecs Csongor Elektronikus aacuteramkoumlroumlk General Press Budapest 1997 ISBN 978 963 9076 32 7

[7] Texas TTL receptek Műszaki Koumlnyvkiadoacute Budapest 1978 ISBN 963 10 2491 1

[8] Bolton W Mechatronics Pearson Harlow England 5th edition 2011 Chapter 97 ISBN 978 0 273 74286 9

[9] Chapman S J Electric Machinery Fundamentals WCBMcGraw-Hill Boston 3rd edition 1999 p 640-644 ISBN 0 07 011950 3

[10] wwwstepperworldcom

Created by XMLmind XSL-FO Converter

Page 5: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 6: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 7: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 8: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 9: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 10: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 11: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 12: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 13: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 14: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 15: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 16: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 17: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 18: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 19: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 20: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 21: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 22: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 23: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 24: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 25: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 26: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 27: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 28: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 29: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 30: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 31: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 32: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 33: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 34: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 35: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 36: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 37: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 38: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 39: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 40: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 41: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 42: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 43: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 44: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 45: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 46: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 47: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 48: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 49: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 50: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 51: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 52: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 53: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 54: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 55: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 56: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 57: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 58: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 59: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 60: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 61: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 62: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 63: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 64: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 65: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 66: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 67: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 68: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 69: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 70: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 71: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 72: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 73: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 74: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 75: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 76: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 77: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 78: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 79: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 80: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 81: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 82: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 83: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 84: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 85: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 86: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 87: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 88: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 89: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 90: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 91: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 92: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 93: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 94: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 95: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 96: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 97: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 98: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 99: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 100: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 101: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 102: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 103: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 104: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 105: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 106: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 107: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 108: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 109: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 110: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 111: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 112: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 113: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 114: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 115: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 116: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 117: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 118: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 119: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 120: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 121: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 122: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 123: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 124: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 125: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 126: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 127: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 128: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 129: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 130: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 131: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 132: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 133: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 134: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 135: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 136: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 137: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 138: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 139: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 140: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 141: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 142: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 143: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 144: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 145: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 146: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 147: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 148: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 149: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 150: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 151: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 152: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 153: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 154: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 155: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 156: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 157: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 158: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 159: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 160: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 161: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 162: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 163: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 164: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 165: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 166: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 167: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 168: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 169: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 170: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 171: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 172: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 173: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 174: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 175: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 176: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 177: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 178: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 179: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 180: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 181: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 182: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 183: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 184: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 185: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 186: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 187: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 188: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és
Page 189: regi.tankonyvtar.hu  · Web viewMikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Mikrovezérlők mechatronikai alkalmazásai. Előszó és